我爲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)的任何事情上都停留在不變的音符上,並且每次我嘗試降低音符時都只是減小音量。
如果您需要我的部分代碼,請告訴我。
啊是的,我從來沒有想過這件事。這對於爲什麼它在較低的頻率處變得更安靜是有意義的,它只是從取樣的正弦波讀取較小的值。我忘了我的代碼每20毫秒發出一次重置以同步一些i2c和音頻編解碼器問題。 謝謝。 – Eric 2012-02-20 06:59:13