Sine LUT VHDL не будет имитировать частоту ниже 800 Гц

Я сделал синус LUT для VHDL, используя 256 элементов.

Я использую MIDI-вход, поэтому значения варьируются от 8,17 Гц (нота № 0) до 12543,85 Гц (нота № 127).

У меня есть еще один LUT, который вычисляет, сколько значений должно быть отправлено моему кодеку 48 кГц, чтобы воспроизвести звук (для частоты 8,17 Гц потребуется 48000/8.17 = 5870 значений).

У меня есть еще один LUT, который содержит коэффициент индекса, который равен 256/num_Values, который используется для вызова значений из таблицы sin (например: 100*256/5870 = 4 (с целочисленным округлением)).

Я отправляю этот коэффициент индекса в другой файл VHDL, который используется для расчета того, какое значение следует отправить обратно. (пример: index = index_factor*step_counter)

Когда я получаю этот индекс, я делю его на 100 и вызываю sineLUT[index], чтобы получить значение, которое мне нужно для генерации синусоиды с нужной частотой.

Проблема в том, что у меня работает только последняя 51 нота, и я не знаю почему. Кажется, что он застревает на постоянной ноте на любой частоте ниже этой (‹650 Гц) и просто уменьшает громкость каждый раз, когда я пытаюсь понизить ноту.

Если вам нужны части моего кода, дайте мне знать.


person Eric    schedule 18.02.2012    source источник


Ответы (1)


Просто предполагаю, что я подозреваю, что ваш step_counter не проходит достаточное количество циклов, поэтому ваш индекс (в синусоиды) не проходит полные 360 градусов для более низких частот.

Для чего-то более полезного вам, вероятно, придется опубликовать код.

Кстати, почему вы не используете что-то более похожее на обычный DDS? У Analog Devices есть хорошее описание основ: DDS Учебник

person Charles Steinkuehler    schedule 19.02.2012
comment
Ах да, я никогда не думал об этом. Это имеет смысл, почему он становится тише на более низких частотах, он просто считывает небольшие значения из дискретизированной синусоиды. Я забыл, что мой код отправлял сброс каждые 20 мс, чтобы синхронизировать некоторые проблемы с i2c и аудиокодеком. Спасибо. - person Eric; 20.02.2012