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
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
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.
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
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
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.
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.
Laufen diese "Gyrator"-Beispiel nicht auf einen IIR-Filter hinaus? Das sind doch meines Erachtens (einfache) Schwingschaltungen.
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.
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
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
...nicht so wild eigentlich. Für höhere Frequenzen braucht man natürlich Oversampling.
:
Bearbeitet durch User
Moin, Ich nehm' mal an, das rote ist erst die Phase, nicht die GLZ? Skalierung wie im Bild oben, also +-25dB == +-180°? Gruss WK
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
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
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.
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?
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.
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
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
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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.