FFTからノイズを多く削除する方法は知っていますか?ここ は、FFTの私のコードです:私が得るfftチャートからノイズを消去する
import numpy as np
fft1 = (Bx[51:-14])
fft2 = (By[1:-14])
# Loop for FFT data
for dataset in [fft1]:
dataset = np.asarray(dataset)
psd = np.abs(np.fft.fft(dataset))**2
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
freq2 = np.fft.fftfreq(dataset2.size, float(300)/dataset2.size)
plt.semilogy(freq2[freq2>0], psd2[freq2>0]/dataset2.size**2, color='b')
任意のアイデア?ウェルチはうまくいかないので、私は自分のチャートを滑らかにしたくないが、2枚目の画像に表示されているレベルまでノイズをあまり消したくない。することができますように
# Loop for FFT data
for dataset in [fft1]:
dataset = np.asarray(dataset)
freqs, psd = welch(dataset, fs=266336/300, window='hamming', nperseg=512)
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=512)
plt.semilogy(freqs2, psd2/dataset2.size**2, color='b')
freqs, psd = scipy.signal.welch(dataset, fs=300, window='hamming')
コードのビット
これは、ウェルチは何をすべきかですWelchはうまく構成されているのを見てください。それは60Hzの電力線と高調波モードを示しています。それはほとんど良いですが、それは私のプロットを完全に平滑化しました。望ましいグラフ2を参照してください。 Btw。 Welchプロットではyスケールが間違っていますが、2つのデータのパワーデータの場合に過ぎません。
私はnperseg = 8192に変更しました。結果を見てください。ここ
あなたは、ノイズを「消去」することはできません。スペクトル密度の推定に生のFFTを使用する場合は特にそうです。 Welchはあなたのために働いていないと思いますか?下のプロットは、私がWelchが作り出すと思うものとまったく同じように見えます。 – kazemakase
原因ウェルチはこのように見えます(質問を参照)。あなたは私のデータで何をすべきか考えていますか? – Hiddenguy
'welch'は引数' nperseg'を持っています。値を大きくするほど周波数分解能が向上し、値を小さくするほどノイズが減少します。 'signal.welch(dataset、fs = 300、window = 'hamming'、nperseg = 256)で始まり、ノイズがまだ許容できる場合は' nperseg = 512'を試してください。私はあなたがそれらのための感情を得るために値で遊ぶことをお勧めします( 'noverlap'引数を見てください)。 – kazemakase