dps原理及应用课程设计.docx
《dps原理及应用课程设计.docx》由会员分享,可在线阅读,更多相关《dps原理及应用课程设计.docx(13页珍藏版)》请在冰点文库上搜索。
dps原理及应用课程设计
专业:
电子信息工程
学号:
0414100113
DSP原理及应用课程设计
(2012年至2013学年度第2学期)
题目:
高通FIR滤波器的DSP实现
学生姓名:
刘敬兰
院(系、部):
机电工程学院
指导教师:
张云马崇霄
设计时间:
2013.7.8—2013.7.12
高通FIR滤波器的DSP实现
1.设计内容
本文通过使用Matlab软来辅助CCS设计FIR滤波器,设计流程如下图
用Matlab中Fdatool
设计滤波器
导出滤波器系数表
在CCS中设计FIR
滤波器程序
输出滤波并观察波形
用Matlab产生待滤
波数据
设计要求:
已知x1(n)=sin(2*pi*f11*n*T);x2(n)=0.7*sin(2*pi*f12*n*T)
x3(n)=0.5*sin(2*pi*f13*n*T);
x(n)=x1(n)+x2(n)+x3(n)
其中:
f11=500Hz;f12=2000Hz;f13=4000Hz;fs=10000Hz
要求设计一个基于DSP的FIR高通滤波器,把f11和f12滤掉,保留f13。
FIR高通滤波器的系数由Matlab中的fdatool产生,信号也由Matlab产生。
2.FIR高通滤波器简介
2.1FIR与IIR滤波器
在数字信号处理的应用中,数字滤波器很重要而且得到了广泛的应用。
按照数字滤波器的特性,它可以被分为线性与非线性、因果与非因果、无限长冲击响应(IIR)与有限长冲击响应(FIR)等等。
其中,线性时不变的数字滤波器是最基本的类型;而由于数字系统可以对延时器加以利用,因此可以引入一定程度的非因果性,获得比传统的因果滤波器更灵活强大的特性;IIR滤波器的特征是具有无限持续时间冲激响应,这种滤波器一般需要用递归模型来实现,因而有时也称之为递归滤波器,而FIR滤波器的冲激响应只能延续一定时间,在工程实际中可以采用递归的方式实现,也可以采用非递归的方式实现,但其结构主要还是是非递归结构,没有输出到输入的反馈,并且FIR滤波器很容易获得严格的线性相位特性,避免被处理信号产生相位失真,而线性相位体现在时域中仅仅是h(n)在时间上的延迟,这个特点在图像信号处理、数据传输等波形传递系统中是非常重要的,且不会发生阻塞现象,能避免强信号淹没弱信号,因此特别适合信号强弱相差悬殊的情况。
相对于IIR滤波器,FIR滤波器有着易于实现和系统绝对稳定的优势,因此得到广泛的应用;对于时变系统滤波器的研究则导致了以卡尔曼滤波为代表的自适应滤波理论的产生。
自适应滤波即利用前一时刻已获得的滤波器参数等结果,自动地调节(更新)现时刻的滤波器参数,以适应信号和噪声未知的统计特性,或者随时间变化的统计特性,从而实现最优滤波。
2.2高通滤波器的定义
高通滤波器是容许高频信号通过、但减弱(或减少)频率低于截止频率信号通过的滤波器。
对于不同滤波器而言,每个频率的信号的减弱程度不同。
它有时被称为低频剪切滤波器;在音频应用中也使用低音消除滤波器或者噪声滤波器。
高通滤波器与低通滤波器特性恰恰相反。
2.3高通滤波器的应用
这样的滤波器能够把高频率的声音引导至专用高音喇叭(tweeter),并阻止可能干擾或者损害喇叭的低音信号。
使用线圈而不是电容的低通滤波器也可以同时把低频信号引导至低音喇叭(woofer)。
参见音频桥(en:
audio crossover)。
高通和低通滤波器也用于数字图像处理中在频域中进行变换。
滤波就是有选择性地提取或去掉(或削弱)某一段或某几段频率范围内的信号,数字滤波器是一种用来过滤时间离散信号的数字系统,它是通过对抽样数据进行数学处理来达到选频目的。
数字滤波器根据其单位冲激响应函数的时域特性分为两种:
无限长冲激响应(IIR) 滤波器和有限长冲激响应(FIR)滤波器。
IIR滤波器保留了模拟滤波器较好的幅度特性,设计简单有效。
但这些特性是以牺牲相位特性为代价而获得的,然而现在许多数据传输,图像处理系统都越来越多的要求系统具有线性相位特性。
在这方面,FIR 滤波器具有独特的优点,它可以保持严格的线性相位特性,因此越来越受到广泛的重视。
2.4等波纹滤波器的概述
等波纹最佳逼近法是一种优化设计法,它克服了窗函数设计法和频率采样法的缺点,使最大误差(即波纹的峰值)最小化,并在整个逼近频段上均匀分布。
用等波纹最佳逼近法设计的FIR数字滤波器的幅频响应在通带和阻带都是等波纹的,而且可以分别控制通带和阻带波纹幅度。
这就是等波纹的含义。
最佳逼近是指在滤波器长度给定的条件下,使加权误差波纹幅度最小化。
与窗函数设计法和频率采样法比较,由于这种设计法使滤波器的最大逼近误差均匀分布,所以设计的滤波器性能价格比最高。
阶数相同时,这种设计法使滤波器的最大逼近误差最小,即通带最大衰减最小,阻带最小衰减最大;指标相同时,这种设计法使滤波器阶数最低。
实现FIR数字滤波器的等波纹最佳逼近法的MATLAB信号处理工具函数为remez和remezord。
Remez函数采用数值分析中的remez多重交换迭代算法求解等波纹最佳逼近问题,求的满足等波纹最佳逼近准则的FIR数字滤波器的单位脉冲响应h(n)。
由于切比雪夫和雷米兹对解决该问题做出了贡献,所以又称之为切比雪夫逼近法和雷米兹逼近法。
3.信号产生程序的设计
3.1使用Matlab中的Fdatool设计滤波器
1、在Matlab的Start菜单中选择Toolboxes->FilterDesign->FilterDesign&AnalysisTools(fdatool),或者在命令行中输入fdatool来启动滤波器设计分析器。
2、在选项中选择或输入滤波器参数,然后点击“DesignFilter”按钮,完成滤波器的设计。
3、从Matlab中导出FIR滤波器系数。
a.在Fdatool中,选择Targets->CodeComposerStudio(tm)IDE,如图1-3。
b.在出现的对话框中选择输出文件类型为Cheaderfile,输出系数类型为signed16-bitinteger,如图1-4所示。
c.点击Generate按钮,选择路径,即可输出前一步设计出的FIR滤波器的系数表。
3.2、利用Matlab产生噪声信号用于滤波器测试
将下面代码另存为M文件,在Matlab中运行后将会生成input.dat文件。
该数据文件中含有500Hz、3000Hz、8000Hz三种频率的信号,用于滤波器滤波效果测试:
f11=500;%/Hz
f12=2000;%/Hz
f13=4000;%/Hz
fs=10000;%/采样Hz
N=1000%数据个数
T=1/fs;%采样周期
n=0:
N;
x11=sin(2*pi*f11*n*T);
x12=0.7*sin(2*pi*f12*n*T);
x13=0.5*sin(2*pi*f13*n*T);
x_base=(x11+x12+x13);
%待滤波信号波形
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,'16511000\n');%输出文件头
fprintf(fid,'%d\n',xto_ccs);%输出
fclose(fid);
图1
图2
图3
4、FIR高通滤波器滤波程序的设计
4.1ccs源文件
#include"stdio.h"
#include"C:
\MATLAB7\extern\include\tmwtypes.h"
//fdacoefs.h为Matlab生成的系数表头文件
//如运行不通过,请修改fdacoefs.h中的代码,将”#include”这行修改为如下:
//"
//也就是自己机器上的Matlab安装的绝对路径
#defineN81//FIR滤波器的级数+1,本例中滤波器级数为80
#defineLEN200//待滤波的数据长度
longyn;
intinput[LEN];//输入缓冲,在仿真时将从内存载入
intoutput[LEN];//输出缓冲,直接存放在内存中
intB[N];
voidmain()
{constintB[81]={
0,0,0,0,0,0,0,0,0,
0,0,1,-1,-2,5,1,-11,9,
15,-30,-3,59,-44,-68,132,8,-224,
165,229,-439,-16,692,-512,-676,1335,24,
-2268,1919,3017,-9854,13080,-9854,3017,1919,-2268,
24,1335,-676,-512,692,-16,-439,229,165,
-224,8,132,-68,-44,59,-3,-30,15,
9,-11,1,5,-2,-1,1,0,0,
0,0,0,0,0,0,0,0,0
};
inti,j;
int*x;
for(j=0;j{
x=&input[j];
yn=0;
for(i=0;iyn+=(long)B[i]*(*x++);
output[j]=yn>>15;
}
while
(1);
}
4.2cmd文件
dsp中cmd文件的作用:
在DSP里,程序执行过程中也有好多地方需要跳转,所以需要跳转的目标地址。
如果你在编程序时知道你所要跳转的地址,那就更好的,但实际上,这是很不好控制的。
所以就产生了.CMD。
它有一个最大的好处,可以把每个段分配地址,所以比如你想从一个段跳到另一个段的时候,就很方便的知道这个段的起始地址。
CMD它是用来分配rom和ram空间用的,告诉链接程序怎样计算地址和分配空间.所以不同的芯片就有不同大小的rom和ram.放用户程序的地方也不尽相同.所以要根据你的芯片进行修改.cmd文件分两部分.MEMORY和SECTIONS.
{
PAGE0:
EPROG:
origin=0x1400,len=0x7c00
VECT:
origin=0xff80,len=0x80
PAGE1:
USERREGS:
origin=0x60,len=0x1c
BIOSREGS:
origin=0x7c,len=0x4
IDATA:
origin=0x80,len=0x1380ByCraftor
EDATA:
origin=0x1400,len=0x8000
EDATA1:
origin=0x9400,len=0x4c00
}
SECTIONS
{
.vectors:
{}>VECTPAGE0
.sysregs:
{}>BIOSREGSPAGE1
.trcinit:
{}>EPROGPAGE0
.gblinit:
{}>EPROGPAGE0
frt:
{}>EPROGPAGE0
.text:
{}>EPROGPAGE0
.cinit:
{}>EPROGPAGE0
.pinit:
{}>EPROGPAGE0
.sysinit:
{}>EPROGPAGE0
.bss:
{}>IDATAPAGE1
.far:
{}>IDATAPAGE1
.const:
{}>IDATAPAGE1
.switch:
{}>IDATAPAGE1
.sysmem:
{}>IDATAPAGE1
.cio:
{}>IDATAPAGE1
.MEM$obj:
{}>IDATAPAGE1
.sysheap:
{}>IDATAPAGE1
.stack:
{}>IDATAPAGE1
}
5.滤波结果
5.1滤波器仿真测试过程如下
1、在第3部分编译成功后会在”<工程所以目录>/debug”文件夹下产生*.out文件,在CCS软件的File->LoadProgram里打开这个.out文件
2、将滤波器设计文件载入到内存中
2.1、选择File->Data->Load…打开之前Matlab生成的input.dat文件
2.2、将Address设置为input,Length设置为200,Page设置为Data
3、运行程序,点击运行按钮,程序即开始运行
4、查看滤波器滤波效果
4.1、打开View->Graph->Time/Frequency
4.2、在上一步出现的对话框中,按如图4设置
4.3、如果出现的波形图太大,在图形上点右键,将”AllowDocking”、”Floatinmainwindow”之前的勾去掉,即会变成如图4-6的波形:
图4
4.4、重复前三个步骤,只改变图形选项中的DisplayType、GraphTitle、StartAddress,使之最后出现如下的图形:
图5
左上角:
输入数据时域图(StartAddress:
input)
右上角:
输入数据频谱(DisplayType:
FFTMagnitude)
左下角:
输出数据时域图(StartAddress:
output)
右下角:
输出数据频谱(DisplayType:
FFTMagnitude
6.总结
本次设计主要涉及MATLAB的应用,CCS的调试,并对滤波器的效果进行了测试与调试,本次课程设计共计一周的是时间,并在老师的精心计划下,我们按部就班的完成了。
虽然遇到不少问题,不过经过老师的解答与指导问题被解决了。
在这为期一周的课程设计中,我们首先是拟定题目,查阅资料。
这个工程是比较重要的,如果这个步骤做不好,下面的步骤就不好进行,还好老师给了不少相关的资料,再加上自己在网上查了不少的资料,题目定了。
然后就是对MATLAB,CCS的应用。
综合老师提供的资料,和对软件的一些了解,首先将老师的例题验证了一遍,在这个过程中,其实遇到不少问题,首先是对程序的大意不太明白,过程步骤的不确定,缺少不少文件和对语句的格式的错误认识,导致程序仿真的失败,在经过查看资料和请教老师,解决了一些问题,但是还是差不少内容。
不过经过不懈的努力,问题慢慢解决了。
不过还是有些问题,希望能在自己的努力下,慢慢解决吧。
在验证结果的时候,对图形的了解也差一些,还有就是对比图形发现滤波效果不是很好,经过修改滤波系数,滤波效果有所改善。
在本次课程设计中,我学到不少东西,同时发现自己在程序的设计中有不少欠缺,希望自己以后有时间多学习相关的知识,同时多关注一下这方面的资料,总之,以后会多注意这方面的知识。
参考文献
[1]丁玉美,高西全.数字信号处理.2版.西安:
西安电子科技大学出版社,2001
[2]高西全,丁玉美.数字信号处理(第2版)学习指导.西安电子科技大学出版社,2001
[3]丁玉美,高西全.数字信号处理.西安:
西安电子科技大学出版社,2005
[4]陈怀琛.数字信号处理教程---MATLAB释疑与实现.北京:
电子工业出版社.
[5]陈怀琛,高西全,吴大正》.MATLAB及电子信息课程中的应用.3版.北京:
电子工业出版社,2006