に存在する FFT 関数を使用して、音符のピーク周波数を取得しようとしていますMATLAB
。数学関数の FFT のコードをコピーして貼り付け、関数をオーディオ ファイルに置き換えました。
Fs = 44100; % Sampling frequency
T = 1/Fs; % Sample time
L = 1000; % Length of signal
t = (0:L-1)*T; % Time vector
% Sum of a 50 Hz sinusoid and a 120 Hz sinusoid
y = wavread('c-note2.wav');
plot(Fs*t(1:50),y(1:50))
xlabel('time (milliseconds)')
NFFT = 2^nextpow2(L); % Next power of 2 from length of y
Y = fft(y,NFFT)/L;
f = Fs/2*linspace(0,1,NFFT/2+1);
% Plot single-sided amplitude spectrum.
plot(f,2*abs(Y(1:NFFT/2+1)))
title('Single-Sided Amplitude Spectrum of y(t)')
xlabel('Frequency (Hz)')
ylabel('|Y(f)|')
ここでは、 の代わりに、 (信号にノイズを追加する)のy=wavread('c-note2.wav')
ようなものを用意しました。y=0.15sin(5x)+0.32cos(50t)+rand(I)
私たちがやろうとしていることは正しいですか?数学的信号の代わりに wavread を入れることはできますか?
得られたグラフから のピーク周波数を取得c-note
し、実際の の周波数と一致しているかどうかを確認したいのc-note
ですが、ばかげた結果が得られています。