MATLAB でフーリエ変換を正しい方法で使用しているかどうか疑問に思っています。曲の周波数の平均振幅をすべて取得したいと考えています。テスト目的で、 Audacityを使用して 8 kHz のモノラル ウェーブ ファイルに変換したベートーベンの「エリーゼのために」の無料の mp3 ダウンロードを使用しています。
私のMATLABコードは次のとおりです。
clear all % be careful
% load file
% Für Elise Recording by Valentina Lisitsa
% from http://www.forelise.com/recordings/valentina_lisitsa
% Converted to 8 kHz mono using Audacity
allSamples = wavread('fur_elise_valentina_lisitsa_8khz_mono.wav');
% apply windowing function
w = hanning(length(allSamples));
allSamples = allSamples.*w;
% FFT needs input of length 2^x
NFFT = 2^nextpow2(length(allSamples))
% Apply FFT
fftBuckets=fft(allSamples, NFFT);
fftBuckets=fftBuckets(1:(NFFT/2+1)); % because of symetric/mirrored values
% calculate single side amplitude spectrum,
% normalize by dividing by NFFT to get the
% popular way of displaying amplitudes
% in a range of 0 to 1
fftBuckets = (2*abs(fftBuckets))/NFFT;
% plot it: max possible frequency is 4000, because sampling rate of input
% is 8000 Hz
x = linspace(1,4000,length(fftBuckets));
bar(x,fftBuckets);
出力は次のようになります。
- 私のコードが正しいかどうか誰か教えてもらえますか? 特に0付近のピークが気になります。
NFFT
正規化するには、またはで割る必要がありlength(allSamples)
ますか?- 私にとって、これは棒グラフのようには見えませんが、プロットしている値が多いためでしょうか?
ヒントをありがとう!