Q格式

有符號數的表示法,機器數(出現在電腦的二進位數值)有3個特點, 無符號或符號轉換成數值來表示,沒有 +10101這樣的資料,而是以010101來表示,只表示單純的整數或小數,小數點的位置預設在一定的位置而較少變動,它的長度受到電腦硬體的限制,而不能無限增長。Q格式,就是將一個小數放大若干倍後,用整數來表示小數。

Q格式前提

無符號數:當參與運算的數值沒有負數且運算的結果也沒有負數時,則所有字元都可以表示數值,這種沒有符號的數,稱為無符號數(如記憶體儲存位址),有符號數:數值中有某位數值代表符號,通常最高位作為符號位,0代表正,1代表負。

真值:有符號數所代表的數值,例如:110所代表的值是 -2 而非 6,有符號數隻要去除符號位就可以獲得該數的大小,在運算時,它的符號位可參與運算。但在加減運算時,必須將它分離出來,才能進行運算。有時,還要確定哪個有符號數的真值比較大,才能確定結果的符號。為了達到這些功能,電路的設計就相當複雜。所以很多電腦系統不直接使用有符號數,而使用有符號數的1’s補數或2’s補數表示法作為編碼系統

正弦脈波寬度調變(SPWM)之控制方法經Q 格式乘法器轉換成振幅與頻率可變V/F 控制,當成其單相感應馬達的輸入信號,藉由控制責任周期的大小,以達到變電壓相對改變頻率的效果。

DSPs

1.實現數位系統的第一步

在自然世界中,所有的物理量包括時間、電壓、質量、位移等等,都是類比的、連續的。可是在數位系統中,訊號是在不連續的時間點取樣,物理量或訊號的大小也不再是連續,而是被量化(Quantized)。在數位系統中,只能用有限字元長度的數字去表示數量的大小,而不能以無限精確的數值(實數)去表示。為了實現數位系統;使用了定點數與浮點數的表示法。

a)定點數(Fixed Point Number):指一個數字的表示,其小數點是在固定的位置(位元)。

b)浮點數(Floating Point Number):使用假數以及指數兩部分來表示數值。

例如:一個不含正負號的四位數十進制,包含三位整數和一位小數;

定點數所能表示的à

※所以小於0.1以及大於999.9的數值皆無法用此格式表示。

浮點數所能表示的à

※最大值:0.999 × 10(9)即10的9次方

※最小值:0.001 × 10(0)即10的零次方

※動態範圍:20lg10(12)≒240(dB)

PS:動態範圍:指一個數字表示法所能表示最大數值與最小數值的比值。

c)兩種表示法的比較:

※有效位數:定點有效位數有四位數,浮點格式只有三位數。

※價格:定點DSP價廉且普及(90%);浮點DSP運用在複雜運算價格昂

貴。

d)DSP 的算數運算:

※負數:採用二補數法來表示。例如;﹣46(d)可表示成1101 0010(b)。用

二補數來表示有號數的好處是:只需一個加法器,就可以具備加、減

法運算的功能。

※Q格式:小數點位於第 n 位元之右側,稱為Qn 格式。例如;

16 位元二進位無號數:0100 0010 1000 0001

à在Q0格式下其表示的是:2^14+2^9+2^7+2^0=17025(d)

à在Q8格式下其表示的是:2^6+2^1+2^-1+2^-8=66.50390~(d)

à在Q16格式下其表示的是:2^-2+2^-7+2^-9+2^-16=0.25978~(d)

進行加法或減法時,Q格式並不會影響運算法則,兩個Q8 格式的小數相

加,所得到的數值仍是Q8格式。兩個Q6格式相減,所得到的數值仍是Q6格

式。因此在定點數之加減運算並不因Q格式不同而有差異。不過可能會產生溢位(overflow),而且不同格式的數值不能直接相加減。

乘法時,Q格式便會影響運算結果。兩個16 位元數做乘法,會得到32 位元數。此時只能取16位元。

àQ0 格式:取運算結果最低的16 位元,刪除較高的16 位元。

àQ16 格式:取運算結果最高的16 位元,刪除較低的16 位元。

3

處理有數號是采Q15格式來表示定點數,因為MSB被用來表示正負號。且在乘法運算不考慮溢位的問題。

