Contents
clear all; clc;
元信号の作成
t = 0 : 1/44100 : 5;
y = 0.4 * sin(2 * pi * 550 * t) + 0.3 * sin(2 * pi * 1100 * t) + 0.2 * sin(2 * pi * 1650 * t);
figure(1);
plot(t,y);
xlim([0, 0.01]);
title('SOURCE DATA');
xlabel('TIME [s]');
ylabel('INTENSITY [a.u.]');
wavwrite(y, 44100, 16, 'test2.wav');
フーリエ変換と窓関数を用いた短時間フーリエ変換との比較
[y, fs, bits] = wavread('test2.wav');
Y = fft(y)/length(y);
Y = Y(1 : length(y) / 2 + 1);
f = linspace(0, 22050, length(Y));
figure(2);
subplot(1,4,1);
plot(f, abs(Y));
xlim([0,2000]);
title('FOURIER');
y1 = y(1 * fs + (0 : 4095));
Y1 = fft(y1)/length(y1);
Y1 = Y1(1 : length(y1) / 2 + 1);
f = linspace(0, 22050, length(Y1));
subplot(1,4,2);
plot(f, abs(Y1));
xlim([0,2000]);
title('NO-WINDOW');
y1 = y(1 * fs + (0 : 4095));
w = hann(4096);
y1 = w .* y1;
Y1 = fft(y1)/length(y1);
Y1 = Y1(1 : length(y1) / 2 + 1);
f = linspace(0, fs/2, length(Y1));
subplot(1,4,3);
plot(f, abs(Y1));
xlim([0,2000]);
title('HANNING');
y1 = y(1 * fs + (0 : 4095));
w = hamming(4096);
y1 = w .* y1;
Y1 = fft(y1)/length(y1);
Y1 = Y1(1 : length(y1) / 2 + 1);
f = linspace(0, fs/2, length(Y1));
subplot(1,4,4);
plot(f, abs(Y1));
xlim([0,2000]);
title('HAMMING');
警告: インデックスとして用いるコロン(:)を使用した演算では、整数を指定する必要があります
SPECTROGRAMのハニング窓の違いによる時間分解能と周波数分解能の変化の様子
figure(3);
spectrogram(y,hann(256),128,256,fs,'yaxis');
title('SPECTROGRAM with HANNING(256)');
figure(4);
spectrogram(y,hann(1024),512,1024,fs,'yaxis');
title('SPECTROGRAM with HANNING(1024)');