簡體   English   中英

如何在時域信號上通過FFT檢測幅度

[英]How can i detect amplitude from FFT on Time-Domain signal

我有波動的信號,並且振幅有問題。

%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)為例,我的問題是否可以在時域中檢測該第一個信號的位置作為圖形在鏈接中

任何幫助都會有所幫助。

您是否嘗試過使用正弦輸入的代碼?

制作長度為512,振幅為1,頻率等於164 Hz的正弦曲線。

當您運行程序時,只要您的頻率分辨率不太差(這意味着您沒有使用太少的FFT點),我相信您會看到對應於164 Hz的頻率倉的增益接近1。 )。

如果上述方法有效,則您的代碼也應適用於歌曲。 我不知道在音樂等多音調時域信號的情況下如何判斷/驗證時域幅度。

如果我正確理解了您的問題,則可以通過在感興趣的頻率處獲取時域信號的內積與復雜正弦波來找到所需的內容。 例如,使用您帖子中的信息,我們將類似於以下內容:

% graph 1 time domain
song2 = song(1:size(song));
fs = 44100;
dt = 1/fs;
t = 0:dt:(length(song2)*dt)-dt;
x_164 = exp(-1j * 2*pi * 164 * t);
f_164 = x_164(:).' * song2(:);       % Spectral content of the signal at 164(Hz).

如果您考慮一下DFT是什么,您會看到它只是上述過程,但是選擇的頻率是正交的。 但是,您可以使用相同的過程來估計所需頻率的頻譜含量。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM