Übung 1

In dieser Übung geht es um die Fouriersynthese und -analyse. Erzeuge mit Matlab ein Sinusgemisch mit den folgenden Eigenschaften (f: Frequenz, A: Amplitude, phi Phasenwinkel):

      f1=100Hz A1=1 phi1=0
      f2=200Hz A2=0,5 phi2=-pi/2
      f3=400Hz A3=0,5 phi3=pi

und einer Dauer von 5 s.

fa = 16000;             % Abtastfrequenz
Ta = 1/fa;              % Abtastrate
dauer = 5;              % Laenge der Wavedatei in sekunden
t= 0:Ta:dauer-Ta;       % X-Achse (0 bis Dauer-1Ta, in Ta Schritten)

f1=1*sin(2*pi*100*t+0);      % 1. Sinus-Schwingung
f2=0.5*sin(2*pi*200*t+pi/2); % 2. Sinus-Schwingung
f3=0.5*sin(2*pi*400*t+pi);   % 3. Sinus-Schwingung

plot(t,f1,'blue');      % Sinuns Schwingung 1 in Blau
hold on;                % ins gleiche Plot
plot(t,f2,'green');     % Sinuns Schwingung 2 in Gruen
hold on;                % ins gleiche Plot
plot(t,f3,'black');     % Sinuns Schwingung 3 in Schwarz
grid on;                % Gitter einblenden
title('Sinussignale f1=blau, f2=gruen, f3=schwarz'); % Titel
xlabel('time (ms)');    % X-Achse Beschriftung
axis([0 0.02 -1 1]);    % nur den Ausschnitt x: 0 bis 0.2 / y: -1 bis 1

Schwingungen f1, f2 und f3

Zeichne das Sinusgemisch mit plot im Bereich t=0-20ms. Dabei soll auf der x-Achse die Zeit in ms abgetragen sein.

subplot(2,1,1);         % 2x2 Plots, hier Zweite (oben rechts)
sum=f1+f2+f3;           % Summe der drei Sinus Signale berechnen
plot(t,sum,'red');      % Summen-signal einzeichen
title('Summensignal der 3 Sinussignale');  % Titel
xlabel('time (ms)');    % X-Achse Beschriftung
grid on;                % Gitter einblenden
axis([0 0.02 -1 1]);    % Ausschnitt x: 0 bis 0.2 / y: -1 bis 1

subplot(2,1,2);         % 2x2 Plots, hier Dritte (unten links)
sum=sum/max(abs(sum));  % Summensignal normalisieren (skalieren)
plot(t,sum,'red');      % Normalisiertes-summen-signal einzeichen
grid on;                % Gitter einblenden
title('Normalisiertes (skalierte)s Summensignal'); % Titel
xlabel('time (ms)');    % X-Achse Beschriftung
axis([0 0.02 -1 1]);    % Ausschnitt x: 0 bis 0.2 / y: -1 bis 1

Summensignal, normalisiertes Summensignal

Gibt die Schwingung als Wave-Datei mit wavwrite aus, und zwar mit einer Abtastfrequenz von 16kHz und einer Auflösung von 16bit. Dabei skalieren, um Clipping zu vermeiden.

%wavwrite(sum,fa,16,'aufg1.wav');   % aeltere Versionen nutzen wavwrite
audiowrite('aufg1.wav',sum,fa);     % neuere Versionen nutzen audiowrite

Summensignal (WAV)

Berechne die Fouriertransformation der Sinusschwingung mit fft und stelle das ermittelte Amplitudenspektrum mit plot dar. Variiere dabei die Framelänge zwischen 50ms, 100ms, 500ms, 1 s und 5 s. Welche Frequenzauflösung delta f erhältst du für die verschiedenen Framelängen?

N=1000;                 % N Samples in Dauer (5s) entspricht alle 50ms
df1 = fa/N;             % Delta f
f1 = 0:df1:fa-df1;      % X-Werte (an denen ein Wert gesamplet wird)
A1 = fft(sum,N);        % Fourier transformierte von f
N=500;                  % N Samples in Dauer (5s) entspricht alle 100ms
df2 = fa/N;             % Delta f
f2 = 0:df2:fa-df2;      % X-Werte (an denen ein Wert gesamplet wird)
A2 = fft(sum,N);        % Fourier transformierte von f
N=100;                  % N Samples in Dauer (5s) entspricht alle 200ms
df3 = fa/N;             % Delta f
f3 = 0:df3:fa-df3;      % X-Werte (an denen ein Wert gesamplet wird)
A3 = fft(sum,N);        % Fourier transformierte von f

Auf der x-Achse soll dabei die Frequenz in Hertz abgetragen werden!

plot(f1, abs(A1),'blue');
hold on;
plot(f2, abs(A2),'red');
hold on
plot(f3, abs(A3),'green' );
grid on;
title('blau 50ms, rot 100ms, grün 500ms')
xlabel('Frequenz Hz');
axis([0 500 0 300]);    

