资源描述
DSP课程设计汇报
题目:FIR滤波器设计
学院:电气信息学院
专业:通信工程
姓名:
学号:
指导老师:曹玉英
一、设计目标
设计一个FIR高通滤波器,通带边界频率为2khz,通带纹波小于1dB,采样频率为8khz,实现当多个频率输入信号输入时只保留大于2khz信号功效,其中FIR滤波器设计能够用MATLAB窗函数法进行。
二、算法研究
1. FIR原理和参数生成公式
FIR数字滤波器是非递归性线性时不变因果系统,这么系统差分方程能够表示为:
yn=i=0N-1aixn-i (2.1)
令输入信号x(n)=δ(n),代入(2.1)式,有
yn=i=0N-1aiδn-i
=a0δ(n)+a1δ(n-1)+···+an-1δ[n-(N-1)] (2.2)
这时y(n)即为冲激响应h(n)。由(2.2)式很轻易得到
h(0)=a0,h(1)=a1, ···,h(N-1)=an-1;
又由(2.2)式可知,当n<0和n>N-1时,h(n)=0,即这个系统冲激响应是有限长度,这么滤波器就叫做有限冲激响应(FIR)滤波器。
(2.3)
将ai=h(i)(i=0,1, ···,N-1)代入(2.2)式,得到
yn=i=0N-1hixn-i
(2.4)
将(2.3)式两边进行z变换后,能够得到FIR滤波器系统函数:
HZ=Y(Z) XZ =i=0N-1hiz-i=n=0N-1h(n)z-n
又由(2.4)式,有
Hz=h0zN-1+h1zN-2···+hN-2z+h(N-1)ZN-1
所以,FIR滤波器系统函数H(z)极点全部在z=0处,为N-1阶极点;而N-1个零点由冲激响应h(n)决定,通常来说,能够在有限z平面任何位置。
因为FIR数字滤波器极点全部集中在单位圆内原点z=0处,和系数h(n)无关,所以FIR滤波器总是稳定,这是FIR数字系统一大优点。
2. 利用MATLAB计算滤波系数
用来设计标准频率响应基于窗函数FIR滤波器,可实现加窗线性相位FIR数字滤波器设计。
语法:b=fir1(n,Wn)
b=fir1(n,Wn,‘ftype’)
b=fir1(n,Wn,Window)
b=fir1(n,Wn,‘ftype’,window)
n:滤波器阶数;Wn:滤波器截止频率;
ftype:用来决定滤波器类型,
当ftype=high时,可设计高通滤波器;
当ftype=stop时,可设计带阻滤波器;
Window:用来指定滤波器采取窗函数类型,其默认值为汉明窗。
3.编写产生滤波器输入信号程序
输入信号应该最少包含两种频率成份正弦信号,一个信号频率小于hz,一个信号频率大于hz。能够再MATLAB中产生,也可编写DSP程序产生。
三、开发平台
1.MATLAB
MATLAB是美国MathWorks企业出品商业数学软件,用于算法开发、数据可视化、数据分析和数值计算高级技术计算语言和交互式环境,关键包含MATLAB和Simulink两大部分。
MATLAB是matrix&laboratory两个词组合,意为矩阵工厂(矩阵试验室)。是由美国mathworks企业公布关键面对科学计算、可视化和交互式程序设计高科技计算环境。它将数值分析、矩阵计算、科学数据可视化和非线性动态系统建模和仿真等很多强大功效集成在一个易于使用视窗环境中,为科学研究、工程设计和必需进行有效数值计算众多科学领域提供了一个全方面处理方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)编辑模式,代表了当今国际科学计算软件优异水平。
2.CCS
CCS(Code Composer Studio)是TI企业推出针对TMS320系列DSP集成开发环境。在CCS下,开发者可对软件进行编辑,编译,调试,代码性能测试和项目管理等全部工作,并能将程序下载到目标DSP上运行调试。
在一个开放式插件结构下,CCS内部集成了以下软件工具:
1)C5000代码产生工具(包含C5000编译器,汇编优化器,汇编器和连接器);
2)软件模拟器(Simulator);
3)实时基础软件DSP/BIOSTM ;
4)主机和目标机之间实时数据交换软件RTDXTM;
5)实时分析和数据可视化软件;
CCS不仅含有一系列调试、分析能力,还提供了实时分析和数据可视化功效,大大降低了DSP系统开发难度,使开发者能够将精力集中在应用开发上。
四、参数计算
1.利用MATLAB计算滤波系数
利用MATLAB中FDATOOL设计滤波器参数设置图4-1,频域波形图4-2。
其中FDATool(Filter Design and Analysis Tool)是MATLAB信号处理工具箱一个综合、简便图形用户工具。经过该工具提供优异可视化滤波器集成设计环境,用户能够方便地设计几乎全部常规滤波器,包含FIR和IIR多种设计方法。此次设计利用高通滤波器,选择最小滤波器阶次,采样频率Fs为8Khz,阻带边界频率为1800hz,通带频率设置为hz。参数设置完成后,点击design filter,即可生成以下滤波器时域和频域图像。
图4-1 FDATOOL生成滤波系数
图4-2 设计滤波器频域波形
选择Targets中Code composer studio(r)IDE,图4-3示,在出现对话框中选择输出文件类型为C header file,输出系数类型为signed 16-bit integer。点击OK, 选择路径,即可输出前一步设计出FIR滤波器系数表。
图4-3 生成滤波器系数表文件
2.利用MATLAB生成输入信号
假设输入信号包含两种频率成份,其中一个信号频率设置为800hz,另一个设置为2500hz,用MATLAB产生,代码以下:
i=0:1:255;
xto_ccs=round((sin(2*pi*[i]*800/8000)+sin(2*pi*[i]*2500/8000))*32768/2)
fid=fopen('input.dat','w');%打开文件
fprintf(fid,'1651 1 0 0 0\n');%输出文件头
fprintf(fid,'%d\n',xto_ccs);%输出
fclose(fid);
单击编译后生成input.dat文件。
五、源程序
1.c语言主程序:
#include"stdio.h"
#include"fdacoefs.h" //滤波系数文件
#define N 111 // FIR滤波器级数+1,本例中滤波器级数为110
#define LEN 200 //待滤波数据长度
long yn;
int input[LEN]; //输入缓冲,在仿真时将从内存载入
int output[LEN]; //输出缓冲,直接存放在内存中
void main()
{
int i,j;
int *x;
for(j=0;j<LEN-1;j++)
{
x=&input[j];
yn=0;
for(i=0;i<N-1;i++)
yn+=B[i]*(*x++);
output[j]=yn>>15;
}
while(1);
}
2.cmd连接器文件
MEMORY
{
PAGE 0:EPROG:o=0x1400,l=0x7c00
VECT:o=0xff90,l=0x80
PAGE 1:USERREGS:o=0x60,l=0x1c
BIOSREGS:o=0x7c,l=0x4
IDATA:o=0x80,l=0x1380
EDATA:o=0x1400,l=0x8000
EDATA1:o=0x9400,l=0x4c00
}
SECTIONS
{
.vectors:{}>VECT PAGE 0
.sysregs:{}>BIOSREGS PAGE1
.trcinit:{}>EPROG PAGE 0
.gblinit:{}>EPROG PAGE 0
.frt:{}>EPROG PAGE 0
.text:{}>EPROG PAGE 0
.cinit:{}>EPROG PAGE 0
.print:{}>EPROG PAGE 0
.sysinit:{}>EPROG PAGE 0
.bss:{}>IDATA PAGE 1
.far:{}>IDATA PAGE 1
.const:{}>IDATA PAGE 1
.switch:{}>IDATA PAGE 1
.sysmem:{}>IDATA PAGE 1
.cio:{}>IDATA PAGE 1
.MEM$obj:{}>IDATA PAGE 1
.sysheap:{}>IDATA PAGE 1
.stack:{}>IDATA PAGE 1
}
六、调试过程
1.编译程序
新建工程文件“liuying0202”,根据五中要求输入c语言源程序及cmd文件,将.c,.cmd,.lib加入工程中,rebuild all。调试结果图6-1示。
图6-1 rebuild all结果
2.导入程序
点击file按钮,选择load program,添加刚刚生成liuying0202.out文件。图6-2示。
图6-2 加入.out文件
3.导入数据
点击file按钮,选择data中load...选项,将利用MATLAB生成inpu t.dat文件导入输入信号波形文件,图6-3示,点击确定后,弹出设置对话框,将导入数据文件起始地址设置为input,数据长度为200,page选择data,具体图6-4示。
图6-3 导入数据文件
图6-4 设置导入数据格式
4.设置观察窗口
点击view按钮,选择graph中time/frequency...进行设置,起始地址分别设置为:input 和output,数据大小设置为:200,采样频率设置为8Khz。图6-5示。
图6-5 设置观察窗口
七、试验结果及分析
1.输入信号
图7-1是输入信号时域波形,图7-2是输入信号频域波形。
2.输出信号
图7-3是输出信号时域波形,图7-4是输出信号频域波形。
图7-1 输入信号时域波形
图7-2 输入信号频域波形
图7-3 输出信号时域波形
图7-4 输出信号频域波形
3.结果分析
经过四个观察窗口能够显著观察到,此次设计滤波器将频率为800hz信号滤除,只留下了频率为2500hz信号,实现了高通滤波器滤波功效。但滤波效果未达成最好,有一定干扰存在。
八、总结
采取MATLAB软件来辅助DSP平台实现FIR高通数字滤波器,大大简化了数字滤波器设计,经过MATLABFDATOOL将滤波器设计可视化,使设计滤波器变得简单易行,最终经过CCS软件仿真图形说明了该设计验证方法全部是可行,该设计成功实现了高通滤波器功效。
经过此次课程设计,加深了对DSP课程概念了解,巩固了课堂上所学理论知识,并能很好了解和掌握数字信号处理中基础概念、基础原理、基础方法。同时掌握编程方法和处理实际问题技巧。
参考资料:
[1]周利清等 《数字信号处理》 北京邮电大学出版社
[2]邹彦等 《DSP原理及应用》 电子工业出版社
[3]曹玉英 《<dsp>试验指导书》 西南石油大学
[4]王秀芳等 《基于MatLab和DSP滤波器快速设计方法》现代计算机,,总第二七七期:97~99
[5] craftor 《FIR滤波器设计——使用Matlab和CCS》
补充部分
一、修改程序实现低通滤波器:
1.滤波系数文件修改图补1-1示
图补1-1
2.输入信号为f1=800hz,f2=3500hz,利用MATLAB生成。
3.仿真结果图补1-2示
图补1-2
二、修改程序实现带通滤波器
1.修改滤波系数文件图补2-1示
图补2-1
2.输入信号为f1=500hz,f2=2400hz,f3=4500hz,利用MATLAB生成.dat文件
图补2-2示
图补2-2
3.仿真结果图补2-3示
图补2-3
三、修改程序实现带阻滤波器
1.修改滤波系数文件图补3-1示
图补3-1
2.输入信号.dat文件用带通中使用过数据文件
3.仿真波形图补3-2示
图补3-2
展开阅读全文