1

私は主に、後で自分のシステム (Arduino ボード) に移植する一般的なアルゴリズムが必要ですが、他の方向で研究を続けるためのヒントさえ得られてうれしいです。

周期的な信号を表す 5 秒間をカバーする約 650 のサンプルのセットがありますが、かなりのノイズがあります。サンプルは TAOS230 光センサーからのもので、信号は血流に基づく人間の皮膚の透明度です。

実際には人間の脈拍であるメイン/ドミナント信号の周波数が必要です。サンプルは次のようになります https://www.dropbox.com/s/fw196r6yf1awhrh/untitled2.bmp

ここには、約 5k サンプルのダンプがありますhttps://www.dropbox.com/s/efwvyn5oec7ixgg/samples.txt

ありがとうございました、

アレックス

4

1 に答える 1

0

私がarduinoでよく行ったことは、次のような入力データを平均化する関数を使用することです

newx には新しいサンプル データが含まれています

 x = (9 * x +newx ) /10

これにより信号が減衰します。また、はんだ付けが不十分であるとノイズレベルが高くなることに注意してください。それも確認してください。

次のステップは、実際の平均を定義することです。次に、頻度を取得するために上/下に移動した回数を数えます。-n below または +n above のように定義することでそれを行います。これは少しあいまいな実装ですが、機能します。(そうでなければ、平均からの距離nを使用しないと、平均のサンプルで多くの誤検知が発生します。

疑似コードの状態変化のみをカウントするように関数を作成します。

#// counting state changes
if ( state > avg_state + n ) and (oldstate = -1)  {statecount++ : oldstate = +1 } 
if ( state < avg_state - n ) and (oldstate = +1)  {statecount-- : oldstate = -1 }

おそらく少し単純 (FFT なし) ですが、多くの場合、単純なことがうまく機能します。

于 2012-12-03T18:06:17.580 に答える