代码之家  ›  专栏  ›  技术社区  ›  ggkmath

基本FFT规范化问题

  •  3
  • ggkmath  · 技术社区  · 14 年前

    我在用Matlab对信号进行快速傅立叶变换,然后陷入了标准化的困境。具体来说,如何将频谱规范化为dBm的单位。我知道0.316228是正确的标准化因子,但我的问题与如何正确地标准化垃圾箱有关。

    我创建了以下程序来提出我的问题。只要把它剪切粘贴到Matlab中,它就会自动运行。请参阅问题。

    尤其是,我对如何规范化垃圾箱感到困惑。例如,如果FFT有索引1:end,其中end是偶数,那么当我计算FFT幅度谱时,应该为索引2乘以(2/N)吗:(end/2)?类似地,Nyquist频率(位于索引端/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;
    
    2 回复  |  直到 14 年前
        1
  •  5
  •   Steve Tjoa    14 年前

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

    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)

        2
  •  0
  •   Community Ian Goodfellow    7 年前

    请看下面的答案: FFT normalization

    一些软件包和参考文献对傅里叶系数的标准化处理不够。

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

    2) 除DC项和Nyquist项外,Fourier系数的大小是重复的(x2)。DC和Nyquist术语只出现一次。根据数组索引的启动/停止方式,需要小心。简单地将功率加倍以获得单边频谱是错误的。