0

フィルター用に次のコードがあります。

// Shift array to the left
memmove(&Fifo[0], &Fifo[1], 12 * 4);

// Add new value
Fifo[12] = NewValue;

int Result = Factor[0] * Fifo[6];

Result += Factor[1] * (Fifo[5] + Fifo[7]);
Result += Factor[2] * (Fifo[4] + Fifo[8]);
Result += Factor[3] * (Fifo[3] + Fifo[9]);
Result += Factor[4] * (Fifo[2] + Fifo[10]);
Result += Factor[5] * (Fifo[1] + Fifo[11]);
Result += Factor[6] * (Fifo[0] + Fifo[12]);

パフォーマンスを向上させるために、呼び出しごとに大量のメモリをコピーする必要がないように、これを書き直す方法はありますか? 循環バッファーとリンク リストについて考えましたが、追加のコードと複雑さがさらに必要になるため、上記が最適なオプションのようです。

4

1 に答える 1

1

バッファの開始点などのインデックスを使用して追加の変数を保持するだけで循環バッファを実装でき、Fifo へのすべての参照をそれに対して相対的に作成できます (モジュロ 13 -- ありがとう、Ingo!); そうすれば、シフトはそのインデックスをぶつけるだけです。

于 2013-09-02T15:46:06.670 に答える