舉例:+0.5 × (-0.5) = -0.25

1.100 0000 0000 0000× 0.100 0000 0000 0000

s⊕s.11 0000 0000 0000 0000 0000 0000 0000

得到的結果MSB 為兩數的MSB 做XOR 求得,並取上面畫底線Q15 的部分

可得1.110 0000 0000 0000 (16bit)。為了使結果也是Q15 格式,由於最高兩位元

僅是表示正負號,所以DSP會自行將結果的最高位元捨棄。

CPU是定點微處理器不能直接處理小數,C語言中的自動調用運行時的函式來處理浮點數(float型),C語言中抹平了定點處理器和浮點處理器的差別,用戶的編程工作量最少,但是編譯出來的代碼很龐大。在嵌入式套用中很多情況下,float型幾乎不能去想。

整數定標本質上並不複雜,簡單地說,就是通過假定小數點位於哪一位。從而確定小數精度。

常用Q格式來表示數的定標。Q0是把小數點位定於第0位的右側,Q15是定於第15位的右側。

公式為:

浮點Xf->定點Xq:

定點Xq->浮點Xf:

浮點1.1變成Q13就為:(int)(1.1*2^13)=9011;

Q0範圍:-32768<X<32767

Q15範圍:-1<X<0.9999695

定點加減法一定要具有相同的Q格式才能進行。

定點乘除法是Q值相加減。

DSP處理器本身沒有硬體除法器,除法通過減法和移位完成的。

定點左移右移相當於Q值加減;

Q15格式範圍是個不超過1的小數,小數之間相互乘法還是小數,永遠不會溢出。這是小數的一個優勢。

如果一個數據既有整數也有小數。使用Q格式,直觀的做法就是選定一個適當的Q格式。

再不就全部化為小數,再用Q15格式表示。

DSP晶片的定點運算

數據的溢出

1> 溢出分類:

上溢(overflow), 下溢(underflow)

2>溢出的結果:


Min Max
unsigned char 0 255
signed char -128 127
unsigned int 0 65535
signed int -32768 32767

上溢在圓圈上按數據逆時針移動;下溢在圓圈上順時鐘移動。

例:signed int :32767+1=-32768; 32768-1=32767

unsigned char:255+1=0; 0-1=255

3>為了避免溢出的發生,一般在DSP中可以設定溢出保護功能。當發生溢出時,自動將結果設定為最大值或最小值。

定點處理器對浮點數的處理

1> 定義變數為浮點型(float,double),用C語言抹平定點處理器和浮點處理器的區別,但是程式的代碼龐大,運算速度也慢。

2> 放大若干倍表示小數。比如要表示精度為0.01的變數,放大100倍去運算,運算完成後再轉化。但是這個做法比較僵硬,如要將上面的變數重新定義成0.001精度,又需要放大1000倍,且要重新編寫整個程式,考慮溢出等問題。

3> 定標法:Q格式:通過假定小數點位於哪一位的右側,從而確定小數的精度。

Q0:小數點在第0位的後面,即我們一般採用的方法

Q15 小數點在第15位的後面,0~14位都是小數位。

轉化公式:Q=(int)(F×pow(2,q)) F是浮點數

F=(float)(Q×pow(2,-q)) Q是定標數

Q格式的運算

1> 定點加減法:須轉換成相同的Q格式才能加減

2> 定點乘法:不同Q格式的數據相乘,相當於Q值相加

3> 定點除法:不同Q格式的數據相除,相當於Q值相減

4> 定點左移:左移相當於Q值增加

5> 定點右移:右移相當於Q減少

Q格式的套用格式

實際套用中,浮點運算大都時候都是既有整數部分,也有小數部分的。所以要選擇一個適當的定標格式才能更好的處理運算。一般用如下兩種方法:

1> 使用時使用適中的定標,既可以表示一定的整數復位也可以表示小數復位,如對於2812的32位系統,使用Q15格式,可表示-65536.0~65535.999969482區間內的數據。

2> 全部採用小數,這樣因為小數之間相乘永遠是小數,永遠不會溢出。取一個極限最大值(最好使用2的n次冪),轉換成x/Max的小數(如果Max是取的2的n次冪,就可以使用移位代替除法)。

相關詞條

相關搜尋

熱門詞條

聯絡我們