-1

現在、Android アプリケーションの加速度計データをフィルタリングする必要があります。まず、単純なローパス フィルター (単純な無限インパルス応答フィルター) を次のように使用しました。

for i from 1 to n
   y[i] := y[i-1] + α * (x[i] - y[i-1])

これにより、よりスムーズな結果が得られました。

次に、FFT で遊ぶことにしました。高速フーリエ変換を使用して信号を周波数領域に変換し、高周波の一部をゼロにしました。次に、逆フーリエ変換を使用して信号を再作成しました。これはすべて正常に機能し、FFT と IFT の実装が問題ないことがわかっています。ただし、単純な無限インパルス応答フィルターを使用する前に取得した信号ほど滑らかではありませんでした。さらにいくつかの周波数をゼロにしようとしましたが、期待したほど良い結果は得られませんでした。

この背後にある理由は何ですか? 私はFFTとIFTを使用すると、技術的には滑らかなグラフが得られるはずです。これは FFT でのサンプリングのためですか?

ありがとう

4

1 に答える 1

0

問題は、スペクターをゼロにしたことです。完全にゼロにすることはできません。時間領域で保持するには、周波数スペクターが滑らかな曲線である必要があります。サウンドの上に何らかのフィードバックが聞こえる可能性があります。これは、時間領域が周波数の突然の停止に対応していないためです。数学的には、ここで wolfram の値 1 を取得した fft で確認できます。1 は時間領域の無限長関数であり、常に 1 です。1 の fft はディラック デルタ関数 sqrt(2*pi) であり、周波数帯域の無限停止と同じです。ご覧のとおり、周波数が無限に短い場合、時間領域は無限に長くなります。そのため、作成したフィルターで完全に停止することはできません。

さらに理論が必要な場合は、デジタルフィルターの設計を読むことをお勧めします。迅速な解決策は、除去しようとしている周波数での db 出力を受け入れることです。ここの写真のようなもの

于 2013-06-08T15:24:54.363 に答える