2012-02-18 33 views
2

我爲VHDL製作了一個正弦LUT,使用了256個元素。我使用MIDI輸入,所以值範圍8.17Hz(注#0)至12543.85z(注#127)。正弦LUT VHDL不會在800赫茲以下模擬

我有另一個LUT,計算必須發送多少數值到我的48 kHz編解碼器才能播放聲音(8.17Hz的頻率將需要48000/8.17 = 5870值)。

我有另一個LUT,其中包含一個索引因子,它是256/num_Values,它用於調用sin表中的值(例如:100*256/5870 = 4(帶整數舍入))。

我將此索引因子發送給另一個VHDL文件,該文件用於計算應發回哪個值。 (例如:index = index_factor*step_counter

當我得到這個索引,I除以100它,並調用sineLUT[index]得到那個我需要生成在所需頻率上的正弦波的值。

問題是,只有最後51個筆記似乎適用於我,我不知道爲什麼。它似乎在低於該頻率(< 650 hz)的任何事情上都停留在不變的音符上,並且每次我嘗試降低音符時都只是減小音量。

如果您需要我的部分代碼,請告訴我。

回答

3

只是猜測,我懷疑你的step_counter沒有經歷足夠的週期,所以你的索引(進入正弦lut)沒有經過360度的低頻。

對於任何更有用的東西,您可能需要發佈代碼。

另外,爲什麼不使用更像傳統DDS的東西? Analog Devices在基礎知識方面有很好的說明:DDS Tutorial

+0

啊是的,我從來沒有想過這件事。這對於爲什麼它在較低的頻率處變得更安靜是有意義的,它只是從取樣的正弦波讀取較小的值。我忘了我的代碼每20毫秒發出一次重置以同步一些i2c和音頻編解碼器問題。 謝謝。 – Eric 2012-02-20 06:59:13