DSP课程设计报告—刘雅琪

时间:2024.4.20

一、  课程设计的目的和要求

1.1课程设计目的:

本课程是DSP技术类课程配套的课程设计,要求学生通过高级语言或汇编语言编程实现较复杂的功能。通过课程设计,使学生加深对DSP芯片TMS320C54x的结构、工作原理的理解,获得DSP应用技术的实际训练,掌握设计较复杂DSP系统的基本方法。

1.2课程设计要求

1、认真查阅资料

2、课程设计前认真预习

3、遵守课程设计时间安排

4、认真保质保量完成设计要求

5、认真书写报告

二、系统功能介绍及总体设计方案

2.1  功能介绍    

随着信息技术和计算机技术的飞速发展,数字信号处理技术在众多领域得到广泛应用。数字滤波器由于其精度高、 稳定性好、 使用灵活等优点,广泛应用在各种数字信号处理领域。数字滤波器根据冲击响应函数的时域特性,可以分为 FIR(有限长冲激响应滤波器)和 IIR(无限长冲激响应滤波器) 。FIR 滤波器与 IIR 滤波器相比,具有严格的线性相位,幅度特性可任意等优点。而且, FIR 滤波器的单位抽样响应是有限长的,故一定是稳定的,他又可以用快速傅里叶变换( FFT)算法来实现过滤信号,可大大提高运算效率。

本课程设计的是一个等波纹FIR低通滤波器,其具体参数为:采样频率=1000Hz,通带频率=150Hz截止频率=250Hz,通带衰减=0.5dB阻带衰减=80dB。

2.2 总体设计方案:

     先进行Matlab程序设计产生待滤波数据(借助设计工具FDATOOL产生设计系数),将其导入CCS,在CCS上进行仿真调试运行,得到了输入和输出的波形及其频谱。

 

                       图1 总体设计框图

三、主要设计内容和步骤

3.1 FIR数字滤波器的原理分析

3.1.1 FIR数字滤波器

数字滤波器原理一般具有如下差分方程

                 (l)

式中为输入序列,为输出序列,为滤波器系数,N是滤波器阶数。当所有的均为零,则有       (2)

(2)式是FIR滤波器的差分方程,其一般形式为

                             (3)

对(3)式进行变换,整理后可得FIR滤波器的传递函数

FIR的直接型结构:

               图2 FIR的直接型结构

  FIR滤波器最主要的特点是没有反馈回路,因此它是无条件稳定系统。它的单位冲激响应是一个有限长序列。如果是实数,且满足偶对称或奇对称的条件,即,则滤波器具有线性相位特性。偶对称线性相位FIR滤波器(N为偶数)的差分方程表达式为:

线性相位FIR滤波器是用得最多的FIR滤波器。

     FIR滤波器不断地对输入样本延时后,再作乘法累加算法,将滤波结果输出,因此FIR滤波算法实际上是一种乘法累加运算。在数字滤波器中,FIR滤波器的最主要特点是没有反馈回路,故不存在不稳定的问题。同时可以在随意设置幅度特性的同时,保证精确无误的线性相位。稳定的线性相位特性是FIR滤波器的突出优点。    

 3.1.2  系数对称的FIR滤波器

对于系数对称的FIR滤波器,由于其具有线性相位特性,因此应用很广,特别是对相位失真要求很高的场合,如调制解调器(MODEM)。

一个N=8的FIR滤波器,若,就是对称FIR滤波器,其输出方程为:

总共有8次乘法和7次加法。如果改写成:则变成4次乘法和7次加法。可见乘法运算的次数减少了一半。这是对称FIR的有一个优点。

    对称FIR滤波器的C54x实现的要点

(1)  在数据存储区中开辟两个循环缓冲区,New循环缓冲区中存放N/2=4个新数据;Old循环缓冲区中存放老数据。循环缓冲区的长度为N/2。

                      数据存储器

       New循环缓冲区                   Old循环缓冲区

     


                      程序存储器

系数表


                          图3

(2)设置循环缓冲区指针,AR2指向中最新的数据,AR3指向中最老的数据。

(3)在程序存储器中设置系数表。

(4)(累加器A的高位)

       

