谐波分析的快速傅立叶变换

2024-10-06 11:40:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我在分析波运动中的谐波,它是拨动时弦的位置函数。{我想在这一页上展示一个情节。为此,我编写了一个非对称三角形的建模代码,并实现了numpy的fft。然而,输出的数据并不是我所期望的,它的峰值频率是0赫兹。以下是我的代码及其输出:

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=三角形脉冲(x0,x0[N_质量/40],1) 是的-=np平均值(y) 然而,由于非零波段变宽,峰值仍以“0”为中心。在


Tags: 代码fftnpdtzerostriangularsigmapulse
1条回答
网友
1楼 · 发布于 2024-10-06 11:40:29

只需在运行频率分析之前减去信号的平均值,即调用triangular_pulse

y-=y.mean()

你将得到非零频率下的峰值。这是因为信号有一个不为零的平均分量,它将在零频率下显示为分量。在

编辑:作为注释,您可以使用numpywhere重写三角形脉冲函数:

^{pr2}$

相关问题 更多 >