dsplib中文版-TMS32054X-函數(shù)庫(kù)中文用戶指南_第1頁(yè)
dsplib中文版-TMS32054X-函數(shù)庫(kù)中文用戶指南_第2頁(yè)
dsplib中文版-TMS32054X-函數(shù)庫(kù)中文用戶指南_第3頁(yè)
dsplib中文版-TMS32054X-函數(shù)庫(kù)中文用戶指南_第4頁(yè)
dsplib中文版-TMS32054X-函數(shù)庫(kù)中文用戶指南_第5頁(yè)
已閱讀5頁(yè),還剩72頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論