Hallo, ich habe versucht, für meine Bachelorarbeit ein IIR-Filter erster
Ordung zu implemetieren, dass das Rauschen am ADC-Eingang unterdrücken
soll.
1 | #define IIR_NUMERATOR 0xF0
|
2 | #define IIR_DENOMINATOR 0x10
|
3 | // Wert Filtern und in Zielvariable schreiben
|
4 | stProcessData.ui16AnalogValue = (
|
5 | __multiply_unsigned(ui8FilterInput,IIR_NUMERATOR) +
|
6 | __multiply_unsigned(stProcessData.ui16AnalogValue,IIR_DENOMINATOR))>>8;
|
Die Koeffizienten sind mit Matlab berechnet. Sowohl Daten als auch
Koeffizienten haben eine Breite von 8-Bit. Nun habe ich das Problem,
dass durch Rundungsfehler kleine Änderungen sich gar nicht auswirken.
Dem wollte ich entgegen wirken, indem ich die Auflösung der Daten
(künstlich) erhöhe, um die Rundungsfelher zu verringern. Leider komme
ich schon den ganzen Tag damit nicht auf einen grünen Zeig. Hat jemand
einen Tipp in dieser Richtung?