(5)将累加器B清0,重复执行4次(i=0,1,2,……)

 *系数     系数指针(PAR)加1

          AR2和AR3减1

(6)保存和输出结果(结果在BH中)

(7)修正数据指针,让AR2和AR3分别指向New缓冲区中最新的数据和Old缓冲区中最老的数据。

(8)用New缓冲区中最老的数据替代Old缓冲区中最老的数据。Old缓冲区指针减1。

(9)输入一个新数据替代New缓冲区中最老的数据。

重复执行第(4)~(9)步

3.1.3  关键指令

在编程中要用到FIRS(系数对称有限冲激响应滤波器)指令,其操作如下:

FIRS  Xmem,Ymem,Pmad

执行   PmadPAR

            当

(B)+(A(32-16))*(由PAR寻址Pmem)B

((Xmem)+(Ymem))<<16A

(PAR)+1PAR

(RC)-1RC

FIRS指令在同一个机器周期内,通过C和D总线读2次数据存储器,同时通过P总线读一个系数。

3.2 Matlab的仿真及滤波器系数的确定

     设计FIR滤波器,关键是得到正确的滤波器系数。按照技术指标的要求,进行Matlab 程序设计。运行后生成的图像如下:

    观察图像可知在频率为50和350Hz上有波形,后面为镜像显示。

利用Matlab 中FDATOOL 工具设计好滤波器,从FDATOOL 向CCS 输出滤波器系数。Matlab 中FDATOOL 工具设计好滤波器以后,可以利用C语言头文件输出滤波器系数,将头文件添加到工程中, 编译连接生成可执行文件。 在把可执行文件加载到目标DSP后,会给头文件中的滤波器系数分配一个静态存储空间,滤波器系数就放入此存储空间中。或者可以直接把滤波器系数输出到DSP 的存储器中。

FDATOOL设计分析后产生的幅频特性及滤波器系数表

输出的滤波器系数为:

.word  15,     -3,   -158,   -448,   -583,   -172,    663,   1008,      2

     .word  -1764,  -2046,   1075,   6744,  11298,  11298,   6744,   1075,  -2046

     .word  -1764,      2,   1008,    663,   -172,   -583,   -448,   -158,     -3

     .word  15

四、详细设计

      给定 FIR数字低通滤波器的技术指标为分别为 50Hz和 350Hz,采样频率均为1kHz。利用 Matlab设计 FIR低通滤波器的系数得 DSP中滤波器系数列表.用.word汇编命令将各滤波器系数直接输入到 DSP程序中;模拟输入数据由 C语言程序实现 ,然后用 .copy命令将 C语言程序生成的数据文件拷贝到 DSP程序中。DSP程序实现读入数据、滤波、显示波形等方面的任务。完成 FIR滤波器的程序框图如图 4所示 ,可知 F I R滤波器的 DSP实现主要由以下 4方面的内容组成:

(1)模拟输入数据的生成   用 C语言程序生成输入数据 ,通过.copy汇编命令将生成的数据文件拷贝到汇编程序中 ,作为 FIR滤波器的输入数据。

(2)DSP初始化程序  

            .title   "FIR.asm"

        .mmregs

        .def     _c_int00

N       .set    28

size   .set     N/2                      ;FIR滤波器阶数

x_new      .usect "x_new",N/2              ;自定义数据空间

x_old      .usect "x_old",N/2              ;自定义数据空间

KS        .set    256                           ;输入样本数据个数

input    .usect   "input",KS      

output   .usect   "output",KS

        .data     

        .copy   "fdacoefs4.h"             ;FIR滤波器系数

        .text

图4 主程序流程图

(3)滤波算法子程序:

 

 

                  

滤波算法流程图

滤波算法子程序代码:

SSBX    FRCT                         

        STM   #x_new,AR2              

        STM   #x_old+(size-1),AR3       

        STM   #-1,AR0                 

        STM   #output,AR5

        STM   #input,AR4

               STM   #KS-1,BRC                

               RPTBD  LOOP-1

               STM   #size,bk                  

               LD       *AR4+,A

               STL    A,*AR2

