關於Q格式資料總結

2021-08-10 12:28:38 字數 1173 閱讀 1403

q格式表示為:qm.n,表示資料用m位元表示整數部分,n位元表示小數部分,共需要 m+n+1位來表示這個資料,多餘的一位用作符合位。假設小數點在 n位的左邊(從右向左數),從而確定小數的精度

例如q15表示小數部分有15位,乙個short 型資料,佔2個位元組,最高位是符號位,後面 15位是小數字,就假設小數點在第 15位左邊,表示的範圍是: -1例如:假設資料儲存空間為 2個位元組,0.333×2^15=10911=0x2a9f ,0.333的所有運算就可以用0x2a9f 表示,同理10911×2^(-15)=0.332977294921875 ,可以看出浮點資料通過 q格式轉化後是有誤差的。

例:兩個小數相乘,0.333*0.414=0.137862 0.333*2^15=10911=0x2a9f ,0.414*2^15=13565=0x34fd short a = 0x2a9f; 

short b = 0x34fd; 

short c = a * b >> 15; //  兩個q15格式的資料相乘後為 q30格式資料,因此為了得到 q15的資料結果需要右移15位

這樣c的結果是0x11a4=0001000110100100 ,這個資料同樣是 q15格式的,它的小數點假設在第15位左邊,即為0.001000110100100=0.1378173828125... 和實際結0.137862 差距不大。或者0x11a4 / 2^15 = 0.1378173828125 

q格式的運算

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

2> 定點乘法:不同q格式的資料相乘,相當於q值相加,即q15資料乘以q10資料後的結果是 q25格式的資料

3> 定點除法:不同 q格式的資料相除,相當於 q值相減

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

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

q格式的應用格式

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

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

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

Q格式(Q15)DSP上浮點資料定點化處理

許多dsp都是定點dsp,處理定點資料會相當快,但是處理浮點資料就會非常慢。可以利用q格式進行浮點資料到定點的轉化,節約cpu時間。實際應用中,浮點運算大都時候都是既有整數部分,也有小數部分的。所以要選擇乙個適當的定標格式才能更好的處理運算。q格式表示為 qm.n,表示資料用m位元表示整數部分,n位...

Q15格式說明

今天看pic的逆變器程式,看到採集後的adbuf資料全部都是 5,這就搞不明白了,為什麼要左移5呀?然後看到上面說是相容q15,在qq群裡也問了高手,說是用於dsp小數運算,於是在網上找了下q15的定義,下面把q15整理下。許多dsp都是定點dsp,處理定點資料會相當快,但是處理浮點資料就會非常慢。...

Q格式 啟動過程 cmd檔案

定點處理器對浮點數的處理 1 定義變數為浮點型 float,double 用c語言抹平定點處理器和浮點處理器的區別,但是程式的 龐大,運算速度也慢。2 放大若干倍表示小數。比如要表示精度為0.01的變數,放大100倍去運算,運算完成後再轉化。但是這個做法比較僵硬,如要將上面的變數重新定義成0.001...