Institut für Eletronische Musik und Akustik Projekt 8: Terz

Werbung
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
Herunterladen