FIR:    ADD  *AR2+0%, *AR3+0%,A              

        RPTZ B,#size-1              

        FIRS    *AR2+0%,*AR3+0%,COEF        

        STH     B,*AR5+                 

        MAR        *+AR2(2)%                      

        MAR   *AR3+%                            

        MVDD  *AR2,*AR3+0%

(4)复位程序:

                      

        

                     中断流程图

复位程序代码:

         .title  "FIR_V.asm"

         .ref  _c_int00

         .sect  "VECTORS" 

reset:

         b _c_int00

         .end

五、调试过程

    编辑好.asm和.cmd文件之后并加入工程中进行编译,修改出现的错误直至无误,然后加载.out文件。选择File菜单下的data,加入.dat文件,运行程序并打开CCS的输入输出图形界面,观察对比滤波前后的时域波形与频谱图。

调试过程中出现的错误及警告:

(1)warning: creating output section newdata without SECTIONS specification

 分析: 汇编语言源程序中的未初始化段名newdata与链接命令文件不一致

 解决:将链接命令文件中相应的未初始化段名改为newdata

(2) "fir.asm", ERROR!   at line 13: [E1000] Include/Copy file not found or opened

分析:用FDATOOL工具产生的系数表文件名与源程序中引用的不一致

解决:保持产生的系数表文件名与源程序中引用的一致

(3)分析产生的波形图不理想,有时是因为不同的参数设计出的滤波器的阶数可能不同,要注意修改源程序中滤波器阶数值

(4)在CCS程序中,应先加载正确的中断向量文件,所用芯片的CMD配置文件,编译才会有效。编译成功后加载.out文件后才可以运行,查看运行结果。若发现程序语法本身正确,编译也没有错误,可以加载.out文件,但查看输出波形始终与Matlab的波形无法吻合,则应考虑重置CPU再重新进行操作。

调试后运行出的波形如下:

输入与输出的时域波形:

输入与输出的频谱图:

滤波后信号的时域图和频谱图分别如上图所示. 对比CCS所显示的滤波前和滤波后信号的时域和频谱图可以看出:由频率分别为 50Hz, 350Hz 这2个正弦信号组成的混合信号 ,经过FIR低通滤波后,相对应频率的信号被保留 ,另外1个信号得到压制 ,基本上达到了预期的滤波效果。改变程序中的滤波器系数 ,即可实现不同类型的滤波器。

六、结论与体会

6.1 设计结论

本设计为FIR低通滤波器,其要求实现功能是在多个混合的频率中可以把其中高于截止频率Fc的频率分量滤除掉,通过matlab中的FDATOOL工具可以很方便地进行设计,输入相应的参数输入是采样频率Fs=1000Hz,通带频率为150Hz,阻带频率250Hz,输出滤波器系数表,它们作为CCS仿真时的输入,调试修改程序,从所得到的图形中观察分析可以得知该滤波器实现了滤波效果,达到了预期的目的。

6.2 实验心得

通过这次基于DSP的数字滤波器设计与仿真,我学会了应用Matlab和CCS进行DSP设计的实践操作。应用Matlab对FIR数字滤波器比传统的方法设计滤波器速度提高了很多,设计过程得到了很大的简化。熟悉了DSP集成开发环境(CCS)基于窗函数法设计,掌握了FIR数字滤波器原理和方法。通过对系统的调试,对线性相位FIR数字滤波器特性及不同阶数对滤波器特性的影响进行了研究。通过观察时域和频域图,对FIR数字滤波器特性进行了验证,在应用DSP对数字滤波器实现的过程中,体会到了DSP在数字滤波实现中的优缺点。在使用Matlab时,熟悉了如何运用Matlab进行滤波器的设计,可以是编写程序直接针对某所需参数的滤波器进行,也可以运用Matlab中的一个滤波器的专用设计工具FDATOOL对其进行设计,简单方便。

在数字滤波器设计时要注意以下几点:

(1)在用Matlab设计滤波器时采样频率一定要满足奈奎斯特准则。 抽样频率必须大于两倍信号谱的最高频率,即Fs >=2Fh来设置混合波的相应频率,以取得准确的滤波效果。

(2)使用探针方法输入数据时,一般要求输入数据是16进制的小数表示,但如果输入10进制的也可以,但需在两次确认之后才可以输入。

