いろんなものはつながっている

pythonでたたみこみをしてみる

フィルタの係数をファイルから読み込んで信号に畳み込みこんでみる。
たたみこみの範囲はnp.convoluteのオプションで指定する()。

# タップをファイルから読み込み
filter_tap = []
with open(filter_tap_path, 'r') as f:
    for line in f:
        filter_tap += [float(line)]
# フィルタを信号に畳み込み
sig_buf = np.zeros(tap_num) + wave_date
sig_filtered = np.coconvolve(sig_buf, filter_tap, 'valid')

逐次たたみこみを行う場合、タップ数分、入力信号の先頭に前回の信号の末尾をセットしておく

#フィルタのタップ数
tap_num = len(filter_tap)
#フィルタをかける信号長単位
sig_num = 128 
sig_buf=np.zeros(tap_num-1)

for itr in np.arange(0, itr_num)
    sig_target = sig[sig_num*itr:sig_num*(itr+1)] 
    sig_in = sig_buf + sig_target
    sig_filtered = np.coconvolve(sig_in, filter_tap, 'valid')
    sig_buf = sig_target[-1*(tap_num-1):]

平滑化フィルタでノイズを除去してみる

sa_num = 500
x = np.linspace(0,10,sa_num)
y = np.sin(x)
y_with_noise = y + np.random.randn(sa_num)*0.1
filter = np.ones(10)/10.0 #平滑化フィルタ
y_filtered = np.convolve(y_with_noise, filter, 'same')
plt.plot(x,y,'b',linewidth=3)
plt.plot(x,y_with_noise,'r',linewidth=1)
plt.plot(x,y_filtered,'g',linewidth=1)
plt.show()

出力のサンプル数を入力と同じにするため、’same’オプションを用いている

平滑化フィルタ

平滑化フィルタのサイズを5と10でためしたが、この場合は、10のほうがよりノイズの影響を除去できている

関連記事

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

スポンサード リンク

カテゴリー

スポンサード リンク