2016-05-31 12 views
1

に私がスパイクなどが原因あくびがたくさん記録呼吸からの信号を持っています。私はパンダからローリング平均関数を使用してそれを削除しようとしましたが、それは助けになりませんでした。このグラフ上の緑色のスペースは、ローリング平均を使用した結果です。削除スパイクは、Python

import pandas as pd 

RESP=pd.DataFrame(RESP) 
RESP_AV=pd.rolling_mean(RESP,50) 

私は、フィルタリングデータについて多くを知らないと私は私の質問は、どこの答えを探すことですので、これはスパイク削除するパンダの他の方法を見つけることができませんでした。 RESP.headの 結果は()です:

0 -2562.863389 
1 -2035.020403 
2 -2425.538355 
3 -2554.280563 
4 -2242.438367 
6.7636961937 

enter image description here

+0

あなたはおそらくちょうどウィンドウのサイズを大きくする必要がありますか?スパイク自体がいくつかのデータポイントで構成されている場合は、400万データポイント、50ポイントは小さくなるようですか? – Stefan

+0

問題点は何ですか?違い(緑色のスペース)?ローパスが元の信号をあまりにも大きく変えてしまったのでしょうか? – xvan

+0

@Stefanは、私は、ウィンドウのサイズにしても50000を増加しようとしたが、それは唯一の私の問題は、この9最高peaks.Its成果物である@xvanプロット – wiedzminYo

答えて

0

私はこれに対処するための二つの方法を知っている:

デザインより良いフィルタ:

1)を決定あなたの信号帯域:

お時間信号を使用して信号のスペクトログラムを比較、比較例最大有効周波数(カットオフ周波数)と最小スパイク兆候(停止周波数)を決定するためにスパイクセグメントを持つ非スパイクセグメント2)低パスフィルタを設計する: もしあなたがmatlabを持っているならば、fdatoolを使うifあなたは、結果が気に入らない場合は、フィルタ(帯域重みや窓のサイズ)

を再設計、

remez

3)の代わりに平均転がりのカスタムローパスフィルタを使用して使用し、パイソンを使用したいです

検出+置換:

1)信号の平均値を削除します。

2)のピークを検出するために、微分フィルタとしきい値を使用します。

3)各cuttedピークについてcuttedセグメントのうち任意のフィルタピークを()上記

5の方法を参照))

4(0によってそれらを置き換える)信号のうちの全てのピークをカットカットされたセグメントとピークのない信号との間の最大の相互相関係数を見出し、セグメントを置き換え、ペーストを円滑にするためにフェードイン/アウトエフェクトを行う。