scipy を使用して単純なローパス フィルターを作成しようとしていますが、パラメーターの定義に助けが必要です。
フィルター処理が必要な時系列データに 350 万件のレコードがあり、データは 1000 Hz でサンプリングされています。
scipy ライブラリの signal.firwin と signal.lfilter を使用しています。
以下のコードで選択しているパラメーターは、データをまったくフィルタリングしません。代わりに、以下のコードは、グラフを 1000 データ ポイント (1 秒) 弱だけ右にシフトする時間位相の歪みを除いて、グラフィック的にはまったく同じデータのように見えるものを単純に生成します。
別のソフトウェア プログラムでは、グラフィカル ユーザー インターフェイス コマンドを介してローパス モミ フィルターを実行すると、10 秒 (10,000 データ ポイント) セグメントごとに同様の平均値を持つ出力が生成されますが、標準偏差が大幅に低下するため、この特定のノイズが本質的に失われます。より高い周波数のノイズによって汚染されていない長期的な傾向を示しながら、平均値を保持するものに置き換えます。他のソフトウェアのパラメーター ダイアログ ボックスには、「サンプル サイズとサンプリング周波数に基づいて最適化する」ように係数の数を選択できるチェック ボックスが含まれています。(私のものは 1000 Hz で収集された 350 万のサンプルですが、これらの入力を変数として使用する関数が必要です。)
* 0.05 Hz を超えるすべての周波数を削除するように、以下のコードを調整する方法を誰か教えてもらえますか? * 以下のコードから取得している同じ同一のグラフの時間の歪みだけでなく、グラフで滑らかな波を見たいです。
class FilterTheZ0():
def __init__(self,ZSmoothedPylab):
#------------------------------------------------------
# Set the order and cutoff of the filter
#------------------------------------------------------
self.n = 1000
self.ZSmoothedPylab=ZSmoothedPylab
self.l = len(ZSmoothedPylab)
self.x = arange(0,self.l)
self.cutoffFreq = 0.05
#------------------------------------------------------
# Run the filter
#------------------------------------------------------
self.RunLowPassFIR_Filter(self.ZSmoothedPylab, self.n, self.l
, self.x, self.cutoffFreq)
def RunLowPassFIR_Filter(self,data, order, l, x, cutoffFreq):
#------------------------------------------------------
# Set a to be the denominator coefficient vector
#------------------------------------------------------
a = 1
#----------------------------------------------------
# Create the low pass FIR filter
#----------------------------------------------------
b = signal.firwin(self.n, cutoff = self.cutoffFreq, window = "hamming")
#---------------------------------------------------
# Run the same data set through each of the various
# filters that were created above.
#---------------------------------------------------
response = signal.lfilter(b,a,data)
responsePylab=p.array(response)
#--------------------------------------------------
# Plot the input and the various outputs that are
# produced by running each of the various filters
# on the same inputs.
#--------------------------------------------------
plot(x[10000:20000],data[10000:20000])
plot(x[10000:20000],responsePylab[10000:20000])
show()
return