Optimale Struktur der HBF-Kaskade
Im Grundkurs haben wir ja schon ein FIR-Filter realisiert. Dieses faltet das Eingangssignal mit den N Filterkoeffizienten und benötigt so pro Eingangs-Sample N MAC-Operationen.
Als erste Optimierung haben wir die Unterabtastung, d.h. wir benutzen nur jedes 2. Sample der Filterung. Ergo müssen wir auch nur jedes zweite Sample berechnen.
Aber es wird noch besser. Die Filterkoeffizienten, die für das Halbbandfilter entworfen worden sind, haben netterweise schöne Eigenschaften, da sie nach dem Remez-Algorithmus (auch bekannt als Parks-McClellan-Algorithmus) berechnet worden sind. Hier der Koeffizientensatz für die ersten Stufen:
Stufe 1 (N = 15):
Koeffizienten: [ -26866 0 230155 0 -1053854 0 5044863 8388607
5044863 0 -1053854 0 230155 0 -26866]
Das Filter ist erstens symmetrisch, der erste Koeffizient ist identisch mit dem letzten und so weiter bis zur Mitte. Die 8388607 in der Mitte sind 224-1, weil der Koeffizientensatz für 24 Bit berechnet worden ist. Die 224 steht für 0,5. Man hat hier also - bei einer Filterlänge von 15 - nur vier unterschiedliche Koeffizienten und einen festen Koeffizienten von 0,5 in der Mitte. Man braucht also nur vier MAC-Operationen wenn man die zu einem Koeffizienten gehörigen Daten erst addiert und dann mit dem Koeffizienten multipliziert. Den Akku des MAC initialisiert man mit dem um 1 bit nach rechts geschifteten Signalwert aus der Mitte.
Anstatt 30 Multiplikationen wie bei normaler FIR-Filterung bleiben also nur noch 4 Multiplikationen und ein bisschen Kopfweh, wie man die Daten und die Koeffizienten in den MAC-Core bekommt.
Weiter zum Blockschaltbild.