ein Equalizer mit MATLAB

Gast #390422
hallo.

ich möchte mit matlab ein equalizer realisieren. meine 2
überlegungen/ansätze habe ich in einem bild (sehe
anhang)zusammengefasst. die erste variante könnte man mit matlabbefehl
"fftfilt(h,x)" verwirklichen(hoffe ich). bei der zweiten würde ich
x(n) FFT-transformieren(mit overlap-add oder overlap-save) und daraus
sich ergebendes spektrum mit meinem Wunsch-EQ-Spektrum multiplizieren
und mit IFFT das gefiltertes signal zu bekommen.
mein problem: wie realisiere ich das wunschspektrum in matlab(auf dem
papier ist ja alles klar: re(w/wg)+((dreieck(w/w1)*dirackam(w/2xw1))x
re(w/wg) das ganze noch um 10020Hz mit diracimpuls verschieben/falten).
für Var.1 und Var.2 brauche ich doch mein Wunsch-EQ-Spektrum in matlab.
wenn ihr was anderes vorschlagen könnt, ich bin für alles offen.
Angehängte Dateien:
Gast
ja dies sieht ja die variante 1 vor(hier mit fftfilt jedoch ohne faltung
sondern multiplikation im f-bereich. diskrete faltung mit for-schleifen
ist zu langsam. gibt es ein befehl in matlab für faltung?). mein
problem ist, wie realisiere ich mein wunschspektrum in matlab um es
später mit IFFT aus H_wunsch(w) h(t) zu machen und dann mit
fftfilt(B,X) auf y(t) zu kommen. soll ich
re(w/wg-10020Hz)+dreieck_1(w/w1-(w1+20HZ))+dreieck_2(w/w1-(2w1+20HZ))+dr 
eieck_3(w/w1-(3w1+20HZ))+u.s.w.
definieren, wobei re(w/wg-10020Hz) für w<20Hz und w>20kHz 0 ist und für
20Hz<w<20kHz 1 ist?
Gast
Faltung in Matlab geht mit conv.

Wie du das Spektrum am schönsten definierst fällt mir im Moment aber
nicht ein. Problematisch hierbei ist ja, dass die filterfrequenzen für
nen audio equalizer exponentiell ansteigen sollten, damit bei
logarithmischer ansicht der frequenzachse die Filterteile ungefähr
gleich verteilt sein. Zusätzlich sollte dann auch die Bandbreite mit
höherer Frequenz ansteigen, so dass die Güte immer ungefähr gleich
bleibt.

Ich würde mir vermutlich erstmal n linearer Spektrum erzeugen, mit
f= 0:20000;
H(1:length(f)) = 1;

dann die einzelnen Durchlass und Sperrbereiche definieren und
draufmultiplizieren, zB Cos Fenster bei 30Hz ( keine Ahnung ob das
optimal ist, aber is jetz schnell hinzuschreiben) mit 10Hz Bandbreite:
gain = 1;
f1=25:35;
H1=1+ gain.*(cos((f1-30)./5 .*(pi/2))); % sollte bei 30Hz maximal sein
und bei -25 und 35 = 1

und dann das Teilspektrum auf das Gesamtspektrum aufmultiplizieren.
Sollte so ähnlich funktionieren:
H(find(f=f1)) = H(find(f=f1)) .* H1;

Aber wie gesagt, wo man die Filter genau ansetzt und wie man sie
designt ist nochmal ne andere Frage die man genauer untersuchen sollte.
Ich glaube typische 8/32 band equalizer nutzen IIR Filter, und dabei ein
biquad für jedes Band. Dabei muss dann wohl auch für jedes Biquad
Gain/Güte und Frequenz eingestellt werden.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.