我撰寫的以下代碼首先通過 FFT 測量信號 y 的 PSD。
Fsig=26e3; % signal frequency
Fs = 1e6; % Sampling frequency
T = 1/Fs; % Sampling period
N = 2^15; % Length of signal
t = (0:N-1)*T; % Time vector
y=sin(2*pi*Fsig*t) harmonics; // a sine function with harmonics
% find FFT PSD
xdft = fft(y);
xdft = xdft(1:N/2 1);
psdx = (1/(Fs*N)) * abs(xdft).^2;
psdx(2:end-1) = 2*psdx(2:end-1);
freq = 0:Fs/N:Fs/2;
psdx_log=10*log10(psdx);
% plot PSD
figure(1)
plot(frq,psdx_log,'r')
ylim([-150 0])
grid on
title('Periodogram Using FFT')
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')
這是輸出:

如您所見,除了基頻外,頻譜還包含各種諧波。然而,這個情節并不是我想要的。我想在 dBFS 中繪制 PSD,其中基音(正弦波)為 0 dBFS,以便相對于該 0 dBFS 參考測量所有諧波。該怎么辦?
uj5u.com熱心網友回復:
您可以標準化 PSD,因此 PSD 的最大值將為 0dB(如果某些諧波高于信號,您應該調整該值以進行標準化):
Fsig=26e3; % signal frequency
Fs = 1e6; % Sampling frequency
T = 1/Fs; % Sampling period
N = 2^15; % Length of signal
t = (0:N-1)*T; % Time vector
y=sin(2*pi*Fsig*t) harmonics; // a sine function with harmonics
% find FFT PSD
xdft = fft(y);
xdft = xdft(1:N/2 1);
psdx = (1/(Fs*N)) * abs(xdft).^2;
psdx(2:end-1) = 2*psdx(2:end-1);
freq = 0:Fs/N:Fs/2;
psdx_log=10*log10(psdx./max(psdx));
% plot PSD
figure(1)
plot(frq,psdx_log,'r')
ylim([-150 0])
grid on
title('Periodogram Using FFT')
xlabel('Frequency (Hz)')
ylabel('Power/Frequency (dB/Hz)')
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/432374.html
標籤:matlab
上一篇:在2個條件下拆垛