(3)在图形窗口观察结果时,如果所观察的图形不明显,可以通过设置幅度值来改善效果。

(4)在程序中对输入的数据处理时,因注意在Matlab得到的小数要在CCS中得以应用必须符合小数运算的规则。当发生溢出时,则用其最大正数或者最大负数加载累加器。

总之,滤波器设计是我们实际系统应用中重要的一方面,相比传统的R,L,C元件和运算放大器组成的块滤波器,更有发展的潜力。相信这次课程设计,对于我以后的学习和工作会带来很大的帮助!

七、参考文献

[1]程佩青.数字信号处理教程.北京:清华大学出版社,1995

[2]戴明帧.TMS320C54x DSP 结构原理以应用.北京.北京航空航天大学出版社,2007

[3]DSP原理及应用.北京.中国水利水电出版社,2004

附录一:源程序清单(.asm文件)

 ***********系数对称的FIR滤波器设计***********      

        .title   "FIR.asm"

        .mmregs

        .def     _c_int00

N       .set    28

size   .set     N/2                      ;FIR滤波器阶数

x_new      .usect "x_new",N/2              ;自定义数据空间

x_old      .usect "x_old",N/2              ;自定义数据空间

KS        .set    256                           ;输入样本数据个数

input    .usect   "input",KS      

output   .usect   "output",KS

        .data     

        .copy   "fdacoefs4.h"             ;FIR滤波器系数

        .text

_c_int00:

        SSBX  FRCT                       ;设置FRCT(小数方式)位

        STM   #x_new,AR2                 ;AR2指向New缓冲区第一个单元

        STM   #x_old+(size-1),AR3    ;AR3指向Old缓冲区最后一个单元

        STM   #-1,AR0                  ;AR0=-1,双操作数减量

        STM   #output,AR5

        STM   #input,AR4

       STM    #KS-1,BRC                 ;块重复计数GS次

       RPTBD   LOOP-1

       STM    #size,bk              ;循环缓冲区块大小BK=size

       LD     *AR4+,A

       STL    A,*AR2                     ;输入样本值

FIR:    ADD  *AR2+0%, *AR3+0%,A         ;AH=x(n)+x(n-N+1)

        RPTZ B,#size-1                  ;B=0,下条指令执行size次

        FIRS *AR2+0%,*AR3+0%,COEF   ;B=B+AH*h(0),AH=x(n-1)+x(n-N+2)

                                    ;执行该指令size次

        STH   B,*AR5+            ;保存滤波输出数据到AR5所指向单元

        MAR  *+AR2(2)%             ;修正AR2,指向New缓冲区最老的数据

        MAR   *AR3+%            ;修正AR3,指向Old缓冲区最老的数据

        MVDD  *AR2,*AR3+0%   ;用New缓冲区最老的数据替代Old缓冲区中最

;老的数据

LOOP:

EEND    B     EEND                      ;循环等待

        .end

********* 复位向量文件*********

      .title  "FIR_V.asm"

      .ref  _c_int00

      .sect "VECTORS" ;定义向量表,紧随其后的是名为VECTORS的复位向量

reset:

      b _c_int00

      .end

附录二:链接命令文件(.cmd文件)

MEMORY

{

    PAGE 0:

       ROM:   org=0x0E00,len=0x1000

       VEC:   org=0xff80,   len=0x0080

    PAGE 1:

       SPRAM: org=0x0060,   len=0x0020

       DARAM: org=0x0080,   len=0x2000   

}

SECTIONS

{

    .text    :>   ROM PAGE 0

    .data   :>   ROM PAGE 0

    VECTORS  :>   VEC PAGE 0

    .bss    :>   SPRAM PAGE 1

    x_new    :> DARAM PAGE 1

    x_old   :> DARAM PAGE 1

    output :> DARAM PAGE 1

    input  :> DARAM PAGE 1 

}

附录三:滤波器系数表(.h文件)

COEF .word  15,   -3,  -158,   -448, -583,   -172, 663,   1008,    2

     .word  -1764,  -2046,1075,  6744, 11298, 11298, 6744, 1075,  -2046

     .word  -1764,  2, 1008, 663, -172, -583,  -448,   -158,     -3

     .word  15

附录四:Matlab程序(.m文件)

