專利名稱:一種兼顧定點(diǎn)dsp實(shí)時(shí)性又?jǐn)U展動(dòng)態(tài)范圍的方法
技術(shù)領(lǐng)域:
本發(fā)明涉及DSP處理器的數(shù)據(jù)處理方法,具體涉及一種兼顧定 點(diǎn)DSP實(shí)時(shí)性又?jǐn)U展動(dòng)態(tài)范圍的方法。
背景技術(shù):
DSP處理器可以分為兩大類:定點(diǎn)和浮點(diǎn)。隨著科學(xué)技術(shù)的發(fā)展, 應(yīng)用DSP的領(lǐng)域越來越廣,選擇一款合適的DSP芯片是非常重要的 一個(gè)環(huán)節(jié)。 一般來說,選擇DSP芯片時(shí)應(yīng)考慮到如下諸多因素DSP 芯片的運(yùn)算速度、價(jià)格、硬件資源、運(yùn)算精度、功耗、封裝形式、開 發(fā)工具等。
在上述諸多因素中, 一般而言,定點(diǎn)DSP芯片的價(jià)格較便宜, 功耗較低,但運(yùn)算精度也低。而浮點(diǎn)DSP芯片的優(yōu)點(diǎn)是運(yùn)算精度高, 且C語言編程調(diào)試方便,但價(jià)格稍貴,功耗也較大。
如果是在功耗要求很低的便攜式儀器中,應(yīng)該優(yōu)先選擇定點(diǎn)DSP 芯片。TI公司的TMS320C5000系列為低功耗16位定點(diǎn)DSP,可以 滿足低功耗要求,但是該系列DSP芯片的動(dòng)態(tài)范圍最大為96dB,如 果動(dòng)態(tài)范圍要求高,該芯片不能滿足動(dòng)態(tài)范圍要求。因?yàn)樵撓盗蠨SP 芯片中沒有浮點(diǎn)處理單元,所以有人用編譯器產(chǎn)生模擬浮點(diǎn)運(yùn)算的指 令來滿足動(dòng)態(tài)范圍。為了解決實(shí)時(shí)性問題,也有人采取了多個(gè)DSP 芯片同時(shí)工作的辦法。但是,在定點(diǎn)DSP中用編譯器產(chǎn)生模擬浮 點(diǎn)運(yùn)算的指令,運(yùn)算效率很低,不能滿足某些儀器的實(shí)時(shí)性要求; 采取多個(gè)DSP芯片同時(shí)工作的辦法可以解決實(shí)時(shí)性問題,但這又增 加了成本和功耗。
發(fā)明內(nèi)容
本發(fā)明的目的在于針對(duì)現(xiàn)有技術(shù)的缺陷,提供一種用一片低功耗定點(diǎn)DSP芯片同時(shí)滿足儀器的實(shí)時(shí)性和動(dòng)態(tài)范圍的方法。
本發(fā)明的技術(shù)方案如下 一種兼顧定點(diǎn)DSP實(shí)時(shí)性又?jǐn)U展動(dòng)
態(tài)范圍的方法,該方法在64位的加減運(yùn)算中,將參與運(yùn)算的每個(gè)操 作數(shù)和輸出結(jié)果分別存放在四個(gè)連續(xù)的16比特內(nèi)存單元中,操作 數(shù)X由X3、 X2、 XI、 X0級(jí)聯(lián)構(gòu)成,操作數(shù)Y由Y3、 Y2、 Yl、 YO級(jí)聯(lián)構(gòu)成,低位地址單元XO、 YO保存X、 Y的最低16位數(shù) 據(jù),高位地址單元X3、 Y3保存X、 Y的最高16位數(shù)據(jù),指針 ARO指向XO地址,指針AR1指向YO地址;運(yùn)算時(shí),先對(duì)(X1X0) 和(Y1Y0)進(jìn)行32位加減法運(yùn)算,將產(chǎn)生的進(jìn)位或錯(cuò)位標(biāo)志保存 在狀態(tài)位STl.CARRY中,然后分別對(duì)X2、 Y2及X3、 Y3進(jìn)行16 位加減法運(yùn)算,狀態(tài)位STl.CARRY根據(jù)所保存的進(jìn)位或錯(cuò)位標(biāo)志 參與運(yùn)算。
如上所述的兼顧定點(diǎn)DSP實(shí)時(shí)性又?jǐn)U展動(dòng)態(tài)范圍的方法,該方 法在32位的乘法運(yùn)算中,將參與運(yùn)算的每個(gè)操作數(shù)由兩個(gè)16位定 點(diǎn)數(shù)級(jí)聯(lián)表示,操作數(shù)X由X1、 XO構(gòu)成,操作數(shù)Y由Y1、 YO 構(gòu)成,輸出結(jié)果由Z3、 Z2、 Zl、 ZO級(jí)聯(lián)構(gòu)成;根據(jù)下式執(zhí)行乘 法運(yùn)算Z3Z2Z1Z0=X1X0XY1Y0。
如上所述的兼顧定點(diǎn)DSP實(shí)時(shí)性又?jǐn)U展動(dòng)態(tài)范圍的方法,其中, 在進(jìn)行數(shù)據(jù)處理時(shí),預(yù)先設(shè)置一個(gè)中間數(shù)值(23"n),當(dāng)所測量的結(jié) 果大于中間數(shù)值時(shí),就用高16位數(shù)據(jù)進(jìn)行運(yùn)算;當(dāng)所測量的結(jié)果 小于中間數(shù)值時(shí),在保證數(shù)據(jù)不溢出的情況下,把原始數(shù)據(jù)左移 n位,然后再用高16位數(shù)據(jù)進(jìn)行計(jì)算,得到最終結(jié)果后再減去移 位帶來的偏移20*log1()2n, n為0 31之間的整數(shù)。
本發(fā)明所提供的方法中用到的16位精度算法和移位結(jié)合的方 法同時(shí)滿足了實(shí)時(shí)性要求和動(dòng)態(tài)范圍要求;用到的擴(kuò)展精度的計(jì) 算方法與模擬浮點(diǎn)運(yùn)算比較,既降低了運(yùn)算量,同時(shí)又保持了浮 點(diǎn)運(yùn)算動(dòng)態(tài)范圍大、精度高的優(yōu)點(diǎn);同時(shí),所有的數(shù)據(jù)處理算法 全部采用匯編語言編寫,這樣又提高了數(shù)據(jù)處理速度。本發(fā)明可以同時(shí)滿足儀器的動(dòng)態(tài)范圍、精度和實(shí)時(shí)性要求,其中的方法也可以 在不同的場合分別使用。
圖1為64位數(shù)加減法運(yùn)算的示意圖。 圖2為32位數(shù)乘法運(yùn)算的示意圖。
具體實(shí)施例方式
下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)的描述。 在精度要求高、數(shù)據(jù)處理速度能滿足要求的情況下,提出了 一種32位和64位擴(kuò)展精度的計(jì)算方法,.使整個(gè)數(shù)據(jù)處理過程的 動(dòng)態(tài)范圍達(dá)到了 186dB。在運(yùn)算處理過程中加、減、乘法運(yùn)算是 必不可少的基本運(yùn)算,下面就對(duì)64位的加減運(yùn)算和32位的乘法 運(yùn)算進(jìn)行說明
64位操作數(shù)的加法運(yùn)算Z=X+Y。參加運(yùn)算的每個(gè)操作數(shù)分 別存放在四個(gè)連續(xù)的16比特內(nèi)存單元中,操作數(shù)X由X3、 X2、 XI、 X0級(jí)聯(lián)構(gòu)成,操作數(shù)Y由Y3、 Y2、 Yl、 YO級(jí)聯(lián)構(gòu)成,其 中,低位地址單元XO、 YO保存X、 Y的最低16位數(shù)據(jù),高位地 址單元X3、 Y3保存X、 Y的最高16位數(shù)據(jù)。ARO指向XO地址, AR1指向Y0地址。輸出也保存在4個(gè)連續(xù)的16比特內(nèi)存單元中。 如圖1所示,64位加減法運(yùn)算分三個(gè)步驟實(shí)現(xiàn)。第一步先對(duì) (X1X0)和(Y1Y0)進(jìn)行32位加減法運(yùn)算,產(chǎn)生的進(jìn)位或借位 標(biāo)志保存在狀態(tài)位ST1.CARRY中;第二、三步對(duì)X2、 Y2及X3、 Y3進(jìn)行16位加減法運(yùn)算,ST1.CARRY也根據(jù)所保存的進(jìn)位或錯(cuò) 位標(biāo)志參與運(yùn)算。
在進(jìn)行擴(kuò)展精度的乘法時(shí),參加運(yùn)算的每個(gè)操作數(shù)由兩個(gè)16 位定點(diǎn)數(shù)級(jí)聯(lián)表示,操作數(shù)X由X1、 XO構(gòu)成,操作數(shù)Y由Y1、 YO構(gòu)成,結(jié)果Z由Z3、 Z2、 Zl、 ZO構(gòu)成。執(zhí)行32位乘法運(yùn)算 時(shí),Z3Z2Z1Z0=X1X0xY1Y0,實(shí)現(xiàn)原理如圖2所示。
如果儀器需要進(jìn)行音頻處理或需要檢測突發(fā)信號(hào),都要求數(shù)
5字信號(hào)處理能實(shí)時(shí)進(jìn)行,如果采用32位擴(kuò)展精度的算法不能滿足 實(shí)時(shí)性,可以采用16位精度算法和移位結(jié)合的方法,為了滿足動(dòng) 態(tài)范圍的要求,采用如下的方法因?yàn)?6位的定點(diǎn)DSP在處理 接近于零的數(shù)據(jù)時(shí),會(huì)取近似值等于零,這樣就降低了精確度, 無法避免人耳可以分辨的諧波失真,所以我們預(yù)先設(shè)置一個(gè)中間 數(shù)值(231",當(dāng)所測量的結(jié)果大于中間數(shù)值時(shí),就用高16位數(shù)據(jù) 進(jìn)行運(yùn)算;當(dāng)所測量的結(jié)果小于中間數(shù)值時(shí),在保證數(shù)據(jù)不溢出 的情況下,把原始數(shù)據(jù)左移n位,然后再用高16位數(shù)據(jù)進(jìn)行計(jì)算, 這樣相當(dāng)于把動(dòng)態(tài)范圍擴(kuò)大了 20*1(^1()2 得到最后結(jié)果后要減去 移位帶來的偏移20*log1Q2n, n為0~31之間的整數(shù)。例如,如果 測量的結(jié)果最高5位為0時(shí),可以設(shè)置中間數(shù)值為23"5=0x0400 0000, 指定n-5,當(dāng)所測量的結(jié)果小于0x0400 0000時(shí),就可以把原始數(shù) 據(jù)左移5位后再取高16位數(shù)據(jù)進(jìn)行運(yùn)算。
下面結(jié)合幾個(gè)具體實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)描述。 實(shí)施例1:
2個(gè)32位數(shù)相乘的例子 void MyMul32 (LDATA *x, LDATA *y, LDATA *r, ushort nx)
參數(shù)說明
x[nx], y[nx]為輸入?yún)?shù),Q31格式; r[nx]為x, y相乘的結(jié)果,Q31格式; nx為輸入/輸出數(shù)據(jù)的個(gè)數(shù)。 功能說明
for(int I=0;I<nx;I++)
r[I]=x[I]xy[I];
舉例
x
= 0.5 =0x40000000(Q3i;> y
= 0.25=0x20000000(Q31) r
= 0.125=0xl0000000(Q3i;)
6實(shí)施例2:
32位濾波算法,濾波累加相乘的中間過程用到了 32位相乘和64 位加法運(yùn)算的例子
myfir32v2(LDATA *x,LDATA *h,LDATA *r,LDATA承scratch,uint nx,uint nh)
參數(shù)說明
x[nx]: nx個(gè)實(shí)數(shù)輸入向量指針,Q31格式。
h[nh]: 大小為nh的系數(shù)向量指針,正常順序,Q31格式。例如,
nh=6,貝ljh[nh]-(h0,hl,h2,h3,h4,h5〉, hO在數(shù)組中位于最
低存儲(chǔ)器地址。 r[nx-nh]: nx-nh十l個(gè)實(shí)數(shù)輸出向量指針。Q31格式。 scratch[nx]:延時(shí)緩沖區(qū)指針 nx:輸入采樣數(shù) nh:濾波系數(shù)的個(gè)數(shù)。
功能說明
1["/2-1>柳+ x["/ -2]x叩]+…+ x
x,-l] r[l]=x["http://-l + l]x,+ x["/ -1]x叩]+…+ x[l]x/z["/ -1]
= x["/z -1 + nx] x ft[O] + x[打/z — 2 + nx] x +…+ :c[nx] x / ["h —— 1]
舉例
x[3]={0.5,0.5,0.5,0.5} ={0x40000000, 0x40000000, 0x40000000, 0x40000000}
h[3]={0.04,0.45,0.45,0.04} ={0x051EB850, 0x39999980, 0x39999980, Ox051EB850}
理論計(jì)算
40] = x[3] x剛+ x[2] x剛+ x[l] x /z[2] + , x / [3] =0.5 x 0.04 + 0.5 x 0.45 + 0.5 x 0.45 + 0.5 x 0.04 = 0.49
仿真結(jié)果r
={ 0.4899999872} ={0xC147AE30}
7實(shí)施例3:
16位精度算法和移位結(jié)合的方法舉例
當(dāng)采用16位精度算法進(jìn)行濾波數(shù)據(jù)處理時(shí),如果濾波輸出結(jié)
果的高8位為0, (r
.[15~8]=0),則以后接收的參與濾波處理的
輸入數(shù)據(jù)全部左移5位,濾波后的結(jié)果FirOutput需要減去移位帶
來的偏移201og1Q32,并且利用FirOutput右移5位后判斷高8位
是否為0,以便確定下次參與濾波處理的輸入數(shù)據(jù)是否需要移位;
如果濾波輸出結(jié)果的高8位不為0,則以后參與濾波處理的輸入
數(shù)據(jù)不用移位。 舉例
輸入32位數(shù)據(jù)
x[3]={0x0000 1000,0x0000 2000,0x0000 1200,0x0000 2400}
如果取高16位數(shù)據(jù)參與運(yùn)算
X[3]={0x0000,0x0000,0x0000,0x0000}
濾波系數(shù)
h[3]={0x0001,0x0002,0x0002,0x0001} 因?yàn)閰⑴c濾波的輸入數(shù)據(jù)太小,輸出的結(jié)果r
二0x0000; 因?yàn)闉V波輸出結(jié)果高8位為0,則以后接收的數(shù)據(jù)全部左移5 位后再取高16位數(shù)據(jù)
X[3]={0x0002,0x0004,0x0002,0x0004}
移位后濾波輸出結(jié)果r[O] = 0x0012 (取對(duì)數(shù)結(jié)果為 201og(0x0012)=-65.2035),
減去移位帶來的偏移-65.2035-201og1()32=-95.3065。
從舉例可以看出,如果用16位數(shù)據(jù)進(jìn)行處理,動(dòng)態(tài)范圍只能 達(dá)到96dBm,左移5位后,動(dòng)態(tài)范圍可以達(dá)到126dBm,擴(kuò)大了 30dBm的動(dòng)態(tài)范圍。根據(jù)輸入數(shù)據(jù)的大小可以調(diào)整移位的大小, 進(jìn)而調(diào)整動(dòng)態(tài)范圍。
權(quán)利要求
1. 一種兼顧定點(diǎn)DSP實(shí)時(shí)性又?jǐn)U展動(dòng)態(tài)范圍的方法,其特征在于該方法在64位的加減運(yùn)算中,將參與運(yùn)算的每個(gè)操作數(shù)和輸出結(jié)果分別存放在四個(gè)連續(xù)的16比特內(nèi)存單元中,操作數(shù)X由X3、X2、X1、X0級(jí)聯(lián)構(gòu)成,操作數(shù)Y由Y3、Y2、Y1、Y0級(jí)聯(lián)構(gòu)成,低位地址單元X0、Y0保存X、Y的最低16位數(shù)據(jù),高位地址單元X3、Y3保存X、Y的最高16位數(shù)據(jù),指針AR0指向X0地址,指針AR1指向Y0地址;運(yùn)算時(shí),先對(duì)(X1X0)和(Y1Y0)進(jìn)行32位加減法運(yùn)算,將產(chǎn)生的進(jìn)位或錯(cuò)位標(biāo)志保存在狀態(tài)位ST1.CARRY中,然后分別對(duì)X2、Y2及X3、Y3進(jìn)行16位加減法運(yùn)算,狀態(tài)位ST1.CARRY根據(jù)所保存的進(jìn)位或錯(cuò)位標(biāo)志參與運(yùn)算。
2. 如權(quán)利要求1所述的兼顧定點(diǎn)DSP實(shí)時(shí)性又?jǐn)U展動(dòng)態(tài)范圍的 方法,其特征在于該方法在32位的乘法運(yùn)算中,將參與運(yùn)算的每 個(gè)操作數(shù)由兩個(gè)16位定點(diǎn)數(shù)級(jí)聯(lián)表示,操作數(shù)X由XI、 XO構(gòu) 成,操作數(shù)Y由Y1、 YO構(gòu)成,輸出結(jié)果由Z3、 Z2、 Zl、 ZO級(jí) 聯(lián)構(gòu)成;根據(jù)下式執(zhí)行乘法運(yùn)算Z3Z2Z1Z0-X1X0XY1Y0。
3. 如權(quán)利要求1或2所述的兼顧定點(diǎn)DSP實(shí)時(shí)性又?jǐn)U展動(dòng)態(tài)范 圍的方法,其特征在于在進(jìn)行數(shù)據(jù)處理時(shí),預(yù)先設(shè)置一個(gè)中間數(shù)值(231—n),當(dāng)所測量的結(jié)果大于中間數(shù)值時(shí),就用高16位數(shù)據(jù)進(jìn)行 運(yùn)算;當(dāng)所測量的結(jié)果小于中間數(shù)值時(shí),在保證數(shù)據(jù)不溢出的情 況下,把原始數(shù)據(jù)左移n位,然后再用高16位數(shù)據(jù)進(jìn)行計(jì)算,得 到最終結(jié)果后再減去移位帶來的偏移20*lOg1Q2n, n為0 31之間 的整數(shù)。
全文摘要
本發(fā)明涉及DSP處理器的數(shù)據(jù)處理方法,具體涉及一種兼顧定點(diǎn)DSP實(shí)時(shí)性又?jǐn)U展動(dòng)態(tài)范圍的方法。該方法運(yùn)用了一種32位和64位擴(kuò)展精度的運(yùn)算方法,使整個(gè)數(shù)據(jù)處理過程的動(dòng)態(tài)范圍達(dá)到了186dB,這種擴(kuò)展精度的運(yùn)算方法與浮點(diǎn)算法比較,既降低了運(yùn)算量,同時(shí)又保持了浮點(diǎn)運(yùn)算動(dòng)態(tài)范圍大、精度高的優(yōu)點(diǎn);同時(shí)所有的數(shù)據(jù)處理算法全部采用匯編語言編寫,這樣既提高了動(dòng)態(tài)范圍和精度,又提高了數(shù)據(jù)處理速度。
文檔編號(hào)G06F7/50GK101482807SQ20081000092
公開日2009年7月15日 申請(qǐng)日期2008年1月8日 優(yōu)先權(quán)日2008年1月8日
發(fā)明者唐麗萍 申請(qǐng)人:中國電子科技集團(tuán)公司第四十一研究所