在學(xué)習(xí)matlab/simulink中,會遇見的一個東西就是fixdt()這個東西,此前我對這個東西一直抱有疑惑,現(xiàn)在也不太明白,在網(wǎng)上看了很多的答案,也不甚明了,我這篇博客介紹一下這個東西。
仿真結(jié)果是1024,然后將Output data type 設(shè)置成fixdt(1,16,9)
仿真結(jié)果是64.怎么理解這個東西呢?
fixdt()函數(shù)就是這個問題,fixdt(1,16,10),1代表的是否有符號位,16代表的是總共16位,10代表的是小數(shù)位是10位。
fixdt(1,16,10)的工作方式就是,總共16位,將1024是10000000000,將16位從右到左數(shù)10位作為小數(shù)位,其他是整數(shù)位,已經(jīng)是溢出了,就是說已經(jīng)失真了。
如果看fixdt(1,16,2),仿真的結(jié)果是1024,代表的是小數(shù)位是2。
(注意:這篇博客是邊摸索,邊寫的)
但是上面瞎扯了那么多,這個東西到底有什么用呢?
1、Q格式。
簡單來說Q格式就是定點計算,有整數(shù)位和小數(shù)位,比如32位的是 從Q0-Q31,16位的就是從Q0-Q15.
Q后面跟的數(shù)越大,代表的是小數(shù)位越多,精度越高。首先小數(shù)位越多,整數(shù)位就越少,能表示的范圍變小。而Q格式的轉(zhuǎn)換就是左移和右移,將Q格式變成一致就可以進行運算。
2、浮點數(shù)
浮點數(shù)很簡單,就是平常見到的整數(shù)、小數(shù)這些,但是在計算機里怎么表示呢?怎么把浮點數(shù)變成定點數(shù)呢?
使用fixdt(1,32,10);這就變成了Q10。
3、理解下面的程序
首先ADC采樣是12位的,通過數(shù)據(jù)類型轉(zhuǎn)換成32位的,因為采集的是三相,選擇模塊選擇出來的是第一個和第二個,減去2048是定標(biāo),左移6位就將12位的數(shù)變成了從右起第一位一直到第18位,而第二個數(shù)據(jù)類型轉(zhuǎn)換里是fixdt(1,32,17),變成Q17.
為什么這么做,首先最大18位,小數(shù)點后面17位,全部都是小數(shù)。設(shè)置的SI格式,范圍在0-1之間。
因此我認(rèn)為fixdt()的作用就是做定點用的,還有就是設(shè)定小數(shù)位是多少位的。
|
|