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?
Antworten:
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.
quelle