f11=50;    %/Hz

f12=350;   %/Hz

fs=1000;   %/采样Hz

N=256 ;     %数据个数

T=1/fs;    %采样周期

n=0:N;

x11=sin(2*pi*f11*n*T);

x12=0.7*sin(2*pi*f12*n*T);

x_base=(x11+x12);

%待滤波信号波形

figure(1)

plot(x_base)

%待滤波信号频谱

figure(2)

yff=abs(fft(x_base))

df=n*(fs/N)

plot(df,yff)

xout=x_base/max(x_base);%归一化

xto_ccs=round(32767*xout)

fid=fopen('input.dat','w');%打开文件

fprintf(fid,'1651 1 0 0 0\n');%输出文件头

fprintf(fid,'%d\n',xto_ccs);%输出

fclose(fid);

更多相关推荐:
课程设计报告

1课程设计目的课程设计是船舶设计原理课程重要的实践性教学环节是培养学生掌握船舶设计基本原理和能力的技术基础主尺度论证与总布置设计是船舶总体设计的重要组成部分通过课程设计的训练力求使学生实现从学生到船舶设计师的角...

课程设计报告内容

一设计目的1强化上机动手能力在理论和实践的基础上进一步巩固数据结构课程学习的内容掌握工程化软件设计的基本方法2掌握图的创建和应用3掌握迪杰斯特拉以及Prim等基本算法思想4掌握if语句及switch语句的运用方...

课程设计报告

中国计量学院信息工程学院课程设计报告课程设计名称系统设计与仿真课程计二级学院信息工程学院专业班级10电信2班学姓成绩号名1000301232廖壁波指导老师20xx年12月13日中国计量学院信息工程学院课程设计报...

课程设计报告模板

信息科学与工程学院高级语言程序设计课程设计报告学生成绩管理系统学科专业计算机科学与技术班级1301学号指导教师唐郑熠讲师学生二零年月目录目录1设计任务12需求分析121基础功能122扩展功能13系统概要设计13...

课程设计报告

扬州大学数据结构课程设计报告课题名称姓名学院系科班级指导老师日期自来水管架设问题广陵学院陈宏建1一课程设计的题目自来水管理架设问题问题描述若要在扬州大学的八个居民区A区B区C区D区E区F区G区H区之间架设自来水...

课程设计报告

系统软件课程设计时钟中断与进程调度学号姓名指导教师11070319许明秀金雪云20xx年12月一报告摘要进程调度是操作系统十分重要的一个部分在操作系统的设计过程中进程调度和时钟中断形成了密不可分的关系系统时钟定...

课程设计报告

计算机高级语言课程设计报告班级学号姓名蔡路日期学生成绩管理系统19xx3120xx100031020xx年1月18日一课程设计题目与要求实习题目学生成绩管理系统实习内容C语言面向对象的分析与设计基本要求学生成绩...

JAVA_课程设计报告

JAVA程序设计课程设计报告设计题目学院名称专业班级姓名学号1目录一需求分析3二概要设计3三详细设计331数据库设计332模块及窗体设计3321数据库模块设计3322用户登录识别模块5323用户信息管理模块61...

软件课程设计报告

中南民族大学软件课程设计报告电子信息工程09级题目学生吴雪学号指导教师王锦程电子工程0907100220xx年4月25日简易网络聊天系统摘要计算机网络通信技术已经深入我们的生活并给我们即使通信带来了很大的方随着...

软件课程设计报告

任务书北京信息科技大学计算机软件基础课程设计题目从某个源点到其余各顶点的最短路径学院专业学生姓名班级学号指导老师起止时间任务书1摘要摘要本次课程设计的问题假设西安北京沈阳武汉4个城市构成小型交通网4个城市表示图...

计算机网络课程设计报告

计算机网络课程设计报告一.课程设计的题目、目的及要求.........................................................2二.课程设计的内容(分析和设计).....…

Java课程设计报告模板

Java程序设计课程设计报告20xx20xx年度第1学期Hannio塔专业学生姓名班级学号指导教师完成日期计算机科学技术网络工程马千里B计算机1021010704213徐森20xx年1月8日Hannoi塔目录目...

课程设计报告(33篇)