MATLAB转换C语言--问题(一)FFT 和 IFFT 的缩放因子
1. MATLAB 中的 FFT 和 IFFT
在 MATLAB 中,
fft
和ifft
函数具有以下缩放行为:
fft
:执行快速傅里叶变换(FFT),不进行缩放。ifft
:执行逆快速傅里叶变换(IFFT),并自动将结果缩放为1/N
,其中N
是数据点数。这意味着,在 MATLAB 中,进行一次
fft
后紧跟一次ifft
,最终会恢复到原始信号的幅度。
2. FFTW 中的 FFT 和 IFFT
在 C 语言中,使用 FFTW 库时,FFT 和 IFFT 的缩放行为有所不同:
- FFTW 的
fftw_execute
:执行 FFT 或 IFFT,不进行任何缩放。- 缩放因子:用户需要手动管理缩放因子,以确保变换前后的信号幅度一致。
因此,在 FFTW 中,执行 IFFT 后需要手动将结果除以
N
(即数据点数)来进行归一化。
所以在进行MATLAB转换C语言时候逆傅里叶变换回来的时候需要手动调整缩放因子!!!