您好,欢迎来到百家汽车网。
搜索
您的当前位置:首页10 IIR实验

10 IIR实验

来源:百家汽车网
实验五 IIR滤波器实验

一 实验目的

(1) 了解IIR滤波器的原理及使用方法;

(2) 了解使用Matlab语言设计IIR滤波器的方法; (3) 了解DSP对IIR滤波器的设计及编程方法; (4) 熟悉对IIR滤波器的调试方法;

二 实验内容

本试验要求设计滤波器采样频率为600hz,截止频率200hz的高通滤波器。设计IIR滤波器实现上面要求。

输入信号频率为100HZ和300HZ的合成信号,目的是通过我们设计的滤波器将100HZ的信号滤掉,余下300HZ的信号成分,达到滤波的效果。

三 实验原理

数字滤波器的输入x[k]和输出y[k]之间的关系可以用如下常系数线性差分方程及其z变换描述:

NMiy[k]ai0x[ki]bi1iy[ki]

系统的转移函数为:

MH(z)Y(z)X(z)bk1Nkzk1k0akzk设N=M,则传输函数变为:

H(z)a0a1z1b1z1anzbnzN1N转换成极零点表示为:

NH(z)Cj1zzzpjj式中,zj表示零点,pj表示极点,它具有N个零点和N个极点,如果任何一个极点在Z平面单位圆外,则系统不稳定。如果系数bj全部为0,滤波器成为非递归的FIR滤波器,这时系统没有极点,因此FIR滤波器总是稳定的。对于IIR滤波器,有系数量化敏感的缺点。由于系统 对序列施加的算法,是由加法、延时和常系数乘三种基本运算的组合,所以

40

可以用不同结构的数字滤波器来实现而不影响系统总的传输函数。图 5.1是四阶直接型IIR滤波器的结构。

图 5.1 四阶直接型IIR滤波器的结构

四 实验步骤

1. 滤波器的Matlab语言设计

在Matlab中使用滤波器设计工具箱(FDA)设计滤波器。

图 5.2 打开的FDA主界面图

41

上图 5.2是打开的滤波器设计的主界面图,在图 5.2上可以设计各种满足用户要求的滤波器,包括滤波器的类型(IIR或 FIR)、滤波器的阶数、滤波器的种类、滤波器的截至频率、带宽、纹波系数、采样频率等各种和设计滤波器有关的所有参数。

图中,我们设计IIR型的3阶切比雪夫I型的采样频率为600HZ,截至频率为200HZ的低通滤波器。图中中间显示的数据为设计好的滤波器参数。

下图 5.3是对应频率特性图。

图 5.3 滤波器的频率特性图

下图 5.4是对应的冲击响应特性图。

图 5.4 滤波器的冲击响应特性图

图 5.5是对应的滤波器阶跃特性图。 图 5.6是对应的滤波器极零点示意图。 图 5.7是对应的滤波器结构示意图。

42

图 5.5 滤波器阶跃特性图。

图 5.6 滤波器的极零点示意图

图 5.7 滤波器的结构示意图

43

2. 从Matlab语言转换成通用语言

使用Matlab语言设计出滤波器的参数之后,紧接着需要编写通用的语言,以便向DSP所需要的汇编语言转换,也直接使用C语言,然后调用CCS自带的C编译器将C语言转换成汇编语言,但一般情况下,滤波器对实时要求比较高,而整个滤波器的程序编写也不是很大,所以建议采用汇编语言编写。

滤波器设计的第二步需要编写通用的语言,在这里,我们仍然使用Matlab语言编写易懂的语句。下面程序是编写后的程序。浅显易懂,移值性强。

************************* 滤波器程序 ************************

clear all;

clf; N=256; fs=600; dt=1/fs;

for k=1:N;

f1=300; f2=100; end

lp=200; wn1=2*lp/fs;

[z1,p1,k1] = CHEBY1(3,0.5,wn1,’high’);

yy1(1)=0;

yy1(2)=0;

b(1)=0.0580; b(2)=-0.1741; b(3)=0.1741;b(4)=-0.058; a(1)=1; a(2)=1.1795; a(3)=0.918;a(4)=0.2742

n=254;

for i=1:n

yy1(i)= b(4)*y(i+3)+ b(3)*y(i+2)+ b(2)*y(i+1) +

b(1)*y(i)+a(4)*yy1(i+2)+a(3)*yy1(i+1) +a(2)*yy1(i);

end

y=fft(y,N); pyy=y.*conj(y); f=(0:(N/2-1)); figure(1);

44

清寄存器值 清屏

数据点数 采样频率

信号频率 信号频率

y(k)=sin(2*pi*f1*k*dt)+sin(2*pi*f2*k*dt)+sin(2*pi*(f1+20)*k*dt); 产生信号

截止频率

函数的参数

滤波器的极零点表示

[B,A] = CHEBY1(3,0.5,wn1,’high’); 滤波器的传递函数表示

滤波

将信号做FFT变换 做功率谱分析

plot(f,pyy(1:N/2))

y=fft(yy1,N); pyy=y.*conj(y); f=(0:(N/2-1)); figure(2); plot(f,pyy(1:N/2))

对程序的说明:

程序有四个部分,

第一部分是用for循环产生需要滤波的信号;

第二部分是生成Cheby1滤波器,其中产生极点和零点; 第三部分是进行滤波;

第四部分画出信号的功率谱图。

图 5.8和图 5.9分别是滤波前和滤波后的信号功率谱图。

将滤波后数据做功率谱分析

图 5.8 滤波前的信号功率谱图

45

图 5.9 滤波后的信号功率谱图

3. 范例程序说明

该范例程序运行环境为CCS2.2for2000, 如果用户所用的开发环境为CC的话,可以自行创建工程文件,再将原文件导入。

用CCS2.2的load workspace 打开fir目录下的iir.wks,然后build all,程序将自动load(option\\customize\\program load option\\下的load program after…)打勾。运行后图标如图5.10所示

图5.10 范例程序图表

46

范例程序模拟120点的正弦基波双周期,叠加30次和40次谐波,滤波传递参数在iircoeff.h头文件中定义,滤波前和滤波后的数据时域和频域图如图5.10所示。用户可自行在MATLAB中验证。

关于IIR的参数设置,用户可参考TI的IIR库函数说明(TI文档SPRC072)。

47

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- baijiahaobaidu.com 版权所有 湘ICP备2023023988号-9

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务