Gast
#772708
Hallo, folgendes Problem: Ich möchte auf einem 8-Bit-Mikrocontroller einen einfachen FIR-Filter 2. Ordnung implementieren. Aus Performancegründen soll die Berechnung aber nicht mit Fließ-, sondern mit Festkommazahlen laufen. Daher multipliziere ich die von Matlab berechneten Koeffizienten a_i und b_i mit hier 2^16. Bei Multiplikation mit den 10 Bit breiten Eingangswerten x ist in einer 32 Bit Variablen also ausreichend Platz. Folgender Code bringt mir bei meinem Tiefpass leider gar nix, das Eingangssignal wird nicht geglättet:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
Der Algorithmus konvergiert auch erst, wenn ich bei der Rücknormierung einen größeren Wert als die 2^16 anwende. Führe ich den Algorithmus jedoch ohne den zusätzlichen Faktor 2^16 und mit double als Datentype aus, tritt die gewünschte Wirkung ein. Jemand Ideen?