Wednesday 15 February 2017

Moving Average Cic Filter

Wie andere schon erwähnt haben, sollten Sie einen IIR (Endlosimpulsantwort) - Filter anstelle des FIR (Finite Impulse Response) Filter, den Sie jetzt verwenden. Es gibt mehr dazu, aber auf den ersten Blick werden FIR-Filter als explizite Windungen und IIR-Filter mit Gleichungen implementiert. Das besondere IIR-Filter, das ich viel in Mikrocontrollern verwende, ist ein einpoliges Tiefpaßfilter. Dies ist das digitale Äquivalent eines einfachen R-C-Analogfilters. Für die meisten Anwendungen haben diese bessere Eigenschaften als der Kastenfilter, den Sie verwenden. Die meisten Verwendungen eines Box-Filter, die ich begegnet bin, sind ein Ergebnis von jemand nicht Aufmerksamkeit in der digitalen Signalverarbeitung Klasse, nicht als Ergebnis der Notwendigkeit ihrer besonderen Eigenschaften. Wenn Sie nur wollen, um hohe Frequenzen zu dämpfen, dass Sie wissen, Rauschen sind, ist ein einpoliges Tiefpassfilter besser. Der beste Weg, um ein digitales in einem Mikrocontroller zu implementieren, ist in der Regel: FILT lt - FILT FF (NEW - FILT) FILT ist ein Stück persistenten Zustand. Dies ist die einzige persistente Variable, die Sie benötigen, um diesen Filter zu berechnen. NEU ist der neue Wert, den der Filter mit dieser Iteration aktualisiert. FF ist die Filterfraktion. Die die Schwere des Filters einstellt. Betrachten Sie diesen Algorithmus und sehen Sie, dass für FF 0 der Filter unendlich schwer ist, da sich der Ausgang nie ändert. Für FF 1 ist das eigentlich gar kein Filter, da der Ausgang nur dem Eingang folgt. Nützliche Werte sind dazwischen. Auf kleinen Systemen wählen Sie FF auf 12 N, so dass die Multiplikation mit FF als Rechtsverschiebung um N Bits erreicht werden kann. Beispielsweise könnte FF 116 sein und das Multiplizieren mit FF daher eine Rechtsverschiebung von 4 Bits. Andernfalls benötigt dieses Filter nur eine Subtraktion und eine Addition, obwohl die Zahlen in der Regel größer als der Eingangswert sein müssen (mehr über die numerische Genauigkeit in einem separaten Abschnitt weiter unten). Ich nehme in der Regel AD-Messwerte deutlich schneller als sie benötigt werden und wenden Sie zwei dieser Filter kaskadiert. Dies ist das digitale Äquivalent von zwei R-C-Filtern in Serie und dämpft um 12 dBoktave über der Rolloff-Frequenz. Allerdings für AD-Lesungen seine in der Regel mehr relevant, um das Filter im Zeitbereich zu betrachten, indem man seine Schrittantwort. Dies zeigt Ihnen, wie schnell Ihr System eine Änderung sehen wird, wenn die Sache, die Sie messen, ändert. Zur Erleichterung der Gestaltung dieser Filter (was nur bedeutet Kommissionierung FF und entscheiden, wie viele von ihnen zu kaskadieren), benutze ich mein Programm FILTBITS. Sie legen die Anzahl der Schaltbits für jede FF in der kaskadierten Filterreihe fest und berechnen die Schrittantwort und andere Werte. Eigentlich habe ich in der Regel laufen diese über mein Wrapper-Skript PLOTFILT. Dies führt FILTBITS, die eine CSV-Datei macht, dann die CSV-Datei. Beispielsweise ist hier das Ergebnis von PLOTFILT 4 4: Die beiden Parameter zu PLOTFILT bedeuten, dass es zwei Filter gibt, die von dem oben beschriebenen Typ kaskadiert sind. Die Werte von 4 geben die Anzahl der Schaltbits an, um die Multiplikation mit FF zu realisieren. Die beiden FF-Werte sind daher in diesem Fall 116. Die rote Spur ist die Einheit Schritt Antwort, und ist die Hauptsache zu betrachten. Dies bedeutet beispielsweise, dass sich der Ausgang des kombinierten Filters auf 90 des neuen Wertes in 60 Iterationen niederschlägt, falls sich der Eingang sofort ändert. Wenn Sie ca. 95 Einschwingzeit kümmern, dann müssen Sie ca. 73 Iterationen warten, und für 50 Einschwingzeit nur 26 Iterationen. Die grüne Kurve zeigt Ihnen den Ausgang einer einzelnen Amplitude. Dies gibt Ihnen eine Vorstellung von der zufälligen Rauschunterdrückung. Es sieht aus wie keine einzelne Probe wird mehr als eine 2,5 Änderung in der Ausgabe verursachen. Die blaue Spur soll ein subjektives Gefühl geben, was dieser Filter mit weißem Rauschen macht. Dies ist kein strenger Test, da es keine Garantie gibt, was genau der Inhalt der Zufallszahlen war, die als der weiße Rauscheneingang für diesen Durchlauf von PLOTFILT ausgewählt wurden. Seine nur, um Ihnen ein grobes Gefühl, wie viel es gequetscht werden und wie glatt es ist. PLOTFILT, vielleicht FILTBITS, und viele andere nützliche Dinge, vor allem für PIC-Firmware-Entwicklung ist verfügbar in der PIC Development Tools-Software-Release auf meiner Software-Downloads-Seite. Hinzugefügt über numerische Genauigkeit Ich sehe aus den Kommentaren und nun eine neue Antwort, dass es Interesse an der Diskussion der Anzahl der Bits benötigt, um diesen Filter zu implementieren. Beachten Sie, dass das Multiplizieren mit FF Log 2 (FF) neue Bits unterhalb des Binärpunkts erzeugt. Auf kleinen Systemen wird FF gewöhnlich mit 12 N gewählt, so daß diese Multiplikation tatsächlich durch eine Rechtsverschiebung von N Bits realisiert wird. FILT ist daher meist eine feste Ganzzahl. Beachten Sie, dass dies ändert keine der Mathematik aus der Prozessoren Sicht. Wenn Sie z. B. 10-Bit-AD-Lesungen und N 4 (FF 116) filtern, benötigen Sie 4 Fraktionsbits unter den 10-Bit-Integer-AD-Messwerten. Einer der meisten Prozessoren, youd tun 16-Bit-Integer-Operationen aufgrund der 10-Bit-AD-Lesungen. In diesem Fall können Sie immer noch genau die gleichen 16-Bit-Integer-Opertions, aber beginnen mit der AD-Lesungen um 4 Bits verschoben verschoben. Der Prozessor kennt den Unterschied nicht und muss nicht. Das Durchführen der Mathematik auf ganzen 16-Bit-Ganzzahlen funktioniert, ob Sie sie als 12,4 feste oder wahre 16-Bit-Ganzzahlen (16,0 Fixpunkt) betrachten. Im Allgemeinen müssen Sie jedem Filterpole N Bits hinzufügen, wenn Sie aufgrund der numerischen Darstellung kein Rauschen hinzufügen möchten. Im obigen Beispiel müsste das zweite Filter von zwei 1044 18 Bits haben, um keine Informationen zu verlieren. In der Praxis auf einer 8-Bit-Maschine bedeutet, dass youd 24-Bit-Werte verwenden. Technisch nur den zweiten Pol von zwei würde den größeren Wert benötigen, aber für Firmware Einfachheit ich in der Regel die gleiche Darstellung, und damit der gleiche Code, für alle Pole eines Filters. Normalerweise schreibe ich eine Unterroutine oder Makro, um eine Filterpol-Operation durchzuführen, dann gelten, dass für jeden Pol. Ob eine Unterroutine oder ein Makro davon abhängt, ob Zyklen oder Programmspeicher in diesem Projekt wichtiger sind. So oder so, ich benutze einige Scratch-Zustand, um NEU in die subroutinemacro, die FILT Updates, sondern auch lädt, dass in den gleichen Kratzer NEU war in. Dies macht es einfach, mehrere Pole anzuwenden, da die aktualisierte FILT von einem Pole ist die NEUE Der nächsten. Wenn ein Unterprogramm, ist es sinnvoll, einen Zeiger auf FILT auf dem Weg in, die auf nur nach FILT auf dem Weg nach draußen aktualisiert wird. Auf diese Weise arbeitet das Unterprogramm automatisch auf aufeinanderfolgenden Filtern im Speicher, wenn es mehrmals aufgerufen wird. Mit einem Makro benötigen Sie nicht einen Zeiger, da Sie in der Adresse passieren, um auf jeder Iteration zu arbeiten. Code-Beispiele Hier ein Beispiel für ein Makro wie oben für eine PIC 18 beschrieben: Und hier ist ein ähnliches Makro für eine PIC 24 oder dsPIC 30 oder 33: Beide Beispiele werden als Makros unter Verwendung meines PIC-Assembler-Präprozessors implementiert. Die mehr fähig ist als eine der eingebauten Makroanlagen. Clabacchio: Ein weiteres Thema, das ich erwähnen sollte, ist die Firmware-Implementierung. Sie können eine einpolige Tiefpassfilter-Subroutine einmal schreiben und dann mehrmals anwenden. Tatsächlich schreibe ich normalerweise solch eine Unterroutine, um einen Zeiger im Gedächtnis in den Filterzustand zu nehmen, dann ihn den Zeiger voranbringen lassen, so daß er nacheinander leicht aufgerufen werden kann, um mehrpolige Filter zu verwirklichen. Ndash Olin Lathrop Apr 20 12 at 15:03 1. Dank sehr viel für Ihre Antworten - alle von ihnen. Ich beschloss, dieses IIR-Filter zu verwenden, aber dieser Filter wird nicht als Standard-Tiefpaßfilter verwendet, da ich die Zählerwerte berechnen und sie vergleichen muss, um Änderungen in einem bestimmten Bereich zu erkennen. Da diese Werte von sehr unterschiedlichen Dimensionen abhängig von Hardware Ich wollte einen Durchschnitt nehmen, um in der Lage sein, auf diese Hardware spezifischen Änderungen automatisch reagieren. Wenn Sie mit der Beschränkung einer Macht von zwei Anzahl von Elementen zu durchschnittlich leben können (dh 2,4,8,16,32 etc), dann kann die Teilung einfach und effizient auf einem getan werden Low-Performance-Mikro ohne dedizierte Division, weil es als Bit-Shift durchgeführt werden kann. Jede Schicht rechts ist eine Macht von zwei zB: Der OP dachte, er hatte zwei Probleme, die Teilung in einem PIC16 und Speicher für seinen Ringpuffer. Diese Antwort zeigt, dass die Teilung nicht schwierig ist. Zwar adressiert es nicht das Gedächtnisproblem, aber das SE-System erlaubt Teilantworten, und Benutzer können etwas von jeder Antwort für selbst nehmen oder sogar redigieren und kombinieren andere39s Antworten. Da einige der anderen Antworten eine Divisionsoperation erfordern, sind sie ähnlich unvollständig, da sie nicht zeigen, wie dies auf einem PIC16 effizient erreicht werden kann. Ndash Martin Apr 20 12 at 13:01 Es gibt eine Antwort für einen echten gleitenden Durchschnitt Filter (auch bekannt als Boxcar-Filter) mit weniger Speicher Anforderungen, wenn Sie dont mind Downsampling. Es heißt ein kaskadiertes Integrator-Kamm-Filter (CIC). Die Idee ist, dass Sie einen Integrator, die Sie nehmen Differenzen über einen Zeitraum, und die wichtigsten Speicher-sparende Gerät ist, dass durch Downsampling, müssen Sie nicht jeden Wert des Integrators zu speichern. Es kann mit dem folgenden Pseudocode implementiert werden: Ihre effektive gleitende durchschnittliche Länge ist decimationFactorstatesize, aber Sie müssen nur um Stateize Proben zu halten. Offensichtlich können Sie bessere Leistung erzielen, wenn Ihr stateize und decimationFactor Potenzen von 2 sind, so dass die Divisions - und Restoperatoren durch Shifts und Masken ersetzt werden. Postscript: Ich stimme mit Olin, dass Sie immer sollten einfache IIR-Filter vor einem gleitenden durchschnittlichen Filter. Wenn Sie die Frequenz-Nullen eines Boxcar-Filters nicht benötigen, wird ein 1-poliger oder 2-poliger Tiefpassfilter wahrscheinlich gut funktionieren. Auf der anderen Seite, wenn Sie für die Zwecke der Dezimierung filtern (mit einer hohen Sample-Rate-Eingang und Mittelung es für die Verwendung durch einen Low-Rate-Prozess), dann kann ein CIC-Filter genau das, was Sie suchen. (Vor allem, wenn Sie stateize1 verwenden und den Ringbuffer insgesamt mit nur einem einzigen vorherigen Integrator-Wert zu vermeiden) Theres einige eingehende Analyse der Mathematik hinter dem ersten Auftrag IIR-Filter, Olin Lathrop bereits beschrieben hat auf der Digital Signal Processing Stack-Austausch (Enthält viele schöne Bilder.) Die Gleichung für diese IIR-Filter ist: Dies kann mit nur Ganzzahlen und keine Division mit dem folgenden Code implementiert werden (möglicherweise benötigen einige Debugging, wie ich aus dem Speicher wurde.) Dieser Filter approximiert einen gleitenden Durchschnitt von Die letzten K Proben durch Setzen des Wertes von alpha auf 1K. Führen Sie dies im vorherigen Code durch die Definition von BITS auf LOG2 (K), dh für K 16 gesetzt BITS auf 4, für K 4 gesetzt BITS auf 2, etc. (Ill Überprüfung der Code hier aufgelistet, sobald ich eine Änderung und Bearbeiten Sie diese Antwort, wenn nötig.) Antwort # 1 am: Juni 23, 2010, um 4:04 Uhr Heres ein einpoliges Tiefpassfilter (gleitender Durchschnitt, mit Cutoff-Frequenz CutoffFrequency). Sehr einfach, sehr schnell, funktioniert super, und fast kein Speicher Overhead. Hinweis: Alle Variablen haben einen Bereich über die Filterfunktion hinaus, mit Ausnahme des übergebenen newInput Hinweis: Dies ist ein einstufiger Filter. Mehrere Stufen können zusammen kaskadiert werden, um die Schärfe des Filters zu erhöhen. Wenn Sie mehr als eine Stufe verwenden, müssen Sie DecayFactor anpassen (was die Cutoff-Frequenz betrifft), um sie zu kompensieren. Und natürlich alles, was Sie brauchen, ist die beiden Zeilen überall platziert, brauchen sie nicht ihre eigene Funktion. Dieser Filter hat eine Rampenzeit, bevor der gleitende Durchschnitt diejenige des Eingangssignals darstellt. Wenn Sie diese Rampenzeit umgehen müssen, können Sie MovingAverage einfach auf den ersten Wert von newInput anstelle von 0 initialisieren und hoffen, dass der erste newInput kein Ausreißer ist. (CutoffFrequencySampleRate) einen Bereich zwischen 0 und 0,5 hat. DecayFactor ist ein Wert zwischen 0 und 1, in der Regel in der Nähe von 1. Single-precision Schwimmer sind gut genug für die meisten Dinge, ich bevorzuge nur Doppel. Wenn Sie mit ganzen Zahlen zu bleiben müssen, können Sie DecayFactor und Amplitudenfaktor in gebrochene Zahlen umwandeln, in dem der Zähler als ganze Zahl gespeichert ist, und der Nenner eine ganzzahlige Potenz von 2 (so können Sie Bit-Verschiebung nach rechts, wie die Nenner, anstatt sich während der Filterschleife teilen zu müssen). Zum Beispiel, wenn DecayFactor 0.99, und Sie Ganzzahlen verwenden möchten, können Sie DecayFactor 0.99 65536 64881. Und dann immer wenn Sie multiplizieren mit DecayFactor in Ihrer Filterschleife, nur verschieben Sie das Ergebnis 16. Für weitere Informationen über dieses, ein ausgezeichnetes Buch thats Online, Kapitel 19 auf rekursive Filter: dspguidech19.htm PS Für das Moving Average-Paradigma, einen anderen Ansatz für die Einstellung DecayFactor und AmplitudeFactor, die möglicherweise mehr relevant für Ihre Bedürfnisse, können Sie sagen, dass Sie wollen, dass die vorherigen, etwa 6 Artikeln gemittelt, es diskret tun, fügen Sie 6 Elemente und teilen durch 6, so Können Sie den AmplitudeFactor auf 16 und DecayFactor auf (1.0 - AmplitudeFactor) einstellen. Antwortete May 14 12 at 22:55 Jeder andere hat kommentiert gründlich über den Nutzen der IIR vs FIR, und auf Power-of-two-Division. Id nur, um einige Implementierungsdetails zu geben. Das unten genannte funktioniert gut auf kleinen Mikrocontrollern ohne FPU. Es gibt keine Multiplikation, und wenn Sie N eine Potenz von zwei halten, ist die gesamte Division ein-Zyklus-Bit-Verschiebung. Basic FIR-Ringpuffer: Halten Sie einen laufenden Puffer der letzten N-Werte und einen laufenden SUM aller Werte im Puffer. Jedes Mal, wenn eine neue Probe kommt, subtrahieren Sie den ältesten Wert im Puffer von SUM, ersetzen Sie ihn durch das neue Sample, fügen Sie das neue SUM zu SUM hinzu und geben Sie SUMN aus. Modifizierter IIR-Ringpuffer: Halten Sie einen laufenden SUM der letzten N-Werte. Jedes Mal, wenn ein neues Sample in SUM - SUMN kommt, fügen Sie das neue Sample hinzu und geben SUMN aus. Antwort # 1 am: August 28, 2008, um 13:45 Uhr Wenn Sie 399m lesen Sie Recht, you39re beschreiben einen First-Order IIR-Filter der Wert you39re Subtraktion isn39t der älteste Wert, der herausfällt, sondern ist stattdessen der Durchschnitt der vorherigen Werte. Erstklassige IIR-Filter können sicherlich nützlich sein, aber I39m nicht sicher, was du meinst, wenn Sie vorschlagen, dass der Ausgang ist der gleiche für alle periodischen Signale. Bei einer Abtastrate von 10 kHz liefert das Einspeisen einer 100 Hz-Rechteckwelle in ein 20-stufiges Kastenfilter ein Signal, das für 20 Abtastungen gleichmäßig ansteigt, für 30 sitzt, für 20 Abtastungen gleichmäßig sinkt und für 30 sitzt. Ein erster Ordnung IIR-Filter. Ndash Supercat Aug 28 13 am 15:31 wird eine Welle, die scharf anfängt zu steigen und allmählich Niveaus in der Nähe (aber nicht auf) das Eingabe-Maximum, dann scharf beginnt zu fallen und allmählich in der Nähe (aber nicht auf) der Eingabe Minimum. Sehr unterschiedliches Verhalten. Ndash Supercat Ein Problem ist, dass ein einfacher gleitender Durchschnitt kann oder auch nicht nützlich sein. Mit einem IIR-Filter können Sie einen schönen Filter mit relativ wenigen Calcs erhalten. Die FIR Sie beschreiben kann Ihnen nur ein Rechteck in der Zeit - ein sinc in freq - und Sie können nicht die Seitenkeulen zu verwalten. Es kann lohnt sich, in ein paar ganzzahlige Multiplikatoren zu werfen, um es eine schöne symmetrische abstimmbare FIR, wenn Sie die Zeitschaltuhren ersparen können. Ndash ScottSeidman: Keine Notwendigkeit für Multiplikatoren, wenn man einfach jede Stufe der FIR entweder den Durchschnitt der Eingabe auf diese Stufe und ihre vorherigen gespeicherten Wert, und dann speichern Sie die Eingabe (wenn man hat Der numerische Bereich, man könnte die Summe anstatt den Durchschnitt verwenden). Ob das besser als ein Box-Filter ist, hängt von der Anwendung ab (die Sprungantwort eines Boxfilters mit einer Gesamtverzögerung von 1ms wird zum Beispiel eine nasty d2dt Spike haben, wenn die Eingangsänderung und wieder 1ms später, aber das Minimum haben wird Mögliche ddt für einen Filter mit insgesamt 1ms Verzögerung). Ndash supercat Wie mikeselectricstuff sagte, wenn Sie wirklich brauchen, um Ihren Speicherbedarf zu reduzieren, und Sie dont dagegen Ihre Impulsantwort ist eine exponentielle (anstelle eines rechteckigen Puls), würde ich für einen exponentiellen gleitenden durchschnittlichen Filter gehen . Ich nutze sie ausgiebig. Mit dieser Art von Filter, brauchen Sie nicht jeden Puffer. Sie brauchen nicht zu speichern N Vergangenheit Proben. Nur einer. So werden Ihre Speicheranforderungen um einen Faktor von N reduziert. Auch brauchen Sie keine Division für das. Nur Multiplikationen. Wenn Sie Zugriff auf Gleitpunktarithmetik haben, verwenden Sie Fließkomma-Multiplikationen. Andernfalls können ganzzahlige Multiplikationen und Verschiebungen nach rechts erfolgen. Allerdings sind wir im Jahr 2012, und ich würde Ihnen empfehlen, Compiler (und MCUs), mit denen Sie mit Gleitkommazahlen arbeiten können. Abgesehen davon, dass mehr Speicher effizienter und schneller (Sie dont haben, um Elemente in jedem kreisförmigen Puffer zu aktualisieren), würde ich sagen, es ist auch natürlich. Weil eine exponentielle Impulsantwort besser auf die Art und Weise reagiert, wie sich die Natur verhält, in den meisten Fällen. Ein Problem mit dem IIR-Filter fast berührt von Olin und Supercat, aber anscheinend von anderen ignoriert ist, dass die Rundung nach unten führt einige Ungenauigkeiten (und möglicherweise Biastruncation). Unter der Annahme, dass N eine Potenz von zwei ist und nur ganzzahlige Arithmetik verwendet wird, beseitigt das Shift-Recht systematisch die LSBs des neuen Samples. Das bedeutet, dass, wie lange die Serie jemals sein könnte, wird der Durchschnitt nie berücksichtigen. Nehmen wir z. B. eine langsam abnehmende Reihe (8,8,8,8,7,7,7,7,6,6) an und nehmen an, daß der Durchschnitt tatsächlich 8 ist. Die Faust 7 Probe bringt den Durchschnitt auf 7, unabhängig von der Filterstärke. Nur für eine Probe. Gleiche Geschichte für 6, usw. Jetzt denke an das Gegenteil. Die serie geht auf. Der Durchschnitt bleibt auf 7 für immer, bis die Probe groß genug ist, um es zu ändern. Natürlich können Sie für die Bias korrigieren, indem Sie 12N2, aber das nicht wirklich lösen, die Präzision Problem. In diesem Fall bleibt die abnehmende Reihe für immer bei 8, bis die Probe 8-12 (N2) ist. Für N4 zum Beispiel, wird jede Probe über Null halten den Durchschnitt unverändert. Ich glaube, eine Lösung für das implizieren würde, um einen Akkumulator der verlorenen LSBs halten. Aber ich habe es nicht weit genug, um Code bereit, und Im nicht sicher, es würde nicht schaden, die IIR Macht in einigen anderen Fällen der Serie (zum Beispiel, ob 7,9,7,9 würde durchschnittlich 8 dann). Olin, Ihre zweistufige Kaskade würde auch eine Erklärung brauchen. Halten Sie zwei durchschnittliche Werte mit dem Ergebnis der ersten in die zweite in jeder Iteration eingezogen halten. Was ist der Vorteil dieser Signalverarbeitung Digitale Filter Digitale Filter sind durch essenziell abgetastete Systeme. Die Eingangs - und Ausgangssignale werden durch Abtastwerte mit gleichem Zeitabstand dargestellt. Finite Implulse Response (FIR) - Filter sind gekennzeichnet durch ein Zeitverhalten, das nur von einer gegebenen Anzahl der letzten Abtastwerte des Eingangssignals abhängt. Anders ausgedrückt: Sobald das Eingangssignal auf Null abgesunken ist, wird der Filterausgang nach einer bestimmten Anzahl von Abtastperioden das gleiche tun. Der Ausgang y (k) ist durch eine Linearkombination der letzten Eingangsabtastwerte x (k i) gegeben. Die Koeffizienten b (i) geben das Gewicht für die Kombination an. Sie entsprechen auch den Koeffizienten des Zählers der Z-Domain-Filtertransferfunktion. Die folgende Abbildung zeigt ein FIR-Filter der Ordnung N 1: Bei linearen Phasenfiltern sind die Koeffizientenwerte um das mittlere symmetrisch und die Verzögerungsleitung kann um diesen Mittelpunkt zurückgeklappt werden, um die Anzahl der Multiplikationen zu reduzieren. Die Übertragungsfunktion der FIR-Filter pocesses nur einen Zähler. Dies entspricht einem Nullfilter. FIR-Filter erfordern typischerweise hohe Ordnungen in der Größenordnung von einigen Hunderten. Somit benötigt die Wahl dieser Art von Filtern eine große Menge an Hardware oder CPU. Trotzdem ist ein Grund, eine FIR-Filter-Implementierung zu wählen, die Fähigkeit, eine lineare Phasenreaktion zu erreichen, die in manchen Fällen eine Anforderung sein kann. Trotzdem hat der Fiter-Designer die Möglichkeit, IIR-Filter mit guter Phasenlinearität im Durchlaßband wie Bessel-Filter zu wählen. Oder ein Allpassfilter zu entwerfen, um die Phasenreaktion eines Standard-IIR-Filters zu korrigieren. Moving Average Filter (MA) Edit Moving Average (MA) Modelle sind Prozessmodelle in der Form: MA Prozesse ist eine alternative Darstellung von FIR Filtern. Durchschnittliche Filter Edit Ein Filter, der den Durchschnitt der N letzten Abtastwerte eines Signals berechnet. Es ist die einfachste Form eines FIR-Filters, wobei alle Koeffizienten gleich sind. Die Übertragungsfunktion eines Durchschnittsfilters ist gegeben durch: Die Übertragungsfunktion eines Durchschnittsfilters weist N gleich beabstandete Nullen entlang der Frequenzachse auf. Die Null bei DC wird jedoch durch den Pol des Filters maskiert. Daher gibt es eine größere Keule, die für das Filterdurchlassband verantwortlich ist. Cascaded Integrator-Comb (CIC) Filter Edit Ein Cascaded Integrator-Comb Filter (CIC) ist eine spezielle Technik zur Realisierung von mittleren Filtern in Serie. Die Serienplatzierung der mittleren Filter verstärkt den ersten Lappen bei DC im Vergleich zu allen anderen Lappen. Ein CIC-Filter implementiert die Übertragungsfunktion von N Durchschnittsfiltern, die jeweils den Durchschnitt von R M Abtastwerten berechnen. Seine Übertragungsfunktion ist folglich gegeben durch: CIC-Filter werden verwendet, um die Anzahl der Abtastwerte eines Signals um einen Faktor R zu dezimieren oder, anders ausgedrückt, ein Signal mit einer niedrigeren Frequenz erneut abzutasten, wobei R 1 Abtastwerte aus R weggeworfen werden. Der Faktor M gibt an, wie viel von dem ersten Lappen durch das Signal verwendet wird. Die Anzahl der mittleren Filterstufen, N. Wie gut andere Frequenzbänder gedämpft werden, auf Kosten einer weniger flachen Übertragungsfunktion um DC herum. Die CIC-Struktur ermöglicht es, das gesamte System mit nur Addierern und Registern zu implementieren, wobei keine Multiplikatoren verwendet werden, die in Bezug auf Hardware gierig sind. Eine Abwärtsabtastung mit dem Faktor R erlaubt die Erhöhung der Signalauflösung durch log 2 (R) (R) Bits. Kanonische Filter Bearbeiten Kanonische Filter implementieren eine Filterübertragungsfunktion mit einer Anzahl von Verzögerungselementen gleich der Filterreihenfolge, einem Multiplikator pro Zählerkoeffizienten, einem Multiplikator pro Nennerkoeffizienten und einer Reihe von Addierern. Ähnlich wie aktive Filter kanonische Strukturen zeigte sich diese Art von Schaltungen sehr empfindlich gegenüber Elementwerten: eine kleine Änderung in Koeffizienten hatte einen großen Einfluss auf die Übertragungsfunktion. Auch hier hat sich das Design von aktiven Filtern von kanonischen Filtern zu anderen Strukturen wie Ketten zweiter Ordnung oder Leapfrog-Filtern verschoben. Kette der Sektionen zweiter Ordnung Edit Eine Sektion zweiter Ordnung. Oft als Biquad bezeichnet. Implementiert eine Übertragungsfunktion zweiter Ordnung. Die Übertragungsfunktion eines Filters kann in ein Produkt aus Übertragungsfunktionen aufgeteilt werden, die jeweils einem Paar von Pole und möglicherweise einem Paar von Nullen zugeordnet sind. Wenn die Übertragungsfunktionen ordnungsgemäß ungerade sind, muss ein erster Ordnungsteil zur Kette hinzugefügt werden. Dieser Abschnitt ist dem realen Pol und dem realen Nullpunkt zugeordnet, falls einer vorhanden ist. Direct-Form 1 Direct-Form 2 Direct-Form 1 Transponierte Direct-Form 2 transponiert Das von der folgenden Abbildung transponierte Direct-Formular 2 ist besonders interessant in Bezug auf die benötigte Hardware sowie die Signal - und Koeffizienten-Quantisierung. Digitale Leapfrog-Filter Filterstruktur bearbeiten Digitale Leapfrog-Filter basieren auf der Simulation von analogen aktiven Leapfrog-Filtern. Der Anreiz für diese Wahl ist, von den ausgezeichneten Passband-Empfindlichkeitseigenschaften der ursprünglichen Leiter-Schaltung zu erben. Das folgende 4. Ordnung allpolige Tiefpass-Leapfrogfilter kann als digitale Schaltung implementiert werden, indem die analogen Integratoren durch Akkumulator ersetzt werden. Das Ersetzen der Analogintegratoren durch Akkumulatoren entspricht der Vereinfachung der Z-Umwandlung zu z 1 s T. Die die beiden ersten Terme der Taylorreihe von z e x p (s T) sind. Diese Näherung ist gut genug für Filter, bei denen die Abtastfrequenz viel höher ist als die Signalbandbreite. Transferfunktion Edit Die Zustandsraumdarstellung des vorangehenden Filters kann wie folgt geschrieben werden: Aus dieser Gleichung kann man die A, B, C, D Matrizen schreiben als: Aus dieser Darstellung lassen sich Signalverarbeitungswerkzeuge wie Octave oder Matlab grafisch darstellen Den Frequenzgang des Filters oder seine Nullen und Pole zu untersuchen. In dem digitalen Leapfrog-Filter stellen die relativen Werte der Koeffizienten die Form der Übertragungsfunktion (Butterworth, Chebyshev.) Ein, während ihre Amplituden die Grenzfrequenz einstellen. Das Dividieren aller Koeffizienten um einen Faktor von zwei verschiebt die Cutoff-Frequenz um eine Oktave (auch einen Faktor von zwei) nach unten. Ein spezieller Fall ist das Buterworth-Filter 3. Ordnung, das Zeitkonstanten mit relativen Werten von 1, 12 und 1 aufweist. Dadurch kann dieses Filter in Hardware ohne Multiplikator implementiert werden. Autoregressive Filter (AR) Edit Autoregressive (AR) Modelle sind Prozessmodelle in der Form: Wo u (n) die Ausgabe des Modells ist, ist x (n) die Eingabe des Modells und u (n - m) sind vorherige Abtastwerte des Modellausgangswertes. Diese Filter werden autoregressiv genannt, da die Ausgangswerte auf der Grundlage von Regressionen der vorherigen Ausgabewerte berechnet werden. AR-Prozesse können durch ein Allpol-Filter dargestellt werden. ARMA Filter Edit Autoregressive Moving-Average Filter (ARMA) sind Kombinationen von AR - und MA-Filtern. Der Ausgang des Filters ist als Linearkombination sowohl der gewichteten Eingangs - als auch der gewichteten Ausgangssamples gegeben: ARMA-Prozesse können als digitales IIR-Filter mit beiden Pole und Nullen betrachtet werden. AR-Filter werden in vielen Fällen bevorzugt, da sie mit den Yule-Walker-Gleichungen analysiert werden können. MA - und ARMA-Prozesse hingegen können durch komplizierte nichtlineare Gleichungen analysiert werden, die schwer zu studieren und zu modellieren sind. Wenn wir einen AR-Prozeß mit Abgriff-Gewichtungskoeffizienten a (einen Vektor von a (n), a (n - 1).) Einen Eingang von x (n) haben. Und eine Ausgabe von y (n). Können wir die yule-walker Gleichungen verwenden. Wir sagen, dass x 2 die Varianz des Eingangssignals ist. Wir behandeln das Eingangsdatensignal als Zufallssignal, auch wenn es ein deterministisches Signal ist, weil wir nicht wissen, was der Wert ist, bis wir ihn erhalten. Wir können die Yule-Walker-Gleichungen folgendermaßen ausdrücken: wobei R die Kreuzkorrelationsmatrix der Prozeßausgabe ist und r die Autokorrelationsmatrix der Prozeßausgabe ist: Varianzbearbeitung Wir können zeigen: Wir können die Eingangssignalabweichung als: , Expandiert und ersetzt r (0). Können wir die Ausgangsvarianz des Prozesses mit der Eingangsvarianz in Beziehung setzen: Verständnis kaskadierter Integrator-Kammfilter Von Richard Lyons, Höflichkeit von eingebetteten Systemen Programmierung Mar 31 2005 (14:49 PM) Der vorher obskure CIC-Filter ist jetzt lebenswichtig für viele High - Volumen Wireless-Kommunikation Aufgaben und Ausrüstung. Die Verwendung von CIC-Filtern kann Kosten senken, die Zuverlässigkeit verbessern und die Leistung verbessern. Heres eine Grundierung, zum Sie zu erhalten begonnen. Kaskadierte Integrationskamm (CIC) Digitalfilter sind rechnerisch effiziente Implementierungen von schmalbandigen Tiefpaßfiltern und werden oft in Hardwareimplementierungen von Dezimierung und Interpolation in modernen Kommunikationssystemen eingebettet. CIC-Filter wurden von Eugene Hogenauer vor mehr als zwei Jahrzehnten in die Signalverarbeitungs-Community eingeführt, aber ihre Anwendungsmöglichkeiten sind in den letzten Jahren gewachsen. 1 Verbesserungen bei der Chiptechnologie, der verstärkte Einsatz von Polyphasenfiltertechniken, Fortschritte in Delta-Sigma-Wandler-Implementierungen und das signifikante Wachstum in der drahtlosen Kommunikation haben alle ein großes Interesse an CIC-Filtern geweckt. Während das Verhalten und die Implementierung dieser Filter nicht kompliziert ist, war ihre Abdeckung in der Literatur von eingebetteten Systemen knapp. Dieser Artikel versucht, den Körper der Literatur für Embedded Systems Ingenieure zu erweitern. Nach der Beschreibung einiger Anwendungen für CIC-Filter, Ill ihre Struktur und ihr Verhalten vorstellen, zeigen die Frequenz-Domain-Performance von CIC-Filter und diskutieren einige wichtige praktische Fragen beim Bau dieser Filter. CIC-Filter-Anwendungen CIC-Filter eignen sich gut für die Antialiasing-Filterung vor der Dezimierung (Sample-Rate Reduction), wie in Abbildung 1a gezeigt, und für die Anti-Imaging-Filterung für interpolierte Signale (Sample-Rate-Zunahme) wie in Abbildung 1b. Beide Anwendungen sind mit sehr hohem x2014Daten-Rate-Filterung, wie Hardware-Quadratur-Modulation und Demodulation in modernen drahtlosen Systemen und Delta-Sigma AD und DA-Wandler verbunden. Da ihre Frequenz-Betrags-Hüllkurven sin (x) x-ähnlich sind, werden CIC-Filter typischerweise entweder höheren linearen Hochpaß-Tiefpaß-Verzögerungs-FIR-Filtern mit höherer Leistung gefolgt oder vorausgegangen, deren Aufgaben darin bestehen, die CIC - Flachen Durchlaßbereich. Diese Kaskadenfilter-Architektur hat wertvolle Vorteile. Zum Beispiel können Sie mit der Dezimierung die Rechenkomplexität der schmalbandigen Tiefpaßfilterung erheblich reduzieren, wenn Sie ein einzelnes Tiefpaßfilter mit endlicher Impulsantwort (FIR) verwenden. Zusätzlich arbeitet das nachfolgende FIR-Filter mit reduzierten Taktraten, die den Energieverbrauch in Hochgeschwindigkeits-Hardwareanwendungen minimieren. Ein entscheidender Bonus bei der Verwendung von CIC-Filtern und eine Eigenschaft, die sie bei Hardwaregeräten beliebt macht, ist, dass sie keine Multiplikation erfordern. Die zur Implementierung dieser Digitalfilter benötigte Arithmetik ist ausschließlich Additionen und Subtraktionen. Mit, dass gesagt, können sehen, wie CIC-Filter arbeiten. Rekursive Fahrsummenfilter CIC-Filter stammen aus der Vorstellung eines rekursiven Fahrsummenfilters. Die selbst eine effiziente Form eines nichtrekursiven sich bewegenden Mittelwerts ist. Erinnere dich an den Standard-D-Punkt-gleitenden Durchschnitt in Abbildung 2a. Dort sehen wir, dass D-1-Summierungen (plus eines multipliziert mit 1 D) notwendig sind, um den Mittelwertausgang y (n) zu berechnen. Die D-Punkt-gleitende Mittelwert-Filterausgabe in der Zeit wird ausgedrückt als: wobei n der Zeitdomänenindex ist. Der z - Domänenausdruck für diesen sich bewegenden Mittelwert ist: während seine z-Domäne H (z) - Übertragungsfunktion ist: Ich biete diese Gleichungen nicht, um die Dinge kompliziert zu machen, sondern weil sie nützlich sind. Gleichung 1 gibt an, wie ein sich beweglicher Mittelwertbildner zu erstellen ist, und Gleichung 3 ist in der Form, die von kommerzieller Signalverarbeitungssoftware verwendet wird, um das Frequenzbereichsverhalten des sich bewegenden Mittelwertbildners zu modellieren. Der nächste Schritt auf dem Weg zum Verständnis von CIC-Filtern besteht darin, eine äquivalente Form des sich bewegenden Mittelwerts, des in Fig. 2b dargestellten rekursiven Fahrsummenfilters, zu betrachten. Daraus ergibt sich, dass die aktuelle Eingangsabtastung x (n) addiert wird und die älteste Eingangsabtastung x (n - D) vom vorherigen Ausgabedurchschnitt y (n - 1) subtrahiert wird. Sein genanntes rekursives, weil es Rückgespräch hat. Jeder Filterausgangsprobe wird beibehalten und verwendet, um den nächsten Ausgangswert zu berechnen. Die rekursive Laufsummenfilterdifferenzgleichung lautet: mit az - Domäne H (z) Übertragungsfunktion von: Für die Übertragungsfunktionen des gleitenden Durchschnittsfilters und des rekursiven Laufsummenfilters verwenden wir die gleiche H (z) - Variable, weil deren Übertragungsfunktionen sind einander gleich. Gleichung 3 ist der nichtrekursive Ausdruck und Gleichung 5 ist der rekursive Ausdruck für einen D-Punkt-Mittelwertbildner. Der mathematische Beweis dafür findet sich in meinem Buch zur digitalen Signalverarbeitung, aber in Kürze zeigen wir, dass Äquivalenz mit einem Beispiel. 2 Heres, warum wir uns um rekursive Ruhesummenfilter kümmern: Der Standard-Verschiebungsmitter in Abbildung 2a muss D -1 Additionen pro Ausgangsprobe durchführen. Das rekursive Fahrsummenfilter hat den süßen Vorteil, daß nur eine Addition und eine Subtraktion pro Ausgangsprobe erforderlich sind, unabhängig von der Verzögerungslänge D. Diese Recheneffizienz macht den rekursiven Fahrsummenfilter in vielen Anwendungen interessant, die eine Rauschunterdrückung durch Mittelung suchen. Als nächstes sehen wir, wie ein CIC-Filter selbst ein rekursiver Run-Sum-Filter ist. CIC-Filterstrukturen Wenn wir die Verzögerungsdarstellung kondensieren und die 1D-Skalierung in Abbildung 2b ignorieren, erhalten wir die klassische Form eines CIC-Filters 1. Ordnung, dessen Kaskadenstruktur in Abbildung 2c dargestellt ist. Der Vorwärtskopplungsabschnitt des CIC-Filters wird als Kammabschnitt bezeichnet, dessen Differentialverzögerung D ist. Während der Rückkopplungsabschnitt typischerweise Integrator genannt wird. Die Kammstufe subtrahiert eine verzögerte Eingangsabtastung von der aktuellen Eingangsabtastung, und der Integrator ist einfach ein Akkumulator. Die CIC-Filterdifferenzgleichung lautet: und ihre Z-Domänenübertragungsfunktion lautet: Um zu sehen, warum das CIC-Filter von Interesse ist, untersuchen wir zunächst sein in Fig. 3 gezeigtes Zeitbereichsverhalten für D & sub5 ;. Wenn ein Einheitsimpuls - Sequenz, eine einwertige Probe, gefolgt von vielen nullwertigen Proben, wurde auf die Kammstufe angewendet, wobei die Stufenausgabe wie in 3a gezeigt ist. Nun denke, was wäre die Ausgabe des Integrators, wenn seine Eingabe war die Kammstufen Impulsantwort Der anfängliche positive Impuls aus dem Kammfilter beginnt die Integratoren all-one-Ausgang, wie in Abbildung 3b. Dann empfängt der negative Impuls von der Kammstufe später den Integrator, um alle weiteren CIC-Filterausgangsabtastwerte auf Null zu setzen. Das zentrale Problem ist, dass die kombinierte Einheitsimpulsantwort des CIC-Filters, die eine rechtwinklige Sequenz ist, identisch ist mit den Einheitsimpulsantworten eines gleitenden Durchschnittsfilters und des rekursiven Ruhesummenfilters. (Moving-Averages, rekursive Ruhesummenfilter und CIC-Filter sind eng beieinander. Sie haben die gleichen Z-Domain-Pole-Positionen, ihre Frequenzgrößenantworten haben identische Formen, ihre Phasenantworten sind identisch und ihre Übertragungsfunktionen unterscheiden sich nur durch eine Konstante Skalenfaktor.) Wenn Sie das Zeitbereichsverhalten eines sich bewegenden Mittelwerts verstehen, dann verstehen Sie das Zeitbereichsverhalten des CIC-Filters in Abbildung 2c. Die Frequenzgröße und die lineare Phasenreaktion eines D 5 CIC-Filters ist in 4a gezeigt, wobei die Frequenz x192 s die Eingangssignal-Abtastrate in Hz ist. Wir können einen Ausdruck für den Frequenzgang des CIC-Filters durch Auswertung der Gleichung 7s H cic (z) - Übertragungsfunktion auf dem Kreis der z-Ebenen erhalten, indem wir z e j 2 x3C0x192 setzen. Nachweis: Mit Eulers Identität 2 j sin (x3B1) e jx3B1 - e jx3B1. Können wir schreiben: Wenn wir den Phasenfaktor in Gleichung 9 ignorieren, kann dieses Verhältnis von sin () Terme durch eine sin (x) x-Funktion angenähert werden. Dies bedeutet, dass der Frequenzgang der CIC-Filter ungefähr gleich einer sin (x) x-Funktion ist, die bei 0Hz zentriert ist, wie wir in 4a sehen. (Dies ist der Grund, warum CIC-Filter manchmal Sin-Filter genannt werden.) Digital-Filter-Designer sehen gerne z-Plane Polezero-Plots, so dass wir die z-Plane Eigenschaften eines D 5 CIC-Filter in Abbildung 4c, wo das Kamm-Filter erzeugt D Nullen, die gleichmäßig um den Einheitskreis herum beabstandet sind, und der Integrator erzeugt einen Einzelpol, der die Null bei z 1 aufhebt. Jede der Kammnullen, die eine D-te Wurzel von 1 ist, befindet sich bei z (m) ej 2 · 3C0m D. Wobei m 0, 1, 2. D -1, entsprechend einer Größe null in 4a. Die normalerweise riskante Situation, einen Filterpol direkt auf dem Einheitskreis zu haben, braucht hier nicht zu stören, da es keinen Koeffizientenquantisierungsfehler in unserer Übertragungsfunktion H cic (z) gibt. CIC-Filterkoeffizienten sind Einsen und können mit perfekter Präzision mit Festkommazahlen dargestellt werden. Obwohl rekursive, glücklich CIC-Filter sind garantiert stabile, lineare Phase in Abbildung 4b gezeigt, und haben endliche Länge Impulsantworten. Bei 0Hz (DC) ist die Verstärkung eines CIC-Filters gleich der Kammfilterverzögerung D. Diese Tatsache, deren Ableitung verfügbar ist, wird uns wichtig sein, wenn wir tatsächlich einen CIC-Filter in Hardware implementieren. 2 Bild 5: Einstufige CIC-Filter für Dezimierung und Interpolation Bild in voller Größe anzeigen CIC-Filter werden vorwiegend für die Antialiasing-Filterung vor der Dezimierung und für die Anti-Imaging-Filterung für interpolierte Signale verwendet. Mit diesen Vorstellungen vertauschen wir die Reihenfolge der Fig. 2cs Kamm und Integrator x2014 wurden zugelassen, dies zu tun, da diese Operationen linearx2014 sind und eine Dezimation durch einen Abtastratenänderungsfaktor R in Fig. 5a einschließen. (Sie können möglicherweise beweisen, dass die Einheitsimpulsantwort der Integrator-Kombinationskombination vor der Änderung der Abtastrate in 5a gleich der in 3c ist.) Bei den meisten CIC-Filteranwendungen ist die Ratenänderung R gleich den Kämmen Differenzverzögerung D. Aber gut halten sie als separate Design-Parameter für jetzt. Abb. 6: Magnitudenreaktion eines CIC-Filters 1. Ordnung: vor Dezimierungsaliasierung nach R 8 Dezimierung Vollbild ansehen Die Dezimierungsoperation x2193 R bedeutet, dass alle bis auf jeden R-ten Abtastwert verworfen wird, was zu einer Abtastrate der Abtastrate führt Von x192 s, aus x192 s, in R. Um ein CIC-Filter-Frequenzbereichsverhalten näher zu untersuchen, zeigt Fig. 6a die Frequenzgrößendreaktion eines D & sub8; CIC-Filters vor der Dezimation. Das Spektralband der Breite B. Zentriert bei 0Hz ist das gewünschte Durchlaßband des Filters. Ein wesentlicher Aspekt der CIC-Filter ist die spektrale Faltung, die durch Dezimierung erfolgt. Diese B-breiten Spektralbänder, die um Vielfache von x192 s zentriert sind, werden in R in Fig. 6a direkt nach der Dezimation durch R & sub8; direkt in unser gewünschtes Durchlaßband gebracht, wie in Fig. 6b gezeigt. Beachten Sie, dass die größte Alias-Spektralkomponente in diesem Beispiel etwa 16 dB unter dem Peak des interessierenden Bandes liegt. Natürlich hängen die Aliasing-Leistungspegel von der Bandbreite B x2014 ab, je kleiner B ist, desto geringer die Alias-Energie nach der Dezimation. Fig. 5b zeigt ein CIC-Filter, das für die Interpolation verwendet wird, wobei das x2191-R-Symbol R-1-Nullen zwischen jeder x (Nr ) Probe, was eine ay (n) Ausgangsabtastrate von x192 s ergibt, aus Rx192 s, in. (In dieser CIC-Filterdiskussion wird die Interpolation als Nulleninsertion gefolgt von Filtern definiert.) 7a zeigt ein willkürliches Basisbandspektrum mit seinen spektralen Replikationen eines Signals, das an das D R 8 interpolierende CIC-Filter von 5b angelegt wird. Das Filterausgangsspektrum in Fig. 7b zeigt, wie unvollkommenes Filtern die unerwünschten Spektralbilder hervorruft. Nach der Interpolation befinden sich unerwünschte Bilder des B-Width-Basisbandspektrums an den Nullzentren, die sich an ganzzahligen Vielfachen von x192 s, out R befinden. Wenn wir dem CIC-Filter mit einem herkömmlichen Tiefpass-Tappedx2014-Delay-FIR-Filter folgen, dessen Sperrband das erste Bildband enthält, kann eine ziemlich hohe Bildabweisung erzielt werden. Abbildung 8: CIC-Dezimierungsfilterstruktur 3. Ordnung und Amplitudenreaktion vor Dezimierung bei DR 8 Großes Bild anzeigen Verbesserung der CIC-Dämpfung Die gängigste Methode zur Verbesserung der CIC-Filter-Anti-Aliasing - und Bild-Ausschuß-Dämpfung ist die Erhöhung der Ordnung M von Das CIC-Filter mit mehreren Stufen. Fig. 8 zeigt die Struktur - und Frequenzgrößenreaktion eines Decodierfilters 3. Ordnung (M & sub3;) CIC. Beachten Sie die erhöhte Dämpfung bei x192 s, out R in Abbildung 8b verglichen mit dem CIC-Filter 1. Ordnung in Abbildung 6a. Weil die M 3 CIC-Stufen in Kaskade sind, wird die Gesamtfrequenz-Magnitude-Antwort das Produkt ihrer individuellen Antworten sein oder: Der Preis, den wir für eine verbesserte Anti-Alias-Dämpfung zahlen, sind zusätzliche Hardware-Addierer und ein erhöhtes CIC-Filterpassband. Eine zusätzliche Strafe einer erhöhten Filterordnung ergibt sich aus der Verstärkung des Filters, die mit der Ordnung exponentiell ist. Da CIC-Filter im Allgemeinen mit voller Genauigkeit arbeiten müssen, um stabil zu bleiben, ist die Anzahl von Bits in den Addierern M log 2 (D), was eine große Datenwortbreite-Strafe für Filter höherer Ordnung bedeutet. Trotzdem ist diese mehrstufige Implementierung bei handelsüblichen integrierten Schaltkreisen üblich, wobei ein M-ter Ordnung-CIC-Filter oft als sin-M-Filter bezeichnet wird. Abbildung 9: Einstufige CIC-Filter-Implementierungen: für Dezimierung zur Interpolation Großansicht ansehen Aufbau eines CIC-Filters In CIC-Filtern kann der Kammabschnitt dem Integratorabschnitt vorangehen oder folgen. Es ist jedoch sinnvoll, den Kammabschnitt auf die Seite des Filters zu stellen, der mit der niedrigeren Abtastrate arbeitet, um den Speicherbedarf in der Verzögerung zu reduzieren. Das Tauschen der Kammfilter aus Fig. 5 mit den Ratenänderungsoperationen führt zu der gängigsten Implementierung von CIC-Filtern, wie in Fig. 9 gezeigt. Es sei bemerkt, daß der Kammabschnitt des Dezimierungsfilters nun eine Verzögerungslänge (differential delay) von N D R aufweist. Das ist, weil eine N-Sample-Verzögerung nach Dezimation durch R entspricht einer D-Sample-Verzögerung vor Dezimation durch R. Ebenso ist für das Interpolationsfilter eine N-Abtastverzögerung vor der Interpolation durch R äquivalent zu einer D-Abtastverzögerung nach Interpolation mit R. Diese Konfigurationen von Fig. 9 ergeben zwei große Vorteile: Zuerst wird die neue Differentialverzögerung der Kammabschnitte auf N D R reduziert, wodurch die Datenspeicheranforderungen zweiter Stufe reduziert werden, der Kammabschnitt arbeitet nun mit einer reduzierten Taktrate. Beide Effekte reduzieren den Energieverbrauch der Hardware. Abbildung 10: CIC-Dezimierungsfilter-Antworten: für verschiedene Werte der Differentialverzögerung N. Wenn R & sub8; für zwei Dezimierungsfaktoren, wenn N & sub2; Vollbild-Bild ist Der Kammabschnitte-Differentialverzögerungs-Designparameter N ist typischerweise 1 oder 2 für hohe Abtastratenverhältnisse, wie es häufig in Aufwärtswandlern verwendet wird. N wirksam die Anzahl von Nullwerten im Frequenzgang eines Dezimationsfilters, wie in Fig. 10a gezeigt ist. Eine wichtige Eigenschaft eines CIC-Dezimators ist, dass sich die Form der Filterantwort sehr wenig ändert, wie in 10b gezeigt, als eine Funktion des Dezimierungsverhältnisses. Für Werte von R größer als etwa 16 ist die Änderung der Filterform vernachlässigbar. Dies ermöglicht, dass das gleiche Kompensations-FIR-Filter für Systeme mit variabler Dezimierung verwendet werden kann. Das CIC-Filter leidet aufgrund der Einheits-Rückkopplung bei jeder Integratorstufe an einem Register-Überlauf. Der Überlauf ist ohne Bedeutung, solange die beiden folgenden Bedingungen erfüllt sind: Der Bereich des Zahlensystems ist größer oder gleich dem am Ausgang erwarteten Maximalwert, und das Filter wird mit Zweierkomplementarithmetik (Nichtsättigungsrechner) implementiert. Da ein CIC-Filter erster Ordnung eine Verstärkung von D NR bei 0 Hz (DC) aufweist, haben M-kaskadierte CIC-Dezimierungsfilter eine Nettoverstärkung von (NR) M. Jeder zusätzliche Integrator muss eine weitere NR-Bitsbreite für Stufen hinzufügen. Interpolierende CIC-Filter haben Nullen, die zwischen Eingangssamples eingefügt sind, die ihre Verstärkung um einen Faktor von 1 R verringern, um die nullwertigen Abtastwerte zu berücksichtigen, so daß die Nettoverstärkung eines interpolierenden CIC-Filters (NR) M R ist. Da der Filter eine Ganzzahlarithmetik verwenden muß, müssen die Wortbreiten in jeder Stufe des Filters breit genug sein, um das Maximalsignal (volle Eingangsgröße der Verstärkung) in diesem Stadium aufzunehmen. Obwohl die Verstärkung eines M-ter Ordnung CIC-Dezimierungsfilters (NR) ist, können einzelne Integratoren einen Überlauf erfahren. (Deren Verstärkung bei DC unendlich ist). Die Verwendung von Zweierkomplementarithmetik löst daher diese Überlaufsituation gerade solange auf, wie die Integratorwortbreite die maximale Differenz zwischen zwei aufeinanderfolgenden Abtastwerten annimmt (mit anderen Worten, die Differenz verursacht nicht mehr als Ein einzelner Überlauf). Unter Verwendung des Zweierkomplement-Binärformats mit seiner modularen Wrap-around-Eigenschaft berechnet das Folgekammfilter die korrekte Differenz zwischen zwei aufeinanderfolgenden Integratorausgangssamples. Für die Interpolation ist das Wachstum der Wortgrße ein Bit pro Kammfilterstufe und ein Überlauf muß vermieden werden, damit die Integratoren richtig akkumulieren. Daher müssen wir ein zusätzliches Bit des Datenwortwachstums in jeder Kammstufe für die Interpolation unterbringen. Es gibt einige kleine Flexibilität bei der Verwerfung einiger der niedrigstwertigen Bits (LSBs) innerhalb der Stufen eines CIC-Filters, zu Lasten des zusätzlichen Rauschens am Filterausgang. Die spezifischen Effekte dieser LSB-Entfernung sind jedoch ein kompliziertes Problem können Sie mehr über das Problem durch das Lesen Hogenauers Papier zu lernen. 1 Während sich die vorangegangene Diskussion auf festverdrahtete CIC-Filter konzentrierte, können diese Filter auch mit programmierbaren Festpunkt-DSP-Chips realisiert werden. Obwohl diese Chips unflexible Datenwege und Wortbreiten aufweisen, kann die CIC-Filterung für hohe Abtastratenänderungen vorteilhaft sein. Große Wortbreiten können mit Mehrwortzusätzen auf Kosten von zusätzlichen Befehlen untergebracht werden. Trotzdem kann bei großen Abtastratenänderungsfaktoren die rechnerische Arbeitsbelastung pro Ausgangsprobe in Festpunkt-DSP-Chips klein sein. Kompensationsfilter In typischen Dezimierungsinterpolations-Filteranwendungen wünschen wir ein relativ flaches Durchlaßband und eine schmale Übergangsbereichsfilterleistung. Diese wünschenswerten Eigenschaften werden nicht allein durch CIC-Filter mit ihren herabhängenden Durchlaßbandverstärkungen und breiten Übergangsbereichen bereitgestellt. Dieses Problem wird gemildert, zum Beispiel durch Dezimierung, indem dem CIC-Filter mit einem nichtkompensierenden FIR-Filter wie in Fig. 1a folgend, die Ausgangsbandbreite verengt und die Passbandverstärkung abgeflacht wird. Abbildung 11: Kompensation von FIR-Filterantworten mit einem Dezimal-CIC-Filter erster Ordnung mit Dezimierung 3. Ordnung Vollbilddarstellung Das Kompensations-Frequenzspektrum der FIR-Filter ist idealerweise eine invertierte Version der CIC-Filterpaßbandantwort, Gestrichelte Kurve in Fig. 11a für ein einfaches Drei-Zapf-FIR-Filter, dessen Koeffizienten -116, 98, -116 sind. Wenn die gestrichelte Kurve den unkompensierten Durchlaßbandabfall eines C-Filters erster Ordnung R8 darstellt, repräsentiert die durchgezogene Kurve die kompensierte Antwort der kaskadierten Filter. Wenn entweder die Durchlaßbandbandbreite oder die CIC-Filterreihenfolge größer wird, wird die Korrektur größer, was mehr Kompensations-FIR-Filterabgriffe erfordert. Ein Beispiel für diese Situation ist in 11b gezeigt, wobei die gepunktete Kurve den Durchlassbandabfall eines R8 CIC-Filters 3. Ordnung darstellt und die gestrichelte Kurve, die die Form von xsin (x) 3 annimmt, die Reaktion eines 15-Abgriffs ist Kompensations-FIR-Filter mit den Koeffizienten -1, 4, -16, 32, -64, 136, -352, 1312, -352, 136, -64, 32, -16, 4, -1. Eine Breitbandkorrektur bedeutet auch, dass Signale in der Nähe von x192 s, out 2 mit dem CIC-Filter gedämpft werden und dann in dem Korrekturfilter verstärkt werden müssen, um Rauschen hinzuzufügen. Als solche beschränken Praktiker oft die Durchlassbandbreite des Kompensations-FIR-Filters auf ungefähr die Frequenz der ersten Null in der CIC-Filterantwort. Diese gestrichelten Kurven in Fig. 11 stellen die Frequenzgrößenantworten kompensierender FIR-Filter dar, innerhalb derer keine Abtastratenänderung stattfindet. (Die FIR-Filter-Eingangs - und Ausgangs-Abtastraten sind gleich der Ausgangsrate des dezimierenden CIC-Filters von x192 s.) Wenn ein kompensierendes FIR-Filter entworfen wurde, um eine zusätzliche Dezimation durch zwei zu liefern, würde seine Frequenzgrößenantwort ähnlich aussehen In Fig. 12, wobei gts, in die Kompensationsfilter-Eingangsabtastrate ist. Abbildung 12: Frequenzansprechverhalten eines FIR-Filters im Dezimaltrennverfahren Vollbildansicht Fortgeschrittene Techniken Unter dem Strich unserer CIC-Filter-Diskussion ist ein dezimierender CIC-Filter lediglich eine sehr effiziente rekursive Umsetzung eines gleitenden Durchschnitts Filter mit NR-Anzapfungen, deren Ausgangssignal durch R dezimiert wird. Ebenso ist das interpolierende CIC-Filter Einfügen von R -1 Null-Abtastungen zwischen jedem Eingangs-Abtastwert, gefolgt von einem NR-tap-gleitenden Durchschnittsfilter, der mit der Abtast-Ausgangs-Abtastrate x192 s, out läuft. Die Kaskadenimplementierungen in Fig. 1 führen zu Gesamtrechnungsarbeitslasten, die weit weniger sind als die Verwendung eines einzigen FIR-Filters alleine für eine hohe Abtastratenänderungsdezimierung und Interpolation. CIC-Filterstrukturen sind so ausgelegt, dass sie die Menge der Verarbeitung mit niedriger Abtastrate maximieren, um den Energieverbrauch in Hochgeschwindigkeits-Hardwareanwendungen zu minimieren. Wiederum benötigen CIC-Filter keine Multiplikation, ihre Arithmetik ist ausschließlich Addition und Subtraktion. Ihre Leistung erlaubt es uns zu sagen, dass technisch gesprochene CIC-Filter mager sind, mittlere Filtermaschinen. Schließlich gibt es Wege, um nichtrekursive CIC-Filter, die das Wort-Breite Wachstum Problem der traditionellen rekursiven CIC-Filter zu erleichtern. Diese erweiterten CIC-Filter-Architekturen werden in meinem Buch Verständnis Digitale Signalverarbeitung, 2E diskutiert. 2 Richard Lyons ist ein Consulting-System-Ingenieur und Lektor mit Besser Associates in Mountain View, Ca. Er ist der Autor von Understanding Digital Signal Processing 2E und ein Associate Editor für das IEEE Signal Processing Magazine, wo er erstellt und bearbeitet die DSP Tipps amp Tricks Spalte. Sie erreichen ihn bei r. lyonsieee. org. Hogenauer, Eugene. Eine wirtschaftliche Klasse von digitalen Filtern für Dezimierung und Interpolation, IEEE-Transaktionen auf Akustik, Sprache und Signalverarbeitung. Vol. ASSP-29, S. 155-162, April 1981. Lyons, Richard, Understanding Digital Signal Processing, 2nd Ed. Prentice Hall, Upper Saddle River, New Jersey, 2004, S. 556 & ndash; 561.


No comments:

Post a Comment