Hallo!
Mein Ziel ist es, ein digitales Filter in einem FPGA zu implementieren.
Der Aufbau sieht wie folgt aus:
Funktionsgenerator(sinus)->AD_Wandler->digitales_Filter->DA_Wandler->Osz
i
Bei der Berechnung der Filterkoeffizienten rechnet man mit der
normierten Grenzfrequenz Fg (Fg=Grenzfrequenz/Abtastfrequenz=fg/fa). Ich
möchte ein digitales Filter entwerfen, welches bei einer
-->Abtastfrequenz von 40 kHz eine
-->Grenzfrequenz von 1 Hz hat.
-->Dies entspricht einer Fg von 0,000025.
Dieser Filter (fa=40kHz, fg=1Hz) hat aber eine reale Grenzfrequenz
(-3dB) bei ca. 100 Hz (gemessen).
-->Meinen Messungen zufolge, kann ich nur digitale Filter entwerfen, bei
welchen Fg > ca. 0,01 ist.
Bei allen größeren Fg`s funktioniert mein digitales Filter wie gewünscht
(sogar überraschend genau). Zur Information - zur Berechnung der
Filterkoeffizienten verwende ich die Window-Methode mit dem
Hamming-Fenster.
------------------------------------------------------------------------
--
Ist es möglich ein digitales Filter mit einer Fg < 0,01 zu entwerfen?
Besteht eine Grenze bei digitalen Filtern bezüglich Fg? Wenn ja, warum?
------------------------------------------------------------------------
--
Danke für eure Antworten!
Gruß
Sicher ist das möglich, aber: je schmaler dein Filter ist, desto mehr
machen sich Rundungsfehler bemerkbar. 0.001 f_s als Grenzfrequenz ist
schon ziemlich extrem. Nimm mal die gerundeten Werte der
Filterkoeffizienten wie du sie auf dem FPGA implementierst, und rechne
daraus z.B. mit Matlab auf den Frequenzgang zurück, dann wirst du
wahrscheinlich sehen dass der mit deiner Spezifikation nicht mehr viel
zu tun hat.
Statt die Wortbreite endlos zu erhöhen implementiert man solche schmalen
Filter oft mit (mehrstufiger) Abtastratenwandlung, wobei jede Stufe nur
eine relativ harmlose Grenzfrequenz hat. "Multirate filter" nennt sich
das.
Hi!
Erst mal ein Dankeschön an euch zwei für die schnelle Antwort.
Mit sogenannten CICs bzw. Multirate Filtern habe ich mich noch nicht
beschäftigt. Ich habe die Links kurz überflogen, dass werde ich jetzt
jedoch umgehend noch genauer studieren.
Jedoch habe ich den Eindruck, dass ich mit meiner Abtastrate runter
müsste. Das ist aber schlecht da ich in der späteren Anwendung ca. alle
25us Daten bekomme und ich keine Daten verlieren will.
Gruß
>> Jedoch habe ich den Eindruck, dass ich mit meiner Abtastrate runter muß
Nein, Du muß nicht mit der Abtastrate runter, Du kannst bei Deinen 40kHz
bleiben. Die CICs dezimieren die Abtastrate, beispielsweise von 40kHz
auf 500Hz, aber die muß die Originalabtastwerte natürlich nicht
wegwerfen. Ne Grenzfrequenz von 1Hz bei ner Abtastrate von 40kHz macht
absolut keinen Sinn, da kann sich ja von sample zu sample nichts ändern,
das ist Faktor 20k überabgetastet. Dann besser mit CIC die 40ks/s auf
40000/512 samples/s dezimieren und einen Wert dieses Filters 512 Mal
nacheinander ausgeben, das ist immer noch Faktor 50 überabgetastet.
Ein CIC dezimiert zwar (interpolieren kann es auch), aber man verliert
keine Informationen. Das CIC transformiert samplerate zu Auflösung, Du
handelst also Abtastrate gegen Bitauflösung und zwar in beide
Richtungen. Man kann das mit FPGAs auch zum Exzess treiben: Ein 1-Bit
Wandler (Comparator) mit hoher Abtastrate (einige MHz) liefert am FPGA
mit CICs schöne 16Bit bei 48ks/s oder so.
Cheers
Detlef
CIC-Filter sind alles andere als optimale Dezimationsfilter, man
verliert Informationen durch Aliasing von Rauschen und den krummen
Frequenzgang im Durchlassbereich. Normale FIR-Filter hätten da viel
bessere Eigenschaften, der einzige Vorteil von CICs ist dass sie sehr
einfach zu implementieren sind. Man verwendet sie deshalb z.B. als erste
Stufe bei hohen Datenraten (GSM) und/oder großen Dezimationsfaktoren;
den Frequenzgang im Durchlassbereich muss man dann auf der langsamen
Seite ggf. wieder mit einem FIR-Filter geradebiegen.
>>CIC-Filter sind alles andere als optimale Dezimationsfilter
Ja
>>man verliert Informationen durch Aliasing von Rauschen und den krummen>>Frequenzgang im Durchlassbereich.
Nein. Informationstransferrate bestimmt sich mit Shannon über die
Bandbreite und das SNR. Die CICs transformieren das eine in das andere.
Wenn man keine Voraussetzung verletzt, geht da nix verloren
>>der einzige Vorteil von CICs ist dass sie sehr einfach zu implementieren >>sind.
'einzige Vorteil' ist gut gesagt. Und der einzige Vorteil der Addition
ist ebenfalls, dass sie so einfach zu implementieren ist !?
CIC Filter haben seit den frühen Tagen der CD-Player ('256 fach
Oversampling') als Treibsatz für AD und DA Wandlung gedient. Jeder Audio
Player hat nen schnellen 1 BIT Wandler mit CICs drin. Sigma/Delta
Wandler, nicht denkbar ohne CIC. MIT nem CIC, FPGA und 2 schnellen
digital IOs hast Du nen hochqualitativen AD/DA Wandler for free, kost
nix.
Dont mess with CIC !
Cheers
Detlef
Detlef _a wrote:
>>>CIC-Filter sind alles andere als optimale Dezimationsfilter> Ja>>>man verliert Informationen durch Aliasing von Rauschen und den krummen>>>Frequenzgang im Durchlassbereich.> Nein. Informationstransferrate bestimmt sich mit Shannon über die> Bandbreite und das SNR. Die CICs transformieren das eine in das andere.> Wenn man keine Voraussetzung verletzt, geht da nix verloren
Der Punkt an dem du Information verlierst ist der Übergang auf die
niedrige Abtastrate, d.h. wenn du nur jedes n-te Sample verwendest und
den Rest wegwirfst. Wenn das Signal perfekt tiefpassgefiltert wäre, dann
wäre dieser Schritt für den Durchlassbereich verlustlos, weil das Signal
aber wegen der relativ schwachen Sperrdämpfung des CIC-Filters noch
höherfrequente Komponenten enthält bekommt man Aliasing und damit
SNR-Verschlechterung im Durchlassbereich.
Eine eigene Frage?
Dieser Thread ist über 19 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.