我正在分析波动中存在的谐波,它是沿着弦的位置发生的。我希望获得一个类似于此页面上展示的情节:https://softwaredevelopmentperestroika.wordpress.com/2013/12/10/fast-fourier-transforms-with-python-the-noise-and-the-signal/。为此,我编写了一个非对称三角形的代码,并实现了numpy的fft。然而,输出的数据不是我所期望的,并且它的频率为0 Hz。这是我的代码及其输出:
from numpy.fft import fft as npfft, fftfreq as npfftfreq
#triangular pulse
def triangular_pulse(x, xmean, sigma):
for i in x:
if x[i]<=xmean:
y[i] = x[i]*(sigma/xmean)
else :
y[i] = sigma-(x[i]-xmean)*(sigma/(200-xmean))
return y
N_masses = 200
T = 0.0669264714
mu = .03937
cSq = T/mu
c = np.sqrt(cSq)
dx = 1.0
dt = dx/c
print dt
#Initialize some arrays
x0 = np.arange(N_masses)*dx
y = np.zeros(N_masses)
vy = np.zeros(N_masses)
ay = np.zeros(N_masses)
#Set Initial conditions (pluck)
# # half-pluck
# y = 30*gaussian_pulse(x0,x0[N_masses/2],2)
# quarter-pluck
y = triangular_pulse(x0,x0[N_masses/4],1)
rhat=npfft(y)
freaq=npfftfreq(len(y),dt)
plt.plot(freaq,np.abs(rhat)/len(rhat))
plt.show()
如果您发现问题的根源,请告诉我。谢谢!
加 y = triangular_pulse(x0,x0 [N_masses / 40],1) Y- = np.mean(y)的 结果是更宽的非零带;然而,峰仍然以“0”为中心。
答案 0 :(得分:2)
在运行频率分析之前,即在调用triangular_pulse
之后,只需减去信号的平均值:
y-=y.mean()
您将获得非零频率的峰值。这是因为信号的平均分量不为零,将显示为零频率的分量。
编辑:作为评论,您可以使用numpy where重写三角形脉冲函数:
def triangular_pulse2(x,xmean,sigma):
return where(x<xmean,x*sigma/xmean,sigma-(x-xmean)*(sigma/(200-xmean)))