* wavファイルを入力しFFTをかける関数(サブ関数使用)
ファイル先頭の基本関数の下には、サブ関数を定義可能。サブ関数は、ファイル内の基本関数&他のサブ関数からのみ呼び出し可能。
※Octaveレッスン(1), (2) の記述では、wavファイルが1秒以上の場合に対応していなかった。
今回のsample_func2関数を使用すると、正しい結果が得られる。
---- sample_func2.mの中身 ----
function[Y, y, Fs] = sample_func2(wavefile, targetHeltz)---------------------------
disp('sample_func2() returns FFT spectrum & sample rate')
info = audioinfo(wavefile)
[y,Fs] = audioread(wavefile);
Y=fft(y);
L = info.TotalSamples %sample length
T = 1/Fs; %sampling period
t = (0:L-1)*T; %time vector
P2 = abs(Y/L); %both side spectrum
P1 = P2(1:L/2+1); %one side spectrum
P1(2:end-1) = 2*P1(2:end-1); %why from 2?
f=Fs*(0:L/2)/L;
plot_spectrum(f, P1)
plot_magnified(f, P1, Fs, L, targetHeltz-100, targetHeltz+100)
end
function[] = plot_spectrum(f, P1)
subplot(2,1,1)
title('spectrum')
xlabel('(Hz)')
plot(f,P1)
end
function[] = plot_magnified(f, P1, Fs, L, minf, maxf)
subplot(2,1,2)
title('magnified spectrum')
xlabel('(Hz)')
grid('on')
min=L/Fs*minf;
max=L/Fs*maxf;
plot(f(min:max),P1(min:max))
end
0 件のコメント:
コメントを投稿