Forum: Digitale Signalverarbeitung / DSP / Machine Learning Graphic EQ Algorithmus gesucht


von Joe F. (easylife)


Lesenswert?

Hat jemand nen Tip für gute Algorithmen bzw. Literatur für einen 
grafischen EQ?
Eckdaten:

- ca. 31 Bänder, 3 pro Okt.
- +/-12dB je Band
- 20-20kHz
- möglichst geringe Latenz (max. 10ms @48Khz Samplerate)

PS: Soll dann (effizient) in C implementiert werden. Mathlab habe ich 
nicht.

: Bearbeitet durch User
von Algorythmiker (Gast)


Lesenswert?

FIR oder IIR?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Also prinzipiell hab' ich da Bedenken, bei einer Latenzzeit von 10ms 
(480 Samples) ein Filter mit 20 Hz Mittenfrequenz auch nur ansatzweise 
hinzukriegen - insbesondere, wenns auch noch so trennscharf sein soll, 
dass 3 Filter/Oktave noch irgendwie sinnvoll sind.

Ob jetzt FIR oder IIR: Ich glaub', bei IIR hat man die 
Gruppenlaufzeiten/Phasenlagen benachbarter Filter nicht ansatzweise so 
im Griff, dass man nach den Filtern das Signal auch nur halbwegs ohne 
neue Loecher im Frequenzgang wieder zusammenbauen kann.

Allgemein und ohne jeglichen Nachweis einer Praxistauglichkeit hab' ich 
hier schonmal 9x klug dahergeschwaetzt:
Beitrag ""LED-Spectrumanalyzer"software ohne Fouriertransformation"

Wenn man da mit einer Unterabtastung von 4/5 (=0.8) von Stufe zu Stufe 
arbeitet, ist man bei fast 3 Filtern pro Oktave - Es waehren dann 3 
Filter pro 1/0.8³=1.9531; also fast 2, also fast eine Oktave.

Gruss
WK

von Sascha (Gast)


Lesenswert?

Hallo,
jawohl und Phasenlinear!
Da gabs doch mal eine App. von Ti früher von ihren ersten DSPs.
Schau doch mal was in den großen AV-Receiver drin ist. Da gibts ja 
welche mit Messmikrofon und Gruppenlaufzeit Korrekturen.

Übrigens haben wir solche Geräte in unserer High-End Sitzung schon 
getestet.
Ergebniss vernichtend. Ein guter Lautsprecher,Verstärker ohne 
Klangregelung und guter Signalquelle kann durch nichts ersetzt werden.

Wenn dann nur mit FIR-Filter aufbauen und die Gruppenlaufzeit anpassen.
IIR-Filter ist für Musik (ich nehme mal an dafür soll es sein) 
vermutlich das beste, da kein Ein- und Ausswingverhalten da ist.

Ich meine ich habe da mal einen Algo gesehen, der auf Basis der 
klassischen Gyrator Schaltung beruht!!!

Gruß Sascha

Bin mal gespannt was als Lösung raus kommt.

von Dergute W. (derguteweka)


Lesenswert?

Sascha schrieb:
> Wenn dann nur mit FIR-Filter aufbauen und die Gruppenlaufzeit anpassen.
> IIR-Filter ist für Musik (ich nehme mal an dafür soll es sein)
> vermutlich das beste, da kein Ein- und Ausswingverhalten da ist.

Oliver Kalkofe sagte:
> Mein Name ist Barbara Ehligmann und ich rede wirr

von Joe F. (easylife)


Lesenswert?

Danke erstmal für eure Ideen.
FFT kam mir natürlich auch als erstes in den Sinn, allerdings bräuchte 
ich dann bei 3 Bändern pro Oktave ab 20Hz dann 5Hz Bins, also eine 
4096-er FFT...
Und wenn ich es richtig verstehe, müsste die Windowsize (Latenz) dann 
1/20s sein, um die 20Hz noch filtern zu können.

Dergute W. schrieb:
> Allgemein und ohne jeglichen Nachweis einer Praxistauglichkeit hab' ich
> hier schonmal 9x klug dahergeschwaetzt:
> Beitrag ""LED-Spectrumanalyzer"software ohne Fouriertransformation"

Interessante Idee, sieht für ein Levelmeter ziemlich brauchbar aus.
Allerdings möchte ich damit tatsächlich Audio "bearbeiten".
Klassischer, grafischer EQ eben.

Sascha schrieb:
> Ich meine ich habe da mal einen Algo gesehen, der auf Basis der
> klassischen Gyrator Schaltung beruht!!!

