Wiiリモコンから約100Hzの速度で加速度計データを継続的に取得するC#アプリケーションを作成しています。このデータは、到着するとリスト (軸ごとに 1 つのリスト) に格納されます。1秒ごとに起動するタイマーがあります(起動するまでに、リストには〜100個の要素が含まれます)。次に、リストにローパスフィルターを適用し(Signal Processing Math.NET Neodymライブラリを使用)、書き込みますデータをファイルに保存し、次のデータのバッチのためにすべてのリストをクリアします。
ここでの問題は、出力されたフィルター データが最初に大きなスイングを持っていることです。これは、フィルターが適用されるたびに発生するため、1 秒ごとに、データにいくつかの誤った値が含まれており、完全に役に立たなくなります。
これを修正して、フィルターが 1 秒ごとに適用されるようにするにはどうすればよいですか。ただし、トランジェントは回避できます。これは重複するウィンドウを使用して実行できるのではないかと疑っていますが、どうすればよいかわかりませんか?
これが私のフィルターのコードです。このコードは毎秒実行されます。
listXLow = MathNet.SignalProcessing.Filter.OnlineFilter.CreateLowpass(MathNet.SignalProcessing.Filter.ImpulseResponse.Finite, 100, 1, 30).ProcessSamples(listX.ToArray()).ToList();
ImpulseResponse.Finite の直後の引数で、100 はサンプリング レート、1 はカットオフ周波数、30 はフィルター次数です。
これは、私の I/O がどのように見えるかを示すスクリーンショットです。入力データは最初のグラフで、2 番目のグラフはフィルター出力を示しています。