2010-10-29 1199 views
3

我正在使用Matlab对信号进行FFT处理,并且我陷入了规范化。具体而言,如何将频谱归一化为dBm单位。我知道0.316228是正确的标准化因子,但我的问题与如何正确标准化仓相关。基本的FFT归一化问题

我创建了以下程序来提出我的问题。只需将其剪切并粘贴到Matlab中,它就会自动运行。在线查看问题。

特别是,我很困惑如何正常化垃圾箱。例如,如果FFT的索引为1:end,其中end是偶数,那么当我计算FFT幅度谱时,对于索引2,我应该乘以(2/N):(end/2)?同样,奈奎斯特频率处(位于索引结尾/ 2 + 1)的分区是否被归一化为(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; 
+2

当把磁盘转换为dB时,使用'log10'而不是'log' – YYC 2010-10-29 22:08:32

+0

是的,这是一个很棒的发现YYC,谢谢! – ggkmath 2010-10-30 18:32:24

+0

评论我一直在提出很多问题:简单的傅里叶变换不足以进行谱估计。对于在核心Matlab中可用的功能,有很好的实现功能。看看'pwelch'。 – 2013-10-31 23:53:58

回答

5

我不完全清楚你想完成什么,但这里有一些提示,可以让你调试自己的程序。

fft([1 1 1 1])。做fft([1 1 1 1 1 1 1 1])。特别是观察输出量。这是你期望的吗?

然后做fft([1 -1 1 -1])。做fft([1 -1 1 -1 1 -1 1 -1])。重复不同的信号长度和频率。这应该允许你相应地规范你的信号。

此外,对ifft而不是fft做同样的事情。对于各种FFT实现来说,这些都是很好的完整性检查,因为尽管大多数实现可能会将逆变换前面的1/N,其他人可能会将1/sqrt(N)置于前向和反向变换之前。

0

一个答案看到这个: FFT normalization

有些软件包和参考坐上傅里叶系数正常化马虎。

假设真实信号,则归一化的步骤是:

1)在频域中的功率必须在时域相等的功率。

2)除DC项和奈奎斯特项外,傅立叶系数的大小被复制(x2)。 DC和Nyquist术语只出现一次。根据数组索引开始/停止的方式,您需要小心。简单地将功率加倍以获得单侧频谱是错误的。

3)要获得功率密度(dBm/Hz),您需要将归一化为单个频率窗口大小。