论文部分内容阅读
中图分类号:TP2文献标识码:A文章编号:1671-7597(2009)0920017-01
一、使用“filter”指令实现
当求得了滤波器H(z)的分子分母系数向量[b,a]之后,用“filter”
指令可以实现对应的数字滤波器,从而通过该滤波器对输入数字序列进行滤波。设滤波器输入序列为X,n阶滤波器H(z)的分子系数为b,分母系数为a,数字滤波器中的初状态为zi,则滤波器输出序列将是X,b,a以及zi的函数。滤波器“filter”的一般用法如下:
[y,zf]=filter(b,a,X,zi)
%b为滤波器H(z)分子系数矩阵,通常由butter()等函数设计得来;%a为滤波器H(z)分母系数矩阵,通常由butter()等函数设计得来;%X为输入序列,一般为1行N列矩阵或N行1列矩阵;%zi为滤波器初状态矩阵,其元素个数为滤波器阶数;%zi的元素个数=max(length(a),length(b))-1;%返回y为滤波器滤波输出序列,序列长度与输入序列X相同;%返回zf为滤波器的终止状态,zf的元素个数与zi的相同。
当滤波器初始状态为0时,zi可省略;当不需要返回滤波器终止状态时,zf可省略。即“filter”的简化用法为:
y=filter(b,a,X)或[y,zf]=filter(b,a,X)
二、使用Simulink实现
当已知传递函数后,通过Simulink的离散滤波器模块可以实现滤波器。以传递函数
的实现为例来说明对应的Simulink实现方法。首先构建Simulink模型,如图1所示。
然后设置仿真参数:仿真时间段为0~1s。求解器采用固定步长的离散求解器。其余参数采用默认值。设置离散滤波器参数:分子系数向量[0,1],分母系数向量[1,-0.8],采样时间0.1秒,如图2所示。
再设置数据输入输出模块的参数。输入变量名为simin,并允许数据外插。输出数据为simout,设定为向量格式,如图3所示。将设置好的仿真模型存盘为discretfilter.mdl文件。 最后编写仿真程序。
t=(0:0.1:1)′;%仿真输入数据的对应时间
x=[10000000000]′;%仿真输入数据序列
simin=[t,x];%组合为Simulink要求的数据输入格式,第一列为时间向量,第二列为对应的输入数据序列
sim(′discretfilter.mdl′);%命令启动仿真
figure(1);stem(t,simout);axis([0,1,0,1.5]);%采用不同的表示方法表达输出序列
figure(2);stairs(t,simout);axis([0,1,0,1.5]);simout′%显示仿真输出结果数据
运行结果如下,对比采用“filter”指令的结果,两者完全一致。如果打开了仿真模型中的示波器,显示波形将如图4所示。显然,对于简单的离散系统的实现问题,采用函数的方法比采用Simulink默认的方法要简捷一些。事实上,Simulink更适合复杂系统的建模与仿真问题。
一、使用“filter”指令实现
当求得了滤波器H(z)的分子分母系数向量[b,a]之后,用“filter”
指令可以实现对应的数字滤波器,从而通过该滤波器对输入数字序列进行滤波。设滤波器输入序列为X,n阶滤波器H(z)的分子系数为b,分母系数为a,数字滤波器中的初状态为zi,则滤波器输出序列将是X,b,a以及zi的函数。滤波器“filter”的一般用法如下:
[y,zf]=filter(b,a,X,zi)
%b为滤波器H(z)分子系数矩阵,通常由butter()等函数设计得来;%a为滤波器H(z)分母系数矩阵,通常由butter()等函数设计得来;%X为输入序列,一般为1行N列矩阵或N行1列矩阵;%zi为滤波器初状态矩阵,其元素个数为滤波器阶数;%zi的元素个数=max(length(a),length(b))-1;%返回y为滤波器滤波输出序列,序列长度与输入序列X相同;%返回zf为滤波器的终止状态,zf的元素个数与zi的相同。
当滤波器初始状态为0时,zi可省略;当不需要返回滤波器终止状态时,zf可省略。即“filter”的简化用法为:
y=filter(b,a,X)或[y,zf]=filter(b,a,X)
二、使用Simulink实现
当已知传递函数后,通过Simulink的离散滤波器模块可以实现滤波器。以传递函数
的实现为例来说明对应的Simulink实现方法。首先构建Simulink模型,如图1所示。
然后设置仿真参数:仿真时间段为0~1s。求解器采用固定步长的离散求解器。其余参数采用默认值。设置离散滤波器参数:分子系数向量[0,1],分母系数向量[1,-0.8],采样时间0.1秒,如图2所示。
再设置数据输入输出模块的参数。输入变量名为simin,并允许数据外插。输出数据为simout,设定为向量格式,如图3所示。将设置好的仿真模型存盘为discretfilter.mdl文件。 最后编写仿真程序。
t=(0:0.1:1)′;%仿真输入数据的对应时间
x=[10000000000]′;%仿真输入数据序列
simin=[t,x];%组合为Simulink要求的数据输入格式,第一列为时间向量,第二列为对应的输入数据序列
sim(′discretfilter.mdl′);%命令启动仿真
figure(1);stem(t,simout);axis([0,1,0,1.5]);%采用不同的表示方法表达输出序列
figure(2);stairs(t,simout);axis([0,1,0,1.5]);simout′%显示仿真输出结果数据
运行结果如下,对比采用“filter”指令的结果,两者完全一致。如果打开了仿真模型中的示波器,显示波形将如图4所示。显然,对于简单的离散系统的实现问题,采用函数的方法比采用Simulink默认的方法要简捷一些。事实上,Simulink更适合复杂系统的建模与仿真问题。