カメラフレームの輝度を一定期間測定し、フーリエ解析を使用して心拍数を計算して波の周波数を見つける Android アプリを作成しています。問題は、スペクトル分析が次のようになることです。
これは、スペクトル分析がどのように見えるべきか (正規分布のように) のほぼ逆です。これを正確に評価して最大マグニチュードのインデックスを見つけることはできますか? それとも、このスペクトルは私のデータにノイズが多すぎることを示していますか?
カメラフレームの輝度を一定期間測定し、フーリエ解析を使用して心拍数を計算して波の周波数を見つける Android アプリを作成しています。問題は、スペクトル分析が次のようになることです。
これは、スペクトル分析がどのように見えるべきか (正規分布のように) のほぼ逆です。これを正確に評価して最大マグニチュードのインデックスを見つけることはできますか? それとも、このスペクトルは私のデータにノイズが多すぎることを示していますか?
ここで2つの問題が発生しているようです:
1) FFT 出力は、多くの場合、負の周波数の値を正の周波数の右側に配置します。これは、ここに当てはまるようです。したがって、FFT の右半分を左に移動しfreq=0
、中央に配置する必要があります。
2)コメントでは、マグニチュードをプロットしていると言っていますが、明らかにそうではありません(マグニチュードは0より大きく、対称でなければなりません)。代わりに、おそらく実際の部分をプロットしているだけです。代わりに、マグニチュードまたはRe*Re + Im*Im
を使用します。ここで、Re
とIm
はそれぞれ実部と虚部です。(数値の形式によっては、 のようなものMath.sqrt(Math.pow(a.re, 2) + Math.pow(a.im, 2))
です。)