2015-02-09 68 views
0

我正在生成LUT,將0-2PI分成512個片段,然後找到這些值的正弦值並將它們存儲爲Q1.31值。如何使用定點算術在正弦查找表(LUT)中找到偏移量

實施例:

LUT[0] = 0 

LUT[1] = sin((1/512) * 2*PI) * (2^31) 
.. 
.. 

LUT[511] = sin((511/512) * 2*PI) * (2^31) 

我的輸入也是在Q1.31格式的值。

我的問題是我怎麼去使用LUT,即什麼是找到該表中的偏移值,當我得到一個隨機值作爲輸入弄清楚正弦值

實例的算法:

int sample_input = 0.125 * (2^31) //0.125radians in Q31 format = 268435456 

回答

0

請注意0.125radians * (2^31)方法不適用於大於1弧度的角度。也許你想規範化角度 (0.125radians/2Pi) * (2^31)
無論如何,你需要將2^31範圍映射到2^9 - 所以只需除以2^22即可。 例如:

Angle = 0.125 radians. 
0.125 /(2*Pi) * 2^31 = 42 722 829 
42 722 829/2^22 = 10 
Result = Lut[10] = 262 874 923 
+0

可否請您詳細說明您的答案,舉個例子吧? – RuD 2015-02-09 10:23:16

+0

添加了示例... – MBo 2015-02-09 10:37:38

+0

我的輸入是Q31格式,就像我在問題中提到的那樣。所以0.125是268435456.我假設輸入條件小於1rad。算法如何改變呢? – RuD 2015-02-09 11:21:30