Sine LUT VHDL不会模拟低于800赫兹

时间:2012-02-18 23:14:43

标签: midi vhdl lookup-tables sine

我使用256个元素为VHDL制作了正弦LUT。

我使用MIDI输入,因此值范围为8.17Hz(音符#0)至12543.85z(音符#127)。

我有另一个LUT计算为了播放声音必须发送到48 kHz编解码器的值(8.17Hz频率需要48000/8.17 = 5870值)。

我有另一个包含索引因子的LUT,它是256/num_Values,用于调用sin表中的值(例如:100*256/5870 = 4(带整数舍入))。

我将此索引因子发送到另一个VHDL文件,该文件用于计算应该发回的值。 (例如:index = index_factor*step_counter

当我得到这个索引时,我将它除以100,并调用sineLUT[index]得到我需要以所需频率生成正弦波所需的值。

问题是,只有最后51个音符似乎对我有用,我不知道为什么。它似乎在低于该频率(<650赫兹)的任何东西上都被卡在一个恒定音符上,并且每次我试图降低音符时音量都会减小。

如果您需要部分代码,请与我们联系。

1 个答案:

答案 0 :(得分:3)

只是猜测,我怀疑你的step_counter没有经历足够的周期,所以你的索引(进入正弦波)对于较低的频率不会经历完整的360度。

如果您有任何帮助,可能需要发布代码。

顺便说一句,为什么你不使用更像传统DDS的东西? ADI公司对基础知识进行了很好的描述:DDS Tutorial