私はに、のAndroidでオーディオ信号のリアルタイムデジタルフィルタリングを実装しようとしています。私は私のハイパスフィルタのための標準的なコードを使用:の100 samples
と入力データのフィルタに200ms
:java Androidでのデジタルフィルタリングが遅すぎる
void doFilter(final short in[], short out[], int sizeIn) {
int i, j;
for (i = 0; i < sizeIn; i++) {
out[i] = 0;
for (j = 0; j < size; j++)
if (i >= j) out[i] += H[j] * in[i - j];
else out[i] += H[j] * dataTail[i + size - j];
}
System.arraycopy(in, sizeIn - size - 1, dataTail, 0, size);
}
問題は、このコードがリアルタイムでマイクからの信号をフィルタリングするために非常にゆっくりとを動作することですa 1700 samples
です。理由は何で、この問題を解決する方法は何ですか? アドバイス、高速信号フィルタリング用のライブラリを完成してください。ありがとうございます。
変数を使用して合計を計算し、2番目(内側)のループの外側にあるout [i]に割り当てることができます。しかし、これだけが役に立つのかどうかはわかりません。 – h22
@ h22これがどのように助けることができるのかよく分かりませんでした – SolderingIronMen
配列メンバー[1]へのアクセスは1回の可変アクセスよりも遅く、ループで何度もやっています。私はAndroid Javaコンパイラがこれを最適化するのに十分スマートであるかどうかはわかりません。 – h22