mikrocontroller.net

Forum: Digitale Signalverarbeitung / DSP Hochpass und Tiefpasskoeffizienten bei FIR


Autor: Tom W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habe mir mittels MATLAB die Koeffizienten für einen FIR-Hochpass und 
Tiefpass ausgeben lassen. Erstaunlich oder nicht, sind sie nicht 
komplementär!

Ich hätte erwartet, dass die HP-Koeffs einfach der "Rest" des Tiefpasses 
sind, man also ein Signal, dass von 0 gegen fg geht mit dem von fg gegen 
unendlich wieder zusammenmischen kann und bekommt 1!

Warum ist das so? Kann es sein, dass man da irgendwie auf den ripple 
optimiert und andere Optima findet?

Ich brauche nämlich einen Filter, der sich so verhält, wie beschrieben, 
wenn also beider Pfade auf 100% stehen, soll der Filter unsichtbar 
werden.

Autor: Tom W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Es geht auch wirklich um die Koeffizienten und nicht um noch darin 
enthaltene Glättung oder Fensterung. Fenster hätte ich extra, wenn 
benötigt.

Der "FIT-Filter-Designer" verhält sich ähnlich. auch da sind die 
Ergebnisse nicht komplementär.

Autor: Dergute Weka (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Also willst du einen Tiefpass und einen Hochpass, die - wenn parallel 
geschaltet sind - sich irgendwie wieder aufheben. OK - aufheben geht 
nicht ganz, weil die Zeitverzoegerung bleiben wird, aber der 
Betragsfrequenzgang kann wieder ueberall konstant sein.
Dann lass dir von Matlab halt nur den Tiefpass berechnen und den 
Hochpass berechnest du dir selbst, indem du den Tiefpass von einem 
entsprechend verschobenen Dirac abziehst. Dann ergeben TP+HP wieder 
einen verschobenen Dirac - was du ja haben willst.
Beispiel: Dein TP ist sowas hier: [0.25, 0.5, 0.25]
das ziehst du von [0 1 0] ab; das ergibt also [-0.25, 0.5, -0.25] und 
verkaufst es dir als HP.

Gruss
WK

Autor: Jan K. (jan_k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie willst du die Koeffizienten denn mischen?

Das sind halt Koeffizienten einer Differential bzw. 
Differenzengleichung. Das ist ein dynamisches System und dessen 
Verhalten ist unterschiedlich bei unterschiedlichen Koeffizienten ;-)

Autor: W.S. (Gast)
Datum:

Bewertung
2 lesenswert
nicht lesenswert
Thomas W. schrieb:
> Habe mir mittels MATLAB die Koeffizienten für einen FIR-Hochpass und
> Tiefpass ausgeben lassen. Erstaunlich oder nicht, sind sie nicht
> komplementär!

Du machst einen Tiefpaß zu einem Hochpaß, indem du - mal ganz salopp 
gesagt - alle Koeffizienten negierst und dann 1.0 auf den mittleren 
Koeffizienten addierst. Das ist dann Weka's Dirac.

Das gilt nur für Filter mit ungerader Länge. Bei gerader Tapanzahl 
müßtest du m.E. auf die beiden mittleren jeweils 0.5 addieren.

Ja, wenn du einen derartigen TP und den so daraus hergestellten HP 
addierst, kommt nur 1.0 in der Mitte der Taps bei heraus, alles andere 
ist 0.

Aber wie kommst du zu " nichtkomplementär"? Aus den Ergebnissen eines 
Filterprogrammes, dessen interner Rechengang nicht offengelegt ist? Wer 
weiß, was dessen Autoren sich dabei gedacht haben. Vielleicht den 3 dB 
Punkt, vielleicht einen anderen?

W.S.

Autor: Tom W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe es jetzt so gemacht, wie ursprünglich mal angedacht, nämlich 
einfach die Koeffizienten von 1 abgezogen. Es bleibt jetzt das Thema der 
Fensterung. Wie bringt man die Daten wieder zusammen, wenn gefenstert 
wurde?

Wenn Ich z.B: einen EQ baue, dann muss in der Stellung 1:1:1 für ale 
drei Bänder wieder eine 1 rauskommen. Wäre es richtig, das Fenster nur 
zum Interpretieren der Lautstärke zu benutzen und beim Mischen ohne 
Fenster zu arbeiten?

Autor: Dergute Weka (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,


W.S. schrieb:
> Das gilt nur für Filter mit ungerader Länge. Bei gerader Tapanzahl
> müßtest du m.E. auf die beiden mittleren jeweils 0.5 addieren.

Ja, fast. Eigentlich muesste dann ein um u=(x+0.5) verschobener sinc(u) 
statt dem Einheitsstoss hergenommen werden. Weil der aber unhandlich 
lang ist, muesste man ihn abschneiden und fenstern und's waer immer noch 
problematisch. Besser Filter mit ungerader Anzahl Koeffizienten nehmen 
und sich Aerger ersparen.


Thomas W. schrieb:
> Ich habe es jetzt so gemacht, wie ursprünglich mal angedacht,
> nämlich
> einfach die Koeffizienten von 1 abgezogen. Es bleibt jetzt das Thema der
> Fensterung. Wie bringt man die Daten wieder zusammen, wenn gefenstert
> wurde?

Erst Tiefpasskoeffizienten berechnen, von mir aus incl. Fensterung. Das 
ergibt den Tiefpass (Ach).

Diese dann von dem verschobenen Einheitsstoss abziehen; das ergibt den 
Hochpass.

Wenn man die Daten wieder zusammenbringen will: Die Samples aus Tief- 
und Hochpass einfach wieder addieren.



> Wenn Ich z.B: einen EQ baue, dann muss in der Stellung 1:1:1 für ale
> drei Bänder wieder eine 1 rauskommen. Wäre es richtig, das Fenster nur
> zum Interpretieren der Lautstärke zu benutzen und beim Mischen ohne
> Fenster zu arbeiten?

Hae?

Fuer so einen 3-Band EQ wuerd' ich auch erst TP (mit Grenzfrequenz A), 
dann HP (mit Grenzfrequenz B)designen; beide als FIR mit gleicher 
Laenge. Dann beide aufaddieren; von einem verschobenen Einheitsstoss 
abziehen; und das dann als "Bandpass" verkaufen.
Die 3 Ausgangssignale dieser 3 Filter dann gewichtet wieder 
aufsummieren; die Gewichtung stellt dann halt die Klangregelung dar.




Gruss
WK

Autor: Dergute Weka (derguteweka)
Datum:
Angehängte Dateien:
  • preview image for eq.png
    eq.png
    70,1 KB, 106 Downloads

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Beispiel fuer Berechnung der Filter (Koeffizientenrundung auf 8bit) mit 
Octave:
lp=(round(256*firls(30,[0 1/16 3/16 1],[ 1 1 0 0]))); %lowpass
hp=(round(256*firls(30,[0 7/16 9/16 1],[0 0 1 1]))); %hipass
es=zeros(31,1);es(16)=256; %shifted dirac
bp=es-lp-hp; %bandpass
clf;
hold on;
plot(20*log10(abs(freqz(bp/256))),"r");
plot(20*log10(abs(freqz(lp/256))),"g");
plot(20*log10(abs(freqz(hp/256))),"b");
plot(20*log10(abs(freqz((lp/4+bp/2+hp*2)/256))),"c"); %example setting low=-12dB, mid=-6dB, hi+6dB

Vorteil dieser so konstruierten Filter: Egal, wie der Frequenzgang dann 
tatsaechlich eingestellt wird - die Gruppenlaufzeit bleibt immer ueber 
den gesamten Bereich konstant.



Gruss
WK

Autor: Carlo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Eine Frage: Die Kurzen sehen für mich grundsätzlich ok aus. Aber der 
Überschnitt der jeweiligen Kurven liegt bei -6dB. Sollten das nicht -3dB 
sein?

Dann sehe Ich , dass der Verlauf unterhalb von -30dB ziemlich be....ssen 
aussieht. Wie kriegt man das in den Griff? Mehr Filterbreite nehme ich 
an?

Was bräuchte es für sagen wir -60dB?

Autor: Dergute Weka (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Carlo schrieb:
> Eine Frage: Die Kurzen sehen für mich grundsätzlich ok aus. Aber
> der
> Überschnitt der jeweiligen Kurven liegt bei -6dB. Sollten das nicht -3dB
> sein?

Nee, die Ausgangssignale der Filter sollen ja wieder aufsummiert werden 
und dann an den jeweiligen Grenzfrequenzen keine Hubbel kriegen.
Wenn das Signal dann ausm Tiefpass mit -6dB rauskommt und das Signal 
ausm Bandpass auch mit -6dB (=0.5) und ich addiere beide auf, bin ich 
wieder bei genau 0dB - waeren es jeweils nur -3dB (=0.707) kaeme in 
Summe +3dB raus. Ist so aehnlich wie bei Linkwitz-Riley Filtern.

> Dann sehe Ich , dass der Verlauf unterhalb von -30dB ziemlich be....ssen
> aussieht. Wie kriegt man das in den Griff? Mehr Filterbreite nehme ich
> an?
>
> Was bräuchte es für sagen wir -60dB?
Das kommt daher, weil ich - einer spontanen "Eingebung" folgend - die 
Filterkoeffizienten alle auf 8bit Aufloesung runde. Wenn du da mit 
hoeherer Aufloesung arbeitest...
Und die Filter kann man natuerlich auch laenger machen oder die 
Filterflanken breiter - dann klappts auch mit -60dB.

Bloss fuer den 3-Band-Klangregelbetrieb muss das Filter garnicht so 
"gut" sein - ueblicherweise gibts da ja eher nur so +-12...+-18dB 
Einstellumfang.

Gruss
WK

Autor: Tom W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich brauche nicht mal 18dB. Sind eher nur 6dB. Sollte aber schon genau 
sein. Ich würde dann auch schon 16 Bit spendieren für die Koeffizienten.

Die Zwischenfrage finde ich aber schon interessant: wie es ausschaut, 
nimmt z.B. der Bassfilter durchaus viele Höhen mit. Das darf auf keinen 
Fall sein. Basslautsprecher vertragen keine Höhen.

Autor: Dergute Weka (derguteweka)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Ja - aeh - ich weiss nicht so recht... Das Dingens von mir ist 
hauptsaechlich als Beispiel gedacht, wie man sowas loesen koennte. Das 
muss man nicht exakt so machen, da kann man auch komplett andere Filter 
hernehmen, andere Frequenzen, genauere Koeffizienten, etc. Deshalb hab' 
ich ja den Octavecode dazugeschrieben, damit jeder damit experimentieren 
kann.
Hier ein Bild, wo die Filterkoeffizienten 16bit genau sind und die 
Filter auch eine um je 1/8 verbreiterte Flanke haben - aber noch die 
selbe Anzahl Koeffizienten wie vorher.

Thomas W. schrieb:
> wie es ausschaut,
> nimmt z.B. der Bassfilter durchaus viele Höhen mit. Das darf auf keinen
> Fall sein. Basslautsprecher vertragen keine Höhen.

Hm? Wo'n?
Zur Erlaeuterung (ich bezieh' mich ab jetzt auf's obere Bild, mit den 
8bit Koeffizenten, also nicht das Bild an diesem Post):

Das gruene ist der Tiefpass. Der hat dann von mir aus - wenn er eben nur 
mit 8bit breiten Koeffizienten berechnet wird, bei einer normierten 
Frequenz von vielleicht 310/512 - das wuerde dann bei 48kHz 
Samplingfrequenz einer Frequenz von 14.53kHz entsprechen, seine 
"schlechteste" Sperrdaempfung von ca. 36dB. Das heisst dann: Haette ich 
eine Endstufe mit 4000W Leistung und ich wuerde einen Tieftoener ueber 
so ein Filter anschliessen, dann bekaeme der bei 14.53kHz 1W (i.w. Ein 
ganzes Watt) faelschlicherweise aus dem Filter ab.
Da das ganze Dingens aber doch als Klangregler laufen soll, wird doch zu 
dem Ausgang des Tiefpasses der andere Kram eh wieder dazuaddiert - mit 
dem jetzt geforderten  +/- 6dB Einstellbereich - d.h. die Leistung bei 
14.53kHz ist dann einstellbar zwischen 2000W und 8000W. Wen kratzt da 
das eine popelige Watt, das der olle Tiefpass auch nur deswegen 
durchlaesst, weil er so simpel und ungenau gestrickt ist, dass das alles 
wahrscheinlich sogar auf einem AVR laufen wuerde ;-) ?

Gruss
WK

Autor: Dergute Weka (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Dergute W. schrieb:
> - d.h. die Leistung bei
> 14.53kHz ist dann einstellbar zwischen 2000W und 8000W.

Huups - Fehler gemacht; es muss heissen:
zwischen 1000W und 16000W.

Gruss
WK

Autor: Carlo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dergute W. schrieb:
> Nee, die Ausgangssignale der Filter sollen ja wieder aufsummiert werden
> und dann an den jeweiligen Grenzfrequenzen keine Hubbel kriegen.
Das Prinzip ist klar. Nur fehlt mir manchmal der Blick, wann man mit 6dB 
arbeiten muss:

Log2 (0,5) ist ja -0,3 und in Dezi sind das 3dB.

Irgendwie steckt hier aber wieder die Leistung und damit 20*log(x) drin, 
nehme ich an. Das war, weil es Spannungen waren und die Leistung mit dem 
Quadrat ging, oder?

Warum nimmt man dann bei Filtern die 3dB als Eckfrequenz?

Autor: Jan K. (jan_k)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei -3 dB halbiert sich die Leistung oder die Amplitude sinkt auf etwa 
70 %. Kann man so berechnen: 10*log10(0.5) ist ca -3 dB. Das ist die 
Definition für die Leistung. Für Amplitude nimmst du den Faktor 20 statt 
10. Anders herum ist 10^((-3 dB)/20) = 0.7079, also die 70 %

Du brauchst 6 dB weil du Amplituden anguckst und eben die Hälfte davon 
haben möchtest.

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Carlo schrieb:
> Warum nimmt man dann bei Filtern die 3dB als Eckfrequenz?

Bin nicht sicher, aber aber 6 dB gelten natürlich nur, wenn die beiden 
zu addirenden Signale gleiche Amplitude und keine Phasenverschiebung 
haben. Ich nehme aber sn, dass an der Grenzfrequenz Hoch- und Tiefpass 
auch noch phasenverschobene Signale liefern und somit komplex addiert 
werden muss. Dann braucht man natürlich mehr Amplitude.

Gerhard

Autor: Carlo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jan K. schrieb:
> Bei -3 dB halbiert sich die Leistung oder die Amplitude sinkt auf etwa
> 70 %. Kann man so berechnen: 10*log10(0.5) ist ca -3 dB. Das ist die
> Definition für die Leistung. Für Amplitude nimmst du den Faktor 20 statt
> 10. Anders herum ist 10^((-3 dB)/20) = 0.7079, also die 70 %
>
> Du brauchst 6 dB weil du Amplituden anguckst und eben die Hälfte davon
> haben möchtest.

ok, stimmt, die Amplituden müssen sich zu 1 ergänzen.

Aber: Die Leistung geht mit Uhoch2. In dem Punkt, in dem die Spannung 
auf die Hälfte abgesunken ist, also in diesem Fall 6dB, betrüge die 
Leistung nur noch ein Viertel.

Nimmt man dieselbe Leistung des anderen Signals hinzu, habe ich 
rechnerisch 2x 1/4 = die halbe Leistung. Das ist aber nicht so, oder?

Wo ist der Denkfehler?

Autor: Dergute Weka (derguteweka)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Moin,

Carlo schrieb:
> Warum nimmt man dann bei Filtern die 3dB als Eckfrequenz?

Das tut man halt dann, wenns grad' passt. Und manchmal passen halt 6dB 
bei der Eckfrequenz besser. Daher Obacht geben bei Grenzfrequenzangaben 
von Filtern. 3dB sind nicht in Stein gemeisselt.

Gerhard schrieb:
> Ich nehme aber sn, dass an der Grenzfrequenz Hoch- und Tiefpass
> auch noch phasenverschobene Signale liefern und somit komplex addiert
> werden muss.

Allgemein ist das so, aber speziell bei dieser Kombi von TP, HP und 
daraus abgelittenem BP ist gerade der Witz, dass das da mit den 
Phasenverschiebungen, etc. wunderbar hinhaut. Die 3 Filter haben immer 
exakt die gleiche Gruppenlaufzeit. Da kann man dann prima solche Faxen 
machen. Achtet man bei den verschiedenen Filter nicht auf sowas, sind 
Loecher im Frequenzgang fast schon vorprogrammiert.

Carlo schrieb:
> Nimmt man dieselbe Leistung des anderen Signals hinzu, habe ich
> rechnerisch 2x 1/4 = die halbe Leistung. Das ist aber nicht so, oder?

Ja, das ist so aehnlich, wie wenn du 2 Wechselspannungsquellen hast, 
meinetwegen jede mit 1Veff. Jede davon schliesst du an jeweils einen 
1Ohm Widerstand. Dann gibts 2W Heizleistung. Schaltest du jetzt beide 
Spannungsquellen in Reihe und schliesst beide Widerstaende in Reihe an, 
wirds spannend:
Allgemein ist's dann auch so, dass dann 2W umgesetzt werden (Auch wenns 
erst keiner wahrhaben will). Sonderfall ist aber, wenn beide 
Wechelspannungsquellen frequenzmaessig irgendwie korreliert sind. Dann 
kann die Gesamtleistung irgendwo zwischen 0..4W liegen...kommt halt auf 
die Phasenlage der Quellen zueinander an.

Da hier aber die Ausgangssignale aus TP,HP und BP aus dem selben 
Eingangssignal stammen, sind die korreliert und wegen den gleichen 
Gruppenlaufzeiten wird die Addition auch wieder schoen simpel. Daher 6dB 
statt 3dB ;-)

Gruss
WK

Autor: Tom W. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dergute W. schrieb:
> Das gruene ist der Tiefpass. Der hat dann von mir aus - wenn er eben nur
> mit 8bit breiten Koeffizienten berechnet wird, bei einer normierten
> Frequenz von vielleicht 310/512 - das wuerde dann bei 48kHz
> Samplingfrequenz einer Frequenz von 14.53kHz entsprechen, seine
> "schlechteste" Sperrdaempfung von ca. 36dB. Das heisst dann: Haette ich
> eine Endstufe mit 4000W Leistung und ich wuerde einen Tieftoener ueber
> so ein Filter anschliessen, dann bekaeme der bei 14.53kHz 1W (i.w. Ein
> ganzes Watt) faelschlicherweise aus dem Filter ab.

Wenn das angesteuerte Signal glatt ist, ja - wenn der Pegel der hohen 
Prequenzen aber sehr hoch ist im Vergleich zum Bass, sieht das anders 
aus. Trotzdem danke für das Beispiel. Quantitativ scheint es also kein 
Problem zu sein.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.