如何绘制代码中定义的含Dirac函数的I(x)的Fourier变换图像
解决方案
根据傅里叶变换的基本性质,加权Dirac冲激a·δ(x - x₀)的连续傅里叶变换解析形式为a·exp(-2j·π·f·x₀),其中f为频率变量。你定义的I(x)是两个冲激的叠加,因此傅里叶变换公式为:
F(f) = a₁·e^(-2jπf x₁) + a₂·e^(-2jπf x₂)
取该复数信号的振幅即可得到你预期的周期函数,周期为1/|x₁ - x₂|。
你现有代码中有两处需要调整:
- 你当前定义的
x是空间域自变量,傅里叶变换的自变量为频率f,建议重命名变量避免语义混淆 - sympy的DiracDelta无法直接用于numpy数值计算,我们直接用解析公式计算傅里叶变换即可,无需额外定义I变量
修改后的完整代码
import matplotlib.pyplot as plt import numpy as np a1 = 1.6 a2 = 0.6 x1 = 1 x2 = 5 # 定义频率轴范围,可根据需要调整 f_start = 0 f_end = 6 f = np.linspace(f_start, f_end, 1000) # 核心实现:计算傅里叶变换的振幅谱 FurI = np.abs(a1 * np.exp(-2j * np.pi * f * x1) + a2 * np.exp(-2j * np.pi * f * x2)) fig, ax = plt.subplots(figsize=(10,5)) plt.xlim(f_start, f_end) plt.ylim(0, 2.4) # 振幅最大值为a1+a2=2.2,调整坐标范围适配显示 plt.plot(f, FurI, c='navy') ax.set_xlabel(r'$f$') ax.set_ylabel(r'$|F(I)(f)|$') plt.show()
如果你坚持保留原代码的变量命名,只需要将FurI = ???????替换为以下代码即可:
FurI = np.abs(a1 * np.exp(-2j * np.pi * x * x1) + a2 * np.exp(-2j * np.pi * x * x2))
同时注意将原代码的plt.ylim(y1,1.2)调整为plt.ylim(0, 2.4),否则会超出显示范围。
内容的提问来源于stack exchange,提问作者Anna-Kat
相关产品推荐
相关产品推荐

