dsp实验报告

实验一代数汇编指令基础实验 

一、实验目的:

     1.通过调试目标代码,掌握指令的功能,熟悉指令;

     2.通过指令的熟悉,能够指令应用于实际项目中。

二、实验原理:

    Ti公司的代数汇编指令。

三、实验程序:


      .title"算术指令综合实验"

      .mmregs

      .sect ".vect"     

      .copy "vectors.asm"     

      .text

   

_Start:

        ;

        AR7=#767  ;

        A=#38CAH  ;

        DP=#08AH  ;

        RSA=#0123H;

        DP=#188H  ;

        ASM=#0AH

           AR7=A

           MMR(*AR7+)=#1234H

           DP=#04H

           A=#9876H            

           AR6=#230H

           *AR6+=#9ACDH

           ARP=#6

          

           ;

              @38H=A

           NOP

           NOP

           AR0=#003AH

           A=*AR6+0

           T=#08H

           SXM=1

           B=*AR6-<<TS

           AR7=#0220H

           *AR7=#0E5D8H

           A=*AR7+0B<<-12

           @3AH=#665AH

           AR2=#023AH

           BK=#0

           A=*AR2-0%<<12

           BK=#002AH

           AR3=#0256H

           *AR3- =HI(B)<<8

           ASM=#-8

               *AR3+ =A<<ASM

           AR4=#0216H

           *AR4=#8775H

           B=#025AH

           A=B<<ASM

           MMR(*AR4+)=B

           A=MMR(13H)

           AR2=#0245H

           *AR2=A<<7

           @3AH=A<<ASM

           *AR2+0%=B<<4 

           ;

           *AR2=#1CH

           ASM=*AR2

           T=*AR4+

           LTD(*AR2+)

           B=RND(*AR2+)

           *AR3=#0F57AH

           A=UNS(*AR3)

           B=*AR3+

           *AR3+0B=T

           TRN=#12ACH

           A=DBL(*AR4+)

           B=DUAL(*AR2-)

             DBL(*AR3-)=A

           DUAL(*AR4+)=B

           *AR3+ =HI(A)<<ASM||B=*AR2-<<16

           *AR2+ =HI(B)<<ASM||T=*AR3+

           A=#3456H

           IF(AGT)*AR4+ =HI(A)<<ASM

           B=#0F679H

           IF(BLEQ)*AR3- =HI(B)<<ASM

           A=#0F98DH

           IF(AGT)*AR2+ =BRC

           IF(ALT)*AR3- =T

           B=#0125CH

           IF(BGEQ)*AR2+ =BRC

           CMPS(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=#09ACDH

NEXT:     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&#0ACD6H

.end


四、实验步骤:

     1、输入以上程序,并进行编译;

     2、打开code Explore,并把编译好的程序装载,并进行调试

     3、逐步调试,并观察各种特殊寄存器的值和预期值是否对应,着重了解各种寻址的特点,及相对应的指令。

五、实验心得

     通过本次实验初步了解了ccs2环境的搭建及使用。知道了怎么配置一个工程让程序运行等。

实验二 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、标准频率选择性滤波器的理想冲击响应总结

5、常用窗函数及重要特征总结。

四、随机数产生方法

    实验程序范例

  .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

         .data

seed .word    07e6dh           ; seed for random variable

temp .word    0

XN       .word    0,0,0,0,0,0,0,0,0,0   ; 80 data locations for 80

XN1      .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 interrupts

WAIT:      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、观察不同频宽的音乐,把结果进行比较。

实验三 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"

        .text

start:  SP  =#BOS 

        DP  =#0    

        OVM=#0      

        FRCT=#1    

        ASM=#0     

        CALL   bit_rev

        CALL   fft

        CALL   unpack

        CALL   power

hangloose:

        NOP

        goto      hangloose

    .copy"bit_rev.asm"

    .copy"fft.asm"

    .copy"unpack.asm"

    .copy"power.asm"

         .end

三、实验步骤:

     1、认真阅读四个子程序,理解四个子程序的作用

     2、认真进行调试,通过时域频域图对比算法的精度

     3、认真思考,改良算法。

实验七 设计PID控制器或设计矩阵乘法程序

— 实验目的

    1、根据以前做实验的所培养的经验,写出PID控制器或矩阵乘法程序

二、实验原理

    1、PID控制原理

    2、矩阵乘法原理

    3、矩阵乘法程序

       .width 80

       .length 55

       .title "矩阵乘法"

       .mmregs

       .copy "vectors.asm"

       .data

XN  .word 1,4,7,2,5,8,3,6,9

       .word 0,0,0,0,0,0,0,0,0

YN  .word 1,2,3,4,5,6,7,8,9

       .text

start:

              ar3=#XN

              ar4=#YN

              ar5=#(YN+10)

              sp=#07ffh

              bk=#9

              call mulxl

              call mulxl

              call mulxl

wait:

              nop

              goto wait

mulxl:

              call mulad3

              ar0=#4

              mar(*ar3-0)

              call mulad3

              ar0=#4

              mar(*ar3-0)

              call mulad3

              return_enable

              nop

mulad3:

              a=#0

              ar0=#1

              repeat(#2)

              a=a+*ar3+**ar4+0%

              *ar5+ =a

              nop

              return_enable

              .end

             

三、实验步骤

    1、首先自己参考前三个程序,设计自己的程序。

    2、编译自己的程序,挑出错误,生成目标文件。

    3、加载程序,査询数据存储器的内容验证程序是否正确。

四、实验心得

    通过前面所学的内容自己搭建出了一个4*4的矩阵乘法,并运行测试了实验结果。

相关推荐