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

如果不存在傅里叶积分的解析解,则出现这个或反问题(g(w)给出,f(t)未知的图).
我认为Sympy在计算trig函数的傅里叶变换时犯了一个错误.例如:
from sympy import fourier_transform, sin
from sympy.abc import x, k
print fourier_transform(sin(x), x, k)
Run Code Online (Sandbox Code Playgroud)
Mathematica的预期答案是

但Sympy返回0.有时候该功能运行得很好,fourier_transform(Heaviside(t)*cos(t),t,omega)并fourier_transform(Heaviside(t)*sin(t),t,omega)返回正确的答案.我认为Sympy可能正在使用拉普拉斯变换来计算傅里叶变换.
这可能是一个非常天真的问题,但在这里.
我想计算函数f(x)的傅里叶变换.所以我定义了一个numpy数组X并通过向量化函数f.现在,如果我计算这个数组f(X)的FFT,它就不会像f(x)那样在一张纸上进行傅里叶变换.例如,如果我计算高斯的FFT,我应该得到高斯或数组,其实部非常接近地类似于高斯.
这是代码.请让我知道我需要改变什么来获得通常的傅立叶变换.
import matplotlib.pyplot as plt
import numpy as np
N = 128
x = np.linspace(-5, 5, N)
y = np.exp(-x**2)
y_fft = np.fft.fftshift(np.fft.fft(y).real)
plt.plot(x, y_fft)
plt.show()
Run Code Online (Sandbox Code Playgroud)
让我重申一下.我想计算任何函数的傅里叶变换(例如高斯).FFT是计算数字数组的傅立叶变换的方法,但这与连续傅立叶变换公式的简单离散化不同.
我最近用Python替换了Matlab因为我是真的;因为Sympy而兴奋.
但现在我有以下问题:
我需要一种用Python可靠地计算连续傅里叶变换的方法.Sympy在解决方案方面存在问题,包括Diracs(Delta函数),因为它们例如出现在三角函数等处.
例如,如果我尝试
fourier_transform(cos(x),x,v)
Run Code Online (Sandbox Code Playgroud)
输出0应该基于Dirac delta函数
有没有人知道,如果Sympy的这一部分有待改进,或者是否有其他方法可以通过Python分析性地找到傅立叶变换?
感谢您提前给出答案或任何建议!
我正在尝试计算以下高斯的傅立叶变换:
# sample spacing
dx = 1.0 / 1000.0
# Points
x1 = -5
x2 = 5
x = np.arange(x1, x2, dx)
def light_intensity():
return 10*sp.stats.norm.pdf(x, 0, 1)+0.1*np.random.randn(x.size)
fig, ax = plt.subplots()
ax.plot(x,light_intensity())
Run Code Online (Sandbox Code Playgroud)
我在空间频域中创建了一个新数组(高斯的傅立叶变换是高斯,因此这些值应该相似)。我绘制并得到这个:
fig, ax = plt.subplots()
xf = np.arange(x1,x2,dx)
yf= np.fft.fftshift(light_intensity())
ax.plot(xf,np.abs(yf))
Run Code Online (Sandbox Code Playgroud)
为什么会分裂成两个峰?
是否也存在分解为高斯混合的性质?如果有的话,有证据吗?
gaussian decomposition wavelet neural-network continuous-fourier
python ×4
numpy ×3
fft ×2
sympy ×2
dft ×1
gaussian ×1
integration ×1
math ×1
matplotlib ×1
wavelet ×1