Ich brauche eine Art Frequenzweiche für einen AVR. Geht in die Richtung
Beitrag "Audio Equalizer"
Als einfachste Rechnung habe ich einen TP gebaut, der so funktioniert:
TPWert(t+1) = TPWert(t)*0,9 + Input(t)*0,1 was zu einem -6dB Verhalten
oberhalb der GF führt. Als Hochpassausgang nehme ich einfach den Rest,
also HPWert(t+1= = Input(t) - TPWert(t+1).
Frage 1: Ist das so ok, oder muss ich den TPWert(t) nehmen, um die
Differenz zu bilden?
Ich weiß, dass ich den HP auch anders, getrennt berechnen kann, muss
aber in dem Fall sicherstellen, dass zu jedem Zeitpunkt die Summe aus
beiden Werten wieder ein weißes Signal ergibt, so als wäre es
ungefiltert.
Frage 2: Kann ich das kaskadieren, also einfach zwei
hintereinanderschalten?
Wie muss ich die Dämpfung/Trennung einstellen? Kleiner, Grösser oder
genau gleich dem Wert im ersten Filter? Beim Probieren scheint es so zu
sein, dass der Knick beim gleichen Wert auch an derselben GF liegt und
ab dann die erwünschten 12dB auftreten.
Kann ich auch dann wieder einfach die Differenz zwischen dem Input und
dem zweifach gedämpften TP bilden?
Moin,
Rechenfreak schrieb:> Als einfachste Rechnung habe ich einen TP gebaut, der so funktioniert:> TPWert(t+1) = TPWert(t)*0,9 + Input(t)*0,1 was zu einem -6dB Verhalten> oberhalb der GF führt. Als Hochpassausgang nehme ich einfach den Rest,> also HPWert(t+1= = Input(t) - TPWert(t+1).
Hm - 0.9 und 0.1 sind so dezimal, mit 0.875 und 0.125 ging's sicher
schneller ;-)
> Frage 1: Ist das so ok, oder muss ich den TPWert(t) nehmen, um die> Differenz zu bilden?
So ausm Bauch raus koennt's schon passen, guck' einfach, ob wenn du in
den Apparat einen Dirac reingibst auch die Summe von TP und HP Antwort
einen Dirac ergeben.
> Ich weiß, dass ich den HP auch anders, getrennt berechnen kann, muss> aber in dem Fall sicherstellen, dass zu jedem Zeitpunkt die Summe aus> beiden Werten wieder ein weißes Signal ergibt, so als wäre es> ungefiltert.
Wenn du das so haben willst, dann passt das schon so.
> Frage 2: Kann ich das kaskadieren, also einfach zwei> hintereinanderschalten?
Ja kannst du schon machen, aber da kommt nix allzu dolles dabei raus. Du
kannst damit nur immer einen reellen Pol in deinem Filter kriegen,
kein kongungiert-komplexes Polpaar. Das brauchts aber bei allen
"vernuenftigen" Filterapproximationen mit Ordung >1.
> Kann ich auch dann wieder einfach die Differenz zwischen dem Input und> dem zweifach gedämpften TP bilden?
Ja.
Gruss
WK
Danke für die bisherigen Antworten.
Dergute W. schrieb:> damit nur immer einen reellen Pol in deinem Filter kriegen,> kein kongungiert-komplexes Polpaar.
Danke für diesen input. Dazu muss ich aber nochmals Literatur wälzen,
was das nochmals genau war. Ich frage dann später gfs. nochmals nach.
Christoph db1uq K. schrieb:> Zur Berechnung analoger Frequenzweichen habe ich hier mal Literatur> gepostet:> Beitrag "Re: Rechtecksignal in Tiefpassfilter"
Ok, aber das bezieht sich doch auf reelle Bauteile. Kriege ich das auch
in überschaubare SW hinein?
Um bei der Frequenzweiche einen Übergang zu erreichen, der möglichst
keinen Pegelsprung oder Phasenänderung hat, bietet sich ein
Linkwitz-Riley Crossover an. Digital lässt sich dieser mit 4 IIR
Butterworth Filter implementieren (-> LR4). Jeweils 2 hintereinander
geschaltete Filter werden als TP, 2 als HP verwendet.
Als Filter-Algorithmus sollte man die klassiscche Bi-Quad
Implementierung verwenden, für die Koeffizienten-Berechnung finde ich
dieses Excel-Sheet sehr praktisch:
https://www.minidsp.com/images/fbfiles/files/All_digital_coefs_v1-20101026.ziphttps://www.minidsp.com/applications/advanced-tools/advanced-biquad-programming
Rechenfreak schrieb:> Ok, aber das bezieht sich doch auf reelle Bauteile. Kriege ich das auch> in überschaubare SW hinein?
Du als Rechenfreak wirst da keine Probleme haben.
Gunar schrieb:> Du als Rechenfreak wirst da keine Probleme haben.
Danke für diesen hilfreichen Beitrag.
Dergute W. schrieb:> Wenn du das so haben willst, dann passt das schon so.
Das war der erste Denkansatz. Allerdings sehe ich, dass es bei
Rechtecken zu enormen Sprüngen kommt, weil der Tiefpassanteil in der
Phase wegläuft und das Abziehen zu einem gewaltigen Offset führt.
Joe F. schrieb:> Linkwitz-Riley Crossover an
Eigentlich wollte ich das möglichst einfach halten, wegen der
Rechenzeiten.
Würde denn dieses Filter das Problem der Phase beheben? D.h. kommt der
HP dann auch so raus, dass er phasenverschoben ist und ohne Offset kommt
- trotzdem aber die Summe perfekt passt?
Moin,
Rechenfreak schrieb:> Allerdings sehe ich, dass es bei> Rechtecken zu enormen Sprüngen kommt, weil der Tiefpassanteil in der> Phase wegläuft und das Abziehen zu einem gewaltigen Offset führt.
Da kann ich dir nicht folgen. Das klingt komisch. Was stellst du denn
auf dem Bild dar? Schraubst du da von links nach rechts auch an der
Grenzfrequenz?
Joe F. schrieb:> Um bei der Frequenzweiche einen Übergang zu erreichen, der möglichst> keinen Pegelsprung oder Phasenänderung hat, bietet sich ein> Linkwitz-Riley Crossover an.
Linkwitz-Riley TP/HP Kombis haben eine (kleine) Beule in der
Gruppenlaufzeit um die Grenzfrequenz herum. Daher ist die Summer der
(Dirac)Impulsantworten von HP und TP kein Dirac.
Nochdazu ist der Rechenaufwand fuer so ein "serioeses" Filter (aufm AVR)
deutlich hoeher.
Gruss
WK
Dergute W. schrieb:> Schraubst du da von links nach rechts auch an der> Grenzfrequenz?
Würde der Rechteck dann nicht an allen Ecken runder werden? Das sieht
sehr nach Lade- und Entladekurve aus, so als käme Kapazität hinzu.
Rechenfreak schrieb:> TPWert(t+1) = TPWert(t)*0,9 + Input(t)*0,1
Du rechnest aber hoffentlich nicht mit Floats?
Mit Int wäre es:
tpwert8 := tpwert8 - tpwert8 div 8 + input;
tpwert8 ist 8mal so groß wie der Eingangswert. Das ist nötig um
Summierung von Rundungsfehlern zu vermeiden. Natürlich muss der 8fache
Eingangsbereich in die Variable passen.
div 8 macht ein Shiftright, was wenige Takte dauert. Alles andere dauert
deutlich länger. Teiler muss unbedingt 2^n sein. Mit anderen Teilern
wird eine Software-Division aufgerufen, die ewig dauert.
Es gibt noch einen Rundungsfehler mit div 8, sind die Werte nur positiv
kann man das so vermeiden:
tpwert8 := input + tpwert8 - (tpwert8 + 4) div 8;
Karl K. schrieb:> Es gibt noch einen Rundungsfehler mit div 8, sind die Werte nur positiv> kann man das so vermeiden:>> tpwert8 := input + tpwert8 - (tpwert8 + 4) div 8;
Die Technik ist mir bekannt, aber es muesste auch für negative Werte
klappen. Ich runde meistens in einem Schritt und entscheide dann über
Addition und Subtraktion.
Dergute W. schrieb:> Schraubst du da von links nach rechts auch an der> Grenzfrequenz?
Ja sicher, dass ist ein konstantes Rechteck mit variabler Grenzfrequenz
und zeigt die Aufteilung in tiefe und hohe Frequenzen.
Im Prinzip ist das Ergebnis richtig, weil HP ja aus Eingang - TP
gebildet wird. Da aber der Eingang auf Phase 0 liegt und der TP
phasenverschoben ist kommt hintenraus sehr viel offset rein. Es wäre
wünschenswert, wenn der HP mitverzögert würde. Ich habe aber keinen
Schimmer wie man das macht und wie das geht.
Dergute W. schrieb:> Linkwitz-Riley TP/HP Kombis haben eine (kleine) Beule
Das hört sich aber so an, dass das geeigneter sein könnte. Der
Wiki-Artikel unterscheidet offenbar Butterworth und L-R-Filter und
zeigt, dass das L-R zweiter Ordnung diese Beule nicht haben soll. Oder
beträgt die nur nicht die in der blauen Kurve dargestellten 3dB?
https://de.wikipedia.org/wiki/Linkwitz-Riley-Filter
Auf der Seite Linkwitzlab wird in der Originalpublikation auch eine
flache Kurve als Summe aufgeführt. Die 180°Phasenverschiebung-Thematik
muss ich nochmals prüfen, aber das Filter käme mir schon entgegen.
Leider tue ich mich schwer die Formeln in eine Vorschrift in den
Zeitbereich zu übersetzen.
Hier wird das auch angesprochen:
Beitrag "Linkwitz-Riley Filter bauen"
Und vor allem hier:
Beitrag "1 - Tiefpass = Hochpass"
Bringt mich aber auch noch nicht direkt auf die Formeln. Was ich den
Grafiken entnehme ist, dass einem ein TP+HP und dann ein HP+TP
aufgezogen wird. Aus der NT kann ich mich noch dunkel an solche Dinge
wie Phasenkompensation erinnern.
Wie auch immer:
In diesem Bericht wird auf die Konstellation der Lautsprecher abgehoben.
Dabei kommt eine anzuwendende Zeitverzögerung vor:
https://www.rane.com/note160.html
Versteht das jemand wie man das verzögern muss?
Moin,
Rechenfreak schrieb:> Ja sicher, dass ist ein konstantes Rechteck mit variabler Grenzfrequenz> und zeigt die Aufteilung in tiefe und hohe Frequenzen.>> Im Prinzip ist das Ergebnis richtig, weil HP ja aus Eingang - TP> gebildet wird.
Ja, so seh' ich das dann auch.
Rechenfreak schrieb:> Da aber der Eingang auf Phase 0 liegt und der TP> phasenverschoben ist kommt hintenraus sehr viel offset rein. Es wäre> wünschenswert, wenn der HP mitverzögert würde. Ich habe aber keinen> Schimmer wie man das macht und wie das geht.
Naja dein Tiefpass hat halt auch alles andere als eine konstante
Gruppenlaufzeit. Die Kroete musst du um der Einfachheit halber
schlucken.
Im Durchlass ist die so von 9..0 samples.
Du kannst dein Eingangssignal mal so um 4..5 Samples verzoegern, bevor
du von ihm den TP abziehst, um den HP zu erhalten.
Die Beule in der Gruppenlaufzeit bei den LR-Filtern sieht man nirgends
auf den Bildern. Im engl. Wikipediaartikel kann man's lesen, wenn man
drauf achtet:
> However, crossovers of higher order than 4th may have less usability> due to their complexity and increasing peak in group delay around> crossover frequency.
Aber ist auch klar, denn LR-Filter bestehen aus kaskadierten
Butterworthfiltern. Und Butterworth hat eben eine kleine GLZ-Beule,
sonst waer's ein Bessel und kein Butterworth...
Rechenfreak schrieb:> Das hört sich aber so an, dass das geeigneter sein könnte.
Das musst du wissen, ob dir das eher taugt. Und ob du's schnell genug
rechnen kannst.
Gustl B. schrieb:> Würde der Rechteck dann nicht an allen Ecken runder werden?
Nein.
> Das sieht> sehr nach Lade- und Entladekurve aus, so als käme Kapazität hinzu.
Jepp. Das gehoert dann genauso.
Gruss
WK
Moin,
Naja, ob nach einer Linkwitz-Riley HP/TP-Kombi das aufgesplittete
Rechtecksignal jetzt "schoener" aussieht, als nach der hier
urspruenglich verwendeten Methode? Mehr CPU_Bumms/Sample braucht man auf
jeden Fall...
Gruss
WK
Dergute W. schrieb:> Naja, ob nach einer Linkwitz-Riley HP/TP-Kombi das aufgesplittete> Rechtecksignal jetzt "schoener" aussieht, als nach der hier> urspruenglich verwendeten Methode?
Musst Du halt ein Filter dahinterschalten. ;-)
Dergute W. schrieb:> ob nach einer Linkwitz-Riley HP/TP-Kombi das aufgesplittete> Rechtecksignal jetzt "schoener" aussieht, als nach der hier> urspruenglich verwendeten Methode?
Ich kann irgendwie nicht erkennen, was dein Diagramm darstellt.
Und auch weiss ich nicht, was an einem gefilterten Rechtecksignal als
"schön" durchgeht und was nicht.
Filter beurteile ich in der Regel mit Hilfe von Sinus-Sweeps und den
daraus resultierenden Kurven (Amplitude, Phase).
Moin,
Joe F. schrieb:> Ich kann irgendwie nicht erkennen, was dein Diagramm darstellt.
Das stellt jeweils den zeitlichen Verlauf des Ausgangssignal nach einem
Hoch- und einem Tiefpass dar, wenn man einen nullsymmetrischen
Rechteckburst mit Grundfrequenz in der Naehe der Uebernahmefrequenz der
Filter reinschickt.
> Und auch weiss ich nicht, was an einem gefilterten Rechtecksignal als> "schön" durchgeht und was nicht.> Filter beurteile ich in der Regel mit Hilfe von Sinus-Sweeps und den> daraus resultierenden Kurven (Amplitude, Phase).
Das weiss ich eben auch nicht. Aber das war wohl ein Grund, diesen
Thread zu eroeffnen.
Und je nachdem was man vorhat, kann ein Filter ruhig auch von aus der
Filterantwort im Zeitbereich her definiert werden.
Weil wir das aber nicht wissen, und weil Linkwitz-Riley hier genannt
wurde und ich heute frueh aus dem Fenster schaute und mir dachte: "Was
fuer ein wunderschoener Herbsttag, da muss ich doch gleich mal schauen,
wie so eine Filterkombi auf einen Rechteckburst reagiert", schrub ich
meinen vorhergehenden Post in diesem Thread ;-)
Gruss
WK
Joe F. schrieb:> Filter beurteile ich in der Regel mit Hilfe von Sinus-Sweeps und den> daraus resultierenden Kurven
Wenn ich eine PWM filtern will interessiert mich das schon, wie der
Filter auf einen steilen Anstieg reagiert, und Linkwitz-Riley scheint
hier ziemlich abzukacken. Etwas, das man in einem Sinus-Sweep
anscheinend nicht sieht.
Karl K. schrieb:> und Linkwitz-Riley scheint> hier ziemlich abzukacken.
Das kann man von Biquads wohl so pauschal nicht sagen...
Ursprünglich war von "Audio" und "Frequenzweiche" die Rede, und dafür
sind die wunderbar geeignet.
Wozu willst du denn eine PWM durch eine Frequenzweiche schicken?
Tiefpassfiltern (mit höherer Ordnung) würde ich ja noch verstehen, aber
was interessiert einen dabei der HP Anteil?
Joachim B. schrieb:> die Frage ist berechtigt aber immer noch unbeantwortet!
Nein, Integer, entsprechend hoch skaliert. Das sollte kein Problem sein,
oder?
Joe F. schrieb:> Rechenfreak schrieb:>> Leider tue ich mich schwer die Formeln in eine Vorschrift in den>> Zeitbereich zu übersetzen.https://ccrma.stanford.edu/~jos/filters/Biquad_Software
D.h. der biquad ist der Linkwitz-Riley? - bzw. der LR gehört zu den
biquads?
Ich habe inzwischen weitergelesen und sehe sich widersprechende
Darstellungen. Ich hatte oben schon gemutmaßt, dass das Filter so
aufgebaut sein müsse, dass jeweils ein HP und ein LP verschaltet sind,
jedenfalls bei dem "2. Ordnung".
HighPath = HPF + LPF und LowPath = LPF + HPF.
Das erkenne ich an der biquad-Struktur noch nicht wieder. Das ist ja nur
ein Pfad (?).
Die Struktur kenne ich gleichwohl, ich nehme an dass ich die
Koeffizienten aus dem Kochbuch von RBJ entnehmen kann. Dazu habe ich auf
dessen DSP-Seite einiges gefunden.
Demnach müsste ich den biquad 4x nehmen und jeweile 2 HP und 2 TP
aufbauen, wobei ich annehme, dass die HPs und TPs jeweils identisch
sind?
Joe F. schrieb:> Das kann man von Biquads wohl so pauschal nicht sagen...> Ursprünglich war von "Audio" und "Frequenzweiche" die Rede, und dafür> sind die wunderbar geeignet.
Ja, das ist die Anwendung.
> Wozu willst du denn eine PWM durch eine Frequenzweiche schicken?
Weil die im Rahmen der Signalverarbeitung durchaus vorkommen könnte.
> Tiefpassfiltern (mit höherer Ordnung) würde ich ja noch verstehen, aber> was interessiert einen dabei der HP Anteil?
Weil das auf dem HighPath herauskommt und somit dem Verstärker des HT
zugeführt wird.
Um das technisch sinnvoll zu nutzen muss natürlich noch eine
Bandbegrenzung des Highpath rein, als z.B. 25-30kHz. Die Frage ist, ob
man das nicht VOR das Trennfilter einbaut, wenn das Filter damit
Probleme hat, oder ob es egal ist, weil hinten dasselbe rauskommt.
Phreak schrieb:> Das erkenne ich an der biquad-Struktur noch nicht wieder. Das ist ja nur> ein Pfad
Ein Biquad stellt dabei nur einen 2nd-order Filter dar. Du brauchst also
insgesamt 4 Biquads (2xHP, 2xTP). Wenn du den Multiplikator für Gain
weglässt kommst du so auf 4x4=16 Multiplikationen insgesamt.
Die LR4 Struktur sieht dann so aus:
1
-> HP1 -> HP2 -> OUTPUT_HP
2
/
3
INPUT -o
4
\
5
-> LP1 -> LP2 -> OUTPUT_LP
Aus irgendeinem Grund, den ich gerade nicht finde, habe ich
unterschiedliche Q's für die jeweils hintereinander liegenden Filter
verwendet (0.5411 und 1.3068). Fc ist für alle 4 Filter gleich.
Habs gerade noch mal ausprobiert. Die Qs 0.5411 und 1.3068 waren für
einen Crossover mit jeweils 4 Biquads hintereinander (LR8).
LR4 kann man ganz prima mit 2 jeweils identischen Biquads mit Q=0.70711
bauen.
Das Produkt aller Qs (für einen Pfad) muss insgesamt 0.5 ergeben, damit
der Frequenzgang der Summe flach wird.
Hier ein Beispiel mit Fc=200 Hz.
LP (2x):
a1: 1.962980251780930
a2: -0.963653146670958
b0: 0.000168223722508
b1: 0.000336447445016
b2: 0.000168223722508
HP (2x):
a1: 1.962980251780930
a2: -0.963653146670958
b0: 0.981658349612971
b1: -1.963316699225940
b2: 0.981658349612971
a0 ist jeweils 1.0
Die Koeffizienten sind im "MiniDSP" Format, evtl. muss für andere BiQuad
Implementierungen bei a1 und a2 das Vorzeichen invertiert werden.
Egal schrieb:> Auf YouTube gibt es ein interessantes Video
Ich will ja nicht meckern, aber ist es wirklich hilfreich 30 Minuten
lang jemandem mit sehr anstrengendem Akzent auf youtube zuzuhören, nur
um zu erfahren, dass man Audioprocessing mit dem STM32 machen kann?
Die Musik am Ende des Videos ist ja sehr hübsch anzuhören, aber
eigentlich möchte man lieber Messergebnisse sehen... ;-)
Zum Glück gibts da ja noch den Link zu seinem Git-Repository, und da
entdeckt man dann, dass die Filterparameter leider sehr ungeeignet für
einen Crossover sind.
Der Crossoverbereich ist "dank" niedriger Filterordnung (nur je 1 Biquad
für HP und TP) sehr groß.
Mit Q=0.7 gibt es an der Crossoverfrequenz eine hässliche +3dB Delle.
Und nicht erwähnt wird, dass entweder HP oder TP um 180° in der Phase
gedreht werden müssen.
Nicht wundern, bei meiner Grafik ist der Crossoverpunkt bei 500 Hz, das
liegt daran, dass mein Sweep mit 48KHz läuft und die Koeffizienten in
dem STM32 Demo-Programm für 96 KHz sind. Das Problem dürfte aber
trotzdem sichtbar sein.
Joe F. schrieb:> Ich will ja nicht meckern, aber ist es wirklich hilfreich 30 Minuten> lang jemandem mit sehr anstrengendem Akzent
Das ist auch mein Eindruck mit den ganzen Möchtegerns auf dieser
Plattform. Drehen ein Video zur Selbstdarstellung und ommeln minutenlang
herum, für wenig Information. Da fragt man lieber in einem Fachforum.
Danke für deine Bemühungen. Bringt mich weiter!
Karl K. schrieb:> tpwert8 ist 8mal so groß wie der Eingangswert. Das ist nötig um> Summierung von Rundungsfehlern zu vermeiden. Natürlich muss der 8fache> Eingangsbereich in die Variable passen.
Wieso ausgerechnet 8?
Jürgen S. schrieb:> Karl K. schrieb:>> tpwert8 := input + tpwert8 - (tpwert8 + 4) div 8;> Das gibt aber sattes digitales Rauschen!
Wie ließe es sich vermeiden? Größere Vektorbreite?
Mark schrieb:>> Das gibt aber sattes digitales Rauschen!> Wie ließe es sich vermeiden?
Richtig(er) runden. So ist es immer die 0,5. Das geht schlauer und
braucht je nach Abtastung auch weniger Bits. D.h. man kann damit auch
die Auflösung im letzten Bit genauer hinbekommen. Hängt vom akzeptablen
Rauschspektrum und dessen Lage ab.
> Größere Vektorbreite?
Die hilft unabhängig davon ebenfalls und je einfacher / schlechter man
rundet, desto mehr Zusatzbits braucht es.
Rechenfreak schrieb:> Kann ich auch dann wieder einfach die Differenz zwischen dem Input und> dem zweifach gedämpften TP bilden?
Ja sicher, ergibt aber eine um so größere Phasenverschiebung. Dieser
einfache Filter hat eine zunehmende Phasenverschiebung mit der Frequenz.
Joe F. schrieb:> unterschiedliche Q's für die jeweils hintereinander liegenden Filter> verwendet (0.5411 und 1.3068). Fc ist für alle 4 Filter gleich.
Kann es sein, dass die LP das größere Q haben?
Vielleicht dazu, damit sie in Relation schmalbandiger sind, aber real
dieselbe Bandbreite aufweisen wie die LP mit geringerem Q?