ein Equalizer mit MATLAB

Gast #390422
Lesenswert?

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 #390424
Lesenswert?

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 #390425
Lesenswert?

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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren