常用的传递函数离散化方法,差分,双线性,预矫正双线性,Matlab实现

1. 传递函数严格离散化

  傅里叶变换、拉普拉斯变换,以及 Z Z Z变换的定义如下所示:
傅里叶变换 : { F ( ω ) = ∫ − ∞ ∞ f ( t ) e − j ω t d t f ( t ) = 1 2 π ∫ − ∞ ∞ F ( ω ) e j ω t d ω 傅里叶变换:\left\{ \begin{array}{l} F\left( \omega \right) = \int_{ - \infty }^\infty {f\left( t \right){e^{ - j\omega t}}dt} \\ f\left( t \right) = \frac{1}{{2\pi }}\int_{ - \infty }^\infty {F\left( \omega \right){e^{j\omega t}}d\omega } \end{array} \right. 傅里叶变换:{F(ω)=f(t)etdtf(t)=2π1F(ω)etdω

拉普拉斯变换 : { F ( s ) = ∫ − ∞ ∞ f ( t ) e − s t d t f ( t ) = 1 2 π j ∫ σ − j ∞ σ + j ∞ F ( s ) e s t d s 拉普拉斯变换:\left\{ \begin{array}{l} F\left( s \right) = \int_{ - \infty }^\infty {f\left( t \right){e^{ - st}}dt} \\ f\left( t \right) = \frac{1}{{2\pi j}}\int_{\sigma - j\infty }^{\sigma + j\infty } {F\left( s \right){e^{st}}ds} \end{array} \right. 拉普拉斯变换:{F(s)=f(t)estdtf(t)=2πj1σjσ+jF(s)estds

Z 变换 : { F ( z ) = ∑ f [ n ] z − n f [ n ] = 1 2 π j ∮ F ( z ) z n − 1 d z Z变换:\left\{ \begin{array}{l} F\left( z \right) = \sum {f\left[ n \right]{z^{ - n}}} \\ f\left[ n \right] = \frac{1}{{2\pi j}}\oint {F\left( z \right){z^{n - 1}}dz} \end{array} \right. Z变换:{F(z)=f[n]znf[n]=2πj1F(z)zn1dz

  可以利用如下映射关系,实现传递函数 F ( s ) F(s) F(s) F ( ω ) F(\omega) F(ω) F ( z ) F(z) F(z)之间的等价转换,详见《信号与系统》的“离散系统的Z域分析”章节:

s = j ω = 1 T ln ⁡ z ,或, z = e s T = e j ω T s = j\omega = \frac{1}{T}\ln z,或,z = {e^{sT}} = {e^{j\omega T}} s==T1lnz,或,z=esT=eT

2. 离散化方法,前向欧拉,前向差分

  对于一个连续函数 y ( t ) y(t) y(t) k T kT kT时刻的微分可以做以下近似:
y ′ ( k ) ≈ y ( k + 1 ) − y ( k ) T y'(k) \approx \frac{{y(k + 1) - y(k)}}{T} y(k)Ty(k+1)y(k)

  对上式的左右两端分别进行拉氏变换和Z变换,可以得到如下映射关系:
s Y ( s ) ↔ z − 1 T Y ( z ) sY(s) \leftrightarrow \frac{{z - 1}}{T}Y(z) sY(s)Tz1Y(z)

  因此,可以令 s = z − 1 T s = \frac{{z - 1}}{T} s=Tz1实现S域传递函数到Z域传递函数的转换。值得注意的是,这种传递函数离散化是近似的, s = 1 T ln ⁡ z s=\frac{1}{T}\ln z s=T1lnz才是严格的,但并不方便数字实现。实际上, s = z − 1 T s = \frac{{z - 1}}{T} s=Tz1正是 s = 1 T ln ⁡ z s=\frac{1}{T}\ln z s=T1lnz,在 s = 0 s=0 s=0 z = 1 z=1 z=1时的近似表示。这种方法将 s s s域左半平面映射到 z z z z < 1 z<1 z<1区域,显然包含不稳定区域,因此稳定的连续系统变换所得离散系统可能不稳定,这种方法很少用。

3. 离散化方法,后向欧拉,后向差分

  同理还有后向差分,将 y ( t ) y(t) y(t) k T kT kT时刻的微分做以下近似:
y ′ ( k ) ≈ y ( k ) − y ( k − 1 ) T y'(k) \approx \frac{{y(k) - y(k - 1)}}{T} y(k)Ty(k)y(k1)
  对上式的左右两端分别进行拉氏变换和Z变换,可以得到如下映射关系:
s Y ( s ) ↔ 1 − z − 1 T Y ( z ) sY(s) \leftrightarrow \frac{{1 - z^{-1}}}{T}Y(z) sY(s)T1z1Y(z)
  因此,可以令 s = 1 − z − 1 T s = \frac{{1 - z^{-1}}}{T} s=T1z1实现S域传递函数到Z域传递函数的转换。实际上, s = 1 − z − 1 T s = \frac{{1 - z^{-1}}}{T} s=T1z1也是 s = 1 T ln ⁡ z s=\frac{1}{T}\ln z s=T1lnz,在 s = 0 s=0 s=0 z = 1 z=1 z=1时的近似表示。这种方法将 s s s域左半平面映射到 z z z域以0.5为圆心0.5为半径的圆,也就是说,原来连续系统稳定,则离散系统稳定。

4. 离散化方法,双线性变换,Tustin

  由于 z = e s T = e s T / 2 e − s T / 2 ≈ 1 + s T / 2 1 − s T / 2 z = {e^{sT}} = \frac{{{e^{sT/2}}}}{{{e^{ - sT/2}}}} \approx \frac{{1 + sT/2}}{{1 - sT/2}} z=esT=esT/2esT/21sT/21+sT/2,分子分母进行一阶泰勒线性展开,故得名双线性变换。进一步可以得到:
s = 2 T 1 − z − 1 1 + z − 1 s = \frac{2}{T}\frac{{1 - z^{-1}}}{{1 + z^{-1}}} s=T21+z11z1
  该方法将且s左半平面映射到z域单位圆内,这是我们很希望看到的结果。

5. 离散化方法,预矫正双线性变换,Tustin with Pre-Warping

5.1 问题描述

  上述方法均可实现连续系统的离散化,但因为离散化过程中采用了近似化手段,不可避免地引入了误差,使得离散化后的频域特性并不完全等价于连续系统,以下以双线性变换为例,进行说明。设计电网系统的五次谐波消抑制传递函数:
C a ( s ) = K i s s 2 + ( 2 π ∗ 250 ) 2 {C_a}(s){\rm{ = }}\frac{{{K_i}s}}{{{s^2} + {{(2\pi {\rm{*}}250)}^2}}} Ca(s)=s2+(2π250)2Kis
  取 K i = 1 K_i=1 Ki=1,采用双线性变换 s = 2 T z − 1 z + 1 s=\frac{2}{T} \frac{z-1}{z+1} s=T2z+1z1进行离散化,其中T取0.001,得到离散化后的传递函数:
C d ( z ) = C a ( s ) ∣ s = 2 T z − 1 z + 1 = K i ( 2 T z − 1 z + 1 ) ( 2 T z − 1 z + 1 ) 2 + ( 2 π ∗ 250 ) 2 = 2000 z 2 − 2000 [ 2000 2 + ( 2 π ∗ 250 ) 2 ] z 2 + 2 [ ( 2 π ∗ 250 ) 2 − 2000 2 ] z + [ ( 2 π ∗ 250 ) 2 + 2000 2 ] {C_d}(z) = {C_a}(s){|_{s = \frac{2}{T}\frac{{z - 1}}{{z + 1}}}}{\rm{ = }}\frac{{{K_i}(\frac{2}{T}\frac{{z - 1}}{{z + 1}})}}{{{{\left( {\frac{2}{T}\frac{{z - 1}}{{z + 1}}} \right)}^2} + {{(2\pi {\rm{*}}250)}^2}}} = \frac{{2000{z^2} - 2000}}{{\left[ {{{2000}^2} + {{(2\pi {\rm{*}}250)}^2}} \right]{z^2} + 2\left[ {{{(2\pi {\rm{*}}250)}^2} - {{2000}^2}} \right]z + \left[ {{{(2\pi {\rm{*}}250)}^2} + {{2000}^2}} \right]}} Cd(z)=Ca(s)s=T2z+1z1=(T2z+1z1)2+(2π250)2Ki(T2z+1z1)=[20002+(2π250)2]z2+2[(2π250)220002]z+[(2π250)2+20002]2000z22000

  利用如下代码,对比连续传递函数和离散传递函数的波特图:

a=(2*pi*250)^2;
b=2000^2;
Ca = tf([1,0],[1 0 a]);
Cd = tf([2000 0 -2000],[b+a 2*a-2*b b+a],0.001);
bode(Ca, Cd)
legend('Ca','Cd')

  当然,也可以利用matlab实现双线性变换,两者效果是一致的(更多函数介绍请参考matlab函数用法:传递函数tf,波特图bode,离散化c2d):

Ca = tf([1,0],[1 0 (2*pi*250)^2]);
Cd = c2d(Ca,0.001,'tustin');
bode(Ca, Cd);
legend('Ca','Cd')

  连续传递函数和离散传递函数的波特图对比结果如下所示。可以看出,近似的离散化过程使得离散传递函数特性发生了改变,离散化后传递函数的特性与所设计连续传递函数的特性不一致。
在这里插入图片描述

5.2 解决方案

  对离散化所引入的误差进行分析, C d ( z ) C_d(z) Cd(z)代表数字控制器, C a ( s ) C_a(s) Ca(s)代表模拟控制器,两者之间的转换关系如下:
C a ( s ) ∣ s = 2 T z − 1 z + 1 = C d ( z ) {C_a}(s){|_{s = \frac{2}{T}\frac{{z - 1}}{{z + 1}}}} = {C_d}(z) Ca(s)s=T2z+1z1=Cd(z)

  下面探究一下 C a ( s ) ∣ s = 2 T z − 1 z + 1 {C_a}(s){|_{s = \frac{2}{T}\frac{{z - 1}}{{z + 1}}}} Ca(s)s=T2z+1z1所对应的真实连续系统,注: sin ⁡ α = − j 0.5 ( e j α − e − j α ) , cos ⁡ α = 0.5 ( e j α + e − j α ) \sin \alpha = - j0.5\left( {{e^{j\alpha }} - {e^{ - j\alpha }}} \right), \cos \alpha = 0.5\left( {{e^{j\alpha }} + {e^{ - j\alpha }}} \right) sinα=j0.5(ejαejα),cosα=0.5(ejα+ejα):
{ c C a ( s ) ∣ s = 2 T z − 1 z + 1 = C a ( 2 T e s T − 1 e s T + 1 ) = C a ( 2 T e j ω T − 1 e j ω T + 1 ) = C a [ 2 T e j ω T 2 ( e j ω T 2 − e − j ω T 2 ) e j ω T 2 ( e j ω T 2 + e − j ω T 2 ) ] = C a [ j ∗ 2 T tan ⁡ ( ω T 2 ) ] \left\{ \begin{aligned}{c} {C_a}(s){|_{s = \frac{2}{T}\frac{{z - 1}}{{z + 1}}}} &= {C_a}(\frac{2}{T}\frac{{{e^{sT}} - 1}}{{{e^{sT}} + 1}})\\ &= {C_a}\left( {\frac{2}{T}\frac{{{e^{j\omega T}} - 1}}{{{e^{j\omega T}} + 1}}} \right)\\ &= {C_a}\left[ {\frac{2}{T}\frac{{{e^{j{\textstyle{{\omega T} \over 2}}}}\left( {{e^{j{\textstyle{{\omega T} \over 2}}}} - {e^{ - j{\textstyle{{\omega T} \over 2}}}}} \right)}}{{{e^{j{\textstyle{{\omega T} \over 2}}}}\left( {{e^{j{\textstyle{{\omega T} \over 2}}}} + {e^{ - j{\textstyle{{\omega T} \over 2}}}}} \right)}}} \right]\\ &= {C_a}\left[ {j*\frac{2}{T}\tan \left( {\frac{{\omega T}}{2}} \right)} \right] \end{aligned} \right. cCa(s)s=T2z+1z1=Ca(T2esT+1esT1)=Ca(T2eT+1eT1)=Ca T2ej2ωT(ej2ωT+ej2ωT)ej2ωT(ej2ωTej2ωT) =Ca[jT2tan(2ωT)]

   C d ( z ) {C_d}(z) Cd(z)并不对应 C a ( j ω ) {C_a}(j\omega) Ca(),而对应 C a [ j 2 T tan ⁡ ( ω 2 T ) ] {C_a}\left[ {j\frac{2}{T}\tan \left( {\frac{\omega }{2}T} \right)} \right] Ca[jT2tan(2ωT)],离散系统的 ω \omega ω会映射到连续系统的 2 T tan ⁡ ( ω T 2 ) \frac{2}{T}\tan \left( {\frac{\omega T}{2}} \right) T2tan(2ωT),这就是频率畸变现象。也就是说,分别以 ω \omega ω为横轴画出 C d ( z ) C_d(z) Cd(z)的波特图,和以 2 T tan ⁡ ( ω 2 T ) \frac{2}{T}\tan \left( {\frac{\omega }{2}T} \right) T2tan(2ωT)为横轴画出 C a ( s ) C_a(s) Ca(s)的波特图,两个波形图应该是完全对应的。当 ω T 2 \frac{\omega T}{2} 2ωT足够小时, j 2 T tan ⁡ ( ω 2 T ) {j\frac{2}{T}\tan \left( {\frac{\omega }{2}T} \right)} jT2tan(2ωT)是近似等于 j ω j\omega 的。但对于高频谐波,或者特定频率的分析,就不得不考虑这部分影响了。

  回顾上述所设计 C a ( s ) C_a(s) Ca(s)时,对于 2 π ∗ 250 2\pi*250 2π250 rad/s的角速度变化,传递函数取得最大值。由于离散系统的 ω \omega ω会映射到连续系统的 2 T tan ⁡ ( ω T 2 ) \frac{2}{T}\tan \left( {\frac{\omega T}{2}} \right) T2tan(2ωT),利用 2 T tan ⁡ ( ω T 2 ) = 2 π ∗ 250 \frac{2}{T}\tan \left( {\frac{\omega T}{2}} \right) = 2\pi*250 T2tan(2ωT)=2π250求解离散系统的原始 ω \omega ω,解得 ω = 1331.5 \omega = 1331.5 ω=1331.5 rad/s,这与上述波特图结果是一致的。

  解决方案:离散系统的 ω d \omega_d ωd会映射到连续系统的 ω a = 2 T tan ⁡ ( ω d T 2 ) \omega_a = \frac{2}{T}\tan \left( {\frac{\omega_d T}{2}} \right) ωa=T2tan(2ωdT),基于 ω a \omega_a ωa完成连续传递函数的设计,采用双线性变换得到目标离散传递函数。正确的设计思路为:(1)首先,明确所需要的离散传递函数的特性,如希望在 ω d = 2 π ∗ 250 \omega_d = 2\pi*250 ωd=2π250 rad/s时,离散传递函数取最大值;(2)计算上述离散频率所映射的连续频率, ω a = 2 T tan ⁡ ( ω d T 2 ) = 2000 \omega_a = \frac{2}{T}\tan \left( {\frac{\omega_d T}{2}} \right) = 2000 ωa=T2tan(2ωdT)=2000 rad/s = 318 Hz;(3) 基于映射的连续角频率 ω a \omega_a ωa设计连续传递函数, C a ( s ) = K i s s 2 + 200 0 2 {C_a}(s){\rm{ = }}\frac{{{K_i}s}}{{{s^2} + {2000^2}}} Ca(s)=s2+20002Kis,并完成离散化, C d ( z ) = C a ( s ) ∣ s = 2 T z − 1 z + 1 = K i ( 2 T z − 1 z + 1 ) ( 2 T z − 1 z + 1 ) 2 + 200 0 2 {C_d}(z) = {C_a}(s){|_{s = \frac{2}{T}\frac{{z - 1}}{{z + 1}}}}{\rm{ = }}\frac{{{K_i}(\frac{2}{T}\frac{{z - 1}}{{z + 1}})}}{{{{\left( {\frac{2}{T}\frac{{z - 1}}{{z + 1}}} \right)}^2} + {2000^2}}} Cd(z)=Ca(s)s=T2z+1z1=(T2z+1z1)2+20002Ki(T2z+1z1)

  基于如下代码重绘波特图。可以看出,尽管连续传递函数在2000 rad/s (318Hz)处实现最大增益,离散传递函数在目标频率点1570 rad/s (250Hz)处取得最大增益,与预期一致。

Ca = tf([1,0],[1 0 (2000)^2]);
Cd = c2d(Ca,0.001,'tustin');
bode(Ca, Cd);
legend('Ca','Cd')

在这里插入图片描述

6. 总结

  对离散化的简单场景,优先考虑后向差分离散化方法;对于频率有较高准确度的场景,如谐振控制器,建议使用预矫正双线性变换方法。

  • 6
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值