matlab设计低通滤波器
- 格式:doc
- 大小:217.00 KB
- 文档页数:6
课程设计(综合实验)报告( 2010 -- 2011年度第 2学期)
名称:DSP课内作业
题目:设计IIR低通滤波器院系:电子与通信工程系
班级:
学号:
学生姓名:
指导教师:
设计周数:
成绩:
日期:2011年6 月19 日
一、课程设计(综合实验)的目的与要求
目的:
1.熟悉并掌握滤波器的设计过程。
2.学会使用matlab设计滤波器并仿真验证滤波器的可行性。
3.学会用利用CCS平台下的工具设计滤波器并利用其仿真功能进行仿真。
4.学会分析滤波器的性能指标。
要求:
设计截止频率为1000Hz的IIR低通滤波器,其它参数自定。
用Matlab对设计的滤波器进行仿真,验证其性能。
利用CCS开发环境编写滤波器程序,并在实验台上进行验证。
设计报告中给出详细的设计过程、每一步的设计结果及最终设计的滤波器的性能指标。
二、设计正文
(一)数字滤波器及传统设计方法
数字滤波器可以理解为是一个计算程序或算法,将代表输入信号的数字时间序列转化为代表输出信号的数字时间序列,并在转化过程中,使信号按预定的形式变化。
数字滤波器有多种分类,根据数字滤波器冲激响应的时域特征,可将数字滤波器分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应(FIR)滤波器。
IIR数字滤波器具有无限宽的冲激响应,与模拟滤波器相匹配,所以IIR滤波器的设计可以采取在模拟滤波器设计的基础上进一步变换的方法。
其设计方法主要有经典设计法、直接设计法和最大平滑滤波器设计法。
在对滤波器实际设计时,整个过程的运算量是很大的。
设计阶数较高的IIR滤波器时,计算量更大,设计过程中改变参数或滤波器类型时都要重新计算。
设计完成后对已设计的滤波器的频率响应要进行校核。
要得到幅频、相频响应特性,运算量也是很大的。
平时所要设计的数字滤波器,阶数和类型并不一定是完全给定的,很多时候要根据设计要求和滤波效果不断地调整,以达到设计的最优化。
在这种情况下,滤波器设计就要进行大量复杂的运算,单纯的靠公式计算和编制简单的程序很难在短时间内完成。
利用MATLAB强大的计算功能进行计算机辅助设计,可以快速有效地设计数字滤波器,大大地简化了计算量。
(二)IIR滤波器的MATLAB设计
FDATool(Filter Design&Analysis Tool)是MATLAB信号处理工具箱里专用的滤波器设计分析工具,MATLAB 6.O以上的版本还专门增加了滤波器设计工具箱(Filter Design Toolbox)。
FDATool可以设计几乎所有的常规滤波器,包括FIR和IIR的各种设计方法。
它操作简单,方便灵活。
FDATool。
界面总共分两大部分,一部分是Design Filter。
在界面的下半部,用来设置滤波器的设计参数;另一部分则是特性区,在界面的上半部分,用来显示滤波器的各种特性。
Design Filter部分主要分为:Filter Type(滤波器类型)选项,包括Lowpass(低通)、Highpass(高通)、Bandpass(带通)、Bandstop(带阻)和特殊的 FIR滤波器。
在这我设计了一个低通滤波器,Butterworth型,十五阶。
图示如下:
让fdatool输出设计滤波器的参数并生成一个头文件,供ccs仿真设计使用。
头文件如下:
const int NL = 16;
const real64_T NUM[16] = {
3.704601320336e-008,5.556901980504e-007,3.889831386352e-006,1.685593600753e-005, 5.056780802258e-005,0.0001112491776497,0.0001854152960828,0.0002383910949636,
0.0002383910949636,0.0001854152960828,0.0001112491776497,5.056780802258e-005,
1.685593600753e-005,3.889831386352e-006,5.556901980504e-007,3.704601320336e-008 };
const int DL = 16;
const real64_T DEN[16] = {
1, -7.491295668367, 27.3120809445, -63.7925508487, 106.2123606264, -133.0337890685, 129.1264046361, -98.67640937991,
59.74534947072, -28.61588327861, 10.73949421367, -3.097884427722,
0.6641882406073, -0.09983342706208, 0.009399483956028,-0.0004175932926862 };
使用fdatool导出一个simulink model,仿真滤波器的功能一个500Hz和一个4000Hz的信号叠加采样为10000Hz 输入图形为
输出图形为
可发现高频部分确实被滤除了
将产生的头文件导入ccs进行编程
头文件为
float b[16] = {
3.704601320336e-008,5.556901980504e-007,3.889831386352e-006,1.685593600753e-005, 5.056780802258e-005,0.0001112491776497,0.0001854152960828,0.0002383910949636,
0.0002383910949636,0.0001854152960828,0.0001112491776497,5.056780802258e-005,
1.685593600753e-005,3.889831386352e-006,5.556901980504e-007,3.704601320336e-008 };
float a[16] = {
1, -7.491295668367, 27.3120809445, -63.7925508487, 106.2123606264, -133.0337890685, 129.1264046361, -98.67640937991,
59.74534947072, -28.61588327861, 10.73949421367, -3.097884427722,
0.6641882406073, -0.09983342706208, 0.009399483956028,-0.0004175932926862 };
主程序部分为
#include <math.h>
#define Fs 8000 //抽样频率
#define f1 500 //信号1频率
#define f2 1500 //信号2频率
void makewave()
{
int i;
for(i=0;i<800;i++)
x[i]=10sin(2*3.14*f1*i/Fs)+20sin(2*3.14*f2*i/Fs);
//输入10V 500Hz、20V 1500Hz的正弦信号叠加,8000Hz抽样
}
void filter()
{
int i,j;
y[0]=0;
for(index=1;index<800;index++)
{
j=0;
sum_x=0;
for(i=index;i>index-14;i--)
{
sum_x+=b[j++]*x[i];
if(i==0)break;
}
j=1;
sum_y=0;
for(i=index-1;i>index-14;i--)
{
sum_y+=(-a[j++])*y[i];
if(i==0)break;
}
y[index]=sum_y-sum_x;
}
}
void main()
{
while(1)
{
makewave();
filter();
}
}
CCS绘图,对输入、输出序列进行观察。
如图所示,高频信号已被滤除
三、课程设计总结
学会使用matlab设计滤波器并仿真验证滤波器的可行性。
学会用利用CCS平台下的工具设计滤波器并利用其仿真功能进行仿真。
四、参考文献
《TMS320C54xDSP结构、原理及其运用》第二版戴明桢周建江编著。