Problem mit Filterbank

Gast #1694021
Lesenswert?

Hallo,

ich wollte eine 5-Kanal-Filterbank bauen und hab dazu mehrere Filter 
berechnet.

Meine Eckdaten sehen so aus:
LP: 0...150Hz
BP: 150Hz...(fc=300Hz)...450Hz
BP: 450Hz...(fc=900Hz)...1350Hz
BP: 1350Hz...(fc=2700Hz)...4050Hz
HP: 4050Hz...24000Hz

Die 3 Bandpassfilter wurden so berechnet, dass die Güte Q jeweils gleich 
ist und die -3dB Eckpunkte sich überlagern.

Mit einem linearen Frequenzsweep, den ich mit Audiocity erzeugt hab, 
kamen dann die Teilbänder raus, wie man sie im angehängten Bild sehen 
kann.

Wenn man sie überlagert, dann ist der Frequenzgang nicht linear, weil 
offenbar die Frequenzfilter außerhalb der -3dB-Grenze nicht schnell 
genug abfallen. Liegt sicher auch an den "nur" 256tap, die ich für meine 
FIR-Filter habe.

Hat jemand eine Idee, wie man sowas sauber macht?

Das, was ich im Prinzip gerne hätte, wären Filterkoeffizienten (bis max 
1024tap) für einen 5-Band-Equalizer, der dann das Eingangssignal mit 
einigermaßen brauchbarer Frequenzlinearität wieder rekonstruiert.

Sollta man meinen, dass das Trivial ist, das ist es aber definitiv nicht 
und ich such da schon ewig nach sowas ...

Vielen Dank für das Durchlesen und für Hilfe!
Grüße,
GastGast
Angehängte Dateien:
Gast #1697339
Lesenswert?

Danke für den Tipp,

ich habs jetzt hingekriegt ... mit der Matlab DSP-Toolbox konnte man 
Stop-und Passband-Ecken angeben und mit einer leichten Überlappung 
konnte ich dann meinen Frequenzsweep ohne Dellen im Frequenzgang wieder 
gut rekonstruieren.

Mein Problem war, dass ich das falsche Tool verwendet hatte, das 
irgendwie die höchste Ordnung bei gewünschter Filtergröße berechnete. 
Damit hat das dann nicht zusammengepasst.

Grüße.
gastgast
Gast #1697371
Lesenswert?

Hi,

Einfach andersherum an die Sache herangehen:
Nicht die Ausgangssignale überlagern, sondern die Koeffizienten 
überlagern.
Man braucht nur EINEN 256 Tap FIR-Filter für alle 5 Bänder.
Du hast ja 5 Satz Koeffizienten (je 256 Stück); die addiert man alle 
zusammen zu einem Satz:
MyKoeffizient(i) = g1*LP1(i) + g2*Bp1(i) + g3*Bp2(i) + g4*Bp3(i) + 
g5*HP(i)
Dabei ist "g" das jeweilige Gain für den Kanal

Wenn sich das Gain für einen Kanal geändert hat muss man natürlich den
Satz "MyKoeffizient" neu berechnen und dem FIR-Algo zur Verfügung 
stellen.

Gruß
Caveman
Gast #1698094
Lesenswert?

Caveman schrieb:
> Einfach andersherum an die Sache herangehen:
> Nicht die Ausgangssignale überlagern, sondern die Koeffizienten
> überlagern.
> Man braucht nur EINEN 256 Tap FIR-Filter für alle 5 Bänder.
> Du hast ja 5 Satz Koeffizienten (je 256 Stück); die addiert man alle
> zusammen zu einem Satz:
> MyKoeffizient(i) = g1*LP1(i) + g2*Bp1(i) + g3*Bp2(i) + g4*Bp3(i) +
> g5*HP(i)
> Dabei ist "g" das jeweilige Gain für den Kanal

Hmm ... bist du sicher, dass das richtig ist? Nicht eher die 
Filterkernel gewichten und dann miteinander zu einem Kernel falten?

Aber das geht trotzdem nicht ... Es ist nicht wirklich ein Equalizer, 
weil ich die 5 Bänder für was anderes benötige. Die Frequenzen 
verstärken/abschwächen sind nur ein willkommendes Nebenprodukt.

Ich dachte, die Frage wäre einfacher, wenn ich nach einem Equalizer 
fragen würde, weil sowas wohl öfters implementiert wurde ...

Grüße
gastgast

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren