我正在使用Matlab对信号进行FFT,但在归一化上卡住了。具体来说,如何将频谱归一化为dBm单位。我知道0.316228是正确的归一化因子,但我的问题与如何正确归一化bins有关。
我创建了以下程序以提出我的问题。只需将其复制并粘贴到Matlab中即可运行它。内联查看问题。
特别是,我不确定如何归一化bins。例如,如果FFT具有索引1:end(其中end为偶数),当我计算FFT幅度谱时,是否应该在索引2:(end/2)处乘以(2/N)?同样,位于奈奎斯特频率(位于索引end/2+1)的bin是否被归一化为(1/N)?我知道根据一个人的兴趣有许多归一化方式。假设我使用的信号(下面的St)是从ADC捕获的电压。
非常感谢任何反馈。提前致谢!
我创建了以下程序以提出我的问题。只需将其复制并粘贴到Matlab中即可运行它。内联查看问题。
特别是,我不确定如何归一化bins。例如,如果FFT具有索引1:end(其中end为偶数),当我计算FFT幅度谱时,是否应该在索引2:(end/2)处乘以(2/N)?同样,位于奈奎斯特频率(位于索引end/2+1)的bin是否被归一化为(1/N)?我知道根据一个人的兴趣有许多归一化方式。假设我使用的信号(下面的St)是从ADC捕获的电压。
非常感谢任何反馈。提前致谢!
%% 1. Create an Example Signal
N = 2^21 ; % N = number of points in time-domain signal (St)
St = 1 + rand(N,1,'single'); % St = example broadband signal (e.g. random noise)
% take FFT
Sf = fft(St, N);
Sf_mag = (2/N)*abs(Sf(1: N/2 + 1));
Sf_dBm = 20*log10(Sf_mag / 0.316228); % 0.316338 is peak voltage of 1 mW into 50 Ohms
% Q: Are Sf_mag and Sf_dBm normalized correctly? (assume 0.316338 is correct
% peak voltage to get 1mW in 50 Ohms)
% Q: Should Sf_mag(fftpoints/2 + 1) = (1/N)*abs(Sf(fftpoints/2 + 1) for correct normalization
% of Nyquist frequency? (since Nyquist frequency is not folded in frequency
% like the others are)
%% 2. Plot Result
% create FFT spectrum x-axis
samplerate = 20e9; % 20 Gsamples/sec
fft_xaxis = single(0 : 1 : N/2)';
fft_xaxis = fft_xaxis * single(samplerate/N);
semilogx(fft_xaxis, Sf_dBm, 'b-')
xlabel('Frequency (Hz)');
ylabel('FFT Magnitude (dBm)');
title('Spectrum of Signal (Blue) vs Frequency (Hz)');
xlim([1e4 1e10]);
grid on;
log10
而不是log
。 - YYCpwelch
。 - A. Donda