gpt4 book ai didi

python - Python 中的 FFT : formatting 1-D diffraction Fourier transform

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:02 25 4
gpt4 key购买 nike

我对 Python 和 FFT 函数比较陌生。我正在尝试使用 numpy.fft.fft() 函数将方脉冲(一维衍射狭缝函数)转换为 sinc 函数(一维衍射图案),并使输出图与分析变换相同方脉冲的,由等式给出:

F(u) = sin(πau)/(πu)

但是,我无法格式化 FFT 以使其看起来与分析函数相同。这是我的最小工作代码:

a = 40.0  # slit width
N = 5000 # sample points
T = 100.0 # sample spacing
x = np.linspace(-T/2.0,T/2.0,N)

y = np.piecewise(x,[abs(x)>a/2,abs(x)<=a/2],[0,1]) # make 1-D square pulse array

dx = x[1] - x[0]
yf = np.fft.fft(y) * dx # Fourier transform
xf = np.fft.fftfreq(N,d=dx)
xf = np.fft.fftshift(xf)
yf = np.fft.fftshift(yf)
plt.figure(1)
plt.plot(xf,yf)

f = np.sin(np.pi*a*x)/(np.pi*x) # analytical transform function
plt.figure(2)
plt.plot(x,f)
plt.show()

我想我需要调整 FFT 的频率,但我不确定。非常感谢任何帮助!

最佳答案

您有一个有限长度的离散信号。当您使用 FFT 来计算该信号的傅立叶变换,您假设信号是周期性的。也就是说,您的信号不是单个矩形脉冲;这是一个重复脉冲。适用于的分析结果这种情况是周期性 sinc 函数(也称为别名 sinc 函数Dirichlet 函数),其中一种形式是

f(x) = sin(n*x/2) / (n*sin(x/2))

此函数可用 scipy.special.diric .就在最近我在 diric 的文档字符串中添加了一个示例以准确显示您的内容正在问。这是例子。 (它不会出现在已发布的版本中scipy 直到版本 0.17.)


标准导入:

>>> import numpy as np
>>> from scipy import special

为演示创建一个小的矩形脉冲:

>>> m = 8
>>> k = 3
>>> x = np.zeros(m)
>>> x[:k] = 1

使用 FFT 计算 x 的傅里叶变换,以及检查系数的大小:

>>> np.abs(np.fft.fft(x))
array([ 3. , 2.41421356, 1. , 0.41421356, 1. ,
0.41421356, 1. , 2.41421356])

现在使用 diric 找到相同的值(直到符号)。我们相乘通过 k 来说明不同的缩放约定numpy.fft.fftdiric:

>>> theta = np.linspace(0, 2*np.pi, m, endpoint=False)
>>> k * special.diric(theta, k)
array([ 3. , 2.41421356, 1. , -0.41421356, -1. ,
-0.41421356, 1. , 2.41421356])

关于python - Python 中的 FFT : formatting 1-D diffraction Fourier transform,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31792597/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com