数字滤波器分析---零极点分析
在数字信号处理中有提到过极点主要影响频率响应的峰值,极点愈靠近单位圆,峰值愈尖锐,零点主要影响频率特性的谷值,零点愈靠近单位圆,谷值愈深。
- 1、零点控制幅频响应的峰谷,零点越接近于单位圆,峰谷值越小,当零点在单位圆上时,n对应点幅频特性值为零。
- 2、极点控制幅频特性的峰值,极点越接近于单位圆,峰值越大,极点在单位圆上时,系统不稳定。
- 3、在原点处的零极点不改变系统的幅频特性。
零点减小系统阻尼,使峰值时间提前,超调量增大;极点增大系统阻尼,使峰值之间迟后,超调量减小,它们的作用,随着它们本身接近坐标原点的程度而增强。
zplane
函数绘制线性系统的极点和零点。
例如,在 -1/2 处为零且在 0.9e−j2π0.3 和 0.9ej2π0.3 处有一对复极点的简单滤波器为
zer = -0.5;
pol = 0.9*exp(j*2*pi*[-0.3 0.3]');
要查看该滤波器的零极点图,您可以使用 zplane
。当系统是零极点形式时,请提供列向量参数。
zplane(zer,pol)
要访问更多工具,请使用 fvtool
。首先将极点和零点转换为传递函数形式,然后调用 fvtool
。
[b,a] = zp2tf(zer,pol,1);
fvtool(b,a)
点击极点/零点图工具栏按钮,从菜单中选择分析 > 极点/零点图,或键入以下代码查看图。
fvtool(b,a,'Analysis','polezero')
要对传递函数形式的系统使用 zplane
,请提供行向量参数。
在本例中,zplane
使用 roots
函数求得分子和分母的根,并绘制所得的零点和极点。
zplane(b,a)
有关系统零极点和传递函数表示的详细信息,请参阅离散时间系统模型-CSDN博客。
示例:
改变零极点的位置,观察阶跃响应。
% % ========================================================================== % %
% % 设计一个截止频率为300Hz的6阶低通巴特沃斯滤波器,对于1000hz采样的数据,其对应于0.6π rad/sample。绘制其幅值和相位响应。用它来过滤1000个样本的随机信号。
% fc = 300; %截止频率为300Hz
% fs = 1000;%采样频率1000hz
% % 计算滤波器的分子分母系数.
% [b,a] = butter(6,fc/(fs/2));
% % 幅频响应
% freqz(b,a,[],fs)
% subplot(2,1,1)
% ylim([-100 20])
% dataIn = randn(1000,1);
% dataOut = filter(b,a,dataIn);
% t = (0:length(dataIn)-1)/fs;
% figure
% plot(t,dataIn)
% hold on
% plot(t,dataOut)
% legend('Input Data','Filtered Data')
% % ========================================================================== % %
% 设计一个归一化截止频率为0.4π rad/sample的三阶巴特沃斯滤波器。找出滤波器的极点、零点和增益。
[b,a] = butter(3,.4);
[z,p,k] = tf2zpk(b,a);
% z=[-0.999996715240871 + 0.000005689374168i;-0.999996715240871 - 0.000005689374168i;-1.000006569518257 + 0.000000000000000i]
% p=[0.209428042240884 + 0.558199478050223i;0.209428042240884 - 0.558199478050223i;0.158384440324536 + 0.000000000000000i]
% k=0.098531160923927
% 绘制极点和零点,以验证它们是否在预期的位置。(稳定值1.0,超调13.07%)
fvtool(b,a,'polezero')
% 第三个极点实部增大.(让极点远离虚轴)
z1 = [-0.999996715240871 + 0.000005689374168i;-0.999996715240871 - 0.000005689374168i;-1.000006569518257 + 0.000000000000000i];
p1 = [0.209428042240884 + 0.558199478050223i;0.209428042240884 - 0.558199478050223i;0.358384440324536 + 0.000000000000000i];
[b1,a1] = zp2tf(z1,p1,k);
fvtool(b1,a1,'polezero')
% 极点离虚轴越远,幅值变大,超调减小,振荡减小.(稳定值1.31,超调5.68%)
% 第一二个极点实部增大.(让共轭极点远离虚轴)
z2 = [-0.999996715240871 + 0.000005689374168i;-0.999996715240871 - 0.000005689374168i;-1.000006569518257 + 0.000000000000000i];
p2 = [0.409428042240884 + 0.558199478050223i;0.409428042240884 - 0.558199478050223i;0.158384440324536 + 0.000000000000000i];
[b2,a2] = zp2tf(z2,p2,k);
fvtool(b2,a2,'polezero')
% 极点离虚轴越远,幅值变大,超调变大.(稳定值1.42,超调19.5%)
% 第一二个极点虚部增大.(让共轭极点远离实轴)
z3 = [-0.999996715240871 + 0.000005689374168i;-0.999996715240871 - 0.000005689374168i;-1.000006569518257 + 0.000000000000000i];
p3 = [0.209428042240884 + 0.858199478050223i;0.209428042240884 - 0.858199478050223i;0.158384440324536 + 0.000000000000000i];
[b3,a3] = zp2tf(z3,p3,k);
fvtool(b3,a3,'polezero')
% 幅值变小,超调变大,振荡越厉害.(稳定值0.687,超调33.71%)
% 第一二个极点实部减小.(让共轭极点极点靠近虚轴)
z4 = [-0.999996715240871 + 0.000005689374168i;-0.999996715240871 - 0.000005689374168i;-1.000006569518257 + 0.000000000000000i];
p4 = [0.109428042240884 + 0.558199478050223i;0.109428042240884 - 0.558199478050223i;0.158384440324536 + 0.000000000000000i];
[b4,a4] = zp2tf(z4,p4,k);
fvtool(b4,a4,'polezero')
% 极点离虚轴越近,幅值变小,超调减小.(稳定值0.85,超调9.95%)
% 第三个极点实部减小.(让极点靠近虚轴)
z5 = [-0.999996715240871 + 0.000005689374168i;-0.999996715240871 - 0.000005689374168i;-1.000006569518257 + 0.000000000000000i];
p5 = [0.209428042240884 + 0.558199478050223i;0.209428042240884 - 0.558199478050223i;0.058384440324536 + 0.000000000000000i];
[b5,a5] = zp2tf(z5,p5,k);
fvtool(b5,a5,'polezero')
% 极点离虚轴越近,幅值变小,超调变大.(稳定值0.89,超调16.06%)
% 第三个零点移到原点.()
z6 = [-0.999996715240871 + 0.000005689374168i;-0.999996715240871 - 0.000005689374168i;-0.000006569518257 + 0.000000000000000i];
p6 = [0.209428042240884 + 0.558199478050223i;0.209428042240884 - 0.558199478050223i;0.158384440324536 + 0.000000000000000i];
[b6,a6] = zp2tf(z6,p6,k);
fvtool(b6,a6,'polezero')
% 幅值变小,超调变大.(稳定值0.50,超调14.39%)
% 增加一个靠近虚轴的极点.(极点靠近虚轴)
z7 = [-0.999996715240871 + 0.000005689374168i;-0.999996715240871 - 0.000005689374168i;-1.000006569518257 + 0.000000000000000i];
p7 = [0.209428042240884 + 0.558199478050223i;0.209428042240884 - 0.558199478050223i;0.158384440324536 + 0.000000000000000i;0.078384440324536 + 0.000000000000000i];
[b7,a7] = zp2tf(z7,p7,k);
fvtool(b7,a7,'polezero')
% 增加一个靠近虚轴的极点,幅值变大,超调减小.(稳定值1.09,超调10.77%)
% 增加一个远离虚轴的极点.(极点远离虚轴)
z8 = [-0.999996715240871 + 0.000005689374168i;-0.999996715240871 - 0.000005689374168i;-1.000006569518257 + 0.000000000000000i];
p8 = [0.209428042240884 + 0.558199478050223i;0.209428042240884 - 0.558199478050223i;0.158384440324536 + 0.000000000000000i;0.288384440324536 + 0.000000000000000i];
[b8,a8] = zp2tf(z8,p8,k);
fvtool(b8,a8,'polezero')
% 增加一个远离虚轴的极点,幅值变大,超调减小.(稳定值1.40,超调6.43%)
结论:
% 原数据:(稳定值1.0,超调13.07%)
% % 极点离虚轴越远,幅值变大,超调减小,振荡减小.(稳定值1.31,超调5.68%)
% % 共轭极点离虚轴越远,幅值变大,超调变大,振荡变大.(稳定值1.42,超调19.5%)
% % 共轭极点远离实轴,幅值变小,超调变大,振荡越厉害.(稳定值0.687,超调33.71%)
% % 共轭极点极点离虚轴越近,幅值变小,超调减小.(稳定值0.85,超调9.95%)
% % 极点离虚轴越近,幅值变小,超调变大.(稳定值0.89,超调16.06%)
% % 零点移到原点.幅值变小,超调变大.(稳定值0.50,超调14.39%)
% % 增加一个靠近虚轴的极点,幅值变大,超调减小,振荡减小.(稳定值1.09,超调10.77%)
% % 增加一个远离虚轴的极点,幅值变大,超调减小,振荡减小.(稳定值1.40,超调6.43%)
下面这篇文章写得还可以,简单明了:
=============以下内容来自:https://zhuanlan.zhihu.com/p/11113131=============
古典控制理论(五)分析系统阶跃响应和零、极点的关系 - 知乎 (zhihu.com)
古典控制理论(五)分析系统阶跃响应和零、极点的关系
1 稳定系统[1]
系统的所有闭环极点都具有负实部,所有的闭环极点都位于s平面的左半部分。那么随着时间的增长,响应中所有的指数项和阻尼正弦项都会趋于0,这样的系统是稳定的。
稳态输出为
2 闭环零点
闭环零点会影响留数的大小和正负,决定了各函数项在动态响应中占的“比重”,因此闭环零点会影响动态响应的形状。
3 闭环极点
动态响应的类型取决于闭环极点。各函数项是按照指数规律衰减的,极点与虚轴的距离越远,其对应的响应分量衰减得越快,而且只对响应曲线的初始阶段产生影响。
4 零极点分布
(1)若一个闭环极点远离原点,则响应的比重较小(衰减很快)。
(2)若一个闭环极点接近一个闭环零点,而有远离其他极点和零点,则响应的比重较小(零极点相消)。
(3)若一个闭环极点远离零点,而接近原点或者其他极点,则响应的比重较大,起主导作用。
5 闭环主导极点
(1)在左半平面上,距离虚轴最近且附近没有其他的闭环极点和零点。
(2)极点实部长度与其他的极点实部长度相差5倍以上。
6 偶极子
当一个极点和一个零点距离很近时,他们对应暂态分量的幅值很小,对响应的影响可忽略不计。
7 仿真示意图
(1)含有一对主导极点,距离虚轴较近时,欠阻尼,响应快,且有震荡
(2)极点距离虚轴较远时,响应速度快
(3)极点距离虚轴较近时,响应速度慢
(4)阻尼越小,响应速度越快,震荡越厉害
8 总结
在分析系统阻尼比大小和是否震荡时,可以舍掉实数极点,只分析一对共轭极点的二阶系统。
参考
- ^李素玲,胡健,季画,等.自动控制理论[M].机械工业出版社:北京,2012:54-99.
=============以上内容来自:https://zhuanlan.zhihu.com/p/11113131=============