实验三IIR滤波器的设计与信号滤波Word文档格式.docx
《实验三IIR滤波器的设计与信号滤波Word文档格式.docx》由会员分享,可在线阅读,更多相关《实验三IIR滤波器的设计与信号滤波Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
功能:
线型绘图函数。
格式:
plot(v);
plot(x,y)
说明:
plot(v),v是长度为N的数值向量。
作用是在坐标系中顺序地用直线连接顶点,生成一条折(曲)线。
当向量元素充分多时,即可生成一条光滑的曲线。
在实验中,若FFT点数足够多时,用plot打印的幅频特性就很接近连续曲线。
plot(x,y),x和y都是长度为n的向量。
作用在坐标系中生成顺序连接顶点的折(曲)线。
这种调用可被用来生成参数方程的图形。
2.stem
绘制离散序列图。
stem(y);
stem(x,y);
stem(…,’线端符号’);
stem(…,’线型’);
stem(…,‘线型’,‘线端符号’)
stem(y)和stem(x,y)分别与plot(v)和plot(x,y)的绘图规则相同,只是stem绘制的是离散序列图。
实验中用于绘制时域序列的波形图和序列的离散傅里叶变换的幅度图。
3.subplot
多坐标设置与定位当前坐标系。
subplot(m,n,k)
subplot(m,n,k)将图形窗口分成m行n列的m×
n块子区域,按行从上到下,从左到右的顺序,在第i块子区定义一个坐标系,使其成为当前坐标系,随后的绘图函数将在该坐标系输出图形。
另外,同一个图形窗口的坐标系可以重叠,这样可以产生前面的坐标系遮住后面坐标系的各种图形效果。
4.figure
创建新的图形窗口(用于输出图形的窗口)。
figure;
figure(h)
figure 函数创建一个新的图形窗口,并成为当前图形窗口,所创建的图形窗口的序号(句柄值)是按同一MATLAB程序中创建的顺序号。
使用figure(h)函数,该方法常用在程序设计中,用于控制将各种波形图输出到相应的图形窗口中。
打印输出或存储时,一个图形窗口打印一张图纸或存储一个图形文件。
5.axis
设置图形的坐标范围。
axis([xminxmaxyminymax])
6.gridon
画出图形的分格线。
7.title
书写图名。
title(‘s’)
8.xlabel
横坐标名称。
xlabel(‘s’)
9.ylabel
纵坐标名称。
ylabel(‘s’)
10.text
在图面(x,y)位置处书写字符注释。
text(x,y,‘s’)
11.holdon
通过该命令,保持当前图形不变化,准备在当前的图形窗口上绘制新的曲线。
12.abs
求绝对值(模值)。
y=abs(x)
y=abs(x)用于计算x的绝对值,当x为复数时,得到的是复数的模值。
当x为字符串时,abs(x)得到字符串的各个字符的ASCII码,例如,x=’123’,则,abs(x)得到:
495051。
13.angle
求相角。
ψ=angle(h)
ψ=angle(h)用于求复矢量或复矩阵的相角(以弧度为单位),相角介于和之间。
14.conv
求卷积。
c=conv(a,b)
conv(a,b)用于求矢量a和b的卷积,即
式中N为矢量a和b的最大长度。
例如,当a=[123],b=[456]时,则
c=
413282718
此函数可直接用于求两个有限长序列的卷积。
设x(n)和h(n)的长度分别为M和N,则计算二者卷积的MATLAB语句如下:
y=conv(x,h)
y的长度为M+N-1。
15.filter
利用IIR滤波器或FIR滤波器对数据进行滤波。
y=filter(b,a,x);
[y,zf]=filter(b,a,x);
y=filter(b,a,x,zi)
filter利用数字滤波器对数据进行滤波,其实现采用直接Ⅱ型结构,因而适用于IIR和FIR两种滤波器。
滤波器的系统函数为
即滤波器系数a=[a0a1a2…aN],b=[b0b1…bM]。
这里的标准形式为a0=1,如果输入矢量a时,a0≠1,则MATLAB将自动进行归一化系数的操作;
如果a0=0,则给出出错信息。
y=filter(b,a,x)利用给定系数矢量a和b对x中的数据进行滤波,结果放入y矢量中。
y=filter(b,a,x,zi)可在zi中指定x的初始状态。
[y,zf]=filter(b,a,x)除得到矢量y外,还得到x的最终状态矢量zf。
16.fftfilt
利用重叠相加法实现短序列b(n)和长序列x(n)的块之间的卷积。
y=fftfilt(b,x)
17.freqz
数字滤波器的频率响应。
[H,w]=freqz(b,a,N);
[H,f]=freqz(b,a,N,Fs);
H=freqz(b,a,w);
H=freqz(b,a,f,Fs);
freqz(b,a)
freqz用于计算数字滤波器H(z)的频率响应函数。
[H,w]=freqz(b,a,N)可得到数字滤波器的N点频率响应值,这N个点均匀地分布在[0,]上,并将这N个频点的频率记录在w中,相应的频响值记录在H中。
要求N为大于零的整数,最好为2的整数次幂,以便采用FFT计算,以提高速度。
[H,f]=freqz(b,a,N,Fs)用于对在[0,]上等间隔采样N点,采样点频率及相应频响值分别记录在f和H中。
由用户指定(以Hz为单位)值。
H=freqz(b,a,w)用于对在[0,]上进行采样,采样频率点由矢量w指定。
H=freqz(b,a,f,Fs)用于对在[0,]上采样,采样频率点由矢量f给定。
freqz(b,a)用于在当前窗口中绘制出幅频和相频特性曲线。
18.impz
计算H(z)相应的单位脉冲响应h(n)。
[h,t]=impz(b,a);
[h,t]=impz(b,a,z);
19.fft
一维快速傅里叶变换(FFT)
y=fft(x);
y=fft(x,N)
fft函数用于计算矢量或矩阵的离散傅里叶变换。
y=fft(x)利用FFT算法计算矢量x的离散傅里叶变换,当x为矩阵时,y为矩阵x每一列的FFT。
当x的长度为2的整数次幂时,fft采用基2FFT算法,否则采用稍慢的混合基算法。
y=fft(x,N)采用N点FFT。
当x长度小于N时,fft函数自动在x尾部补零,以构成N点数据;
当x的长度大于N时,fft截取x的前面N点数据进行FFT。
20.ifft
一维逆快速傅里叶变换(IFFT)
y=ifft(x);
y=ifft(x,N)
二、IIR滤波器的设计与实现
基于模拟滤波器变换原理IIR滤波器的经典设计:
首先,根据模拟滤波器的指标设计出相应的模拟滤波器,然后,将设计好的模拟滤波器转换成满足给定技术指标的数字滤波器。
通常算法有脉冲响应不变法和双线性变换法。
在MATLAB的数字信号处理工具箱中提供了相应的设计函数。
常用的有:
(1)Butterworth滤波器阶数选择函数
[N,Wn]=buttord(Wp,Ws,Rp,Rs)
输入参数:
Wp通带截止频率,Ws阻带截止频率,Rp通带最大衰减,Rs阻带最小衰减;
输出参数:
N符合要求的滤波器最小阶数,Wn为Butterworth滤波器固有频率(3dB)。
(2)零极点增益模型到传递函数模型的转换
[num,den]=zp2tf(Z,P,K);
Z,P,K分别表示零极点增益模型的零点、极点和增益;
num,den分别为传递函数分子和分母的多项式系数。
(3)从低通向低通的转换
[b,a]=lp2lp(Bap,Aap,Wn);
把模拟滤波器原型转换成截至频率为Wn的低通滤波器。
(4)双线性变换函数
[bz,az]=bilinear(b,a,Fs);
把模拟滤波器的零极点模型转换为数字滤波器的零极点模型,其中Fs是采样频率。
例4:
用双线性变换法设计一个Butterworth数字低通滤波器,要求其通带截至频率,阻带截至频率,通带衰减小于0.75dB,阻带衰减大于20dB。
MATLAB实现程序:
wp=0.2*pi;
ws=0.4*pi;
ap=0.75;
as=20;
T=1;
Wp=2/T*tan(wp/2);
%求模拟原型滤波器参数
Ws=2/T*tan(ws/2);
[N,Wc]=buttord(Wp,Ws,ap,as,'
s'
);
%求滤波器的阶数
[BS,AS]=butter(N,Wc,'
%得到模拟原型滤波器的系统函数
[BZ,AZ]=bilinear(BS,AS,1/T);
%双线性变换法转换到数字滤波器的系统函数
[H,W]=freqs(BS,AS);
plot(W/pi,20*log10(abs(H)));
%画模拟原型滤波器的频响
holdon;
grid;
[H,W]=freqz(BZ,AZ);
plot(W/pi,20*log10(abs(H)),'
r'
%画数字滤波器的频响
运行结果:
Butterworth低通滤波器的频率响应图