【问题标题】:Sine LUT VHDL wont simulate below 800 hzSine LUT VHDL 不会模拟低于 800 hz
【发布时间】:2012-02-18 23:14:43
【问题描述】:

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

我使用 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 个音符对我有用,我不知道为什么。在低于该频率 (

如果您需要我的部分代码,请告诉我。

【问题讨论】:

    标签: midi vhdl lookup-tables trigonometry


    【解决方案1】:

    只是猜测,我怀疑您的 step_counter 没有经过足够的周期,因此您的索引(进入 sine lut)没有通过较低频率的完整 360 度。

    如果您想了解更多有用的信息,您可能需要发布代码。

    顺便说一句,您为什么不使用更像传统 DDS 的东西? ADI 公司有一篇很好的关于基础知识的文章:DDS Tutorial

    【讨论】:

    • 啊,是的,我从没想过。这对于为什么它在较低频率下变得更安静是有道理的,它只是从采样的正弦波中读取小值。我忘记了我的代码每 20 毫秒发送一次重置以同步一些 i2c 和音频编解码器问题。谢谢。
    猜你喜欢
    • 2014-03-25
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 1970-01-01
    • 2018-09-30
    • 2021-11-15
    • 1970-01-01
    相关资源
    最近更新 更多