You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过DFT频谱以正弦/余弦和形式重构信号?

从频谱以正弦/余弦和形式重构信号的代码实现

针对你的需求,结合实信号FFT的对称性,代码中倒数第二行的正确写法需要区分不同频率分量处理,完整修正后的代码如下:

import numpy as np

sig = np.array([1, 5, -3, 0.7, 3.1, -5, -0.5, 3.2, -2.3, -1.1, 3, 0.3, -2.05, 2.1, 3.05, -2.3])
N = sig.size

fft = np.fft.rfft(sig)
mag = np.abs(fft) * 2 / N
phase = np.angle(fft)

x = np.arange(N)
reconstructed = list()
for x_i in x:
    val = 0.0
    for i, (m, p) in enumerate(zip(mag, phase)):
        omega = 2 * np.pi * i * x_i / N
        # 直流分量和奈奎斯特分量(仅偶数长度信号存在)需特殊处理
        if i == 0 or (N % 2 == 0 and i == N // 2):
            val += (m / 2) * np.cos(omega + p)
        else:
            val += m * np.cos(omega + p)
    reconstructed.append(val)

# 验证重构结果与逆FFT一致性
reconstructed_irfft = np.fft.irfft(fft)
print(np.allclose(reconstructed, reconstructed_irfft))  # 输出True表示重构正确

原理说明

  • 实信号的rfft输出中,**直流分量(索引0)和奈奎斯特频率分量(仅当信号长度为偶数时的最后一个索引)**没有对应的共轭分量,因此它们的幅度需要减半才能匹配原始信号的能量;
  • 其余频率分量的幅度已经通过mag = np.abs(fft)*2/N完成了归一化(合并了共轭分量的幅度贡献),直接乘以带相位的余弦项cos(2π*i*x_i/N + p)即可还原该频率的信号分量;
  • 最终所有分量求和后得到的结果与np.fft.irfft的输出完全一致,验证了重构的正确性。

内容的提问来源于stack exchange,提问作者Dominik Ficek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 10:15:27