1

波動に存在するハーモニクスを、弦のどこで弾くかの関数として分析しています。このページに示されているようなプロットを取得したいと考えています: 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 = triple_pulse(x0,x0[N_masses/40],1) y-=np.mean(y) が追加され、ゼロ以外のバンドがより広くなりました。ただし、ピークは依然として「0」を中心にしています。

4

1 に答える 1

2

周波数分析を実行する前、つまり を呼び出した後、信号の平均を差し引くだけtriangular_pulseです。

y-=y.mean()

ゼロ以外の周波数でピークが得られます。これは、信号がゼロではない平均成分を持っているためです。これは、ゼロ周波数の成分として現れます。

編集: コメントとして、numpy を使用して三角パルス関数を書き換えることができます

def triangular_pulse2(x,xmean,sigma):
    return where(x<xmean,x*sigma/xmean,sigma-(x-xmean)*(sigma/(200-xmean)))
于 2014-12-12T09:20:40.060 に答える