Math 用numpy离散化连续傅里叶变换

Math 用numpy离散化连续傅里叶变换,math,numpy,matplotlib,fft,continuous-fourier,Math,Numpy,Matplotlib,Fft,Continuous Fourier,考虑一个函数f(t),我如何计算连续的fourier变换g(w)并绘制它(使用numpy和matplotlib) 如果傅里叶积分不存在解析解,则会出现此问题或反问题(g(w)给定,f(t)图未知)。您可以使用,但必须做一些额外的工作。首先让我们看一下傅里叶积分并将其离散化: 这里k,m是整数,N是f(t)的数据点数。使用这种离散化,我们得到 最后一个表达式中的和正是numpy使用的离散傅立叶变换(DFT)(请参阅本节的“实现细节”)。 有了这些知识,我们可以编写以下python脚本 impo

考虑一个函数f(t),我如何计算连续的fourier变换g(w)并绘制它(使用numpy和matplotlib)

如果傅里叶积分不存在解析解,则会出现此问题或反问题(g(w)给定,f(t)图未知)。

您可以使用,但必须做一些额外的工作。首先让我们看一下傅里叶积分并将其离散化: 这里k,m是整数,N是f(t)的数据点数。使用这种离散化,我们得到

最后一个表达式中的和正是numpy使用的离散傅立叶变换(DFT)(请参阅本节的“实现细节”)。 有了这些知识,我们可以编写以下python脚本

import numpy as np
import matplotlib.pyplot as pl

#Consider function f(t)=1/(t^2+1)
#We want to compute the Fourier transform g(w)

#Discretize time t
t0=-100.
dt=0.001
t=np.arange(t0,-t0,dt)
#Define function
f=1./(t**2+1.)

#Compute Fourier transform by numpy's FFT function
g=np.fft.fft(f)
#frequency normalization factor is 2*np.pi/dt
w = np.fft.fftfreq(f.size)*2*np.pi/dt


#In order to get a discretisation of the continuous Fourier transform
#we need to multiply g by a phase factor
g*=dt*np.exp(-complex(0,1)*w*t0)/(np.sqrt(2*np.pi))

#Plot Result
pl.scatter(w,g,color="r")
#For comparison we plot the analytical solution
pl.plot(w,np.exp(-np.abs(w))*np.sqrt(np.pi/2),color="g")

pl.gca().set_xlim(-10,10)
pl.show()
pl.close()

结果图显示,该脚本可以很好地发布问题并自己回答!如果你用这种方法计算一个(离散化的)FT,你能包括小于1的频率或者是输入数组长度的倍数的周期吗?也许你可以帮助回答这个问题:是的,对于频率到时间的傅里叶变换,你应该包括小频率,否则长时间的结果不会很好。我认为你的问题不是直接相关的,我自己也不能回答,但我认为它是相关的,因为有人在评论中建议连续变换可以是解决方案,因为它可以考虑比输入信号长的正弦。而离散变换不超过信号长度。我不知道离散化连续变换是否或如何能做到这一点,但我会调查…@Christoph90:如果你这样做,你将有相同的频率,你将计算f(t-offset)的傅里叶变换,而不是f(t)+1,所以你写一个问题,然后自己回答?是的,我读到人们被鼓励这样做。这是为数不多的numpy/matplotlib问题之一,我没有通过使用谷歌找到解决方案。所以我想我应该分享解决方案。我读到的关于回答你自己问题的那一页就在这里嗨,你能看看我的问题吗?