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

使用numpy.fft.irfft计算矩形脉冲逆傅里叶变换:结果解读困惑

搞懂numpy.fft.irfft的正确用法,解决矩形脉冲逆变换的困惑

嘿,我来帮你理清这个问题~你现在的核心误区是搞混了irfft的输入要求,直接把时域的矩形脉冲当成了它的输入,这就导致输出结果完全不是你预期的。咱们一步一步拆解:

先明确几个FFT函数的分工

别搞混这些函数的用途,这是关键:

  • np.fft.fft:给时域信号,输出完整的复数频域序列(包含正负频率)
  • np.fft.ifft:给复数频域序列,输出还原的时域信号
  • np.fft.rfft:专门给实数时域信号,只输出正频率部分的频域序列(因为负频率是正频率的共轭,没必要存)
  • np.fft.irfft:专门给rfft输出的正频率频域序列,还原出实数时域信号

你的原代码里,把时域的矩形脉冲Y直接传给irfft,相当于告诉它:“这是某个实数信号的正频率频域分量,帮我还原时域”——但这个输入根本不是频域数据,所以结果自然看不懂。

修正后的代码:正确计算矩形脉冲的傅里叶变换+逆变换

如果你想实现“矩形脉冲的傅里叶变换,再逆变换还原时域”,用下面的代码:

import numpy as np
import matplotlib.pyplot as plt

n_on = 100
n_off = n_on
# 1. 定义时域的矩形脉冲信号
y_time = np.concatenate((np.ones(n_on), np.zeros(n_off)))
total_samples = len(y_time)

# 2. 做傅里叶变换,得到完整频域序列
Y_freq = np.fft.fft(y_time)
# 3. 逆傅里叶变换还原时域信号(因为数值误差,虚部几乎为0,取实部即可)
y_restore = np.real(np.fft.ifft(Y_freq))

# 画图展示
plt.figure(figsize=(12, 4))
plt.subplot(131)
plt.plot(y_time, '.')
plt.title("时域矩形脉冲 y(t)")
plt.xlabel("样本点")

plt.subplot(132)
# 频域看幅度谱,矩形脉冲的傅里叶变换是sinc函数,符合预期
plt.plot(np.abs(Y_freq))
plt.title("频域幅度谱 |Y(f)|")
plt.xlabel("频率点")

plt.subplot(133)
plt.plot(y_restore)
plt.title("逆变换还原的时域信号")
plt.xlabel("样本点")

plt.tight_layout()
plt.show()

如果一定要用irfft怎么办?

那得先通过rfft得到正频率的频域分量,再用irfft还原:

import numpy as np
import matplotlib.pyplot as plt

n_on = 100
n_off = n_on
y_time = np.concatenate((np.ones(n_on), np.zeros(n_off)))

# 用rfft得到正频率频域序列
Y_rfft = np.fft.rfft(y_time)
# 用irfft还原时域信号
y_irfft = np.fft.irfft(Y_rfft)

plt.figure(figsize=(12, 4))
plt.subplot(131)
plt.plot(y_time, '.')
plt.title("时域矩形脉冲 y(t)")

plt.subplot(132)
plt.plot(np.abs(Y_rfft))
plt.title("rfft输出的正频率幅度谱")

plt.subplot(133)
plt.plot(y_irfft)
plt.title("irfft还原的时域信号")

plt.tight_layout()
plt.show()

最后说下你原代码里的ifftshift

np.fft.ifftshift是用来把FFT结果的直流分量从序列开头移到中间的,但你原代码里的y是错误输入得到的无意义序列,所以shift之后也不会有你想要的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:08:43