Hm, das ist in der Tat auch ein wirklich interessanter Ansatz.
Muss mal gucken, wie man dies hier geschickt digitalisieren könnte:
http://sound.westhost.com/articles/gyrator-filters.htm
(Fig. 14 / 15)

: Bearbeitet durch User
von Grim B. (grimbart)


Lesenswert?

Allpass Filter: Ich empfehle dazu parametrische peakfilter die mit 
Allpassfilter gebildet werden. Siehe dazu das Buch "DAFX - Digital Audi 
FX" von Udo Zölzer, Kapitel 2.3.2. Diese entsprechen den analogen 
Filtern die in grafischen EQs eingebaut sind und für die gegebenen 
Anforderung sicher am besten geeignet.

Zu FIR: Bei einer Samplingfrequenz von 48kHz und Latenz von 10ms können 
ungefähr 500 Samples bzw Koeffizienten berechnet werden. Da wird man im 
tieferen Frequenzbereich nicht sehr glücklich werden. Eine Möglichkeit 
wäre den Frequenzbereich aufzutreten und parallel berechnen.

von J. S. (engineer) Benutzerseite


Lesenswert?

Das ist in der Tat so. Man sollte zu einer sinnvollen Kanaltrennung 
schon mal eine halbe Welle erfassen und das wären bei 16 hörbaren Hertz 
eher so 30ms. Ich nehme bei 96kHz gerne 4096 samples.

von Markus F. (Gast)


Lesenswert?

Laufen diese "Gyrator"-Beispiel nicht auf einen IIR-Filter hinaus? Das 
sind doch meines Erachtens (einfache) Schwingschaltungen.

von MaWin (Gast)


Lesenswert?

Sascha schrieb:
> Schau doch mal was in den großen AV-Receiver drin ist. Da gibts ja
> welche mit Messmikrofon und Gruppenlaufzeit Korrekturen.
>
> Übrigens haben wir solche Geräte in unserer High-End Sitzung schon
> getestet.
> Ergebniss vernichtend. Ein guter Lautsprecher,Verstärker ohne
> Klangregelung und guter Signalquelle kann durch nichts ersetzt werden.

Übrigens habe ich mal dBx driverack getestet.

Ergebnis: Überraschend. Dünner Sound. Aber gute Sprachverständlichkeit. 
Auch bei leiser Wiedergabe. Auch seitlich gehört. Eben echt wie auf der 
Platte, äh, CD. Nach 3 Tagen will man nichts anderes mehr hören. Das Ohr 
gewöhnt sich an alles, sogar an gute Qualität.

Die dämlichen DJ mischen nämlich prinzipiell auf fetten Sound Gewummere 
mit bass boost ab. Das macht die Ohren krank. Und so krank wie die dann 
sind glauben sie das wäre guter Sound, durch nichts zu ersetzen.

Doch: durch den echten Sound, per Messmikro eingeoegelt.

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Markus F. schrieb:
> Laufen diese "Gyrator"-Beispiel nicht auf einen IIR-Filter hinaus?

So ist es. Ich hatte den Gyrator dann als SVF implementiert (als 
Oszillator bzw. Schwingkreis mit Dämpfung), und bin dann auf peaking 
Biquads umgestiegen, da die schön einfach sind.
Schwierigkeit hierbei ist, dass sich die Nachbarbänder natürlich 
beeinflussen, ausser man macht die Filter so schmalbandig, dass man 
hinterher einen sehr welligen Verlauf bekommt.
Das ganze Projekt schleicht etwas vor sich hin, bin etwas busy gerade...
Anbei mal ein (simulierter) Zwischenstand.
Die grünen Linien sind die (sehr extremen) Einstellungen der Fader. Blau 
sind die durch einen iterativen Algorithmus angepassten Biquads für die 
einzelnen Bänder, Schwarz ist das Ausgangssignal, mit dem ich eigentlich 
ziemlich zufrieden bin (rot=Phase, Skalierung ist ganz oben +180°, ganz 
unten -180°).
Bei so extremen Einstellungen zerrt das natürlich ordentlich an der 
Phase, aber mir ist ja vor allem eine minimale Latenz wichtig.

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Koenntest du mal ein Bild vom Gruppenlaufzeitverlauf ueber die Frequenz 
von so 'nem 20Hz "Gyrator"filter machen? Wuerd' mich mal interessieren, 
was die so fuer Huepfer macht.

Gruss
WK

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

...nicht so wild eigentlich. Für höhere Frequenzen braucht man natürlich 
Oversampling.

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

