Institut für Eletronische Musik und Akustik Algorithmen in Akustik und Computermusik1, UE Projekt 8: Terz-Band-Equalizer Name: Michael Neffe Matr.Nr.: 9730540 Studienkennzahl: F-750 Betreuer: Piotr Majdak Institut für Eletronische Musik und Akustik 31. Oktober 2002 1 Abstract In this project a mono or stereo Inputsignal should be filtert by a 1/3-octave band Equalizer. Equalizers shape the audio spectrum by enhancing certain frequency bands while others remain unaffected. This Equalizer is built by a series connection of second-order peakfilter, which are controlled independently. Kurzbeschreibung Aufgabe dieses Projektes ist es einen Equalizer in Matlab zu programmieren der Terzbänder filtert. Die variablen Parameter für den Anwender sind die Mittenfrequenz jedes Terzbandes und Verstärkung, positiv oder negativ. Die Verstärkung wird in Dezibel [dB] eingegeben. 1.0 Beschreibung Ziel dieses Projekts ist die Beinflussung des Signals in seinem Spektrum durch einen Terzbandequalizer. Grundsätzlich soll ein Equalizer einen bestimmten Frequenzbereich einer bestimmten Bandbreite verstärken oder abschwächen und den Rest des Signals unverändert passieren lassen. Bei diesem Equalizer ist die Bandbreite jedes peakfilters mit einer Terz fix vorgegeben. Weiters ist es möglich sowohl Mono als auch Stereosignale zu bearbeiten. Originalsignal und bearbeitetes Signal werden auch graphisch ausgegeben. 1.1 Aufbau des Equalizers: Ein Equalizer ist aus einer Kaskadeschaltung von Peakfiltern aufgebaut. Der Peakfilter selbst besteht aus einem beschalteten Allpassfilter 2.Ordnung. 1.1.1 Allpass 2.Ordnung: Übertragungsfunktion: siehe Abbildung 1 A2(z) Der Betrag des Frequenzganges ist eins(unity gain), und die Phase dreht von 0 auf -360 Grad über den Frequenzbereich. Bei -180 Grad hat der Allpass 2.Ordnung seine Grenzfrequenz. 1.1.2 Peakfilter 2.Ordnung: ABBILDUNG 1: Übertragungsfunktion: Institut für Eletronische Musik und Akustik 31. Oktober 2002 2 ABBILDUNG 2: Strukturbild 1.1.3 Definition der Bandbreite: fo…obere Eckfrequenz der Terz in Hz fu…untere Eckfrequenz der Terz in Hz fm…Mittenfrequenz der Terz in Hz ∆f…Bandbreite ∆f = fo - fu in Hz fo = 3 2 * fu = 1.26 * fu fm, terz = 1.12 * fu ≈ 0.9 * fo ∆f ≈ 0.20 * fo ≈ 0.26 * fu ≈ 0.22 * fm Mit Hilfe dieser Gleichungen sind die 28 Terzbänder für den Equalizer berechnet worden. Nachstehend folgt eine Auflistung aller Mittenfrequenzen: TABELLE 1: Mittenfrequenzen der Terzbänder Nr. Mittenfrequenz Nr. Mittenfrequenz Nr. Mittenfrequenz Nr. Mittenfrequenz 1 25,0 Hz 8 125,0 Hz 15 630,0 Hz 22 3150,0 Hz 2 31,5 Hz 9 160,0 Hz 16 800,0 Hz 23 4000,0 Hz 3 40,0 Hz 10 200,0 Hz 17 1000,0 Hz 24 5000,0 Hz 4 50,0 Hz 11 250,0 Hz 18 1250,0 Hz 25 6300,0 Hz 5 63,0 Hz 12 315,0 Hz 19 1600,0 Hz 26 8000,0 Hz 6 80,0 Hz 13 400,0 Hz 20 2000,0 Hz 27 10000,0 Hz 7 100,0 Hz 14 500,0 Hz 21 2500,0 Hz 28 12500,0 Hz Institut für Eletronische Musik und Akustik 31. Oktober 2002 3 2.0 Programm und Funktion: Die Kaskadeschaltung der einzelnen peakfilter wird im Matlabprogramm durch eine for-Schleife realisiert, die den Kern des Programms darstellt. Die Filterung des Signals durch den peakfilter wird mit Hilfe der Fuktion filter, die Matlab in einer Toolbox zur Verfügung stellt, erreicht. 2.1 Eingabeparameter: Definition der Funktion in Matlab: function out = terzequalizer(in, G, fs) Die Eingabeparameter sind zum einen das Eingangssignal in, die Samplefrequenz fs und zum anderen die Verstärkung G. fs wird meist mit 44100Hz angegeben und die Verstärkung G ist eine 2x28 Matrix, wobei in der ersten Spalte die Auswahl des Terzandes und in der zweiten Spalte die Festlegung der Verstärkung in Dezibel(dB) erfolgt. An dieser Stelle wird ausdrücklich darauf hingewiesen, dass nicht alle 28 Verstärkungen für jede Berechnung angegeben werden müssen, sondern nur jene die ungleich Null sind. Das Eingangssigal kann mit dem Befehl wavread(’Name’) eingelesen werden, sofern das Signal ein Audiosignal(.wav) ist. Nach der Berechnung wird des Ausgangssignal sofort abgespielt und als wave-file unter ’Name’ abgespeichert. 2.2 Funktion: Die Funktionsüberprüfung erfolgt mit Hilfe der Implsantwort. Eingangsvektor: in = [1; zeros(9999,1)]; Impulsantwort mit Band 24, das entspricht einer Mittenfrequenz von fm = 5000Hz und die Verstärkung ist G = 12dB: Institut für Eletronische Musik und Akustik 31. Oktober 2002 4 ABBILDUNG 3: Spektrum der Impulsantwort 1 Als zweites Beispiel wird die Impulsantwort gewonnen wobei nun drei Bänder eine Verstärkung ungleich Null aufweisen: G = [8,12 ;17,-12; 25,6]; Band 8: fm=125Hz; Band 17: fm= 1000Hz; Band 25: fm=6300Hz ABBILDUNG 4: Spektrum der Impulsantwort 2 Institut für Eletronische Musik und Akustik 31. Oktober 2002 5 2.3 Programm: function out = terzequalizer(in, G, fs) V=zeros(28,1); % Einfügen der Verstärkungen in Vektor V an richtiger Position for i=1:size(G,1), V(G(i,1))=G(i,2); end; % fc gibt die Mittenfrequenz des jeweiligen Terzbandes an fc = [25; 31.5; 40; 50; 63; 80; 100; 125; 160; 200; 250; 315; 400; 500; 630; 800; 1000; 1250; 1600;... 2000; 2500; 3150; 4000; 5000; 6300; 8000; 10000; 12500]; % fb definiert die Bandbreitedes Filters(Terz) fb = [5.6 ;7.5; 9.5; 11; 15; 19; 22; 28; 40; 44; 56; 75; 95; 110; 150; 180; 230; 290; 390; 440; 560; 750; 950; 1100; 1500; 1900; 2200; 2800]; % Berechnung der Koeffizienten d = -cos((2*pi/fs).*fc); V0 = 10.^(V./20); H0 = V0-1; aB = (tan((pi/fs).*fb)-1)./(tan((pi/fs).*fb)+1); % for boost aC = (tan((pi/fs).*fb)-V0)./(tan((pi/fs).*fb)+V0); % for boost [L, B] = size(in); % größe des Eingangssignals wird bestimmt len = L+2; % Definition von Variablen a = zeros(28,1); lh = length(H0); x = zeros(len,B); y = zeros(len,B); % Umindizierung vom Eingangssignal for l = 1: B, x(3:len,l) = in(:,l); end; % Berechnug des neuen Signals for k = 1: B,% Schleife für Berechnung der Kanäle for f = 1 : lh,% Schleife zur Berechnung des Signals für das richtige Terzband mit Koeffizienten % Berücksichtigung der pos. bzw. neg. Verstärkung Institut für Eletronische Musik und Akustik 31. Oktober 2002 6 if V(f) < 0 a(f) = aC(f); else a(f) = aB(f); end % Berechnung der peakfilter-Differenzengleichung A = [1, d(f)*(1-a(f)), -a(f)]; B = [(1+(H0(f)/2)*(1+a(f))), (d(f)*(1 - a(f))), (-a(f)a(f)*(H0(f)/2)-(H0(f)/2))]; y(:,k) = filter(B,A,x(:,k)); x(:,k) = y(:,k); % Ausgangssignal wird Eingangssignal des nächsten Filters end; end; out = y(3:len,:); %graphische und akustische Ausgabe IN = fft(in); OUT = fft(out); ax =0:fs/L:(fs-fs/L);% Skalierung der x-Achse auf Hz figure subplot(211), plot(ax, abs(IN)), title('Inputsignal'), xlabel('Frequenz in Hz'), ylabel('Amplitude'),grid; subplot(212), plot(ax, abs(OUT)), title('Outputsignal'), xlabel('frequency in Hz'), ylabel('Amplitude'),grid; %subplot(212), plot(ax, 180/pi*unwrap(angle(OUT))), title('Impulseresponse'), xlabel('frequency in Hz'), ylabel('Phase in degrees'); % Festlegung des Dateinamens für das output-Signal wavwrite(out, 44100, 16, 'Name'); wavplay(out,44100); 3.0 Beispiele und Audiodateien: 3.1 Beispiel 1: Feidman.wav Das Original- und Eingangssignal ist Feidman.wav, das bearbeitete also das OutputSignal ist Feidman1.wav. Die Frequenzbänder 15 und 16 wurden um 12dB abgeschwächt und die Frequenzbänder 8 und 9 um 12 dB verstärkt. Das Ergebnis ist ein Signal das sehr dumpf klingt und die Begleitung in den Vordergrund hebt. Verstärkungsmatrix: G = [8, 12; 9, 12; 15, -12; 16,-12]; Institut für Eletronische Musik und Akustik 31. Oktober 2002 7 ABBILDUNG 5: Feidman1.wav 3.2 Beispiel 2: Mingusbb.wav Verstärkungsmatrix: G = [15, -12; 23,12]; ABBILDUNG 6: mingusbb1.wav Institut für Eletronische Musik und Akustik 31. Oktober 2002 8 3.3 Beispiel 3: Hader.wav Verstärkungsmatrix: G = [14,-24; 23,12; 24,12]; ABBILDUNG 7: hader1.wav Institut für Eletronische Musik und Akustik 31. Oktober 2002 9