版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
TMS32C54X優(yōu)化C函數(shù)庫(kù)北京金信諾科技June,1999目錄第一章概述3一、DSP函數(shù)數(shù)據(jù)類型3
二、從C程序中調(diào)用函數(shù)3
三、從匯編程序中調(diào)用函數(shù)5
四、其他說(shuō)明6第二章數(shù)學(xué)函數(shù)庫(kù)7add向量相加7
sub向量相減8
mul3232位向量相乘9
neg向量求反10
neg32雙精度向量求反11
矩陣相乘12
mtrans矩陣轉(zhuǎn)置13
maxidx向量最大元素的序號(hào)14
maxval向量元素的最大值15
minidx向量最小元素的序號(hào)16
minval向量的最小元素17
atan16反正切18
atan2_16反正切219
sine三角正弦20
sqrt_1616位數(shù)的平方根21
log_2以2為底的對(duì)數(shù)22
log_10以10為底的對(duì)數(shù)23
logn以e為底的對(duì)數(shù)24
recip16位數(shù)的倒數(shù)25
expn指數(shù)26
power向量的功率27
bexp塊的冪28
rand16init初始化隨機(jī)數(shù)生成器29
rand16隨機(jī)向量生成器30
fltoq15浮點(diǎn)數(shù)到Q15數(shù)據(jù)轉(zhuǎn)換31
q15toflQ15到浮點(diǎn)數(shù)轉(zhuǎn)換32第三章FFT函數(shù)庫(kù)33cbrev復(fù)數(shù)逆序33
復(fù)數(shù)FFT34
復(fù)數(shù)逆FFT36
實(shí)數(shù)FFT(替換)38
逆實(shí)數(shù)FFT(替換)40第四章卷積與FIR濾波器42convol卷積42
cfirFIR濾波器43
firFIR44
firsFIR濾波器45
firs2FIR濾波器(常用)47
firdecFIR濾波器48
firinterp插值FIR濾波器50
firlatFIRLattice濾波511hilb16Hilbert變換器52第五章IIR濾波器54iircas4使用4個(gè)參數(shù)的IIR濾波(直接實(shí)現(xiàn)形式II)54
iircas5使用5個(gè)參數(shù)的IIR濾波(直接實(shí)現(xiàn)形式II)56
iircas51使用5個(gè)參數(shù)的IIR濾波直接實(shí)現(xiàn)形式I)58
iirlatIIRlattice濾波59
iir32雙精度IIR濾波60第六章自適應(yīng)濾波器62dlms自適應(yīng)延遲LMS濾波62
nblms標(biāo)準(zhǔn)化的LMS塊濾波64
ndlms標(biāo)準(zhǔn)化的延遲濾波66第七章相關(guān)函數(shù)庫(kù)68acorr自相關(guān)68
corr互相關(guān)702第一章概述一、DSP函數(shù)數(shù)據(jù)類型DSP函數(shù)庫(kù)處理以下的小數(shù)數(shù)據(jù)類型:Q3.12:包含3個(gè)整數(shù)位和12個(gè)小數(shù)位,其各位的定義如下:位1514131211109…0值符號(hào)I3I2I1Q11Q10Q9…Q0它表示的數(shù)據(jù)范圍是(-8,8),最小的小數(shù)分辨率為2?12=2.441×10?4。Q.15(DATA):一個(gè)Q.15表示的是16位的short類型的數(shù)據(jù),定義為DATA,各位的定義如下:位1514131211109…0值符號(hào)Q14Q13Q12Q11Q10Q9…Q0它表示的數(shù)據(jù)范圍是(-1,1),最小的小數(shù)分辨率為2?15=×10?5。Q.31(LDATA):一個(gè)Q.31用long類型的數(shù)據(jù)來(lái)表示(32位),定義為L(zhǎng)DATA,各位的定義如下:低位:位15141312…3210值Q15Q14Q13Q12…Q3Q2Q1Q0高位:位15141312…3210值符號(hào)Q30Q29Q28…Q19Q18Q17Q16除非特別說(shuō)明,DSP函數(shù)庫(kù)中使用的都是Q.15類型的數(shù)據(jù)二、從C程序中調(diào)用DSP函數(shù)為了正確使用DSP函數(shù)庫(kù)中的函數(shù),必須執(zhí)行以下步驟:將需要調(diào)用的庫(kù)函數(shù)的頭文件“.h”包含在“.c”文件中。
使用正確的,反映C54x板上內(nèi)存結(jié)構(gòu)的連接命令文件。3將需要調(diào)用的庫(kù)文件“.lib”包含在連接命令文件“.cmd”中。下面的示例說(shuō)明了DSP函數(shù)的調(diào)用方法:/*example.c*/#includec54math.h/*包含庫(kù)函數(shù)的文件頭*//*必要時(shí)需指明文件所在目錄*/floatxf[3]={0.1,0.2,0.3};
floatyf[3]={0.2,0.3,0.4};shortx[3];
shorty[3];
shorti;main(){for(i=0;i<3;i++)y[i]=x[i]=0;fltoq15(xf,x,3);
fltoq15(yf,y,3);
add(x,y,x,3,1);
q15tofl(x,xf,3);}//examples.cmd-c-lrts.lib-lc54math.lib/*連接時(shí)必須包含庫(kù)函數(shù)*//*必要時(shí)需指明文件所在目錄*/-stack0x200
-heap0x200-otest.out/*輸出文件*/
-mtest.map/*存儲(chǔ)器映像文件*/MEMORY
{PAGE0:INT_PM_DRAM:origin=0080h,length=1380h
EXT_PM_RAM:origin=1400h,length=0ec00hPAGE1:INT_DM_SCRATCH_PAD_DRAM:origin=0060h,length=20h
INT_DM_1:origin=0080h,length=01380h4EXT_DM_RAM:origin=1400h,length=0ec00h}SECTIONS
{.text:{}>INT_PM_DRAM0
.cinit:{}>INT_PM_DRAM0
.switch:{}>INT_PM_DRAM0
.data:{}>INT_DM_11
.stack:{}>INT_DM_11
.bss:{}>INT_DM_11
.sysmem:{}>INT_DM_11
.const:{}>INT_DM_11
.dout:{}>INT_DM_1PAGE1}程序中將xfyf都轉(zhuǎn)化成Q152x中。
然后將x轉(zhuǎn)換成小數(shù)形式,存入xf中。三、從匯編程序中調(diào)用DSP函數(shù)對(duì)DSP準(zhǔn)C的調(diào)用規(guī)則,執(zhí)行的結(jié)果與標(biāo)準(zhǔn)C計(jì)算所得到的結(jié)果相同。例如,C語(yǔ)言
中對(duì)加法的調(diào)用:add(x,y,r,32,0);可以使用匯編調(diào)用為:stm#0,ar0pshmar0stm#32,ar0pshmar0pshmarg_r;arg_r為指向向量r的指針
pshmarg_y;arg_y為指向向量y的指針
ldmarg_x,A;arg_x為指向向量x的指針call_addpopmarg_y
popmarg_r
popmar0
popmar05四、其他說(shuō)明一、環(huán)形緩沖區(qū)FIR被改寫。實(shí)現(xiàn)環(huán)形緩沖區(qū)的關(guān)鍵在于環(huán)形尋址。環(huán)形緩沖寄存器BK須起始于位必須為0是滿足
2N>的最小整數(shù)。R必須放置于BK31字的環(huán)形緩沖區(qū)必須起始
于最小五位為0的地址(即XXXXXXXXXXX000002),并且必須將數(shù)值31放置
于BK320即
XXXXXXXXXX0000002),并且將值32存于BK中。在本文中,參考“TMS320C54XDSPReferenceSet第5-15頁(yè)5.5.3.4小節(jié)”
TMS320C54XDSPReferenceSet(Volume1:CPUandPeripherals)(1996
年出版,電子版為“spru131c.pdf”)。二、庫(kù)函數(shù)位置庫(kù)函數(shù)分別位于C54math\include,C54fft\include,C54fir\include,
C54iir\include,C54lms\include和C54corr\include目錄下。三、編譯方法執(zhí)行命令:cl500test.c–g–k–ztest.cmd即可以生成當(dāng)前示例的.out文件,然后可以調(diào)用Simulator進(jìn)行模擬仿真。仿真時(shí)可以使用文件安裝目錄下的siminit.cmd文件。四、其他說(shuō)明XXX.asm般不附帶這些文件。6第二章DSP數(shù)學(xué)函數(shù)庫(kù)add向量相加shortoflag=add*x,DDushortnx,ushortscale)(定義于add.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量1(r可以=x=y)
y[nx]指向長(zhǎng)度為nx的輸入向量2
r[nx]指向輸出向量:nx輸入輸出向量長(zhǎng)度nx>=4
scale歸一化選項(xiàng)若scale=1,將結(jié)果除以2
若scale=0,不改變結(jié)果oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明該例程將兩個(gè)向量元素逐一相加。算法for(i=0;i<nx;i++)
z(i)=x(i)+y(i)溢出處理進(jìn)行歸一化處理,以防止溢出。特殊要求由于采用流水線操作,要求nx>=4,否則可能會(huì)進(jìn)入死循環(huán)。注釋無(wú)。例程見(jiàn)C54math\add7sub向量相減shortoflag=sub*x,DDushortnx,ushortscale)(定義于sub.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量1(r可以=x=y)
y[nx]指向長(zhǎng)度為nx的輸入向量2
r[nx]指向輸出向量:nx輸入輸出向量長(zhǎng)度nx>=4
scale歸一化選項(xiàng)若scale=1,將結(jié)果除以2
若scale=0,不改變結(jié)果oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明該例程將兩個(gè)向量元素逐一相減。算法for(i=0;i<nx;i++)
z(i)=x(i)-y(i)溢出處理進(jìn)行歸一化處理以防止溢出。特殊要求由于采用流水線操作,要求nx>=4,否則可能會(huì)進(jìn)入死循環(huán)。注釋無(wú)。例程見(jiàn)C54math\sub8mul3232位向量相乘shortoflag=*x,ushortnx)(定義于mul32.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量1(r可以=x=y)
y[nx]指向長(zhǎng)度為nx的輸入向量2
r[nx]指向長(zhǎng)度為nx的輸出向量
nx輸入向量、輸出向量的長(zhǎng)度nx>=4
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明本例程對(duì)兩個(gè)32位的Q3132位的Q31向量。算法for(i=0;i<nx;i++)
z(i)=x(i)*y(i)溢出處理無(wú)。特殊要求由于采用流水線操作,要求有nx>=4,否則可能進(jìn)入死循環(huán)。注釋無(wú)。例程見(jiàn)C54math\mul329neg向量求反shortoflag=neg*x,Dushortnx)(定義于neg.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量(r可以=x=y)
r[nx]指向長(zhǎng)度為nx的輸出向量
特殊情況:若x=-1=32768,則r=1=321767且oflag=1
nx輸入向量、輸出向量長(zhǎng)度,nx>=4。
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明本例程對(duì)向量的每一個(gè)元素求反。算法for(i=0;i<nx;i++)
x(i)=-x(i)溢出處理對(duì)溢出進(jìn)行飽和處理。特殊要求由于采用流水線操作,要求有nx>=4否則可能進(jìn)入死循環(huán)。注釋無(wú)。例程見(jiàn)C54math\neg10neg32雙精度向量求反shortoflag=neg32*x,ushortnx)(定義于neg32.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量(r可以=x=y)
r[nx]指向長(zhǎng)度為nx的輸出向量
特殊情況:若x=-1=32768*2^16r=1=321767*2^16且oflag=1
nx輸入向量、輸出向量長(zhǎng)度nx>=4
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明本例程對(duì)向量的每一個(gè)元素求反。算法for(i=0;i<nx;i++)
x(i)=-x(i)溢出處理對(duì)溢出進(jìn)行飽和處理。特殊要求由于采用流水線操作,要求有nx>=4否則可能進(jìn)入死循環(huán)。注釋無(wú)。例程見(jiàn)C54math\neg32mmul矩陣相乘shortoflag=*x1,shortrow1,short*x2,
shortrow2,short*r)(定義于參數(shù)x1[row1*col1]指向長(zhǎng)度為row1*col1的輸入矩陣
row1矩陣1的行數(shù)col1矩陣1的列數(shù)x2[row2*col2]:指向長(zhǎng)度為row2*col2的輸入矩陣
其中row2=col1row2矩陣2的行數(shù)col2矩陣2的列數(shù)r[row1*col2]指向長(zhǎng)度為row1*col2的輸出矩陣說(shuō)明矩陣相乘。算法使用嵌套循環(huán)計(jì)算輸入矩陣A(M╳N)乘以B(N╳P)。fori=1toMfork=1toP{temp=0
forj=1toN
temp=temp+A(i,j)*B(j,k)
C(i,k)=temp
}溢出處理無(wú)。特殊要求要求輸入矩陣大小合法。注釋無(wú)。例程見(jiàn)C54math\mmul12mtrans矩陣轉(zhuǎn)置shortoflag=*x,ushortushortcol,D*r)(定義于mtrans.asm)參數(shù)x[row*col]指向輸入矩陣row矩陣的行數(shù)col矩陣的列數(shù)r[row*col]指向輸出矩陣(r不能等于x)說(shuō)明本例程對(duì)矩陣進(jìn)行轉(zhuǎn)置。算法fori=1toM
forj=1toN
r(j,i)=x(i,j)溢出處理無(wú)。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54math\mtrans13maxidx向量最大元素的序號(hào)shortr=maxidx*x,ushortnx)(定義于maxidx.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量(nx>=6)
r向量最大值的序號(hào)nx輸入向量的長(zhǎng)度說(shuō)明返回向量中最大元素的序號(hào)。算法無(wú)。溢出處理由于采用流水線操作,要求有nx>=6,否則可能進(jìn)入死循環(huán)。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54math\maxidx14maxval向量元素的最大值Dr=maxval*x,ushortnx)(定義于maxval.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量
r向量的最大元素值
nx輸入向量的長(zhǎng)度說(shuō)明返回向量中最大元素。算法無(wú)。溢出處理無(wú)。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54math\maxval15minidx向量最小元素的序號(hào)shortr=minidx*x,ushortnx)(定義于minidx.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量(nx>=6)
r向量的最小元素的序號(hào)
nx輸入向量的長(zhǎng)度說(shuō)明返回向量中最小元素的序號(hào)。算法無(wú)溢出處理無(wú)。特殊要求由于采用流水線操作,要求有nx>=6,否則可能進(jìn)入死循環(huán)。注釋無(wú)。例程見(jiàn)C54math\minidx16minval向量的最小元素shortr=minval*x,ushortnx)(定義于minval.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量
r向量的最小元素值
nx輸入向量的長(zhǎng)度說(shuō)明返回向量的最小元素值。算法無(wú)。溢出處理無(wú)。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54math\minval17atan16反正切shortoflag=atan16(DATA*x,DATA*r,ushortnx)(定義于atant.asm)參數(shù)x[nx]指向輸入向量,長(zhǎng)度為nx|x|<1r[nx]指向輸出向量,長(zhǎng)度為nx得到對(duì)應(yīng)x向量元素的反正切值,取值范圍[-pi/4,pi/4]
可進(jìn)行取代操作(可以有r=x)e.g.atan(1.0)=0.7854or6478h)nx輸入向量、輸出向量的長(zhǎng)度
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明該函數(shù)計(jì)算x向量中每個(gè)元素的反正切值,結(jié)果放置于向量r中,范圍為
[-pi/4,pi/4]。例如:若x=0x3505,0x1976,0x0]
(等價(jià)于實(shí)數(shù)tan(PI/4),tan(PI/8),tan(PI/16),0)
執(zhí)行atan16(x,4)則有r=[0x6494,0x3245,0x190e,0x0](等價(jià)于[PI/4,PI/8,PI/16,0])算法for(i=0;i<nx;i++)
r(i)=atan(x(i))溢出處理未采用。特殊要求連接命令文件:必須指定“.data”段(放置求解系數(shù))。注釋本例程計(jì)算|x|<1時(shí),x的反正切。若|x|>1,可以表示成兩個(gè)數(shù)的比值,使用函數(shù)atan2_16進(jìn)行計(jì)算。例程見(jiàn)C54math\atant18atan2_16反正切2shortoflag=atan2_16(DATA*x,DATA*y,DATA*r,ushortnx)(定義于arct2.asm)參數(shù)x[nx]指向輸入向量1,長(zhǎng)度為nx,使用Q15格式
y[nx]指向輸入向量2,長(zhǎng)度為nx,使用Q15格式
r[nx]指向輸出向量,長(zhǎng)度為nx,使用Q15格式
允許進(jìn)行替代操作(r可以等于x)nx輸入向量、輸出向量的長(zhǎng)度oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明該例程計(jì)算y/x值的反正切,這里-1<=atan2_16(y/x)<=1,代表-PI=<
atan2_16(y/x)<=PI,輸出放置于輸出向量r中,歸一化系數(shù)為PI。例如若y=[0x1999,0x1999,0x0,0xe6670x1999](等價(jià)于實(shí)數(shù)[0.2,0.2,0,-0.20.2])
x=[0x1999,0x3dcc,0x3dccc234]
(等價(jià)于實(shí)數(shù)[0.2,0.4828,1,0.4828–0.4828])
執(zhí)行atan2_16(x,4)結(jié)果為r=[0x2000,0x1000,0x0,0xf000,0x7000](等價(jià)于實(shí)數(shù)[0.25,0.125,0,–0.125,0.875]*pi)算法for(j=0;j<nx;j++)r[j]=atan2_16(y(j)/x(j))溢出處理未采用。特殊要求連接命令文件:必須指定“.data”段(放置計(jì)算系數(shù))。注釋無(wú)例程見(jiàn)C54math\arct219sine三角正弦voidsine(DATA*x,DATA*r,ushortnx)(定義于sine.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量。x中包含著將[-pi,pi]歸一化到[-1,1]范圍的角度數(shù)據(jù)。使用q15格式記錄。x=xrad/pi例如:45o=pi/4等價(jià)于x=1/4=0.25=0x2000(使用Q15格式)r[nx]指向輸出向量(使用Q15格式)
nx輸入輸出向量長(zhǎng)度(nx>=4)說(shuō)明使用展開(kāi)計(jì)算角度x的正弦。算法for(i=0;i<nx;i++)
y(i)=sin(x(i))其中:x(I)=xrad/pi溢出處理無(wú)。特殊要求必須指定“.data”段。
注釋使用以下的展開(kāi)計(jì)算向量的正弦:sin(x)=c1*x+c2*x^2+c3*x^3+c4*x^4+c5*x^5c1=3.140625x
c2=0.02026367
c3=-5.3251c4=0.5446778
c5=1.800293例程見(jiàn)C54math\sine20sqrt_1616位數(shù)的平方根shortoflag=sqrt_16(DATA*x,DATA*r,shortnx)(定義于sqrtv.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量
r[nx]指向長(zhǎng)度為nx的輸出向量
nx輸入輸出向量長(zhǎng)度
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明計(jì)算向量x中每個(gè)元素的平方根,結(jié)果存于向量r中。算法for(i=0;i<nx;i++)
r[i]=sqrt(x(i))溢出處理無(wú)。特殊要求必須指定“.data”段。
注釋無(wú)。例程見(jiàn)C54math\sqrtv21log_2以2為底的對(duì)數(shù)shortoflag=log_2*x,ushortnx)(定義于log_2.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量(Q15格式)
(要求0.5<x<1,否則用Q31無(wú)法表示其輸出r)
r[nx]指向長(zhǎng)度為nx的輸入向量(Q31格式)
nx輸入向量、輸出向量長(zhǎng)度
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用展開(kāi),計(jì)算以2為底的對(duì)數(shù)。算法for(i=0;i<nx;i++)y(i)=log2x(i)其中0.5<x(i)<1溢出處理無(wú)。特殊要求必須指定“.data”段。
注釋對(duì)于x<0.5的情況,可以先進(jìn)行歸一化處理,使1>x>0.5。例程見(jiàn)C54math\log_222log_10以10為底的對(duì)數(shù)shortoflag=log_10*x,ushortnx)(定義于log_10.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量(Q15格式)
(要求0.1<x<1,否則用Q31無(wú)法表示其輸出r)
r[nx]指向長(zhǎng)度為nx的輸入向量(Q31格式)
nx輸入向量、輸出向量長(zhǎng)度
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用展開(kāi),計(jì)算以10為底的對(duì)數(shù)。算法for(i=0;i<nx;i++)y(i)=log10x(i)其中0.1<x(i)<1溢出處理無(wú)。特殊要求必須指定“.data”段。
注釋對(duì)于x<0.1的情況,可以先進(jìn)行歸一化處理,使1>x>0.1。例程見(jiàn)C54math\log_1023logn以e為底的對(duì)數(shù)shortoflag=logn*x,ushortnx)(定義于logn.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量(Q15格式)
(要求0.1<x<1,否則用Q31無(wú)法表示其輸出r)
r[nx]指向長(zhǎng)度為nx的輸入向量(Q31格式)
nx輸入向量、輸出向量長(zhǎng)度
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用展開(kāi),計(jì)算以e為底的對(duì)數(shù)。算法for(i=0;i<nx;i++)y(i)=lognx(i)其中1/e<x(i)<1溢出處理無(wú)。特殊要求必須指定“.data”段。
注釋對(duì)于x<1/e的情況,可以先進(jìn)行歸一化處理,使1>x>1/e。例程見(jiàn)C54math\logn2416位數(shù)的倒數(shù)voidrecip16*x,Dushort*rexp,ushortnx)(定義于recip16.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量r[nx]指向輸出數(shù)據(jù)緩沖區(qū)rexp[nx]指向輸出數(shù)據(jù)的冪緩沖區(qū)。這些冪使用無(wú)符號(hào)整數(shù)格式
nx輸入輸出向量的長(zhǎng)度。說(shuō)明該例程返回Q150以采用兩部分表示。正確的結(jié)果是:r[i]*rexp[i]算法無(wú)。溢出處理無(wú)。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54math\recip1625expn指數(shù)shortoflag=expn*x,Dushortnx)(定義于expn.asm)參數(shù)x[nx]指向輸入向量,長(zhǎng)度為nx。使用Q15數(shù)據(jù)格式
r[nx]指向輸出向量,長(zhǎng)度為nx。使用Q3.12數(shù)據(jù)格式。
r可以等于xnx輸入向量、輸出向量長(zhǎng)度
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用展開(kāi)計(jì)算向量x的指數(shù)。算法for(i=0;i<nx;i++)y(i)=x(i)其中-1<=x<1溢出處理未采用。特殊要求必須指定“.data”段。
注釋使用以下的系列,計(jì)算向量x各元素的指數(shù):exp(x)=c1*x+c2*x^2+c3*x^3+c4*x^4+c5*x^5其中:c1=0.0139
c2=0.0348
c3=0.1705
c4=0.4990
c5=1.0001例程見(jiàn)C54math\expn26power向量的功率shortoflag=power*x,ushortnx)(定義于參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量(r可以=x)
r[1]指向輸出向量,使用Q31格式。
nx輸入向量長(zhǎng)度nx>=4oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明該例程計(jì)算向量的功率。算法Power=0for(i=0;i<nx;i++)
power+=x(i)*x(i)溢出處理無(wú)。特殊要求由于采用流水線操作,要求有nx>=4否則可能進(jìn)入死循環(huán)。注釋無(wú)。例程見(jiàn)C54math\power27bexp塊的冪shortmaxexp=*x,ushortnx)(定義于bexp.asm)參數(shù)maxexp絕對(duì)值最大數(shù)的冪,可用于歸一化處理中x[nx]指向輸入向量,長(zhǎng)度為nx
nx輸入向量的長(zhǎng)度
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明計(jì)算輸入向量中所有值的冪,并返回最小的冪(冗余的符號(hào)位)。在對(duì)一塊數(shù)據(jù)進(jìn)行歸一化時(shí),可使用該功能來(lái)決定最大的位移值。算法for(shortj=0;j<nx;j++){=exp(x[j]);if(temp<maxexp)maxexp=temp;}returnmaxexp;溢出處理未采用。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54math\bexp28rand16init初始化隨機(jī)數(shù)生成器voidrand16init(void)(定義于rand16i.asm)參數(shù)無(wú)。說(shuō)明初始化16位隨機(jī)數(shù)生成器例程的種子。算法無(wú)。溢出處理無(wú)。特殊要求必須指定“.bss”段。
注釋該函數(shù)對(duì)產(chǎn)生16位隨機(jī)變量的例程(rand16)進(jìn)行初始化。例程見(jiàn)C54math\rand29rand16隨機(jī)向量生成器shortoflag=*x,ushortnx)(定義于rand16.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量
nx輸入向量、輸出向量的長(zhǎng)度
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明計(jì)算16位的隨機(jī)向量。算法線性余數(shù)法。溢出處理無(wú)。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54math\rand30fltoq15浮點(diǎn)數(shù)到Q15數(shù)據(jù)轉(zhuǎn)換shorterrorcode=fltoq15(float*x,Dushortnx)(定義于fltoq15.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的浮點(diǎn)輸入向量。X應(yīng)為歸一化后的浮點(diǎn)數(shù),
取值范圍(-1,1)。如果沒(méi)有歸一化,errorcode將返回錯(cuò)誤信
息。r[nx]指向長(zhǎng)度為nx的輸出向量。
nx輸入向量、輸出向量的長(zhǎng)度
errorcode如果出錯(cuò),例程將返回以下錯(cuò)誤值:1—如果有元素太大而不能用Q15格式表示出來(lái);
2—如果有元素太大而不能用Q15格式表示出來(lái);
3—如果有元素太大而且有元素太小,用Q15格式表示不出來(lái);說(shuō)明將存儲(chǔ)于向量x中的IEEE浮點(diǎn)數(shù)轉(zhuǎn)化后存儲(chǔ)于向量rQ15
格式不能表示出來(lái),errorcode返回錯(cuò)誤信息。所有大于1的數(shù)都被置成1-1的數(shù)都被置成-1Q15格式不能表示出來(lái)的數(shù)被置成0。算法無(wú)。溢出處理對(duì)溢出進(jìn)行飽和處理。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54math\fltoq1531q15toflQ15到浮點(diǎn)數(shù)轉(zhuǎn)換shortq15tofl*x,floatushortnx)(定義于q15tofl.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的Q15輸入向量。
r[nx]指向長(zhǎng)度為nx的浮點(diǎn)輸出向量。
nx輸入向量、輸出向量的長(zhǎng)度說(shuō)明將存儲(chǔ)于向量x中的Q15數(shù)據(jù)轉(zhuǎn)化成IEEEr中。算法無(wú)。溢出處理對(duì)溢出進(jìn)行飽和處理。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54math\q15tofl32第三章FFT函數(shù)庫(kù)復(fù)數(shù)逆序void*x,Dushortn)(定義于參數(shù)x[2*nx]指向輸入向量,長(zhǎng)度為2*nxr[2*nx]指向輸出向量,長(zhǎng)度為2*nxnx輸入向量、輸出向量的長(zhǎng)度,nx為復(fù)數(shù)的數(shù)據(jù)長(zhǎng)度若是復(fù)數(shù)序列的逆序,nx應(yīng)為為復(fù)數(shù)FFT的長(zhǎng)度。若是實(shí)數(shù)序列的逆序,nx應(yīng)為為實(shí)數(shù)FFT的長(zhǎng)度的一半。說(shuō)明該例程將復(fù)數(shù)向量進(jìn)行逆序操作,將輸入向量x的逆序結(jié)果存入輸出向量r
中,可進(jìn)行替代操作。使用該例程可以為FFT例程提供逆序后的數(shù)據(jù)。
算法按位逆序。溢出處理未采用。特殊要求無(wú)。注釋替代逆序(r=x)與非替代操作(r!=x)相比較,將耗費(fèi)更多的時(shí)間。但是在空間上要小一半。例程見(jiàn)C54fft\cbrev。33cfft復(fù)數(shù)FFT原始形式:voidx,shortscale)
(定義于,其中#=nx,nx=8,16,32,64,128,256,512,1024)
常用形式:voidx,#,shortscale)其中#=nx,nx=8,16,32,64,128,256,512,1024參數(shù)x[2*nx]指向輸入復(fù)數(shù)向量,該向量已經(jīng)經(jīng)過(guò)逆序處理。每一個(gè)元素都按實(shí)部-虛部排列。對(duì)應(yīng)緩沖區(qū)的最小k位必須為0k為大于log2(2*nx)的整
數(shù),具體解釋見(jiàn)TMS320C54XDSPReferenceSet第5-15
頁(yè)5.5.3.4小節(jié)。scale歸一化標(biāo)志:若(scale==1)
歸一化因素為nx;
否則歸一化因素為1;說(shuō)明計(jì)算經(jīng)過(guò)逆序復(fù)數(shù)系列的FFT。計(jì)算中,原始的數(shù)據(jù)被破壞。
計(jì)算結(jié)果按順序放置在向量x中。算法(DFT)nx1y[k]=1/(scalefactor)*∑[i]*(cos(2*i=0pi*i*k/nx)+jsin(2*pi*i*k/nx))溢出處理采用歸一化操作以防止溢出。特殊要求該例程基于執(zhí)行速度進(jìn)行優(yōu)化,因而空間消耗量大。在連接命令文件中必須指定“.sintab”段,大小如下:FFT數(shù)據(jù)長(zhǎng)度數(shù)據(jù)長(zhǎng)度(字).sintab段80161132346481128176
256367
512750
1024151734認(rèn)為所有數(shù)據(jù)都在雙存取中,讀取數(shù)據(jù)列表與指令存取不沖突。(連接命令文件反映了這些條件)。注釋每個(gè)中間FFT階段,進(jìn)行除以2的操作以防止溢出(可選)。
macros.asmsintab.q15例程見(jiàn)C54fft\cfft35cifft復(fù)數(shù)逆FFT原始形式:voidx,shortscale)
(定義于,其中#=nx,nx=8,16,32,64,128,256,512,1024)
常用形式:voidx,#,shortscale)其中#=nx,nx=8,16,32,64,128,256,512,1024參數(shù)x[2*nx]指向輸入復(fù)數(shù)向量,該向量已經(jīng)經(jīng)過(guò)逆序處理。每一個(gè)元素都按實(shí)部-虛部排列。對(duì)應(yīng)緩沖區(qū)的最小k位必須為0k為大于log2(2*nx)的整
數(shù),具體解釋見(jiàn)TMS320C54XDSPReferenceSet第5-15
頁(yè)5.5.3.4小節(jié)。Scale歸一化標(biāo)志:若(scale==1)
歸一化因素為nx;
否則歸一化因素為1;說(shuō)明計(jì)算經(jīng)過(guò)逆序復(fù)數(shù)系列的逆FFT。計(jì)算中,原始的數(shù)據(jù)被破壞。
計(jì)算結(jié)果按順序放置在向量x中。算法(IDFT)nx1y[k]=1/(scalefactor)*∑[i]*(cos(2*i=0溢出處理采用歸一化操作。特殊要求pi*i*k/nx)+jsin(2*pi*i*k/nx))該例程基于執(zhí)行速度進(jìn)行優(yōu)化,因而空間消耗量大。在連接命令文件中必須指定“.sintab”段,大小如下:FFT數(shù)據(jù)長(zhǎng)度數(shù)據(jù)長(zhǎng)度(字).sintab段80161132346481128176
256367
512750
1024151736編譯連接源代碼過(guò)程中“macrosi.asmsintab.q15”被自動(dòng)包含。注釋每個(gè)中間FFT階段,進(jìn)行除以2的操作以防止溢出(可選)。例程見(jiàn)C54fft\cfft37rfft實(shí)數(shù)FFT(替換)原始形式:void*x,shortscale)
(定義于,其中#=16,32,64,128,256,512,1024)
常用形式:void*x,#,shortscale)其中#=16,32,64,128,256,512,1024參數(shù)x[nx]指向輸入向量,該向量包含了以逆序排列的nx個(gè)實(shí)數(shù)元x包含F(xiàn)FT輸出的前nx/2FFT
的結(jié)果是關(guān)于NyquistFFT結(jié)果的
一半元素。輸出時(shí),x將以如下格式得到結(jié)果:y(0)Rey(nx/2)Im->直流和Nyquist點(diǎn)y(1)Rey(1)Imy(2)Rey(2)Im……y(nx/2-1)Rey(nx/2-1)Im復(fù)數(shù)以Re-Im的格式存儲(chǔ)。內(nèi)存對(duì)齊:x必須起始于k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)k為大于log2(nx)解釋見(jiàn)TMS320C54XDSPReferenceSet第5-15頁(yè)5.5.3.4
小節(jié)。scale歸一化標(biāo)志:若(scale==1)
歸一化因素為nx;
否則歸一化因素為1;說(shuō)明計(jì)算以逆序方式存儲(chǔ)于向量x中的nx個(gè)實(shí)元素的FFT。原有數(shù)據(jù)在計(jì)算中
被破壞。變換結(jié)果的前nx/2個(gè)復(fù)數(shù)以正常順序存儲(chǔ)于向量x中。算法(DFT)nx1y[k]=1/(scalefactor)*∑[i]*(cos(2*i=0pi*i*k/nx)+jsin(2*pi*i*k/nx))溢出處理為防止溢出,進(jìn)行歸一化處理。特殊要求連接命令文件:必須指定“.sintab”段。該段的大小與中“.sintab”38段的大小一致該函數(shù)自動(dòng)包含“macros.asm”和“unpack.asm”三個(gè)文件。注釋計(jì)算nx/2個(gè)元素的FFT,然后執(zhí)行unpack程序段得到實(shí)數(shù)FFT結(jié)果。
注意一般情況下N個(gè)實(shí)數(shù)序列的FFT產(chǎn)生N個(gè)復(fù)數(shù)(2*N個(gè)實(shí)數(shù))不可能放置于輸入序列中,為將結(jié)果保存下來(lái)而不需要額外的內(nèi)存,在結(jié)果中只保存實(shí)數(shù)FFT運(yùn)算的一半,因?yàn)閷?shí)數(shù)序列的FFT是對(duì)稱的。
當(dāng)scale=1時(shí),每個(gè)中間執(zhí)行階段和unpack階段都進(jìn)行除以2的操作。例程見(jiàn)。39rifft逆實(shí)數(shù)FFT(替換)原始形式:void*x,shortscale)
(定義于rifft#.asm其中#=16,32,64,128,256,512,1024)
常用形式:void*x,#,shortscale)其中#=16,32,64,128,256,512,1024參數(shù)x[nx]nx個(gè)實(shí)元素。例如:y(0)Rey(nx/2)Im->直流和Nyquist點(diǎn)y(1)Rey(1)Imy(2)Rey(2)Im……y(nx/2-1)Rey(nx/2-1)Im其中y=fft(x)x包含有nx為0,所以按順序給出的是nx個(gè)復(fù)數(shù)的實(shí)數(shù)部分。內(nèi)存對(duì)齊:x必須起始于k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)。其中k為大于log2(nx)的整數(shù),
具體解釋見(jiàn)TMS320C54XDSPReferenceSet第5-15頁(yè)
5.5.3.4小節(jié)。Scale歸一化標(biāo)志:若(scale==0)
歸一化因素為nx;
否則歸一化因素為1;說(shuō)明計(jì)算nx/2個(gè)復(fù)數(shù)的逆FFTx的原始值被破壞。算法(IDFT)nx1y[k]=1/(scalefactor)*∑Xi=0()*(cos(2*pi*i*k/nx)?jsin(2*pi*i*k/nx))溢出處理為防止溢出進(jìn)行歸一化處理。特殊要求連接命令文件:必須包含“.sintab”段,大小與cfft中的對(duì)應(yīng)段一致。40本例程在匯編時(shí),自動(dòng)包含文件“macrosi.asm”、“sintabr.q15”、“unpacki.asm”。.map文件中可以看到,程序使用了“cbrev.obj”文件。注釋本例程使用到的全部操作,因而對(duì)該函數(shù)的要求同樣適用于本例程。注意到,實(shí)數(shù)系列的FFT產(chǎn)生的結(jié)果是關(guān)于Nyquist點(diǎn)對(duì)稱的,因而原始數(shù)據(jù)只需要提供前一半即可。這樣也能得到原始的實(shí)數(shù)序列。當(dāng)scale=1unpack階段都除以2進(jìn)行歸一化處理。例程見(jiàn)C54fft\rfft。41第四章卷積與FIR濾波器convol卷積oflag=shortconvol*x,D*h,Dushortnh,ushortnr)(定義于convol.asm)參數(shù)x[nr+nh-1]指向輸入向量,長(zhǎng)度為nr+nh-1
h[nh]指向系數(shù)向量,長(zhǎng)度為nh
r[nr]指向輸出向量,長(zhǎng)度為nr
nr輸出向量長(zhǎng)度nh系數(shù)向量長(zhǎng)度oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明計(jì)算兩個(gè)向量的卷積,結(jié)果放在輸出向量rnr于塊卷積操作,也可以用于逐個(gè)數(shù)據(jù)進(jìn)行卷積(nr=1)。算法nhr[j]=∑k=0[k][j?k]0<=j<=nr溢出處理未采用。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54fir\convol42cfir復(fù)數(shù)FIR濾波器shortoflag=cfir(DATA*x,DATA*h,DATA*r,DATA**dbuffer,
ushortnh,ushortnx)(定義于cfir.asm)參數(shù)x[2*nx]指向輸入向量,長(zhǎng)度為2*nx(按實(shí)部-虛部的順序排列)
h[2*nh]指向系數(shù)向量,長(zhǎng)度為2*nh(按實(shí)部-虛部的順序排列)例如:若nh=3:則:H=b0re,b0im,b1re,b1im,b2re,b2im。k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)k為大于log2(2*nh)的整數(shù),具體解釋見(jiàn)TMS320C54XDSP
ReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。r[2*nx]指向輸出向量,長(zhǎng)度為2*nx(按實(shí)部-虛部的順序排列)允許進(jìn)行替代操作(r=x)dbuffer[2*nh]延遲緩沖區(qū)初始化為0r所必須的輸入值。內(nèi)存對(duì)齊:與h向量一致。nx輸入向量的長(zhǎng)度,nx為復(fù)數(shù)的數(shù)據(jù)長(zhǎng)度
nh系數(shù)向量的長(zhǎng)度,nh為復(fù)數(shù)的數(shù)據(jù)長(zhǎng)度
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用系數(shù)向量hFIR濾波(直接實(shí)現(xiàn)形式)x
中。該例程使用一個(gè)緩沖內(nèi)存d來(lái)保存前一次的輸入值??梢赃M(jìn)行塊濾波操作,
或者單個(gè)數(shù)據(jù)濾波(nx=1)算法nhr[j]=∑[k][j?k]0<=j<=nxk=0溢出處理未采用。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54fir\cfir43firFIR濾波器shortoflag=fir(DATA*x,DATA*h,DATA*r,DATA**dbuffer,
ushortnh,ushortnx)(定義于fir.asm)參數(shù)x[nx]指向輸入向量,長(zhǎng)度為nx
h[nh]指向系數(shù)向量,長(zhǎng)度為nx例如:若nh=3:則:H=b0,b1,b2。k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)。其中k為大于log2(nh)的整數(shù),具體解釋見(jiàn)TMS320C54XDSP
ReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。r[nx]指向輸出向量,長(zhǎng)度為nx
Dbuffer[nh延遲緩沖區(qū)]該初始化為0;在后面的塊操作中,延遲緩沖區(qū)保存著
計(jì)算r所必須的輸入值。內(nèi)存對(duì)齊:與h向量一致。Nx輸入向量的長(zhǎng)度Nh系數(shù)向量的長(zhǎng)度Oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用系數(shù)向量h,計(jì)算實(shí)數(shù)的FIR濾波。輸入數(shù)據(jù)存于向量x中。該例程使
用一個(gè)緩沖內(nèi)存d據(jù)濾波(nx=1)。算法nhr[j]=∑[k][j?k]0<=j<=nxk=0溢出處理未采用。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54fir\fir44firs對(duì)稱FIR濾波器shortoflag=intfirs(DATADATA*r,DATA**dbuffer,
ushortnh2,ushortnx)(定義于firs.asm)參數(shù)x[nx]指向輸入向量,長(zhǎng)度為nx
r[nx]指向輸出向量,長(zhǎng)度為nxdbuffer[2*nh2]延遲緩沖區(qū)r所必須的輸入值。初始化為0k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)k為大于log2(2*nh2)的整數(shù),具體解釋見(jiàn)TMS320C54XDSP
ReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。nx輸入向量的長(zhǎng)度nh2系數(shù)向量的半長(zhǎng)度(由于對(duì)稱性,沒(méi)有必要給出另外一半)。
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用存儲(chǔ)于程序存儲(chǔ)器中的nh2FIR全局標(biāo)簽TI_FIRS_COEFFS指示其位置。假設(shè)濾波器有對(duì)稱的脈沖響應(yīng)。前半
部分由標(biāo)簽TI_FIRS_COEFFS指出。輸入數(shù)據(jù)存于向量x中。該例程使用一個(gè)
緩沖內(nèi)存d(nx=1)。算法nhr[j]=∑k=0[k][j?k]0<=j<=nx其中h是對(duì)稱的(例如,h=h0,h1,h2,h2,h1,h0,此時(shí)nh2=3。其中的
h0,h1,h2被存儲(chǔ)于全局標(biāo)簽TI_FIRS_COEFFS指向的程序存儲(chǔ)器中。)
溢出處理未采用。特殊要求TI_LIB_COEFFS起點(diǎn)。注釋本例程較一般對(duì)稱濾波(firs2)空間,在使用不同系數(shù)進(jìn)行濾波時(shí)不能使用。firs2是與本例程對(duì)應(yīng)的,將系數(shù)存儲(chǔ)于數(shù)據(jù)空間的濾波程序。45例程見(jiàn)C54fir\firs46firs2對(duì)稱FIR濾波器(常用)shortoflag=intfirs2(DATADATA*h,DATA,DATA**dbuffer,ushortnh2,ushortnx)(定義于firs2.asm)參數(shù)x[nx]指向輸入向量,長(zhǎng)度為nxr[nx]指向輸出向量,長(zhǎng)度為nxh[nh2]指向系數(shù)向量的前半部分(假設(shè)沖激響應(yīng)是對(duì)稱的)波系數(shù)總和為2*nh。例如,若系數(shù)為b0,b1,b1,b0,則
nh2=2,h={b0,b1}dbuffer[2*nh2]延遲緩沖區(qū)該初始化為0;在后面的塊操作中,延遲緩沖區(qū)保存著計(jì)算r所必須的輸入值。k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)。其中k為大于log2(2*nh2)TMS320C54XDSP
ReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。nx輸入向量的長(zhǎng)度nh2系數(shù)向量的半長(zhǎng)度(由于對(duì)稱性,沒(méi)有必要給出另外一半)。
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用存儲(chǔ)于向量h中的nh2FIRhx用一個(gè)緩沖內(nèi)存d據(jù)濾波(nx=1)。算法nhr[j]=∑[k][j?k]0<=j<=nxk=0其中h是對(duì)稱的(例如,h=h0,h1,h2,h2,h1,h0,此時(shí)nh2=3。其中的h0,h1,h2存儲(chǔ)于數(shù)據(jù)存儲(chǔ)器中。)溢出處理未采用。特殊要求無(wú)。注釋本例程可以將濾波系數(shù)放置于數(shù)據(jù)段的任意空間,但速度較firs要慢。例程見(jiàn)C54fir\firs247firdec抽樣FIR濾波器shortoflag=firdec(DATA*x,*h,DATA*r,DATA**dbuffer,
ushortnh,ushortnx,ushortD)(定義于decimate.asm)參數(shù)x[nx]指向輸入向量,長(zhǎng)度為nx
h[nh]指向系數(shù)向量,長(zhǎng)度為nx例如:若nh=3:則:h=b0,b1,b2。k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)。其中k為大于log2(nh)的整數(shù),具體解釋見(jiàn)TMS320C54XDSP
ReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。r[nx/D]指向輸出向量,長(zhǎng)度為nx/D
dbuffer[nh]延遲緩沖區(qū)該初始化為0;在后面的塊操作中,延遲緩沖區(qū)保存著
計(jì)算r所必須的輸入值。內(nèi)存對(duì)齊:與h向量一致。nx輸入向量的長(zhǎng)度nh系數(shù)向量的長(zhǎng)度DD=2論上說(shuō),nx應(yīng)該是D據(jù)。oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用系數(shù)向量h,計(jì)算實(shí)數(shù)的抽樣FIR濾波。輸入數(shù)據(jù)存于向量x中。該例
程使用一個(gè)緩沖內(nèi)存d個(gè)數(shù)據(jù)濾波(nx=1)。算法nhr[j]=∑[k][j*D?k]0<=j<=nxk=0溢出處理未采用。特殊要求無(wú)。注釋無(wú)。48例程見(jiàn)C54fir\decimate49firinterp插值FIR濾波器shortoflag=firinterp(DATA*x,DATA*h,DATA*r,DATA**dbuffer,
ushortnh,ushortnx,ushortI)(定義于interp.asm)參數(shù)x[nx]指向輸入向量,長(zhǎng)度為nx
h[nh]指向系數(shù)向量,長(zhǎng)度為nx例如:若nh=3:則:h=b0,b1,b2。k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)。其中k為大于log2(nh)的整數(shù),具體解釋見(jiàn)TMS320C54XDSP
ReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。r[nx*I]指向輸出向量,長(zhǎng)度為nx*I
dbuffer[nh]延遲緩沖區(qū)該初始化為0;在后面的塊操作中,延遲緩沖區(qū)保存著
計(jì)算r所必須的輸入值。內(nèi)存對(duì)齊:與h向量一致。nx輸入向量的長(zhǎng)度nh系數(shù)向量的長(zhǎng)度II=2表示每?jī)蓚€(gè)數(shù)據(jù)間插入一個(gè)樣本值0。
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用系數(shù)向量h,計(jì)算實(shí)數(shù)的FIR插值濾波(直接實(shí)現(xiàn)形式)。輸入數(shù)據(jù)存于
向量xd波操作,或者單個(gè)數(shù)據(jù)濾波(nx=1)。算法nhr[t]=∑[k]t/I?k]0<=j<=nrk=0溢出處理未采用。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54fir\interp50firlatFIRLattice濾波shortoflag=firlat*x,D*h,DD**d,intnh,intnx)(定義于firlat.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的實(shí)輸入向量h[nh]指向長(zhǎng)度為nh的lattice系數(shù)向量,按照正常順序排列:H=b0b1b2b3…k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)。其中k為大于log2(nh)的整數(shù),具體解釋見(jiàn)TMS320C54XDSP
ReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。r[nx]指向長(zhǎng)度為nx的實(shí)輸出向量。(r可以為x)。
d[nh]延遲緩沖區(qū)該初始化為0;在后面的塊操作中,延遲緩沖區(qū)保存著
計(jì)算r所必須的輸入值。k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)。其中k為大于log2(nh)的整數(shù),具體解釋見(jiàn)TMS320C54XDSP
ReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。nx輸入向量長(zhǎng)度nh系數(shù)向量長(zhǎng)度
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用存儲(chǔ)于向量h中的系數(shù)進(jìn)行實(shí)數(shù)FIRLattice濾波。輸入向量為x。該例
程使用一個(gè)緩沖內(nèi)存d個(gè)數(shù)據(jù)濾波(nx=1)。算法e0[n]=e’0[n]=x[n],ei[n]=ei-1[n]-hie’i-1[n-1],i=1,2,….,N
e’i[n]=-hiei-1[n]+e’i-1[n-1],i=1,2,….,N
y[n]=eN溢出處理無(wú)。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54fir\firlat51hilb16Hilbert變換器oflag=shorthilb16*x,D*h,DDushortnh,ushortnx)(定義于hilb16.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量。h[nh]指向長(zhǎng)度為nhH=b0b1b2b3b4…..每個(gè)奇系數(shù)必須為零,例如:b1=b3=…=0,h為b0,0,b2,0,b4,0……k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)。其中k為大于log2(nh)的整數(shù),具體解釋見(jiàn)TMS320C54XDSP
ReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。r[nx]指向?qū)崝?shù)輸出向量。(r可以等于x)
dbuffer[nh]延遲緩沖區(qū)該初始化為0;在后面的塊操作中,延遲緩沖區(qū)保存著
計(jì)算r所必須的輸入值。k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)。其中k為大于log2(nh)的整數(shù),具體解釋見(jiàn)TMS320C54XDSP
ReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。nx輸入向量、輸出向量的長(zhǎng)度。nh系數(shù)向量的長(zhǎng)度。nh須為偶數(shù),為奇數(shù)時(shí)補(bǔ)0。
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用系數(shù)向量hHilbertx使用一個(gè)緩沖內(nèi)存d數(shù)據(jù)濾波(nx=1)。算法nhr[j]=∑k=0[k][j?k]0<=j<=nx溢出處理無(wú)。特殊要求每個(gè)奇數(shù)濾波系數(shù)必須為0,如:
H=[0.8760–0.3240–0.002]。52注釋本例程較使用一般的卷積執(zhí)行效率要高。例程見(jiàn)C54fir\hilb1653第五章IIR濾波器使用4個(gè)參數(shù)的濾波(直接實(shí)現(xiàn)形式shortoflag=*x,D*h,DDushortnbiq,ushortnx)(定義于iircas4.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量。h[4*nbiq]指向?yàn)V波系數(shù)向量,格式如下:h=a11,a21,b21,b11…a1i,a2i,b2i,b1i其中i是子濾波器的系數(shù)(例如:a21是第一個(gè)子濾波器的
系數(shù)a2)。極點(diǎn)系數(shù)為a,零點(diǎn)系數(shù)為b。r[nx]指向?qū)崝?shù)輸出向量。(r可以等于x)dbuffer[2*nbiq]下:d1(n-1),d1(n-2),…d1(n-i),d2(n-1),d2(n-2),…d2(n-i)在多重緩沖區(qū)方法中,該向量在進(jìn)行第一次塊操作時(shí)應(yīng)該初始化為0;在后面的塊操作中,延遲緩沖區(qū)保
存著計(jì)算r所必須的輸入值。內(nèi)存對(duì)齊:這是一個(gè)環(huán)行緩沖區(qū),必須起始于k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)k為大于log2(2*nbiq)TMS320C54X
DSPReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。nbiq子濾波器的個(gè)數(shù)nx輸入向量、輸出向量的個(gè)數(shù)
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明計(jì)算nbiq個(gè)串聯(lián)IIR濾波器的輸出。輸入數(shù)據(jù)為單精度(16位)。
每個(gè)子濾波器使用直接實(shí)現(xiàn)形式II(每個(gè)子濾波器4個(gè)系數(shù))
存于向量h中。輸入存于向量x中,結(jié)果存于向量r中。可以進(jìn)行塊IIR濾波操作,或者單個(gè)IIR數(shù)據(jù)濾波(nx=1)。算法d(n)=x(n)-a1*d(n-1)-a2*d(n-2)
y(n)=d(n)+b1*d(n-1)+b2*d(n-2)溢出處理無(wú)。54特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54iir\iircas455使用5個(gè)參數(shù)的濾波(直接實(shí)現(xiàn)形式shortoflag=*x,D*h,DDushortnbiq,ushortnx)(定義于iircas5.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量。
h[5*nbiq]指向?yàn)V波系數(shù)向量,格式如下:h=a11,a21,b21,b01,b11…a1i,a2i,b2i,b0i,b1i
其中i是子濾波器的系數(shù)(例如:a21是第一個(gè)子濾波器
的系數(shù)a2)。極點(diǎn)系數(shù)為a,零點(diǎn)系數(shù)為b。r[nx]指向?qū)崝?shù)輸出向量。(r可以等于x)
dbuffer[2*nbiq]指向延遲緩沖區(qū)。每個(gè)子濾波器有兩個(gè)緩沖單元。格
式如下:d1(n-1),d1(n-2),…d1(n-i),d2(n-1),d2(n-2),…d2(n-i)時(shí)應(yīng)該初始化為0區(qū)保存著計(jì)算r所必須的輸入值。k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)。其中k為大于log2(2*nbiq)的整數(shù),具體解釋見(jiàn)
TMS320C54XDSPReferenceSet第5-15頁(yè)5.5.3.4
小節(jié)。nbiq子濾波器的個(gè)數(shù)
nx輸入向量、輸出向量的個(gè)數(shù)
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明計(jì)算nbiq個(gè)串聯(lián)IIR濾波器的輸出。輸入數(shù)據(jù)為單精度(16位)。
每個(gè)子濾波器使用直接實(shí)現(xiàn)形式II(每個(gè)子濾波器5個(gè)系數(shù))
存于向量h中。輸入存于向量x中,結(jié)果存于向量r中??梢赃M(jìn)行多重IIR濾波操作,或者單個(gè)IIR數(shù)據(jù)濾波(nx=1)。算法d(n)=x(n)-a1*d(n-1)-a2*d(n-2)y(n)=b0*d(n)+b1*d(n-1)+b2*d(n-2)溢出處理無(wú)。特殊要求無(wú)。注釋無(wú)。56例程見(jiàn)C54iir\iircas557使用5個(gè)參數(shù)的IIR濾波(直接實(shí)現(xiàn)形式shortoflag=*x,D*h,DDushortnbiq,ushortnx)(定義于iircas51.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量。h[5*nbiq]指向?yàn)V波系數(shù)向量,格式如下:h=b01,b11,b21,a11,a21…b0i,b1i,b2i,a1i,a2i其中i是子濾波器的系數(shù)(例如:a21是第一個(gè)子濾波器
的系數(shù)a2)。極點(diǎn)系數(shù)為a,零點(diǎn)系數(shù)為b。r[nx]指向?qū)崝?shù)輸出向量。(r可以等于x)dbuffer指向延遲緩沖區(qū)。每個(gè)子濾波器有4個(gè)緩沖單元。格式[2*nbiq+2]如下:x1(n-1),x1(n-2),y1(n-1),y1(n-2),…yi(n-1),yi(n-2)
其中i是子濾波器的序號(hào)。在多重緩沖區(qū)方法中,該向量在進(jìn)行第一次塊操作
時(shí)應(yīng)該初始化為0保存著計(jì)算r所必須的輸入值。內(nèi)存對(duì)齊:不必對(duì)齊。nbiq子濾波器的個(gè)數(shù)nx輸入向量、輸出向量的個(gè)數(shù)
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明計(jì)算nbiq個(gè)串聯(lián)IIR濾波器的輸出。輸入數(shù)據(jù)為單精度(16位)。
每個(gè)子濾波器使用直接實(shí)現(xiàn)形式I(每個(gè)子濾波器5個(gè)系數(shù))
存于向量h中。輸入存于向量x中,結(jié)果存于向量r中??梢赃M(jìn)行多重IIR濾波操作,或者單個(gè)IIR數(shù)據(jù)濾波(nx=1)。算法y(n)=b0*x(n)+b1*x(n-1)+b2*x(n-2)-a1*y(n-1)-a2*y(n-2)溢出處理無(wú)。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54iir\iircas5158iirlatIIRlattice濾波shortoflag=iirlat*x,D*h,DD**d,intnh,intnx)(定義于iirlat.asm)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量。
h[nh]指向lattice濾波系數(shù)向量,格式如下:
h=b0,b1,b2,b3…k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)。其中k為大于log2(nh)的整數(shù),具體解釋見(jiàn)TMS320C54XDSP
ReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。r[nx]指向?qū)崝?shù)輸出向量。(r可以等于x)
d[nh]指向延遲緩沖區(qū)。該初始化為0;在后面的塊操作中,延遲緩沖區(qū)保存著
計(jì)算r所必須的輸入值。k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)。其中k為大于log2(nh)的整數(shù),具體解釋見(jiàn)TMS320C54XDSP
ReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。nx輸入輸出向量長(zhǎng)度nh系數(shù)向量長(zhǎng)度
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用儲(chǔ)存于向量h中的系數(shù)計(jì)算實(shí)IIRlatticex中,
輸出存于向量r中。該例程的延遲緩沖單元保存著繼續(xù)進(jìn)行操作所必須的數(shù)據(jù),
可以進(jìn)行塊濾波操作,也可以進(jìn)行單個(gè)數(shù)據(jù)濾波(nx=1)。算法eN[n]=x[n]ei-1[n]=ei[n]+hie’i-1[n-1],i=N,(N-1),….,1
e’i[n]=-kiei-1[n]+e’i-1[n-1],i=N,(N-1),….,1
y[n]=e0[n]=e’0溢出處理無(wú)。特殊要求無(wú)。注釋無(wú)。例程見(jiàn)C54iir\iirlat59iir32雙精度IIR濾波shortoflag=*x,*h,Dushortnbiq,ushortnx)參數(shù)x[nx]指向長(zhǎng)度為nx的輸入向量。h[5*nbiq]指向32位的濾波系數(shù)向量,格式如下。當(dāng)nbiq=2時(shí),h等于:b21–高位子濾波器1系數(shù)的起始位b21–低位b11–高位b11–低位b01–高位b01–低位a21–高位a21–低位a11–高位a11–低位b22–高位子濾波器2系數(shù)的的起始位b22–低位b12–高位b12–低位b02–高位b02–低位a22–高位a22–低位
a12–高位a12–低位r[nx]指向?qū)崝?shù)輸出向量。(r可以等于x)
dbuffer[3*指向32位的濾波系數(shù)向量,格式如下。nbiq]當(dāng)nbiq=2時(shí):d1(n-2)-低位子濾波器1緩沖區(qū)的起始位d1(n-2)–高位d1(n-1)–低位d1(n-1)–高位d1(n)–低位d1(n)–高位d2(n-2)-低位子濾波器2緩沖區(qū)的起始位
d2(n-2)–高位d2(n-1)–低位d2(n-1)–高位d2(n)–低位d2(n)–高位60該初始化為0;在后面的塊操作中,延遲緩沖區(qū)保存著
計(jì)算r所必須的輸入值。k位邊界上(就是說(shuō)起始地址的k個(gè)LSB位必須為0)。其中k為大于log2(3*nbiq)TMS320C54XDSP
ReferenceSet第5-15頁(yè)5.5.3.4小節(jié)。nbiq子濾波器的個(gè)數(shù)
nx輸入向量、輸出向量的個(gè)數(shù)
oflag溢出標(biāo)志若oflag=1,則運(yùn)算中產(chǎn)生32位溢出
若oflag=0,運(yùn)算中未產(chǎn)生32位溢出說(shuō)明使用32
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 無(wú)線網(wǎng)絡(luò)信號(hào)增強(qiáng)器設(shè)置與優(yōu)化考核試卷
- 出版業(yè)的客戶關(guān)系管理考核試卷
- 湖南省婁底市漣源市部分學(xué)校2024-2025學(xué)年高一上學(xué)期9月月考化學(xué)試題(原卷版)
- 熱電聯(lián)產(chǎn)系統(tǒng)在極端氣候適應(yīng)中的技術(shù)改進(jìn)考核試卷
- 北師大版九年級(jí)上數(shù)學(xué)學(xué)習(xí)方法探討
- 蘇教版線段從認(rèn)識(shí)到應(yīng)用
- 提升小學(xué)語(yǔ)文水平北師大版詞語(yǔ)
- 蘇教版必修三教學(xué)探究
- 初中歷史人教版教學(xué)策略
- 三年級(jí)上冊(cè)數(shù)學(xué)口算練習(xí)
- 糖尿病患者管理卡(首頁(yè))
- 第二節(jié)中國(guó)的氣候2季風(fēng)
- 幕墻工程外懸軌道吊裝方案2018年316
- 微課錄制腳本模板
- 常見(jiàn)英文面試問(wèn)題109道及答案
- 國(guó)內(nèi)外主流ERP軟件對(duì)比分析報(bào)告
- 電力設(shè)備結(jié)構(gòu)及原理
- 直流屏原理ppt
- 油煙機(jī)清洗合同協(xié)議書(shū)
- excel斜線表頭模版
- 珠海市斗門區(qū)農(nóng)村宅基地和村民住房建設(shè)
評(píng)論
0/150
提交評(píng)論