scipy fft返回空虚部

时间:2019-08-02 22:00:06

标签: python scipy fft

首先,对于在Python和信号处理领域绝对是新手,我深表歉意。

我正在尝试模拟沿空间x轴随时间传播的脉冲信号(或增量函数)。然后,我想每次对幅度相对于x轴执行傅里叶变换,然后对空间中的每个点进行幅度对t轴。我面临的问题是傅立叶系数都是实数值。如果我在空间和时间轴上“虚构”虚部,可以看到,所有这些都显示为零。但是,我的理解是,在t = 0,x = 0处的脉冲信号应具有零虚系数。但是之后,对于所有其他t和/或x,应该有一个实数值的虚系数。

请访问此站点http://madebyevan.com/dft/,在该站点上可以交互地生成波形并观察傅立叶变换。在f(x)框中,请输入“ spike(x-0)”,“ spike(x-1)”等以模拟我的问题和预期结果。

我已经使用scipy.fftpack尝试了以下代码。还有一些额外的线路可以分析在x轴和x-t平面上传播的脉冲信号。

import numpy as np
from numpy import pi
import matplotlib.pyplot as plt
from scipy import signal
import math
import scipy.fftpack
from scipy import ndimage

L = 10
k = np.pi/L
w = np.pi*2
n = 5

# Number of samplepoints
Nx = 1000
Nt = 500
# sample spacing
l = 1.0/Nx
T = 1.0/Nt

x = np.linspace(0, Nx*l*L, Nx)
t = np.linspace(0, Nt*T*L, Nt)

x = np.round(x,2)
t = np.round(t,2)

# function to produce impulse 
def gw(xx, tt):
    if xx == tt:
        kk = 1
    else:
        kk = 0    
    return (kk)

fig = plt.figure()
yg = np.array([gw(i, j) for j in t for i in x])
YG = yg.reshape(Nt, Nx)

# how impulse propagate in x-t plane
plt.imshow(YG, interpolation='bilinear',aspect='auto')
plt.colorbar();

# how impulse propagate in x-axis for t = 2 and t = 100
fig, ax = plt.subplots()
ax.plot(x, YG[2,:], x, YG[100,:])
plt.show()

# FFT in x-axis at each point in time
yxf = np.zeros((Nt, Nx))
for i in range(Nt):
    yx = YG[i,:]
    yxf[i,:] = scipy.fftpack.fft(yx)

plt.imshow(np.imag(yxf[:,:Nx]), interpolation='bilinear',aspect='auto')
plt.colorbar();
plt.show()

# FFT in t-axis at each point in space
ytf = np.zeros((Nt, Nx))
for i in range(Nx):
    yt = YG[:,i]
    ytf[:,i] = scipy.fftpack.fft(yt)

plt.imshow(np.imag(ytf[:Nt,:]), interpolation='bilinear',aspect='auto')
plt.colorbar();
plt.show()

0 个答案:

没有答案