Moin,

Ich nehm' mal an, das rote ist erst die Phase, nicht die GLZ? Skalierung 
wie im Bild oben, also +-25dB == +-180°?

Gruss
WK

von Joe F. (easylife)


Lesenswert?

Genau. Das sind etwa +/-37° bei diesem Q. Wenn ich den Filter steiler 
mache, springt die Phase natürlich in die Höhe.

: Bearbeitet durch User
von Dergute W. (derguteweka)


Angehängte Dateien:

Lesenswert?

Moin,

Merci! Hab' grad mal diese Netzliste von einer Primitiv-Bandsperre mit 
ca. 12dB durch ngspice gejagt; das kommt ungefaehr mit deiner Phase hin, 
(OK, irgendwas invertiert da noch, ist aber egal). Gruppenlaufzeit 
variiert aber, wie befuerchtet, doch um ca. 100msec...
(Units blau: msec, orange: dB, rot: Winkelgrad)

1
v1  1 0 ac  1
2
r1  1 2 3k
3
c1  2 3 1u
4
l1  3 4 63.39
5
r2  4 0 1k
6
7
.ac dec 1000 1  1k

Gruss
WK

von J. S. (engineer) Benutzerseite


Lesenswert?

Wenn ich das jetzt alles wieder ansehe, dann bleibt mir wieder 
festzustellen, dass nicht alles, was elektronisch und mathematisch an 
Filtern realisierbar ist, musikalisch auch sinnvoll ist.

Ich habe da inzwischen eine andere Denke:

Entweder ich nehme gezielte Klangeingriffe vor, um bestimmte Effekte zu 
erzielen bzw Probleme zu beseitigen oder ich beeinflusse die Klangkurve 
homogen. Im ersten Fall sind die so gebauten EQs oft nicht selektiv 
genug und trotzdem rasch in der Phase nicht mehr beherrschbar - das geht 
mit FIR erheblich sauberer. Im zweiten Fall ist der Eingriff zu 
selektiv, da empfiehlt sich eher ein "altes" Bass-Mid-Treble System mit 
homogenem Verlauf und das kann mit einem parametrierbaren 6dB HP, TP am 
einfachsten realisiert werden. Damit sind solche Dinge wie 
Diffusfeldentzerrungen bei Mikros, Präsenzausgleich bei Monitoren und 
automatischer BIAS-Ausgleich möglich.  Die Mischpulthersteller wissen 
schon, warum sie da maximal 4 Bänder in die Eingangssektionen einfügen.

von Joe F. (easylife)


Lesenswert?

Ja, kann gut sein, dass ich das Vorzeichen der Phase falsch herum habe.
Was bedeuten die 100ms jetzt in der Praxis? Es dauert 2 20Hz 
Schwingungen, bis der Resonator voll eingeschwungen ist?

von Joe F. (easylife)


Lesenswert?

Jürgen S. schrieb:
> Wenn ich das jetzt alles wieder ansehe, dann bleibt mir wieder
> festzustellen, dass nicht alles, was elektronisch und mathematisch an
> Filtern realisierbar ist, musikalisch auch sinnvoll ist.

Prinzipielle Zustimmung. Ist ja auch alles eine Frage des Bedieners. 
Wenn man nicht gerade so irre ist benachbarte Bänder auf -12dB und +12dB 
zu quälen, sieht es mit der Phase ja auch nicht mehr so krass aus. Mir 
ging es mehr darum, den Algorithmus für die Biquad Gain Anpassung mit 
extremen Einstellungen zu testen.

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Neenee, das mit deiner Phase wird schon auch so stimmen. Bei den 
analogen Equalizerschaltungen ist ja ein OpAmp (oder Transistor oder 
Roehre) drinnen, der macht die Inversion. Das wird sich in deiner 
digitale Nachbildung 1:1 abbilden.
Unpraezise ausgedrueckt: Die stark schwankende Gruppenlaufzeit verbeult 
dir Impulse mehr, als es sein muesste. Aber das ist halt nun mal so. 
Kann man nix machen. Weder analog, noch digital. Wenn man das Filter so 
auslegt, dass die Gruppenlaufzeit nicht mehr so wackelt, dann lauefts 
drauf raus, dass die gesamte Gruppenlaufzeit hoeher wird. Sprich die 
Verzoegerung des Signals. Es ist dann halt nicht mehr so verbeult, kommt 
aber erst viel spaeter wieder raus. Egal ob digital oder analog: Eine 
Kroete muss man halt immer schlucken.
Diese Idee von mir aus dem anderen Thread mit dem Equalizer aus dem 
Spektrumsanalysator waere eben linearphasig. Je besser aber die 
einzelnen Filter waeren und je tiefer sie in der Frequenz gingen, umso 
mehr Verzoegerung kaeme eben auch dabei raus. Und da koennt' ich mir 
durchaus auch vorstellen, schon fast mit Sekunden rechnen zu muessen...

