Implementierung eines Echtzeit-Festpunkt-IIR-Filters in C.


7

Ich möchte ein Festkomma-Tiefpass-IIR-Filter vierter Ordnung in C (mit Q15-Arithmetik) implementieren, und ich werde dieses Filter unter Verwendung von zweistufigen kaskadierten direkten Form-II-Bi-Quad-Filtern vorbereiten.

Ich habe unzählige C-Implementierungen und Beispielkoeffizienten in den digitalen Signalverarbeitungsbüchern gefunden, aber ich habe gesehen, dass keine von ihnen während der Überprüfung nicht zuverlässig ist (sie erzeugen Überläufe, dämpfen erwartete Frequenzkomponenten nicht usw.).

Welche C-Implementierung eignet sich für dieses Problem? Gibt es auch Stichprobenkoeffizienten, um diese Implementierung zu überprüfen?


1
Wenn Sie keine für Sie geeigneten Implementierungen gefunden haben, was hindert Sie daran, Ihre eigenen zu rollen? Sie scheinen zu verstehen, wo diejenigen, die Sie gefunden haben, zu kurz kommen, also erweitern Sie sie einfach, um Ihren Anforderungen zu entsprechen. Ein IIR vierter Ordnung, der auf Abschnitten zweiter Ordnung basiert, ist nicht so kompliziert zu schreiben.
Jason R

Geht es bei Ihrem Problem wirklich um das Design eines Filters oder haben Sie bereits die Koeffizienten und möchten diese implementieren?
Dipan Mehta

Ich habe den Filter bereits vorbereitet und ich habe Koeffizienten.
Albin

Antworten:


8

Obwohl dies eine bemerkenswert einfache Frage zu sein scheint, erfordert sie eine bemerkenswert komplizierte Antwort.

Ich glaube nicht, dass es eine "Einheitslösung" gibt. Die beste Wahl des Algorithmus hängt davon ab, welches Rauschen Sie tolerieren können und welche Art von Tiefpass (Steilheit und Frequenz) vorliegt. Zum Beispiel ist bei einer Abtastrate von 44,1 kHz ein Butterworth 4. Ordnung bei 10 kHz ziemlich einfach, während ein Tiefpass bei 100 Hz ein königlicher Schmerz ist. Im Wesentlichen hängt es davon ab, wie nahe Ihre Pole am Einheitskreis liegen.

Quantisierungs- und Rundungsfehler von IIR-Filtern werden normalerweise auf den Ausgang übertragen, der durch die Nur-Pol-Übertragungsfunktion gewogen wird. Ein Butterworth 10-kHz-Tiefpassfilter 4. Ordnung hat eine Rauschverstärkung im ungünstigsten Fall von nur 5 dB, so dass dies kein großes Problem darstellt.

Bei einem 100-Hz-Tiefpass (wieder BW 4. Ordnung) wird das Rauschen jedoch um satte 75 dB verstärkt. Wenn Sie Q15-Mathematik verwenden, liegt Ihr Grundrauschen möglicherweise bei -100 dB oder so. Nach dem Filter beträgt Ihr Signal-Rausch-Verhältnis nur noch 25 dB.

Dies ist einer der Gründe, warum Festkomma-IIR-Filter ziemlich kompliziert sind. WENN Sie niedrige Grenzfrequenzen und ein halbwegs anständiges Signal-Rausch-Verhältnis benötigen, funktionieren die grundlegenden Algorithmen nicht. Sie müssen sich mit Mathematik und / oder Fehlerspektrumformung mit doppelter Genauigkeit oder verwandten Methoden befassen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.