0

我正在尝试将以下 matlab 代码转换为 c

cX = (fft(inData, fftSize) / fftSize);
Power_X = (cX*cX')/50;

问题:

  1. 为什么将 fft(fftSize 复杂元素数组)的结果除以 fftSize?
  2. 我完全不确定如何将复杂的共轭变换转换为 c,我只是不明白那条线的作用。

彼得

4

2 回答 2

2
1. Why divide the results of fft (array of fftSize complex elements) by fftSize?

因为合成 fft 的“能量”(平方和)随着 fft 中点数的增加而增加。除以点数“N”对其进行归一化,使得 fft 的平方和等于原始信号的平方和。

2. I'm not sure at all how to convert the complex conjugate transform to c, I just don't understand what that line does.

这就是实际计算平方和的方法。很容易验证 cX*cX' = sum(abs(cX)^2),其中 cX' 是共轭转置。

于 2013-03-31T18:17:40.247 回答
2
  1. 理想情况下,离散傅里叶变换 (DFT) 纯粹是一种旋转,因为它在不同的坐标系中返回相同的矢量(即,它在采样时间用频率而不是音量来描述相同的信号)。然而,DFT 通常实现为快速傅里叶变换 (FFT) 的方式,这些值以各种方式相加,需要乘以 1/N 以保持比例不变。

    通常,这些乘法从 FFT 中省略以节省计算时间,并且因为许多应用程序不关心尺度变化。无论规模如何,生成的 FFT 数据仍然包含所需的数据和关系,因此省略乘法不会导致任何问题。此外,校正乘法有时可以与应用程序中的其他操作相结合,因此单独执行它们没有意义。(例如,如果应用程序执行 FFT、进行一些操作并执行逆 FFT,则组合乘法可以在该过程中执行一次,而不是在 FFT 中执行一次,在逆 FFT 中执行一次。)

  2. 我不熟悉 Matlab 语法,但是,如果Stuart 的答案是正确的,cX*cX'即计算数组中值大小的平方和,那么我看不到执行 FFT 的意义。您应该能够以相同的方式直接计算总能量iData;变换只是一个不改变能量的坐标变换,除了上面描述的缩放。

于 2013-03-31T18:31:31.973 回答