DSP实习报告.docx

上传人:b****5 文档编号:3786612 上传时间:2022-11-25 格式:DOCX 页数:50 大小:899.33KB
下载 相关 举报
DSP实习报告.docx_第1页
第1页 / 共50页
DSP实习报告.docx_第2页
第2页 / 共50页
DSP实习报告.docx_第3页
第3页 / 共50页
DSP实习报告.docx_第4页
第4页 / 共50页
DSP实习报告.docx_第5页
第5页 / 共50页
点击查看更多>>
下载资源
资源描述

DSP实习报告.docx

《DSP实习报告.docx》由会员分享,可在线阅读,更多相关《DSP实习报告.docx(50页珍藏版)》请在冰豆网上搜索。

DSP实习报告.docx

DSP实习报告

 

实习题目数字滤波器设计

 

班级:

姓名:

学号:

指导教师:

实验日期:

12月12日---12月16日

 

目录

一、实习目的-2-

二、实习要求-2-

三、实习设备:

-2-

四、系统原理论述-2-

五、方案论证及系统设计-5-

六、程序流程图-6-

七、源程序-6-

八、仿真调试与实验-27-

九、实习总结-29-

十、参考文献-30-

 

数字滤波器设计

一、实习目的

1、掌握设计较复杂DSP系统的基本方法。

2、掌握DSP扩展数字I/O接口的方法。

3、了解SEED-DEC5502的硬件系统。

4、熟悉使用CCStudiov3.3,MATLAB软件,学习C语言编程。

5、学习MATLAB编写程序时各相关函数的使用方法。

二、实习要求

1、DSP初始化。

2、学习MATLAB编写程序时各相关函数的使用方法。

3、设计出软件编程方法,并写出源代码;

4、TMS320C5502硬件系统。

5、熟练使用CCS对程序进行调试

6、仿真与结果分析;

三、实习设备:

计算机、MATLAB7.0、CCStudiov3.3

4、系统原理论述

1、数字滤波器的设计原理

数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。

IIR滤波器的特征是,具有无限持续时间冲激响应。

这种滤波器一般需要用递归模型来实现,因而有时也称之为递归滤波器。

FIR滤波器的冲激响应只能延续一定时间,在工程实际中可以采用递归的方式实现,也可以采用非递归的方式实现。

数字滤波器的设计方法有多种,如双线性变换法、窗函数设计法、插值逼近法和Chebyshev逼近法等等。

随着MATLAB软件尤其是MATLAB的信号处理工作箱的不断完善,不仅数字滤波器的计算机辅助设计有了可能,而且还可以使设计达到最优化。

数字滤波器设计的基本步骤如下:

(1)确定指标

在设计一个滤波器之前,必须首先根据工程实际的需要确定滤波器的技术指标。

在很多实际应用中,数字滤波器常常被用来实现选频操作。

因此,指标的形式一般在频域中给出幅度和相位响应。

幅度指标主要以两种方式给出。

第一种是绝对指标。

它提供对幅度响应函数的要求,一般应用于FIR滤波器的设计。

第二种指标是相对指标。

它以分贝值的形式给出要求。

在工程实际中,这种指标最受欢迎。

对于相位响应指标形式,通常希望系统在通频带中具有线性相位。

运用线性相位响应指标进行滤波器设计具有如下优点:

¢Ù只包含实数算法,不涉及复数运算;¢Ú不存在延迟失真,只有固定数量的延迟;¢Û长度为N的滤波器(阶数为N-1),计算量为N/2数量级。

(2)逼近

确定了技术指标后,就可以建立一个目标的数字滤波器模型。

通常采用理想的数字滤波器模型。

之后,利用数字滤波器的设计方法,设计出一个实际滤波器模型来逼近给定的目标。

(3)性能分析和计算机仿真

2、FIR滤波器及IIR滤波器的设计方法

目前,IIR数字滤波器设计最通用的方法是借助于模拟滤波器的设计方法。

模拟滤波器设计已经有了一套相当成熟的方法,它不但有完整的设计公式,而且还有较为完整的图表供查询,因此,充分利用这些已有的资源将会给数字滤波器的设计带来很大方便,IIR数字滤波器的设计步骤是:

(1)按一定规则将给出的数字滤波器的技术指标转换为模拟滤波器的技术指标;

(2)根据转换后的技术指标设计模拟低通滤波器H(s);

(3)在按一定规则将H(s)转换为H(z)。

若所设计的数字滤波器是低通的,那么上述设计工作可以结束,若所设计的是高通、带通或者带阻滤波器,那么还有步骤:

(4)将高通、带通或者带阻数字滤波器的技术指标先转化为低通滤波器的技术指标,然后按上述步骤

