Ts21?zs21T 令z?e,得S平面与Z平面的单值映射关系,s?, 或者 z?
TT1?z?11?s2?11? 验证:
⑴ 变换的单值性:当z?ej?T1(式中21?z?121?e?j?1T2j?T????1T??)时,代入s???th(1)?j?,即S的?1?j?TT1?zT1?e1T2虚轴映射到Z平面正好是单位圆。 S平面 Z平面 S1平面 ?T2?T2?T?T(1?)?())?j2222 ⑵ 变换的稳定性:s???j? 代入z表达式,得 z? 和|z|?。当??0时,
?T?T?T?T22(1?)?j(1?)?()2222(1?|z|<1即s左半平面映射在单位圆内,s右半平面映射在单位圆外,因此,稳定的模拟滤波器通过双线性变换后,所得到的数字滤波器也是稳定的。
第七节 预畸双线性法(prevarp)
第一步:求预修正频率 ?1?*2??t*tan(1) ,?1为预防畸变的频率, ?1为修正后的频率。 T2s*?1 第二步:预畸变 D(s)?D()。
s 第三步:变换 D(z)?D(*)|。
?1s?2z?1,?*?2tan(?1T)Tz?11T2 综合以上3步: D(z)?D(s)|s?1tan(?1T2)z?1 z?1,?1为预防畸变的频率 。 j?1?|D(z)||D(j?)|?|D(e)|的原则进行增益匹配。 变换后,稳态增益将变化,需以|D(s)|或s?0z?11 举例: 若 ts1? 若 ts2?10.3533z?0.3533ts11,,'prewarp',)1?, 则c2d(
z?0.2934s?11s2?0.2s?1, 则c2d(ts21,,'prewarp',)1?0.212z2?0.424z?0.212z2?0.9967z?0.8448
第八节 零极点匹配法(matched)
D(S) ? D(Z) 若 D(s)?Ks(s?z1)(s?z2)...(s?zm),
(s?p1)(s?p2)...(s?pn)n?mK(z?ez1?t)(z?ez2?t)...(z?ezm?t)(z?1) 则 D(z)?z。
(z?ep1?t)(z?ep2?t)...(z?epn?t) 分子上因子(Z+1)n-m的作用是:把s??处的零点投射到来单位园上,使D(Z)的分母和分子的阶数就相同。(如果不加这个因子,D(Z)脉冲响应会产生n-m个采样时间的延迟,对系统造成不利影响)。
n?m?1Kz(z?ez1?t)(z?ez2?t)...(z?ezm?t)(z?1) 或者 D(z)?。
(z?ep1?t)(z?ep2?t)...(z?epn?t) 后一个公式比前一个公式少一个零点,MATLAB函数c2d的matched方法是按后一个公式进行变换的(但脉冲响应具有一个采样时间的延迟)。 确定D(z)的增益kz的方法:
a 令D(s)与D(z)的稳态增益相等求得,即令|D(s)|s?0?|D(z)|z?1, b 若D(s)分子有s因子,例如D(s)?s,可依高频段增益相等原则确定增益,即|D(s)|s???|D(z)|z??1,也可选s?1j?1择某关键频率ω1处的幅频相等,即|D(j?1)|?|D(e)|。
对零极点匹配法做的描述,可以使用符号数学编写m文件程序,“手工式”地进行验证。下面的程序以连续传递函数
1s3?1.8s2?1.8s?1为例,运行此程序后,可以看到,文中描述的方法与c2d函数的mtched方法是一致的,也说明文本中
没有排版错误,这样应该更有于助理解和使用零极点匹配法。 %程序开始
syms s z kz t %预置采样周期 tt= %预置采样周期 s1=1 %建立ds的分子 s2=vpa(s^3+*s^2+*s+1) %建立ds的分母 s2r=solve(s2) %求ds的极点
z1=(z+1)^2 %建立dz分子的零点表达式,不包含增益
z1=vpa(expand(z1),5) %展开dz分子的零点表达式为多项式表达式,不包含增益 z2=(z-exp(t*s2r(1)))*(z-exp(t*s2r(2)))*(z-exp(t*s2r(3))) %建立dz分母的极点表达式
z2=vpa(subs(z2,'t',tt),5) %将dz分母中周期t用预置的值tt代替,不改变极点表达式形式 z2=vpa(expand(z2),5) %展开dz分母的极点表达式为多项式表达式 kz=limit(s1/s2,s,0)/limit(z1/z2,z,1) %计算dz的静态增益 dz=vpa(eval(kz*z1/z2),4) %获得dz的表达式
%display(strcat('Sample time: ',num2str(tt),' seconds')) %对dz的说明
display(['Sample time: ',num2str(tt),' seconds']) %对dz的说明,用方括号代替strcat,以保留空格 display('Discrete-time transfer function.') %续对dz的说明 ds0=tf(1,[1,,,1]) %比较用c2d展开的结果 dz0=c2d(ds0,tt,'matched') %程序结束
第三章 时域化算法
控制系统中控制算法一般是指控制器的传递函数,但要用计算机实现,还应该将z域的离散传递函数,转换为时域的差分方程。由于差分方程已经清晰地显示出输入输出的时序关系,甚至可以在一定程度上把它等同于计算机程序流程图。 传递函数由z域向t域转换,也有几算法。如果把控制器的传递函数看作一体,叫做直接算法;如果把控制器的传递函数分解为几个传递函数的积,叫做串联算法;如果把控制器的传递函数分解为几个传递函数的和,则叫做并联算法;但串联算法和并联算法的z域分解式的转换,仍然要归结为直接算法。
通过不同形式的从z域到t域的数学转换,可以得到,同一个z传递函数的不同形式的输出差分表达式。对于直接算法,共可获得4种形式的输出差分表达式,而串联算法和并联算法形成的一阶分式和二阶分式的转换,同样归结为直接算法。 信流图对时域的输入输出关系的描述,比差方程形象,因此,对每一种算法都根据数学公式画出了它的信流图。参照信流图所表达的信号之间的关系,将给程序设计带来很大的方便。在信流图之后,给出了c语言的参考语句。
离散传递函数有z格式和z-1格式两种,在将离散传递函数变换为差分方程前,要将z格式的传递函数改写为z-1格式的传递函数。
远离当前时刻的过去时刻叫“后”: ...... ? m(-2) ?m(-1) ?m(0) 第一节 直接算法1 — ?双中间变量向后递推 当前时刻和靠近当前时刻的过去时刻叫“前”: ...... ? m(-2) m(-1) ?m(0) n,u(k)表示输入量和输出量,Mi(Z),Ni(Z),mi(k),ni(k)表示中间变量,ai,bi表示系 公式和信流图中,E(Z),U(Z),e(k)?i?biZU(Z)数。 i?0设离散传递函数为 ,则输出的Z变换表达式为, ?E(Z)e(k)n?i 程序中,输入量和输出量仍用,u(k)表示,输入输出的延时形式e(k-i),u(k-i)和中间变量mi(k),ni(k),分别改为1??aiZi?1用数组形式e(i),u(i),m(i),n(i)表示,系数ai,bi也改用数组形式a(i),b(i)表示。 信流图路径上的z-1表示,流经该路径的信息,在当前时刻(k时刻)到达指向的节点,将被延迟一个周期,在下一?b0E(Z)?b1E(Z?1b2E(Z?2)?...?b 个时刻( k-1-1?时刻)被引用。z)本身没有数值意义。 nE(Z?n)?a1U(Z?1)?a2U(Z?2)?...?anU(Z?n)。 给出的c语言程序参考语句,仅为说明算法,很不严谨,如:初始化语句未与主体语句隔离,主体语句未作无限循 反变换得输出u的时间表达式: 环,系数没有列出数据表,当写成函数的形式时,可能需要设置静态变量,等等。 u(k)?b0e(k)?b1e(k?1)?b2e(k?2)?...?bne(k?n)?a1u(k?1)?a2u(k?2)?...?anu(k?n)。 根据U(k)表达式,画出直接算法1的信流图:
特点:2n个中间变量,取得输入量e(k)后,要进行2n+1次乘法,n次加法,n次减法才能得出输出量u(k)。 for(i=1;i
第二节 直接算法2 — 双中间变量向前递推
设离散传递函数为
U(Z)M0(Z)U(Z)??E(Z)E(Z)M0(Z)1??aiZ?ii?1i?0n?i?biZn?11??aiZ?ii?1ni?0?biZ?i,
n 中间变量 M0(Z)?E(Z)??(aiM0(Z)Z?i。 Z),输出量 U(Z)??biM(Z)?ii?1nni?0 第一步 以和积递推的形式展开M0(Z)中的和号∑:
?iM0(Z)?E(Z)??(aiM0(Z)Z)?E(Z)?((...((?anM0(Z)Zi?1n?1
?an?1M0(Z))ZMn?1(Z)?1?...)Z?1?a2M0(Z))ZM2(Z)?1?a1M0(Z))ZM1(Z)?1。
Mn(Z)
?1 上式中,令 Mn(Z)??anM0(Z),Mn?1(Z)?Mn(Z)Z?an?1M0(Z),...,M1(Z)?M2(Z)Z?aM(Z)。 10?1?1 则中间变量 M0(Z)?E(Z)?M1(Z)Z,反变换得 m0(k)?e(k)?m1(k?1)。
M1(Z)到Mn(Z)的反变换为:mn(k)??anm0(k),mn?1(k)?mn(k?1)?an?1m0(k),...,m1(k)?mn(k?1)?a1m0(k)。 第二步 以和积递推的形式展开输出量U(Z)中的和号∑:
(...((bnM0(Z)Z?bn?1M0(Z))Z?...)Z U(Z)?b0M(Z)?(Nn(Z)Nn?1(Z)?1?1?1?1?b2M0(Z))Z?bM(Z))Z10N2(Z)?1?1,
N1(Z)?1 上式中,令 Nn(Z)?bnM0(Z), Nn?1(Z)?Nn(Z)Z?bn?1M0(Z),...,N1(Z)?N2(Z)Z?bM(Z), 10?1 则输出量 U(Z)?b0M0(Z)?N1(Z)Z,反变换为 u(k)?b0m0(k)?n1(k?1)。
N1(Z)到Nn(Z)反变换为:nn(k)?bnm0(k),nn?1(k)?nn(k?1)?bn?1m0(k),...,n1(Z)?n2(k?1)?b1m0(k)。 用m0(k)?e(k)?m1(k?1)和u(k)?b0m0(k)?n1(k?1)画出直接算法2的信流图:
每一个mi(k)和ni(k),都是在被更新后的下一个时刻被引用,因此,信流图中的节点mi(k-1)和ni(k-1) 分别直接由mi(k)和ni(k)兼任,并用z-1因子表明信息的延迟。这样,直接算法2的信流图简化为下图: for(i=1;i /* 求本次u(k) */ u=b(0)*m(0)+n(1) for(i=1,i for(i=1;i /* 求下一次的m(n) */ 第三节 直接算法3 — 单中间变量向后递推 设离散传递函数为 U(Z)M(Z)U(Z)??E(Z)E(Z)M(Z)1??aiZ?ii?1i?0n?i?biZn?11??aiZ?ii?1ni?0?biZ?i, n 由 M(Z)?E(Z)11??aiZi?1n?i 得中间变量 M(Z)?E(Z)??aiM(Z)Zi?1n?i, 直接写出中间变量的差分方程 m(k)?e(k)??aim(k?i)?e(k)?a1m(k?1)?a2m(k?2)?...?anm(k?n)。 i?1n 由 nnU(Z)Z?i, ??biZ?i 得输出变量 U(Z)??biM(Z)M(Z)i?0i?0n 直接写出输出变量的差分方程 u(k)??bim(k?i)?b0m(k)?b1m(k?1)?...?bnm(k?n)。 i?0 画出直接算法3的信流图: for(i=1;i for(i=1,i for(i=1;i for(i=n;i>0;i--) m(i)=m(i-1); /* 中间变量m(i)延时 */ /* 求本次u(k) */ 第四节 直接算法4 — 单中间变量向前递推(简约快速算法) U(Z)?E(Z)i?0n?i?biZn 设离散传递函数为 1??aiZ?ii?1, 则 U(Z)?b0E(Z)??(biE(Z)?aiU(Z))Z?i i?1n 以和积递推的形式展开和号∑: ((bnE(Z)?anU(Z))Z U(Z)?b0E(Z)?((...?1?bn?1E(Z)?an?1U(Z))Z?1?1?...)Z?1?b1E(Z)?a1U(Z))Z?1。 Mn(Z)?1 令 Mn(Z)?bnE(Z)?anU(Z),Mn?1(Z)?Mn(Z) Z?bn?1E(Z)?an?1U(Z),...,M1(Z)?M2(Z)Z?bE(Z)?aU(Z),11?1 则 U(Z)?b0E(Z)?M1(Z)Z,反变换得 u(k)?b0e(k)?m1(k?1)。 Mn?1(Z)M1(Z) M1(Z)到Mn(Z)的反变换为: m1(k)?b1e(k)?a1u(k)?m2(k?1),m2(k)?b2e(k)?a2u(k)?m3(k?1),... , mn?1(k)?bn?1e(k)?an?1u(k)?mn(k?1),mn(k)?bne(k)?anu(k)。 用u(k)和mi(k)的表达式,画出直接算法4的信流图: 和直接算法2一样,每一个mi(k)都是在被更新后的下一个时刻被引用,因此,信流图中的节点mi(k-1)可以直接由mi(k)兼任,并用z-1因子表明信息的延迟。这样,直接算法4的信流图简化为下图: 特点:n个中间变量,在求出输出信号u(k)并从输出口输出后,还需要为下一次输出进行2n+2次乘法和2n+1次加法,显然,这一点并不影响输出的实时性。 for(i=1;i for(i=1;i /* 初始化 */ 第五节 串联算法 设离散传递函数为 U(Z)?E(Z)1??(aiZ)i?1i?0n?i?(biZ)n, ?i 将传递函数改写成零极点模型,按照系数相近的原则对分子和分母配对,再使分子分母中的常数项为1,得传递函数的串联算法表达式如下: 在串联算法表达式中,所有的因式只有一阶分式和二阶分式两种形式。 ?1U(Z)1?b1Z 求一阶分式 的时域表达式: ??1E(Z)1?a1Z 因为 U(Z)?E(Z)?bE(Z)Z?aU(Z)Z11?1?1, 所以 u(k)?e(k)?(b1e(k?1)?a1u(k?1))。 从u(k)画出串联算法一阶分式的信流图,图中m1(k?1)?b1e(k?1)?a1u(k?1): m(1)=0; /* 初始化 */