2017-12-02 16 views
0

こんにちは、私は非常に騒々しいFFTを持っています。どのように私のコードハミングウィンドウには、それほど騒々しいように適用する。私のコードを見てください:ハミングウィンドウ、python 2.7

plt.subplot(212) 
plt.title('Fast Fourier Transform') 
plt.ylabel('Power [a.u.]') 
plt.xlabel('Frequency Hz') 
fft1 = (Bx[51:-14]) 
fft2 = (By[1:-14]) 

for dataset in [fft1]: 
    dataset = np.asarray(dataset) 
    psd = np.abs(np.fft.fft(dataset))**2.5 
    freq = np.fft.fftfreq(dataset.size, float(300)/dataset.size) 
    plt.semilogy(freq[freq>0], psd[freq>0]/dataset.size**2, color='r') 

for dataset2 in [fft2]: 
    dataset2 = np.asarray(dataset2) 
    psd2 = np.abs(np.fft.fft(dataset2))**2.5 
    freq2 = np.fft.fftfreq(dataset2.size, float(300)/dataset2.size) 
    plt.semilogy(freq2[freq2>0], psd2[freq2>0]/dataset2.size**2, color='b') 

は何plt.show()私は必要なもの enter image description here

であることである:私が見てきた enter image description here

https://docs.scipy.org/doc/scipy-0.13.0/reference/generated/scipy.signal.hamming.html)と、この(https://docs.scipy.org/doc/numpy-1.13.0/reference/generated/numpy.hamming.html)まだドンそれを私のコードにどのように適用するかを手がかりにしています。何か案は?私が言ったように、第二の絵には私が必要なものが見えます。 ブラックマンのウィンドウも適用するのが良いでしょうが、まだそれをどのように追加する手がかりではありません。この適用

freqs, psd = scipy.signal.welch(dataset, fs=300, window='hamming') 

は私の希望チャートのように表示されない、ということを私に与えました。

enter image description here

+0

実際のサンプルレートではないようです。私はあなたの質問に基づいて推測していたので、あなたの実際のサンプリングレート(約900かもしれない)を使用してください。また、Welchの方法は、周波数分解能を犠牲にしてパワースペクトルのより滑らかな推定値を計算することに留意してください。 – bnaecker

答えて

0

ウェルチ方法が正しいと思われたので、私の質問について考えてみましたが、ここで答えがあります。

# Loop for FFT data 
    for dataset in [fft1]: 
     dataset = np.asarray(dataset) 
     freqs, psd = welch(dataset, fs=266336/300, window='hamming', nperseg=8192) 
     plt.semilogy(freqs, psd/dataset.size**2, color='r') 

    for dataset2 in [fft2]: 
     dataset2 = np.asarray(dataset2) 
     freqs2, psd2 = welch(dataset2, fs=266336/300, window='hamming', nperseg=8192) 
     plt.semilogy(freqs2, psd2/dataset2.size**2, color='b') 
1

あなたは信号のパワースペクトルを推定しようとしているように思えます。その場合、scipy.signal.welch関数のようなものを使うことができます。この関数は、データの重複部分からFFTを計算することによって平滑化されたスペクトルを推定します。メソッドwindowを直接引数として渡すことができます。たとえば、'hamming'または'blackman'です。

EDIT:これは、これらの周波数での周波数とパワーを返します

freqs, psd = scipy.signal.welch(dataset, fs=300, window='hamming') 

があなたのデータにこれを適用すると、あなたはこのような何かをしたいです。私はあなたのサンプルレート(あなたの計算でfreqの計算から)が300であると仮定しています。

+0

コードはどのように表示されるのでしょうか? – Hiddenguy

+0

@Hiddenguyどういう意味ですか?使用方法の詳細については、ドキュメントを参照してください。簡単に言えば、信号とサンプリングレートを渡すと、それらの周波数で周波数と電力が返されます。 – bnaecker

+0

私は自分の質問に2つのWebページのドキュメントを適用しましたが、私は自分のコードにそれらを実装する方法がわかりません。だからあなたは助けることができますか? – Hiddenguy