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 回答