Wednesday 1 February 2017

Gleitender Mittlerer Bandpass

Die Wissenschaftler und Ingenieure Leitfaden für digitale Signalverarbeitung Von Steven W. Smith, Ph. D. Kapitel 14: Einführung in digitale Filter Hochpass-, Bandpass - und Bandsperrfilter Hochpass-, Bandpass - und Bandsperrfilter werden so entworfen, dass sie mit einem Tiefpassfilter beginnen und es dann in die gewünschte Antwort umwandeln . Aus diesem Grund geben die meisten Diskussionen zum Filterdesign nur Beispiele für Tiefpaßfilter. Es gibt zwei Verfahren für die Tiefpass-Hochpaßumwandlung: spektrale Inversion und spektrale Umkehrung. Beide sind gleich nützlich. Ein Beispiel der spektralen Inversion ist in 14-5 gezeigt. Abbildung (a) zeigt einen Tiefpaßfilterkern, der als windowed-sinc bezeichnet wird (das Thema von Kapitel 16). Dieser Filterkernel hat eine Länge von 51 Punkten, obwohl viele der Samples einen so kleinen Wert haben, dass sie in diesem Graphen Null zu sein scheinen. Der entsprechende Frequenzgang wird in (b) gezeigt, gefunden durch Hinzufügen von 13 Nullen zum Filterkern und unter Verwendung einer 64-Punkt-FFT. Zwei Dinge müssen getan werden, um den Tiefpaßfilterkernel in einen Hochpaßfilterkernel zu ändern. Zuerst ändern Sie das Vorzeichen der einzelnen Samples im Filterkernel. Zweitens, fügen Sie eine zur Probe in der Mitte der Symmetrie. Dies führt zu dem in (c) gezeigten Hochpaßfilterkern mit dem in (d) gezeigten Frequenzgang. Spektrale Inversion spiegelt den Frequenzgang von oben nach unten. Ändern der Passbänder in Stoppbänder und der Stoppbänder in Passbänder. Mit anderen Worten, er ändert einen Filter von Tiefpaß zu Hochpaß, Hochpaß zu Tiefpaß, Bandpaß zu Bandspur oder Bandspur zu Bandpaß. Abbildung 14-6 zeigt, warum diese zweistufige Modifikation des Zeitbereichs zu einem invertierten Frequenzspektrum führt. In (a) wird das Eingangssignal x n parallel an zwei Systeme angelegt. Eines dieser Systeme ist ein Tiefpassfilter mit einer Impulsantwort, die durch h n gegeben ist. Das andere System tut nichts für das Signal und hat daher eine Impulsantwort, die eine Delta-Funktion ist, delta n. Der Gesamtausgang y n ist gleich dem Ausgang des Allpass-Systems minus dem Ausgang des Tiefpaßsystems. Da die niederfrequenten Komponenten von dem ursprünglichen Signal subtrahiert werden, erscheinen nur die hochfrequenten Komponenten in dem Ausgang. Somit wird ein Hochpaßfilter gebildet. Dies könnte als ein zweistufiger Vorgang in einem Computerprogramm ausgeführt werden: Durchlaufen des Signals durch ein Tiefpassfilter und dann Subtrahieren des gefilterten Signals von dem Original. Jedoch kann der gesamte Vorgang in einer Signalstufe durch Kombinieren der beiden Filterkerne durchgeführt werden. Wie in Kapitel 7 beschrieben, können parallele Systeme mit addierten Ausgängen durch Hinzufügen ihrer Impulsantworten zu einer einzigen Stufe kombiniert werden. Wie in (b) gezeigt, ist der Filterkernel für den Hochpassfilter gegeben durch: delta n - h n. Das heißt, ändern Sie das Vorzeichen aller Proben, und fügen Sie dann ein, um die Probe in der Mitte der Symmetrie. Damit diese Technik funktioniert, müssen die Niederfrequenzkomponenten, die aus dem Tiefpassfilter austreten, dieselbe Phase wie die Niederfrequenzkomponenten haben, die das Allpass-System verlassen. Andernfalls kann keine vollständige Subtraktion erfolgen. Dies stellt zwei Einschränkungen für das Verfahren dar: (1) Der ursprüngliche Filterkernel muß eine Links-Rechts-Symmetrie haben (d. H. Eine Null - oder Linearphase), und (2) der Impuls muß in der Mitte der Symmetrie addiert werden. Das zweite Verfahren zur Tiefpaß - zu Hochpaßumwandlung, spektrale Umkehrung. Ist in Fig. 2 dargestellt. 14-7. Genau wie zuvor entspricht der Tiefpaßfilterkernel in (a) dem Frequenzgang in (b). Der Hochpaßfilterkernel (c) wird durch Ändern des Vorzeichens jeder zweiten Abtastung in (a) gebildet. Wie in (d) gezeigt, kippt dies den Frequenzbereich von links nach rechts. 0 zu 0,5 und 0,5 zu 0. Die Grenzfrequenz des Beispiel-Tiefpaßfilters beträgt 0,15, was dazu führt, daß die Grenzfrequenz des Hochpaßfilters 0,35 beträgt. Das Ändern des Vorzeichens jeder zweiten Abtastung ist äquivalent zum Multiplizieren des Filterkerns mit einer Sinuskurve mit einer Frequenz von 0,5. Wie in Kapitel 10 erörtert, hat dies die Wirkung, den Frequenzbereich um 0,5 zu verschieben. Betrachten Sie (b) und stellen Sie sich die negativen Frequenzen zwischen -0,5 und 0 vor, die ein Spiegelbild der Frequenzen zwischen 0 und 0,5 sind. Die Frequenzen, die in (d) erscheinen, sind die negativen Frequenzen von (b), die um 0,5 verschoben sind. Schließlich zeigen Fig. 14-8 und 14-9 zeigen, wie Tiefpaß - und Hochpaßfilterkerne zu Bandpass - und Bandsperrfiltern kombiniert werden können. Kurz gesagt, das Hinzufügen der Filterkerne erzeugt ein Bandsperrfilter, während das Zusammenfalten der Filterkerne ein Bandpaßfilter erzeugt. Diese basieren auf der Art und Weise, wie kaskadierte und parallele Systeme kombiniert werden, wie in Kapitel 7 diskutiert wird. Es können auch mehrere Kombinationen dieser Techniken verwendet werden. Zum Beispiel kann ein Bandpassfilter konstruiert werden, indem die beiden Filterkerne zu einem Bandpaßfilter addiert werden und dann eine spektrale Inversion oder spektrale Umkehrung, wie zuvor beschrieben, verwendet werden. Alle diese Techniken funktionieren sehr gut mit wenigen Überraschungen. Smoothing entfernt kurzfristige Variationen oder quotnoisequot, um die wichtige zugrunde liegende unverfälschte Form der Daten zu enthüllen. Igoracutes Smooth Betrieb führt Box, quotbinomialquot, und Savitzky-Golay Glättung. Die verschiedenen Glättungsalgorithmen falten die Eingangsdaten mit unterschiedlichen Koeffizienten. Glättung ist eine Art Tiefpassfilter. Die Art der Glättung und die Menge der Glättung verändert den Filterfrequenz-Frequenzgang: Moving Average (auch bekannt als Box Smoothing) Die einfachste Form der Glättung ist der mittlere Mittelwert, der einfach jeden Datenwert durch den Durchschnitt der benachbarten Werte ersetzt. Um ein Verschieben der Daten zu vermeiden, empfiehlt es sich, die gleiche Anzahl von Werten vor und nach dem Durchschnittswert zu berechnen. In der Gleichung wird der gleitende Durchschnitt folgendermaßen berechnet: Ein anderer Begriff für diese Art der Glättung ist ein quoteschleifendes Durchschnittsquot, ein Quotschloß-Glättungsquot oder ein Quottend-Glättungsquot. Sie kann durch Falten der Eingangsdaten mit einem kastenförmigen Puls mit 2M1 Werten, die alle gleich 1 (2M1) sind, implementiert werden. Wir nennen diese Werte die quotcoefficientsquot der quotsmoothing kernelquot: Binomiale Glättung Die binomische Glättung ist ein Gaußscher Filter. Es faltet Ihre Daten mit normalisierten Koeffizienten aus Pascalacutes Dreieck auf einem Niveau gleich dem Glättungsparameter abgeleitet. Der Algorithmus stammt aus einem Artikel von Marchand und Marmet (1983). Savitzky-Golay Glättung Die Savitzky-Golay-Glättung nutzt einen anderen Satz von vorberechneten Koeffizienten, die auf dem Gebiet der Chemie populär sind. Es ist eine Art von Least Squares Polynom Glättung. Der Betrag der Glättung wird durch zwei Parameter gesteuert: die Polynomordnung und die Anzahl der Punkte, die verwendet werden, um jeden geglätteten Ausgangswert zu berechnen. Referenzen Marchand, P. und L. Marmet, Binomialer Glättungsfilter: Ein Weg, um einige Fallstricke der kleinsten quadratischen Polynomglättung zu vermeiden, Rev. Sci. Instrument . 54. 1034-41, 1983. Savitzky, A. und M. J.E. Golay, Glättung und Differenzierung von Daten durch vereinfachte Verfahren der kleinsten Fehlerquadrate, Analytische Chemie. 36. 1627-1639, 1964.Im Kodierung etwas in dem Augenblick, wo Im eine Reihe von Werten im Laufe der Zeit von einem Hardware-Kompass. Dieser Kompass ist sehr genau und Updates sehr oft, mit dem Ergebnis, dass wenn es leicht wackelt, ich am Ende mit dem ungeraden Wert, der wild unvereinbar mit seinen Nachbarn ist. Ich möchte diese Werte glätten. Nachdem ich einiges gelesen hatte, scheint es, dass was ich will, ein Hochpaßfilter, ein Tiefpaßfilter oder ein gleitender Durchschnitt ist. Gleitender Durchschnitt kann ich mit erhalten, halten Sie einfach eine Geschichte der letzten 5 Werte oder was auch immer, und verwenden Sie den Durchschnitt dieser Werte stromabwärts in meinem Code, wo ich war einmal nur mit dem jüngsten Wert. Das sollte, glaube ich, die Wackeln schön abschneiden, aber es schlägt mir, dass seine wahrscheinlich ziemlich ineffizient, und dies ist wahrscheinlich eines dieser bekannten Probleme zu Proper Programmers, denen theres eine wirklich ordentliche Clever Math-Lösung. Ich bin jedoch einer jener schrecklichen selbstprogrammierten Programmierer ohne einen Fetzen der formalen Bildung in irgendetwas sogar vage mit CompSci oder Mathe verwandt. Lesen um ein Bit deutet darauf hin, dass dies ein Hoch-oder Tiefpassfilter sein kann, aber ich kann nicht finden, was in Begriffen verständlich für einen Hack wie ich, was die Wirkung dieser Algorithmen wäre auf einer Reihe von Werten, geschweige denn wie die Mathematik Arbeitet. Die Antwort hier. Zum Beispiel, technisch beantwortet meine Frage, aber nur verständlich für diejenigen, die wahrscheinlich schon wissen, wie das Problem zu lösen. Es wäre ein sehr schöner und kluger Mensch, der die Art des Problems erklären könnte, und das, wie die Lösungen funktionieren, in Begriffen, die einem Kunstabsolventen verständlich sind. Wenn Ihr gleitender Durchschnitt muss lang sein, um die gewünschte Glättung zu erreichen, und Sie brauchen nicht wirklich eine bestimmte Form des Kernels, dann sind Sie besser dran, wenn Sie einen exponentiell verfallenden gleitenden Durchschnitt verwenden: wo Sie Wählen Sie winzig, um eine entsprechende Konstante zu sein (zB wenn Sie winzige 1- 1N wählen, wird es die gleiche Menge an Mittelung wie ein Fenster der Größe N, aber verteilt unterschiedlich über ältere Punkte). Wie auch immer, da der nächste Wert des gleitenden Durchschnitts hängt nur von der vorherigen und Ihre Daten, müssen Sie nicht eine Warteschlange oder etwas zu halten. Und Sie können denken, dies zu tun, so etwas wie: Nun, ich habe einen neuen Punkt, aber ich dont wirklich vertrauen es, so Im werde 80 meiner alten Schätzung der Messung zu halten, und nur vertrauen diesem neuen Datenpunkt 20. Das ist So ziemlich das gleiche wie zu sagen, Nun, ich vertraue nur diesem neuen Punkt 20, und ich benutze 4 andere Punkte, die ich vertrauen die gleiche Menge, außer dass anstatt explizit nehmen die 4 anderen Punkten, youre unter der Annahme, dass die Mittelung haben Sie das letzte Mal War vernünftig, so können Sie Ihre vorherige Arbeit. Beantwortet Sep 21 10 at 14:27 Hey, ich weiß, das ist 5 Jahre zu spät, aber danke für eine großartige Antwort. Ich arbeite an einem Spiel, bei dem der Klang sich nach deiner Geschwindigkeit ändert, aber wegen des laufenden Spiels auf einem Langsamcomputer würde die Geschwindigkeit stark schwanken, was für die Lenkung gut war, aber super ärgerlich in Bezug auf den Klang. Dies war eine wirklich einfache und billige Lösung für etwas, das ich für ein wirklich komplexes Problem halten würde. Ndash Wenn Sie versuchen, den gelegentlichen ungeraden Wert zu entfernen, ist ein Tiefpassfilter die beste der drei Optionen, die Sie identifiziert haben. Tiefpaßfilter erlauben langsame Änderungen, wie die, die durch das Drehen eines Kompasses von Hand verursacht werden, während Abweisen von Hochgeschwindigkeitsänderungen, wie z. B. durch Stöße auf der Straße, verursacht werden. Ein gleitender Durchschnitt wird wahrscheinlich nicht ausreichen, da die Auswirkungen eines einzelnen Blips in Ihren Daten auf mehrere nachfolgende Werte wirken, abhängig von der Größe des gleitenden Durchschnittsfensters. Wenn die ungeraden Werte leicht erkannt werden, können Sie sogar mit einem Glitch-Entfer - nal-Algorithmus besser abschneiden, der sie komplett ignoriert: Hier ist ein Guick-Graphen zu veranschaulichen: Der erste Graphen ist das Eingangssignal mit einem unangenehmen Glitch. Die zweite Grafik zeigt die Wirkung eines 10-stelligen Gleitmittels. Der endgültige Graph ist eine Kombination aus dem 10-Sample-Mittelwert und dem einfachen Glitch-Detektionsalgorithmus, der oben gezeigt ist. Wenn der Glitch detektiert wird, wird anstelle des tatsächlichen Wertes der 10-Sample-Mittelwert verwendet. Beantwortet Sep 21 10 am 13:38 Schön erklärt und Bonuspunkte für die Grafik) ndash Henry Cooke Sep 22 10 at 0:50 Wow. Seldomly sah so eine schöne Antwort ndash Muis Jun 4 13 at 9:14 Der gleitende Durchschnitt ist ein Tiefpassfilter. Ndash nomen Okt 21 13 am 19:36 Versuchen Sie einen runningstreaming Median statt. Ndash kert Apr 25 14 am 22:09 Gleitender Durchschnitt kann ich unten erhalten. Aber es scheint mir, dass seine wahrscheinlich ziemlich ineffizient. Theres wirklich kein Grund ein gleitender Durchschnitt sollte ineffizient sein. Sie halten die Anzahl der Datenpunkte, die Sie in einem Puffer (wie eine zirkuläre Warteschlange) wollen. An jedem neuen Datenpunkt pflücken Sie den ältesten Wert und subtrahieren ihn von einer Summe, und drücken Sie den neuesten und fügen Sie ihn der Summe hinzu. Jeder neue Datenpunkt bringt also nur einen Popp, eine Addition und eine Subtraktion mit sich. Ihr gleitender Durchschnitt ist immer diese Verschiebungssumme dividiert durch die Anzahl der Werte in Ihrem Puffer. Es wird ein wenig trickiger, wenn youre Empfangen von Daten gleichzeitig von mehreren Threads, aber da Ihre Daten von einem Hardware-Gerät kommt, das scheint sehr zweifelhaft für mich. Oh und auch: schreckliche Selbst-gelehrte Programmierer vereinen) Der gleitende Durchschnitt schien mir ineffizient, weil Sie einen Puffer von Werten speichern müssen - besser, nur einige Clever Maths mit Ihrem Eingabewert und aktuellen Arbeitswert Ich glaube, dass 39 ist, wie exponentiell gleitenden Durchschnitt Arbeitet. Eine Optimierung, die ich für diese Art von gleitendem Durchschnitt gesehen habe, beinhaltet die Verwendung eines Fixlängen-Warteschlangen-Amps, einen Zeiger auf, wo Sie sich in dieser Warteschlange befinden, und einfach den Zeiger um (mit oder einem If) wickeln. Voila Kein teurer Pushpop. Power für die Amateure, Bruder ndash Henry Cooke Henry: Für einen geraden-gleitenden Durchschnitt brauchst du den Puffer einfach so, dass du weißt, welcher Wert geknallt wird, wenn der nächste Wert gedrückt wird. Das heißt, die quotfixed-Länge Warteschlange amp eine pointerquot Sie beschreiben ist genau das, was ich durch quotcircular queue. quot Bedeutet, warum ich sage, es ist nicht ineffizient. Was meinst du, ich meinte, Und wenn Ihre Antwort ist quotan Array, das seine Werte zurück verschiebt sich auf jedem indexierten removalquot (wie std :: vector in C). Also, I39m so weh I don39t sogar wollen, um mit Ihnen zu sprechen) ndash Dan Tao 22 September at 1:58 Henry: Ich don39t wissen über AS3, aber ein Java-Programmierer bekam Sammlungen wie CircularQueue zu seiner Verfügung (I39m nicht a Java-Entwickler, so I39m sicher, es gibt bessere Beispiele da draußen that39s genau das, was ich aus einer schnellen Google-Suche gefunden), die genau die Funktionalität implementiert, die wir reden. I39m ziemlich zuversichtlich, die Mehrheit der mittleren und niedrigen Sprachen mit Standard-Bibliotheken haben etwas ähnliches (z. B. in. NET there39s QueueltTgt). Jedenfalls war ich selbst Philosophie. alles ist vergeben. Ndash Dan Tao Ein exponentiell abnehmender gleitender Durchschnitt kann von Hand mit nur dem Trend berechnet werden, wenn Sie die richtigen Werte verwenden. Sehen Sie fourmilab. chhackdiete4 für eine Idee, wie dies schnell mit einem Stift und Papier, wenn Sie für exponentiell geglättet gleitenden Durchschnitt mit 10 Glättung suchen. Aber da Sie einen Computer haben, möchten Sie wahrscheinlich binäre Verschiebung im Gegensatz zur Dezimalverschiebung tun) Auf diese Weise brauchen Sie nur eine Variable für Ihren aktuellen Wert und einen für den Durchschnitt. Daraus kann dann der nächste Mittelwert berechnet werden. Beantwortet eine Technik namens Bereichstor, die gut funktioniert mit Low-Vorkommen falschen Proben. Unter der Annahme einer der oben erwähnten Filtertechniken (gleitender Durchschnitt, exponentiell), sobald Sie über ausreichende Historie verfügen (eine Zeitkonstante), können Sie die neue, eingehende Datenprobe für die Angemessenheit testen, bevor sie zur Berechnung hinzugefügt wird. Ist ein gewisses Wissen über die maximale vernünftige Änderungsrate des Signals erforderlich. Wird die Rohprobe mit dem letzten geglätteten Wert verglichen, und wenn der absolute Wert dieser Differenz größer als der zulässige Bereich ist, wird diese Probe herausgeworfen (oder durch eine Heuristik ersetzt, zB eine Vorhersage basierend auf der Steigungsdifferenz oder dem Trend Vorhersagewert aus doppelten exponentiellen Glättung) beantwortet April 30 16 at 6:56


No comments:

Post a Comment