(2)设计出模拟低通滤波器H(s),再由冲击响应不变法或双线性变换将H(s)转换为所需的H(z)。

s-z映射的方法有:

冲激响应不变法、阶跃响应不变法、双线性变换法等。

下面讨论双线性变换法。

双线性变换法[是指首先把s平面压缩变换到某一中介平面s1的一条横带(宽度为2πT,即从-πT到πT),然后再利用

的关系把s1平面上的这条横带变换到整个z平面。

这样s平面与z平面是一一对应关系,消除了多值变换性,也就消除了频谱混叠现象。

s平面到z平面的变换可采用

(2-5)

(2-6)

有:

(2-7)

从s1平面到z平面的变换,即

(2-8)

代入上式,得到:

(2-9)

一般来说,为使模拟滤波器的某一频率与数字滤波器的任一频率有对应关系,可引入代c,

(2-10)

(2-11)

这种s平面与z平面间的单值映射关系就是双线性变换。

有了双线性变换,模拟滤波器的数字化只须用进行置换。

IIR滤波器的优点是可利用模拟滤波器设计的结果,缺点是相位是非线性的,若需要线性相位,则要用全通网络进行校正。

FIR滤波器的优点是可方便地实现线性相位。

FIR滤波器单位冲激响应h(n)的特点:

其单位冲激响应h(n)是有限长(

),系统函数为:

(2-12)

在有限Z平面有(N-1)个零点,而它的(N-1)个极点均位于原点z=0处。

Fir滤波器线性相位的特点:

    如果FIR滤波器的单位抽样响应h(n)为实数,而且满足以下任一条件:

偶对称h(n)=h(N-1-n)

    奇对称h(n)=-h(N-1-n)

其对称中心在n=(N-1)/2处,则滤波器具有准确的线性相位。

窗函数设计法:

   一般是先给定所要求的理想滤波器频率响应

,由

导出

,我们知道理想滤波器的冲击响应

是无限长的非因果序列,而我们要设计的是

是有限长的FIR滤波器,所以要用有限长序列

来逼近无限长序列

,设:

(2-13)

常用的方法是用有限长度的窗函数w(n)来截取

即:

(2-14)

这里窗函数就是矩形序列RN(n),加窗以后对理想低通滤波器的频率响应将产生什么样的影响呢?

根据在时域是相乘关系,在频域则是卷积关系:

(2-15)

   其中,

为矩形窗谱,

是FIR滤波器频率响应.

 通过频域卷积过程看

的幅度函数H(ω)的起伏现象,可知,加窗处理后,对理想矩形的频率响应产生以下几点影响:

(1)使理想频率特性不连续点处边沿加宽,形成一个过渡带,其宽度等于窗的频率响应的主瓣宽度。

(2)在截止频率的两边的地方即过渡带的两边,出现最大的肩峰值,肩峰的两侧形成起伏振荡,其振荡幅度取决于旁瓣的相对幅度,而振荡的多少,则取决于旁瓣的多少。

(3)改变N,只能改变窗谱的主瓣宽度,改变ω的坐标比例以及改变的绝对值大小,但不能改变主瓣与旁瓣的相对比例(此比例由窗函数的形状决定)。

(4)对窗函数的要求:

a、窗谱主瓣尽可能窄,以获取较陡的过渡带;

b、尽量减小窗谱的最大旁瓣的相对幅度;即能量集中于主瓣,使肩峰和波纹减小,增大阻带的衰减。

五、方案论证及系统设计

本次实习有两种方案,C语言和汇编语言实现,由于考虑到算法的特点,以及C语言的简练,我采用C语言版。

1、新建一个项目:

点击Project-New,将项目命名为FIR1.pjt,并将项目保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为中文名,因为CCS软件不能识别以中文命名的文件夹。

2、新建一个源文件:

点击File-New-SourceFile可以打开一个文本编辑窗口,点击保存按键,保存在和项目相同的一个文件夹下面(FIR1),保存类型选择*.ASM(如果源文件是C语言编写的,保存类型选择*.C,本实验中的例程是使用汇编语言编写的,所以选择*.ASM为保存类型),我们在这里将保存名字命名为fir.asm,同样建立并命名一个为C5509.asm。

3、在项目中添加源文件:

在新建立了一个源文件以后,要想使用CCS编译器对该源文件进行编译还需要将源文件添加到项目中去。

添加方法是在工程管理器中右键单击fir1.pjt,在弹出的菜单中选择AddFiles,然后将刚才建立的fir.asm文件,并用同样的方法添加.cmd文件。

六、程序流程图

 

七、源程序

FIR低通滤波器

1、MATLAB程序

b=fir1(79,0.1,Blackman(80));%80pointhammingwindowFIRfilter,Wn=0.2

fvtool(b,1)%FlterVisualizationTool可心以查看幅度响应、冲激响应等

h=buffer(round(b*32768),8)'%参数*2^15,把小数点移最高位后面后取整,然后排成8个一行便于输出。

csvwrite('table.txt',h)%参数表输出到文件中

%然后只要把参数表从table.txt中拷到代码中,每行前面加上'.word

2、fir2_t.c源代码

#include"math.h"

#include"tms320.h"

#include"dsplib.h"

#include"test.h"

shorti;

shorteflag1=PASS;

shorteflag2=PASS;

DATAr[NX];

DATA*dbptr=&db[0];

voidmain()

{

inti;

shortx[NX];

for(i=0;i

for(i=0;i

{x[i]=(int)(((sin(PI*300*i/15000)+sin(PI*8000*i/15000))*32768/3));

}

//clear

for(i=0;i

for(i=0;i

//compute

fir2(x,h,r,dbptr,NX,NH);//双MAC运算,速度快

//fir(x,h,r,dbptr,NX,NH);//单MAC运算,速度相对双MAC要慢一些

while

(1);

}

3、text。

h源代码

/*#defineNX300

#defineNH80

#defineFNAME"t4"

#defineMAXERROR10

DATAx[NX];*/

//

#defineNX320

#defineNH80

//#defineFNAME"t6"

#defineMAXERROR10

#definePI3.1415926

//

#pragmaDATA_SECTION(h,".coeffs")

DATAh[NH]={

0,0,0,-1,-3,-4,-6,-7,

-6,-3,4,14,28,44,61,75,

82,78,60,25,-29,-100,-183,-269,

-348,-404,-423,-389,-290,-116,135,461,

849,1280,1731,2171,2571,2902,3137,3260,

3260,3137,2902,2571,2171,1731,1280,849,

461,135,-116,-290,-389,-423,-404,-348,

-269,-183,-100,-29,25,60,78,82,

75,61,44,28,14,4,-3,-6

};

#pragmaDATA_SECTION(db,".dbuffer")

DATAdb[NH+2];

DATArtest[NX];

DATAr[NX];

FIR高通滤波器

1、MATLAB程序

b=fir1(79,0.1,'high');%80pointhammingwindowFIRfilter,Wn=0.2

fvtool(b,1)%FlterVisualizationTool可心以查看幅度响应、冲激响应等

h=buffer(round(b*32768),8)'%参数*2^15,把小数点移最高位后面后取整,然后排成8个一行便于输出。

csvwrite('table.txt',h)%参数表输出到文件中

%然后只要把参数表从table.txt中拷到代码中,每行前面加上'.word'

2、fir2_t.c源代码

#include"math.h"

#include"tms320.h"

#include"dsplib.h"

#include"test.h"

shorti;

shorteflag1=PASS;

shorteflag2=PASS;

DATAr[NX];

DATA*dbptr=&db[0];

voidmain()

{

inti;

shortx[NX];

for(i=0;i

for(i=0;i

{x[i]=(int)(((sin(PI*300*i/15000)+sin(PI*8000*i/15000))*32768/3));

}

//clear

for(i=0;i

for(i=0;i

//compute

fir2(x,h,r,dbptr,NX,NH);//双MAC运算,速度快

//fir(x,h,r,dbptr,NX,NH);//单MAC运算,速度相对双MAC要慢一些

while

(1);

}

3、text。

h文件源代码

/*#defineNX300

#defineNH80

#defineFNAME"t4"

#defineMAXERROR10

DATAx[NX];*/

//

#defineNX320

#defineNH80

//#defineFNAME"t6"

#defineMAXERROR10

#definePI3.1415926

//

#pragmaDATA_SECTION(h,".coeffs")

DATAh[NH]={

0,7,14,21,28,34,38,38,

32,20,0,-27,-59,-94,-126,-152,

-164,-159,-130,-77,0,98,208,321,

423,498,531,507,414,246,0,-319,

-699,-1124,-1571,-2013,-2424,-2777,-3048,-3219,

29494,-3219,-3048,-2777,-2424,-2013,-1571,-1124,

-699,-319,0,246,414,507,531,498,

423,321,208,98,0,-77,-130,-159,

-164,-152,-126,-94,-59,-27,0,20,

32,38,38,34,28,21,14,7

};

#pragmaDATA_SECTION(db,".dbuffer")

DATAdb[NH+2];

DATArtest[NX];

DATAr[NX];

FIR带通滤波器

1、MATLAB程序

N=50;

windows=Chebwin(N);

b=fir1(N-1,[0.300.60],windows);%50pointhammingwindowFIRfilter

fvtool(b,1)%FlterVisualizationTool可以查看幅度响应、冲激响应等

h=buffer(round(b*32768),4)'%参数*2^15,把小数点移最高位后面后取整,然后排成8个一行便于输出。

csvwrite('table.txt',h)%参数表输出到文件中

%然后只要把参数表从table.txt中拷到代码中,每行前面加上'.word'

2、fir2_t.c源代码

#include"math.h"

#include"tms320.h"

#include"dsplib.h"

#include"test.h"

shorti;

shorteflag1=PASS;

shorteflag2=PASS;

DATAr[NX];

DATA*dbptr=&db[0];

voidmain()

{

inti;

shortx[NX];

for(i=0;i

for(i=0;i

{x[i]=(short)(((1+sin(PI*4000*i/15000))*sin(PI*6000*i/15000)*32768/3));

}

//clear

for(i=0;i

for(i=0;i

//compute

fir2(x,h,r,dbptr,NX,NH);//双MAC运算,速度快

//fir(x,h,r,dbptr,NX,NH);//单MAC运算,速度相对双MAC要慢一些

while

(1);

}

3、test.h程序

/*#defineNX320

#defineNH50

#defineFNAME"t4"

#defineMAXERROR10

DATAx[NX];*/

//

#defineNX320

#defineNH50

//#defineFNAME"t6"

#defineMAXERROR10

#definePI3.1415926

//

#pragmaDATA_SECTION(h,".coeffs")

DATAh[NH]={

0,0,-2,-2,

2,-4,12,47,

-20,-112,-8,21,

-57,347,458,-612,

-830,246,-168,119,

3295,1245,-6742,-4627,

7390,7390,-4627,-6742,

1245,3295,119,-168,

246,-830,-612,458,

347,-57,21,-8,

-112,-20,47,12,

-4,2,-2,-2

};

#pragmaDATA_SECTION(db,".dbuffer")

DATAdb[NH+2];

DATArtest[NX];

FIR带阻滤波器

1、MATLAB程序

b=fir1(39,[0.10.3],'stop');%40pointhammingwindowFIRfilter

fvtool(b,1)%FlterVisualizationTool可心以查看幅度响应、冲激响应等

h=buffer(round(b*32768),4)'%参数*2^15,把小数点移最高位后面后取整,然后排成8个一行便于输出。

csvwrite('table.txt',h)%参数表输出到文件中

%然后只要把参数表从table.txt中拷到代码中,每行前面加上'.word

2、fir2_t.c源代码

#include"math.h"

#include"tms320.h"

#include"dsplib.h"

#include"test.h"

shorti;

shorteflag1=PASS;

shorteflag2=PASS;

DATAr[NX];

DATA*dbptr=&db[0];

voidmain()

{

inti;

shortx[NX];

for(i=0;i

for(i=0;i

{x[i]=(short)(((1+sin(PI*3000*i/15000))*sin(PI*4000*i/15000)*32768/3));

}

//clear

for(i=0;i

for(i=0;i

//compute

fir2(x,h,r,dbptr,NX,NH);//双MAC运算,速度快

//fir(x,h,r,dbptr,NX,NH);//单MAC运算,速度相对双MAC要慢一些

while

(1);

}

3、text。

h文件源代码

/*#defineNX300

#defineNH90

#defineFNAME"t4"

#defineMAXERROR10

DATAx[NX];*/

//

#defineNX320

#defineNH40

//#defineFNAME"t6"

#defineMAXERROR10

#definePI3.1415926

//

#pragmaDATA_SECTION(h,".coeffs")

DATAh[NH]={

0,23,21,-40,

-167,-297,-307,-132,

125,221,0,-352,

-321,555,2155,3588,

3638,1641,-1841,-5155,

26057,-5155,-1841,1641,

3638,3588,2155,555,

-321,-352,0,221,

125,-132,-307,-297,

-167,-40,21,23

};

#pragmaDATA_SECTION(db,".dbuffer")

DATAdb[NH+2];

DATArtest[NX];

DATAr[NX];

IIR低通滤波器

1、MATLAB程序

clear

clc

wp=2*2000/10000

ws=2*2500/10000

[n,wn]=cheb1ord(wp,ws,3,40)

[b,a]=cheby1(n,3,wn)

freqz(b,a,512,10000)

[s,g]=tf2sos(b,a)

%s2=s/20*32768

s1=round(s/20*32768)

k=[s1(:

5),s1(:

6),s1(:

3),s1(:

1),s1(:

2)]

s3=[k(1,:

),k(

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1