Was fällt beim Spektrum bei der Variation der Framelänge auf? Wie kann man sich diesen Unterschied erklären?

Die originalen Spektren haben ein gauß’isches Bild. Je weniger Punkte vorhanden sind, desto mehr muss interpoliert werden. Dardurch sind die maximalwerte niedriger.

Nimm nun in Praat den Vokal ‚a‘ und den Vokal ‚i‘ mit 16kHz mono auf, und zwar für jedes Gruppenmitglied.

Sebastian: Vokal I (0,543s) Vokal A (0,675s)
Benjamin: Vokal I (1,360s) Vokal A (1,323s)

Lies die Datei mit wavread in deinem Matlab-Programm ein. Berechne auch von diesem Signal die Fouriertransformation, diesmal mit Framebreiten von 50ms, 100ms, 500ms, 1 s.

Die Vokaldauer sind zu kurz um sinnvolle Werte mit vorgegebenen Framebreiten zu erhalten. Die Framebreiten wurden entsprechend angepasst

fa=16000;                           % Abtastfrequenz
Ta=1/fa;                            % Abtastrate

fileI = 'sebastian_vokal_i.wav';    % 8681 samples bei 0.5426s
infoI = audioinfo(fileI);
dauerI = 0.5426;  % Dauer Vokal I

N0125 = 4340; % 0.5426 / 0.000125 = 4340 samples (a 0.125ms)
[yI0125,fa] = audioread(fileI,[1,N0125]);
df0125 = fa/N0125;
f0125 = 0:df0125:fa-df0125;
AyI0125 = fft(yI0125,N0125);

N05 = 1084; % 0.5426 / 0.0005 = 1084 samples (a 0.5ms)
[yI05,fa] = audioread(fileI,[1,N05]);
df05 = fa/N05;
f05 = 0:df05:fa-df05;
AyI05 = fft(yI05,N05);

N1 = 542; % 0.5426 / 0.001 = 542 samples (a 1ms)
[yI1,fa] = audioread(fileI,[1,N1]);
df1 = fa/N1;
f1 = 0:df1:fa-df1;
AyI1 = fft(yI1,N1);

subplot(1,3,1);
plot(f0125, abs(AyI0125), 'blue' );
grid on;
title('Vokal I: 4340 samples a 0.125ms');
xlabel('Frequenz Hz');
axis([0 500 0 340]);

subplot(1,3,2);
plot(f05, abs(AyI05), 'red' );
grid on;
title('Vokal I: 1084 samples a 0.5ms');
xlabel('Frequenz Hz');
axis([0 500 0 80]);

subplot(1,3,3);
plot(f1, abs(AyI1), 'green' );
grid on;
title('Vokal I: 542 smaples a 1ms');
xlabel('Frequenz Hz');
axis([0 500 0 35]);

Vokal I (Sebastian)

Vokal I (Benjamin)

fa=16000;                           % Abtastfrequenz
Ta=1/fa;                            % Abtastrate

fileI = 'sebastian_vokal_a.wav';    % 10806 samples / 0.6754s
infoI = audioinfo(fileI);
dauerI = 0.6754;  % Dauer Vokal I

N015 = 4340; % 0.6754 / 0.00015 = 4502 samples (a 0.15ms)
[yI015,fa] = audioread(fileI,[1,N015]);
df015 = fa/N015;
f015 = 0:df015:fa-df015;
AyI015 = fft(yI015,N015);

N1 = 674; % 0.6754 / 0.001 = 674 samples (a 1ms)
[yI1,fa] = audioread(fileI,[1,N1]);
df1 = fa/N1;
f1 = 0:df1:fa-df1;
AyI1 = fft(yI1,N1);

N2 = 337; % 0.6754 / 0.002 = 337 samples (a 2ms)
[yI2,fa] = audioread(fileI,[1,N2]);
df2 = fa/N2;
f2 = 0:df2:fa-df2;
AyI2 = fft(yI2,N2);

subplot(1,3,1);
plot(f015, abs(AyI015), 'blue' );
grid on;
title('Vokal I: 4502 samples a 0.15ms');
xlabel('Frequenz Hz');
axis([0 1500 0 200]);

subplot(1,3,2);
plot(f1, abs(AyI1), 'red' );
grid on;
title('Vokal I: 674 smaples a 1ms');
xlabel('Frequenz Hz');
axis([0 1500 0 25]);

subplot(1,3,3);
plot(f2, abs(AyI2), 'green' );
grid on;
title('Vokal I: 337 samples a 2ms');
xlabel('Frequenz Hz');
axis([0 1500 0 9]);

Sebastian Vokal A

Benjamin Vokal A

Wie unterscheiden sich die Vokale in ihrem Spektrum vom Sinusgemisch und wie unterscheiden sie sich voneinander?

Die Vokale haben einen Hauptton und dazugehörige Obertöne.