希望透過這個blog,分享軔硬體之間的動作,用到Python、Arduino。另外會分享新的USB PD Type-C Spec。 By this blog, I want to share the interaction of Firmware and Hardware. And some of the latest USB spec. If you have question, please don't hesitate to contact with me. My e-mail address: zsnes631@yahoo.com.tw
2020年1月2日 星期四
DSP TI IQ_math and Float format
IEEE 754單精度Float為32bit浮點數,TI定義了IQ-Math,在某些沒有FPU的
C2000 MCU,用定點來模擬浮點。例如F28035沒有FPU單元,就可以用
IQ-Math來做浮點運算,而F28335有FPU單元,就可以用Float來做運算。
下面解釋兩者的格式與差異。
Float Format
Float總有有32bit,格式如下
s為正負號(sign),佔1 個bit,0為正, 1為負。
e為指數(exponent),佔8個bit。
f為尾數(fraction),佔23個bit。
數值非平均分佈,離中心值"0"越遠,解析度越差。
例如:0x41200000 = 0 , 100 0001 0, 010 0000 0000 .... 0000b ,
可以得到 s=0, e=130, f=1.01b = 1.25(十進制), v=2^3 * (1.25)= 10.0。
IQ-Math Format
TI IQ-Math總共有32bit,I與Q的佔多少bit,是可以設定的,像是I1Q31或I31Q1。
例如"I8Q24"格式如下:
S為正負號,佔1 個bit,0為正, 1為負。
I為指數,佔7個bit。
f為分數,佔24個bit。
可以表示的範圍為 -2^(I-1)~ 2^(I-1) => -128 ~ 128,解析度為2^(-Q)=2(-24),
所以如果我們要增加表示的範圍,就增加I,要增加解析度,就要增加Q。
當S=1:表示這個數值為負,在I8Q24,就會有前面的 -2^I= -256,
在2進制就用2的補數來表示負數。例如11010110表示為
負的"101010"= -42
當S=0:就沒有-2^I這個值。將前面的例子11010110將前面的sign
bit改為"0",會得到正數"01010110"=78。
例如:0x41200000 = 0 , 100 0001, 0 010 0000 0000 .... 0000b ,
=2^6+2^0+2^(-3)=65.125。
IQ-Math Function
浮點運算與IQmath在算數函式、三角函式的指令,
浮點運算與IQmath的轉換函式。
Referemce
1.IQ Math on the Texas Instruments TMS320C28x DSP
http://read.pudn.com/downloads287/ebook/1294018/IQMath-datasheet/IQmath%E7%9A%84%E4%BD%BF%E7%94%A8.pdf
訂閱:
文章 (Atom)