簡體   English   中英

在Matlab中繪制FFT幅度頻譜信號

[英]Plotting FFT Amplitude Spectrum signal in Matlab

我在以分貝和赫茲繪制正確的FFT振幅頻譜信號時遇到麻煩。

首先,我僅以Hz和幅度繪制FFT頻譜信號,如下所示:

figure;
X_mags = abs(fft(signal));
bin_vals = [0 : N-1];
freq_ax_bins = bin_vals*fs/N;
N_2 = ceil(N/2);
plot(freq_ax_bins(1:N_2), X_mags(1:N_2));
title('FFT Spectrum signal 1');
xlabel('Frequency (Hz)')
ylabel('Magnitude');

這導致幅度總是大於0的預期圖。最后,我只想做同樣的事情,但以分貝為單位:

bin_vals = [0 : N-1];
freq_ax_Hz = bin_vals*fs/N;
N_2 = ceil(N/2);
figure;
plot(freq_ax_Hz(1:N_2), 10*log10(X_mags(1:N_2)));
xlabel('Frequency (Hz)')
ylabel('Amplitude (dB)');

看起來不錯,但該圖被部分畫成負dB。 有人可以告訴我如何正確繪制分貝頻譜嗎?

對於您的第一個圖,我注意到您只是在繪制信號的前半部分。 另一個可能更簡單的方法是使用fftshift

>> Xmag = fftshift(abs(fft(x)));

現在,DC值在中間而不是開始。 頻率向量為(-N/2:N/2 - 1)*fs/N

如果信號不對稱,則需要查看負值。

對於第二點,請注意,除非您采用Xmag平方 ,否則dB需要20*log10 沒什么大不了的,只是一個標量,但是以為您想知道。

此外,負dB的定義和預期。 log(-1)沒有為實數定義,但是log(.1)或任何其他小於1的數返回否定答案。

希望這可以幫助!

暫無
暫無

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

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