【问题标题】:Normalization while computing Power Spectral Density计算功率谱密度时的归一化
【发布时间】:2015-07-01 05:59:30
【问题描述】:

计算功率谱密度的方法:-

F = fft (s);

PSD = (1/N) * F * conj(F);

其中“s”是以数组形式提供给我的输入信号。

我也知道采样率(Fs)。

我想知道标准化因子"N" 的值应该是多少。

【问题讨论】:

    标签: signal-processing fft


    【解决方案1】:

    功率谱密度函数有许多不同的定义,相应的比例因子也有不同的可能性。 Numerical recipes in C 的第 13.4 节列出了几个常见的定义,例如:

    • 为离散的正、零和负频率定义,其总和是函数均方幅度
    • 仅针对零和离散正频率定义,其总和是函数均方幅度
    • 定义在从 -fc 到 fc 的 Nyquist 区间中,它在该范围内的积分是函数均方幅度
    • 定义从0到fc,它在这个范围内的积分就是函数均方幅度

    因此,正确的定义和比例因子将特定于您的应用程序。为了说明这些不同定义可能对缩放因子产生的影响,我在下面列出了一些使用不同定义的具体实现。

    由于我提到了数值食谱书,我们可以开始查看为显示 PSD 的示例实现而选择的定义(不暗示它是正确的定义)。在这种情况下,使用了上面列出的第二个定义(即“仅针对零和离散正频率定义,其总和是函数均方幅度”),这导致了归一化:

    len = length(F);
    N   = 0.5*len^2;
    PSD = (1/N) * F(1:len/2) * conj(F(1:len/2));
    

    另一方面,Octave's pwelch 使用不同的功率谱密度定义(即上面列出的最后一个),这导致不同的归一化近似为:

    len = length(F);
    N   = 0.5*len*Fs; % where Fs is the sampling rate
    PSD = (1/N) * F(1:len/2) * conj(F(1:len/2));
    

    【讨论】:

      【解决方案2】:

      N 只是 FFT 中的点数。因此,如果您的 FFT 有 2048 个点,那么您需要将 FFT 输出 bin 的大小按1 / 2048 的因子缩放。

      【讨论】:

      • 我的输入数组只包含实数。那么,FFT 中的点数会是 (length_input_array)/2 吗?
      • 您需要根据所需的分辨率、任何实时约束以及输入数据的性质来决定 N 应该是多少。对于真实输入数据,使用 N / 2 个输出点并将幅度缩放 2 / N。
      • 不需要考虑采样频率吗?
      • 不 - 您只是在标准化幅度 - 采样频率仅在将 FFT bin 索引转换为频率时才相关,请参阅:stackoverflow.com/questions/4364823/…
      • in.mathworks.com/help/signal/ug/psd-estimate-using-fft.html 这里他们写了 psdx = (1/(Fs*N)) * abs(xdft).^2;你能解释一下背后的原因吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-25
      • 1970-01-01
      相关资源
      最近更新 更多