Gruss
WK

von Joe F. (easylife)


Angehängte Dateien:

Lesenswert?

Dergute W. schrieb:
> Unpraezise ausgedrueckt: Die stark schwankende Gruppenlaufzeit verbeult
> dir Impulse mehr, als es sein muesste. Aber das ist halt nun mal so.
> Kann man nix machen. Weder analog, noch digital.

Ah ok. Langsam verstehe ich, was die Gruppenlaufzeit mit dem Signal 
anstellt.
Danke für die sehr passende Netzliste.
Habe mal ein 20 Hz Wellenpaket durch den Filter gejagt (in Spice).
Das grüne ist die Hüllkurve der Modulation, rot und lila wäre das 
gleiche Signal bei -12dB.
Das Ausgangssignal (schwarz) passt da aber nicht rein, sondern ist so 
ca. 100ms früher da...

Spontan kann ich aber auch damit leben... Lustig auch der gegenphasige 
Ausschwinger. Ein Philosoph würde sagen, aus Einzeller wird Fisch.

Ich überlege gerade, wie man die Gruppenlaufzeit in einer Simulation 
ermitteln kann.
Für die Phase gucke ich nach fallenden Nulldurchgängen des Eingangs- und 
Ausgangssignal, und erreche aus der Zeitdifferenz dieser Nulldurchgänge 
und der bekannten Frequenz des Eingangssignals den Phasenversatz.
Für die Gruppenlaufzeit müsste ich ja genau genommen ein der 
Spice-Simulation ähnliches Signal erzeugen, dieses durch den Filter 
jagen und dann irgendwie die resultierende Hüllkurve rekonstruieren, um 
dann deren Hochpunkt mit dem Hochpunkt der Eingangshüllkurve zu 
vergleichen... Klingt irgendwie nicht wirklich trivial...

: Bearbeitet durch User
von Audiohans (Gast)


Lesenswert?

Das Filter schwingt zu stark - das ist ja fast ein kleines Echo!

von Joe F. (easylife)


Lesenswert?

Ich werde bei Gelegenheit mal so ein Signalpaket durch die digitale 
Version des Resonators und durch den Biquad jagen und übereinander 
plotten. Bin gespannt auf den Unterschied.

von Sascha (Gast)


Lesenswert?

Hallo,
@ Joe F., also nur mal so wie ich dass mache, ich habe meine 
Filterkurven (Parameter) die ich alle in einen Parameter-Set 
zusammenrechne. Ich rede von FIR-Filter, somit muss ich den FIR-Filter 
für alle EQ-Einstellungen nur einmal durchrechnen. Der FIR-Filter muss 
natürlich lang genug sein wegen der unteren Grenzfrequenz. Ist aber mit 
einem Cortex A5 kein problem. Die ARM Prozessoren haben doch teilweise 
die DSP-Rechenkünstler was gesammt Performance angeht überholt. Dazu 
sind sie noch preiswerter dank Smart-Phones. Wenn eine Ändereung an 
einer Einstellung gemacht wird, muss zuerst der gesammte Filter 
Parameter-Set neu zusammengerechnet werden und dann der FIR-Routine 
übergeben werden. Bei einigermaßen vernünftigen FIR-Filter gibt es kein 
Ein und Ausschwingverhalten so wie bei IIR. Die IIR-Filter sind ähnlich 
der eines analogen Filter. Auch ist bei FIR die Phase deutlich einfacher 
zu bestimmen.

Gruß Sascha

von Joe F. (easylife)



Lesenswert?

Sascha schrieb:
> Der FIR-Filter muss
> natürlich lang genug sein wegen der unteren Grenzfrequenz.

Und das ist ja genau das, was ich vermeiden möchte.

Gerade eben sind die Plots der beiden Varianten (Resonator & Biquad) 
fertig geworden.
Siehe da: sie verhalten sich exakt wie die analoge Version, und es gibt 
auch keinen offensichtlichen Unterscheid der Ausgangssignale beider 
Implementierungen (grün ist das Eingangssignal, violett und blau die 
Ausgänge der beiden Filter, rot die um -12dB abgesenkte Hüllkurve des 
Eingangssignals).

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.