DSP原理及应用实验报告.doc
DSP原理与应用实验报告姓名:学号:班级:学院:指导教师:实验一 代数汇编指令基础实验 一、实验目的:1.通过调试目标代码,掌握指令的功能,熟悉指令;2.通过指令的熟悉,能够指令应用于实际项目中。二、实验原理: Ti公司的代数汇编指令。三、实验程序:.title"算术指令综合实验".mmregs.sect ".vect".copy "vectors.asm".text_Start: AR7=#767 ; A=#38CAH ; DP=#08AH ; RSA=#0123H; DP=#188H ; ASM=#0AHAR7=AMMR(*AR7+)=#1234HDP=#04HA=#9876H AR6=#230H*AR6+=#9ACDHARP=#6 38H=ANOPNOPAR0=#003AHA=*AR6+0T=#08HSXM=1B=*AR6-<<TSAR7=#0220H*AR7=#0E5D8HA=*AR7+0B<<-123AH=#665AHAR2=#023AHBK=#0A=*AR2-0%<<12BK=#002AHAR3=#0256H*AR3- =HI(B)<<8ASM=#-8 *AR3+ =A<<ASMAR4=#0216H*AR4=#8775HB=#025AHA=B<<ASMMMR(*AR4+)=BA=MMR(13H)AR2=#0245H*AR2=A<<73AH=A<<ASM*AR2+0%=B<<4 *AR2=#1CHASM=*AR2T=*AR4+LTD(*AR2+)B=RND(*AR2+)*AR3=#0F57AHA=UNS(*AR3)B=*AR3+*AR3+0B=TTRN=#12ACHA=DBL(*AR4+)B=DUAL(*AR2-) DBL(*AR3-)=ADUAL(*AR4+)=B*AR3+ =HI(A)<<ASM|B=*AR2-<<16*AR2+ =HI(B)<<ASM|T=*AR3+A=#3456HIF(AGT)*AR4+ =HI(A)<<ASMB=#0F679HIF(BLEQ)*AR3- =HI(B)<<ASMA=#0F98DHIF(AGT)*AR2+ =BRCIF(ALT)*AR3- =TB=#0125CHIF(BGEQ)*AR2+ =BRCCMPS(A,*AR4-)CMPS(B,*AR2+) B=20 DP=#40 A=#1234H 22=A A=A+9AH 25=A AR3=#0236H *AR3=#0F775H AR5=#024AH *AR5=#09ACDHNEXT: NOP A=#9ABCH *AR5+ =A A=A+#1000H A=A+#08ADEH SXM=0 A=#07AB8H<<16 A=A+#04ADEH A=A-#08ADEH<<16 SXM=1 B=#0FF7CH A=#0889AH A=A-#09ACDH<<16 B=A-*AR5- C=1 B=B-A<<ASM *AR5=A C16=0 A=DBL(*AR5-)-A B=B-*AR3+ A=B+*AR5+<<16 A=A-B<<ASM B=*AR3+<<16-*AR4-<<16 A=A+*AR4<<12 B=A+*AR5<<-12 A=B-#06789H<<16 B=B+*AR7+0B+CARRY A=A-*AR2-BORROW SUBC(25,A) A=A-UNS(*AR7+) T=#9ACDH B=DADST(*AR4,T) A=DADST(*AR7,T) C16=1 A=A+DBL(*AR5+) A=A-DBL(*AR5-) T=#7654H C16=0 A=DADST(*AR5+,T) C16=1 A=DSADT(*AR5-,T) A=DBL(*AR5+)-A *AR3+ =HI(B) |B=A+*AR5+0%<<16 *AR4- =HI(A)|A=*AR3-<<16-B GOTO NEXT SXM=0 A=#89ABH A=A+#4567H<<16 *AR3=#9999H A=A&*AR3- B=#8897H B=B+#079ADH<<16 A=A|B<<-12 A=#8897H A=A+#079ADH<<16 A=B#0567DH<<12 DP=#04 7AH=7AH�ACD6H.end四、实验步骤:1、输入以上程序,并进行编译; 2、打开code Explore,并把编译好的程序装载,并进行调试3、逐步调试,并观察各种特殊寄存器的值和预期值是否对应,着重了解各种寻址的特点,及相对应的指令。五、实验心得第一次实验并没有掌握程序的操作方法以及对于程序的不理解,导致操作不熟练,而且程序错误较多,花费了大量的时间在程序的纠错和调试上。实验二 DSP FIR 低通滤波器一、实验目的 1、通过实验程序理解DSP程序的编写。 2、掌握CIC-500系统的A/D转化,串口通信的编程。3、掌握FIR低通滤波器在DSP中的具体实现,进一步了解各种寻址方式的实际应用。二、 实验原理 FIR滤波器的主要操作控制为 设计一个低通滤波器,条件如下: 1、采样频率为9.26KHZ,系统工作频率为10MHZ。 2、截至频率为Flpc为1KHZ。 3、输入信号为14位带符号数值。 4、共取80阶点作运算。 滤波器设计好后的系数放在"lp_coeff.asm"文件内其他文件应拷贝到同 一文件夹下。 三、FIR设计方法 1、数字滤波器设计步骤 数字滤波器的实质是一个离散的多项式表达式,通过这个表达式来满足 一定的需求。因此数字滤波器的设计步骤如下:A、了解滤波器的技术要求B、实现系数计算C、实现,即把传函转换为合适的滤波器网络或结构 D、有限字长效应分析,主要考虑滤波器系数、输入数据量化和固定字 长对滤波器性能的影响E、工程实现2、滤波器的技术指标 :峰值通带偏差:阻带偏差:通带边缘频率:阻带边缘频率 3、用窗口法设计滤波器的步骤 第一步:指定理想的或期望的滤波器频率响应;第二步:通过傅立叶反变换求期望的滤波器的冲击响应, 第三步:选择一个满足通带或衰减指标的窗函数,然后利用滤波器长度与过渡带宽之间的关系确定滤波器的系数数目。 第四步:对于选取的窗函数求w(n)的值,并且将的值与w(n)相乘求得实际的FIR系数h(n)。 4、标准频率选择性滤波器的理想冲击响应总结滤波器类型低通高通-1-带通-带阻-1-+5、常用窗函数及重要特征总结。窗函数名归一化过渡带宽(HZ)通带波纹(dB)相对于旁瓣的主瓣(dB)阻带衰减(dB)窗函数表达式矩形窗0.9/N0.761413211Hanning窗3.1/N0.05463144Hamming窗3.3/N0.01944153布莱克曼5.5/N2.93/N0.00170.0274577550凯塞4.32/N5.71/N0.002750.0002757090四、随机数产生方法实验程序范例 .title "low pass filter" .mmregs .width 80 .length 55 ;.setsect ".text",0x1800,0 ; these assembler directives specify ;.setsect ".data",0x0200,1 ; the absolute addresses of different ;.setsect "vectors",0x0180,0 ; sections of code .sect "vectors" ; interrupt vector table resides at .copy "lp_vecs.asm" ; location 0x0180 .dataseed .word 07e6dh ; seed for random variabletemp .word 0XN .word 0,0,0,0,0,0,0,0,0,0 ; 80 data locations for 80XN1 .word 0,0,0,0,0,0,0,0,0,0 ; stage delay line.XN2 .word 0,0,0,0,0,0,0,0,0,0 ;XN3 .word 0,0,0,0,0,0,0,0,0,0 ;XN4 .word 0,0,0,0,0,0,0,0,0,0 ;XN5 .word 0,0,0,0,0,0,0,0,0,0 ;XN6 .word 0,0,0,0,0,0,0,0,0,0 ;XN7 .word 0,0,0,0,0,0,0,0,0 ;XNLAST .word 0 ;OUTPUT .word 0 ; extra word for the bit bucket .text .copy "lp_coeff.asm" .copy "lp_ac01.asm"start: intm = 1 ; disable all interrupts dcall AC01INIT ; initialize Analog interface. DP = #0 nop pmst = #01a0h ; Interrupt pointer maps vectors to page #3 (3*128=180h) sp = #0ffah ; stack pointer located in Communications Kernal imr = #240h ; unmask TDM RINT and HPIINT(host port interface) intm = 0 ; enable all interruptsWAIT: goto WAIT ; wait for receive interrupt.receive: DP = #seed ; This sets Data Memory Page Pointer ; to page XN, which is defined ; earlier in the program.;- random noise Generator (P-5cs Modulator)- a = seed << 1 a = seed a temp = a << 2 a = temp a a = #8000h & a a = a + seed << 16 seed = hi(a) << 1 a = seed << 11 a = a & #0fffch << 15 repeat(#12) a = a <<C -1;- get sample and run through lowpass filter - b = DRR1 ; LOAD ACCUMULATOR WITH WORD ; RECEIVED FROM AIC! XN = A << 0 ; STORE THE VALUE OF RECEIVED ; WORD TO VARIABLE XN! AR0 = #XNLAST ; LOAD AR0 WITH ADDRESS OF LAST ; DELAY ELEMENT! A = #0 ; ZERO ACCUMULATOR A! repeat(#79) ; Repeat next instructions 80 times. macd(*AR0-,h0,A) ; Compute FIR output. OUTPUT = hi(A) << 0 ; Store the filtered input into ; variable OUTPUT. A = OUTPUT << 0 ; OUTPUT =>Accumulator A A = #0FFFCh & A ; TWO LSB's MUST BE ZERO FOR AIC! DXR1 = A ; SEND TO TRANSMIT REGISTER! return_enable ; Enable interrupts and return ; from interrupt.transmit: return_enable ; Enable interrupts and return ; from interrupt. .end四、实验步骤1、连接CIC-500 DSP发展实验系统 2、载入程序,从J2端输入音乐,运行一段时间后暂停,观察实验结果。3、观察不同频宽的音乐,把结果进行比较。五、实验心得通过实验了解到了DSP程序的编写和A/D转化,以及串口通信的编程,进一步了解了各种寻址方式的实际应用,依据上次实验的经验,这次的操作过程更为熟练。实验三 FFT算法的实现 、实验目的1. 掌握FFT算法。 2、进一步掌握FFT的DSP编程。 3、指出FFT算法中的各种寻址方式,结合算法掌握寻址方式的使用技巧。 4、 认真分析各功能模块的具体功能,和课堂所讲的算法步骤关联起来。二、 实验原理实验原理依据课堂所授的蝶形变换 设计1024个点的FFT变换,输入数据放在in.dat文件里面。在输入实验的时候把bit_rev.asm、 fft.asm unpack.asm、power.asm拷贝至同一个目录下实验主程序: .width 80 .length 55 .title"Real Fast Fourier Transfrom" .mmregs.copy"vectors.asm".copy"initrfft.asm" .textstart: SP =#BOS DP =#0 OVM=#0 FRCT=#1 ASM=#0 CALL bit_rev CALL fft CALL unpack CALL powerhangloose: NOP goto hangloose .copy"bit_rev.asm" .copy"fft.asm" .copy"unpack.asm" .copy"power.asm" .end三、实验步骤: 1、认真阅读四个子程序,理解四个子程序的作用 2、认真进行调试,通过时域频域图对比算法的精度 3、认真思考,改进算法。四、实验心得掌握FFT算法,以及相关的FFT的DSP编程。认真分析各功能模块的具体功能,和课堂所讲的算法步骤关联起来,通过实验能够了解到FFT算法的一些简单的应用以及算法的运算准则。实验七 设计PID控制器或设计矩阵乘法程序 实验目的 1、根据以前做实验的所培养的经验,写出PID控制器或矩阵乘法程序 二、实验原理 1、PID控制原理2、矩阵乘法原理3、矩阵乘法程序main.asm .width 80.length 55.title"矩阵乘法".mmregs.copy"vectors.asm".dataXN .word 1,4,7,2,5,8,3,6,9,1,2,3,4,5,6,7 .word 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0YN .word 1,2,3,4,5,6,7,8,9,1,1,3,2,4,4,2 .textstart:ar3=#XNar4=#YNar5=#(YN+17)sp=#07ffhbk=#9call mulx1call mulx1call mulx1 call mulx1wait:nopgoto waitmulx1:call mulad3ar0=#4mar(*ar3-0)call mulad3ar0=#4mar(*ar3-0)call mulad3ar0=#4mar(*ar3-0)call mulad3return_enablenopmulad3:a=#0ar0=#1repeat(#2)a=a+ *ar3+* *ar4+0%*ar5+ =anopreturn_enable.end三、实验步骤 1、首先自己参考前三个程序,设计自己的程序。 2、编译自己的程序,挑出错误,生成目标文件。 3、加载程序,査询数据存储器的内容验证程序是否正确。四、实验心得在这几次的实验之后,我对书本上的相关知识有了更深的体会,在最后一个实验操作过程中,矩阵乘法的设计很有难度的,需要我们在充分了解矩阵乘法知识的基础上才能转换成我们所要的4*4矩阵,在多次修改,调试后实验才取得了成功。,