哪些因素决定了查找表的效率?

时间:2016-12-13 22:27:27

标签: c lookup sine

过去几周我一直致力于合成器项目,实施一套基于C的数控振荡器,将其输出馈送到FPGA上的DAC。

我尝试的一件事是使用查找表来更有效地确定给定音调的正弦值。例如,请考虑以下代码:

PhaseArray[NOTE1-1][idx]  = ((PhaseArray[NOTE1-1][!idx]  + SigmaArray[NOTE1-1])  % (MODULO_CONST) );
....
PhaseDivArray[NOTE1-1][idx]  = PhaseArray[NOTE1-1][idx]  >> 10;
....
audio = ((iNoteOn[NOTE1-1])  * (SINE_TABLE[PhaseDivArray[NOTE1-1][idx]])) +
....

现在这让我感到困惑。我有相当数量的相位累加器同时运行而没有问题。当我不打扰正弦查找并使用有效的方波信号时,我可以得到十几个音符来正确播放。

但是第二次我开始使用我已定义的SINE_TABLE [1024]查找(这是一个static表,其中包含正弦曲线的无符号16位整数值),减速立即到达相同点微控制器努力以正确的速度产生3个音调以进行缓冲播放。

是什么导致查找表效率低下?是否与在内存中定义表的方式有关?

0 个答案:

没有答案