首先,对于在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()