0

波の歌の信号があり、振幅に問題があります。

%graph 1 time domain
song2 = song(1:size(song));
fs = 44100;
dt = 1/fs;
t = 0:dt:(length(song2)*dt)-dt;
figure(); 
plot(t,abs(song2)); xlabel('Seconds'); ylabel('Amplitude');

次に、信号を FFT に入れます。これは、検出されたピーク (たとえば、164Hz) の振幅を取得するためです。

%graph 2 fft
L = length(song2); 
NFFT = 2^nextpow2(L);
f = fs/2*linspace(0,1,NFFT/2+1);
X = fft(song2,NFFT)/L; 
X = 2*abs(X(1:NFFT/2+1)); 
figure(); 
plot(f,X);  

信号の振幅 (たとえば、0.0103) を取得すると問題が発生しますが、(時間領域) の振幅と比較すると同じではありません。

私の質問は、時間領域 (グラフ 1) で周波数の振幅を検出する方法です (たとえば、振幅 0.0103 の 164)。

編集:

うーん、むしろこう聞いてみます。グラフリンクとして周波数領域スペクトルの周波数を検出します たとえば、最初の信号(82hz)(振幅:0.0075)を取りましょう。リンクのグラフとして、時間領域でこの最初の信号の位置を検出できるかどうか私の質問

どんな助けでも役に立ちます。

4

2 に答える 2

0

正弦波入力でコードを試しましたか?

振幅 1、周波数 164 Hz で長さ 512 (妥当な長さ) の正弦波を作成します。

プログラムを実行すると、周波数分解能がそれほど悪くない限り (使用している FFT ポイントが少なすぎないことを意味します)、164 Hz に対応する周波数ビンで 1 に近いゲインが表示されると確信しています。 )。

上記が機能する場合、コードも曲に対して機能するはずです。音楽のような多音の時間領域信号の場合、時間領域の振幅をどのように判断/検証しているのかは、私にはわかりません。

于 2014-11-05T20:09:22.153 に答える