N'abend! Aktuell versuche ich mich gerade etwas mit FIR-Filtern. Dabei nutze ich den FilterDesigner der bei der MATLAB DSP Toolbox beiliegt. Ich habe gelesen, dass -60dB als Stopband-Unterdrückung schon sehr gut ist und sich in Hardware nur mit großem Aufwand erreichen lässt. Bei einem Tiefpass mit den Durchlass- und Sperrfrequenzen von 2,7k und 3k und einer Abtastrate von 48k errechnet mir Matlab einen Filter mit mehr als 300 Taps. Dabei hatte mein Professor vor ein paar Wochen noch erwähnt, dass oft der Fehler gemacht wird mit zu optimistischen Angaben zu arbeiten und so auf paar hundert oder gar tausend Taps kommt. Diese sehen zwar schön aus, lassen sich dann aber auf Mikrocontrollern eher weniger realisieren (wenn es um die Verarbeitungsgeschwindigkeit geht). Selbst bei einer Unterdrückung von -30dB komme ich aber noch auf knapp 200 Taps. Ich frage mich, ob ich etwas grundsätzlich falsch mache? Als Design Method habe ich Equiripple ausgewählt bzw. es war schon vorausgewählt. Die anderen machen es aber auch nicht besser.
Naja 300Hz von Pass zu Stop sind halt schon eine Hausnummer das sind ja ca. 90db/dec wenn du da 30db ansetzt.
Eigentlich ist es einfach: Randbedingungen erfassen und in den Designprozess einfließen lassen. Randbedingungen: - Designzeit - Modularität - Erweiterbarkeit - Flexbilität - Rechenzeit - Rechengeschwindigkeit - Echtzeitfähigkeit - Echtzeitänderungungsfähigkeit - Resourcenverbrauch - Stromverbrauch Siehe auch Beitrag "Re: Vivado und MATLAB" Abschnitt "Praktisches Ausprobieren"
Moin, So'n Filterdesign mit ner Toolbox ist halt eine Holzhammermethode. Die geht schon immer irgendwie, ist aber nicht immer "schoen". Ich wuerd's so aus'm Handgelenk raus mit 2 Teilfiltern loesen. Einem Filter F1, das durch Einfuegen von diversen Nullen einen periodischen Frequenzgang, aber dadurch auch steile Flanken hat, und einem zweiten Filter, was dann enspannter ist, und nur Sperrdaempfung "weiter hinten" machen muss. Die 20 als Filterordnung ist einfach nur mal ein Anfangswert. Also so z.B.:
f1=(firls(20,[0 0.1125*4 0.125*4 1],[1 1 0 0])); uf1=upsample(f1,4,0); f2=(firls(20,[0 0.1125 0.5-0.1125 1],[1 1 0 0])); freqz(conv(uf1,f2)); |
Das ganze wird dann ein Filter, was 40MACs/cycle braucht, und da wird man dann wahrscheinlich auch noch was mauscheln koennen. Vielleicht geht's mit 3 Teilfiltern noch schoener, aber das ist dann halt etwas experimentieren...Also das Gegenteil von Toolbox. Gruss WK
Wenn du den Übergang weniger steil machst (2700Hz,3300Hz), dann benötigst du nur die Hälfte der Koeffizienten. Wenn man statt 48000Hz mit 24000Hz arbeitet, dann halbiert sich auch die Zahl der Koeffizienten. Das ginge mit einem Multiratefilteransatz. https://de.mathworks.com/help/dsp/ug/multirate-filters.html Beachte auch den Ripple im Durchlassbereich. Da möchte man nicht gerade 1dB haben. 1dB = 10^(1/20) entspricht 12% ripple im Durchlassbereich. Bei Audio ist das vermutlich egal, bei einem Messgerät eher nicht.
:
Bearbeitet durch User
Helmut S. schrieb: > Beachte auch den Ripple im Durchlassbereich. Da möchte man nicht gerade > 1dB haben. 1dB = 10^(1/20) entspricht 12% ripple im Durchlassbereich. > Bei Audio ist das vermutlich egal, bei einem Messgerät eher nicht. Das ist auch beim Audio nicht wirklich egal :-) Es ist nur oft nicht anders zu machen. Mikrofon- und Lautsprecherkennlinien müssen beispielsweise sehr aufwändig hingebogen werden, um 1dB Abweichung zu unterschreiten.