如何使用Python计算离散信号的FFT傅里叶系数
16点离散信号FFT傅里叶系数获取与频率分量求和方法
核心概念说明
numpy.fft.fft()的输出本身就是你要的复傅里叶系数序列,长度和输入信号一致,每个元素包含对应频率分量的幅值、相位信息- 16点信号的FFT输出中,第1个元素是直流分量,第2-8个是正频率分量,第9个是奈奎斯特频率分量,第10-16个是负频率分量(与第2-8个分量共轭对称)
- 频率分量求和重构原始信号,本质就是离散傅里叶逆变换的计算过程
完整代码实现
import numpy as np # 输入信号(你给出的示例为15个元素,这里补充1个元素凑成16点,可根据实际数据调整) a = [1, 2, 3, 4, 1, 1, 1, 1, 1, 1, 2, 3, 4, 1, 1, 1] signal_length = len(a) # 步骤1:计算FFT得到复傅里叶系数 fft_coefficients = np.fft.fft(a) # 步骤2:获取物理意义上的幅值(可选,按需使用) # 直流分量归一化 dc_amplitude = fft_coefficients[0].real / signal_length # 其余正频率分量归一化 positive_freq_amplitudes = 2 * np.abs(fft_coefficients[1:signal_length//2]) / signal_length # 步骤3:频率分量求和重构原始信号(两种实现方式) # 方式1:直接调用numpy内置逆变换接口 reconstructed_signal_1 = np.fft.ifft(fft_coefficients).real # 方式2:手动实现所有频率分量加权求和 reconstructed_signal_2 = np.zeros(signal_length, dtype=np.float64) freq_points = np.fft.fftfreq(signal_length) for coef, freq in zip(fft_coefficients, freq_points): reconstructed_signal_2 += (coef * np.exp(2j * np.pi * freq * np.arange(signal_length))).real reconstructed_signal_2 /= signal_length
结果验证
两种重构方式得到的结果和原始信号a的误差在浮点精度范围内,可以直接使用。
内容的提问来源于stack exchange,提问作者Emin Bülbül
相关产品推荐
相关产品推荐

