今天看pic的逆變器程式,看到採集後的adbuf資料全部都是《5,這就搞不明白了,為什麼要左移5呀?然後看到上面說是相容q15,在qq群裡也問了高手,說是用於dsp小數運算,於是在網上找了下q15的定義,下面把q15整理下。
許多dsp都是定點dsp,處理定點資料會相當快,但是處理浮點資料就會非常慢。可以利用q格式進行浮點資料到定點的轉化,節約cpu時間。實際應用中,浮點運算大都時候都是既有整數部分,也有小數部分的。所以要選擇乙個適當的定標格式才能更好的處理運算。
q格式表示為:qm.n,表示資料用m位元表示整數部分,n位元表示小數部分,共需要m+n+1位來表示這個資料,多餘的一位用作符合位。假設小數點在n位的左邊(從右向左數),從而確定小數的精度
例如q15表示小數部分有15位,乙個short型資料,佔2個位元組,最高位是符號位,後面15位是小數字,就假設小數點在第15位左邊,表示的範圍是:-1浮點資料轉化為q15,將資料乘以2^15;q15資料轉化為浮點資料,將資料除以2^15。
例如:假設資料儲存空間為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次冪,就可以使用移位代替除法)。
Total Text標籤轉IC15格式
在 批量處理total text資料集格式 的基礎上改了幾行 修改了少量標籤中有換行符導致的錯誤結果。import re import cv2 import os import numpy as np from tqdm import tqdm total text to ic15 f zzxs e...
1 格式輸出
格式說明由 和格式字元組成,如 d f等。它的作用是將輸出的資料轉換為指定的格式輸出。格式說明總是由 字元開始的。不同型別的資料用不同的格式字元。格式字元有d,o,x,u,c,s,f,e,g等。如 d整型輸出,ld長整型輸出,o以八進位制數形式輸出整數,x以十六進製制數形式輸出整數,u以十進位制數輸...
WPF 15 格式化繫結的資料
為了得到更人性化的外觀,需要設計如何修剪資料列表和資料字段。在基本繫結中,資訊從源到目標傳遞過程沒有任何變化。但有時候希望將資訊轉換到更友好的內容再呈現到介面上。wpf提供了兩個工具 單個屬性 binding.stringformat 屬性針對簡單的,標準的格式化數字和日期而建立的。值轉換器功能更強...