一、实验原理:
1、无限冲击响数字滤波器的基础理论;
2、模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、贝塞尔滤波器);
3、双线性变换的设计原理。
二、实验内容:
1、复习有关巴特沃斯滤波器设计和用双线性变换法设计IIR数字滤波器的知识;
2、阅读本实验所提供的样例子程序;
3、运行CCS软件,对样例程序进行跟踪,分析结果;
4、填写实验报告。
5、样例程序实验操作说明
1)正确完成计算机、DSP仿真器和实验箱连接后,开关K9拨到右边,即仿真器选择连接右边的CPU:CPU2;
2)“A/D转换单元”的拨码开关设置:
JP3
3)检查:计算机、DSP仿真器、实验箱是否正确连接,系统上电;
4)置拨码开关S23的1、2拨到OFF,用示波器分别观测模拟信号源单元的2号孔“信号源1”和“信号源2”输出的模拟信号,分别调节信号波形选择、信号频率、信号输出幅值等旋钮,直至满意,置拨码开关S23的1到ON,两信号混频输出;
三、程序分析:
cpu_init(); //CPU初始化
fs = 25000; //设置采样频率为2500HZ
nlpass = 0.18; //设置通带上限频率归一化参数为0.18
nlstop = 0.29; //设置阻带下限截止频率归一化参数为0.29
biir2lpdes(fs,nlpass,nlstop,a,b); 根据双线性变换法求滤波器的系数a和b
set_int(); //调用低通滤波器子程序对信号进行滤波
中断程序注释:
interrupt void int1()
{
in_x[m] = port8002; //读取port8002端口的数值
in_x[m] &= 0x00FF; //取后八位送入X[m]
m++; //每取一个数字m加1
intnum = m;
if (intnum == Len) //当取到128个字节时,重新读取port8002端口的数值
{
intnum = 0;
xmean = 0.0;
for (i=0; i<Len; i++) //将128个字节的数加起来求和
{
xmean = in_x[i] + xmean;
}
xmean = 1.0*xmean/Len; //求平均数
for (i=0; i<Len; i++)
{
x[i] = 1.0*(in_x[i] - xmean); //做归一化处理
}
for (i=0; i<Len; i++)
{
w2 = x[i]-a[1]*w1-a[2]*w0;
y[i] = b[0]*w2+b[1]*w1+b[2]*w0; //将a和b 数组代入,求出y,实现滤波的处理
w0 = w1;
w1 = w2;
}
m=0;
flag = 1; //中断返回时会检测flag是否等于1,如果等于1,则在断点处画图
}
四、实验运行结果:
1、
从由图可知,输入波形有很多毛刺,但是经过FIR滤波器后,波形变得平滑,毛刺也少了很多,原因是滤波器滤去了某些频率的波形。
2、
五、思考题:
1.试述用双线性变换法设计数字滤波器的过程?
答:任何一个数字滤波器都有自己的滤波原理,而滤波原理一般是一个激励响应函数,而双线性变换法可以求得激励响应函数中的参数。
利用双线性变换法求出函数中的参数,再用其它子函数求得输出响应,用这种思路可以设计出一个数字滤波器。
2.实验中,计算每个二阶滤波器的输出序列时,如何确定计算点数?
答:用双线性变换法设计数字滤波器时,一般总是先将数字滤波器的各临界频率经过式(2-1)的频率预畸,求得相应参考模拟滤波器的各临界频率,然后设计参考模拟滤波器的传递参数,最后通过双线性变换式求得数字滤波器的传递函数。
这样通过双线性变换,正好将这些频率点映射到我们所需要的位置上。
3.对滤波前后的信号波形,说明数字滤波器的滤波过程与滤波作用。
答:滤波器滤去一定频率的波,使得波中不再有杂波,使有用波形的信噪比增大。
六、实验体会:
通过这次实验熟悉设计IIR数字滤波器的原理与方法,掌握数字滤波器的计算机仿真方法,通过观察对实际信号的滤波作用,获得对数字滤波的感性认识。
在调节IIR滤波器滤波效果时发现,当改变其滤波参数时,滤波效果变化不大,当剧烈变化是才会出现明显效果。
带上限频率归一化参数和阻带下限截止频率归一化参数要小于0.5是因为关于Y轴对称,所以在小于0.5是才有意义,如果上下限取值差过大,则会造成滤波变化不大。
这是DSP实验的最后一次实验,得到实验结果并不困难,实验操作主要是新建一个project,添加.c,.h,.cmd,.lib等文件后,运行代码,没有出错后,点击“load program”,选择“.out”文件,选择图形观察界面即可。
有时候程序出错了,调整程序参数或者调节实验箱的按钮,达到实验要求的结果,整体上操作还是挺简单的,但是对于原理,还是需要自己在课后好好地把握弄懂的。