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

Python用傅里叶移位定理求间隔30像素双方波FFT结果不匹配问题

问题原因及修正方案

你代码的问题来自3处核心逻辑错误,修正后即可让两个结果完全匹配:

  • 相位因子的索引取值错误
    你使用x=np.linspace(0,l,l)生成相位计算的索引,该数组最后一个值为l=512,而离散傅里叶变换的波数索引范围是0~511,直接用该数组计算会导致相位偏移量出错,应该替换为k = np.arange(l)。
  • 移位量s设置错误
    你设置的s=30是两个方波之间的空隙宽度,而傅里叶移位定理中的移位量是两个信号的整体偏移距离,即两个方波的中心间距:两个方波宽度各为20像素,中心间距为10(第一个方波半宽)+30(空隙)+10(第二个方波半宽)=50,所以s应设为50。
  • 相位因子的符号错误
    离散傅里叶移位定理规定:若空间域信号向右偏移s个像素,对应的傅里叶变换需要乘以相位因子exp(-1j * 2π * k * s / l),你当前使用的正号指数对应信号向左偏移,和实际移位方向不符。

修正后核心代码段

import numpy as np
import matplotlib.pyplot as plt

def magsq(arr):
    return np.abs(arr*np.conj(arr))

fig1,ax1=plt.subplots()
l=512
test=np.zeros(l)
a=int(len(test)/2)
b=10
test[a-b:a+b]=1
ax1.plot(test)

test2=np.zeros(l)
test2[a-b:a+b]=1
test2[a+b+30:a+b+30+2*b]=1
ax1.plot(test2,'--')

FT=np.fft.fft(test)
# 以下为修正部分
k = np.arange(l)
s=50
shift=FT*np.exp(-1j*2*np.pi*k*s/l)

shifted=FT+shift
FT=np.fft.fftshift(FT)
shifted=np.fft.fftshift(shifted)
shiftedi=magsq(shifted)

FT2=np.fft.fft(test2)
FT2=np.fft.fftshift(FT2)
FT2I=magsq(FT2)
fig2,ax2=plt.subplots()
ax2.plot(shiftedi)
ax2.plot(FT2I,'--')

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 22:27:03