Forum: Digitale Signalverarbeitung / DSP / Machine Learning FIR Filter funtioniert nur bei Fg > 0,01?


von Klaus (Gast)


Lesenswert?

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ß

von Klaus (Gast)


Lesenswert?

Sorry! Mir ist ein Fehler unterlaufen:

Ist es möglich ein digitales Filter mit einer Fg < ca. 0,001 zu 
entwerfen?

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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.

von Detlef _. (detlef_a)


Lesenswert?

Ja, das funzt mit Integerrechnung schlecht, Du triffst die Koeffizienten 
nicht genau genug. Heißer Kandidat für Digitalfilter im FPGA sind CICs:

http://www.xilinx.com/ipcenter/catalog/logicore/docs/cic.pdf
http://en.wikipedia.org/wiki/Cascaded_integrator-comb

Cheers
Detlef

von Klaus (Gast)


Lesenswert?

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ß

von Detlef _. (detlef_a)


Lesenswert?

>> 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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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.

von Detlef _. (detlef_a)


Lesenswert?

>>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

von Andreas S. (andreas) (Admin) Benutzerseite


Lesenswert?

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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.