常系数线性差分方程的一般形式为
∑ k = 0 N a k y ( n − k ) = ∑ r = 0 M b r x ( n − r ) … … ( 1 ) \sum\limits_{k=0}^Na_ky(n-k)=\sum\limits_{r=0}^Mb_rx(n-r) ……(1)k=0∑Naky(n−k)=r=0∑Mbrx(n−r)……(1)
1. 解方程法
1.1 概念
离散系统的完全响应,可分解为自由响应与强迫响应之和,或分解为零输入响应与零状态响应之和。
零输入响应y_{zi}:当x(n)=0(即方程右端为零)时,系统的输出函数,对应方程(1)的齐次解。
零状态响应y_{zs}:当接入激励前(n<0),系统的输出状态均为0时,系统的输出函数,对应y(-1),y(-2),……,y(-N)均为0时(系统满足零状态条件),方程(1)的通解。
自由响应:自由响应对应于方程(1)的齐次解,意为没有外部输入时系统的输出。
强迫响应:对应于方程(1)的特解,对应于加上外部输入后系统的输出。
当系统满足零状态条件时,零状态响应为自由响应和强迫响应的叠加即方程(1)的通解。
一般情况下,零输入响应是自由响应的一部分,零状态响应包括自由响应的另一部分和强迫响应
(那为啥自由响应不等于零输入响应???)
1.2 求解步骤
求解分三步进行
①求齐次方程的通解
方程(1)对应的齐次方程为
∑ k = 0 N a k y ( n − k ) = 0 … … ( 2 ) \sum\limits_{k=0}^Na_ky(n-k)=0 ……(2)k=0∑Naky(n−k)=0……(2)
设y(n)=α n \alpha^nαn,则α \alphaα为一元N次方程∑ k = 0 N a k α n − k = 0 \sum\limits_{k=0}^Na_k\alpha^{n-k}=0k=0∑Nakαn−k=0的根。
若方程没有重根,则N个根分别为α 1 , α 2 , … … , α N \alpha_1,\alpha_2,……,\alpha_Nα1,α2,……,αN,则齐次方程的通解为
y 1 ( n ) = ∑ i = 1 N c i α i n = c 1 α 1 n + c 2 α 2 n + … … + c N α N n … … ( 3 ) y_1(n)=\sum\limits_{i=1}^Nc_i\alpha_i^n=c_1\alpha_1^n+c_2\alpha_2^n+……+c_N\alpha_N^n ……(3)y1(n)=i=1∑Nciαin=c1α1n+c2α2n+……+cNαNn……(3)
若方程有1个m重根α 1 \alpha_1α1,其余为非重根α 2 , … … , α N − m + 1 \alpha_2,……,\alpha_{N-m+1}α2,……,αN−m+1,则齐次方程通解为
y 1 ( n ) = c 11 α 1 n + c 12 n α 2 n + … … + c 1 m n m − 1 α 1 n + c 2 α 2 n + c 3 α 3 n + … … + c N − m + 1 α N − m + 1 n … … ( 4 ) y_1(n)=c_{11}\alpha_1^n+c_{12}n\alpha_2^n+……+c_{1m}n^{m-1}\alpha_1^n+c_2\alpha_2^n+c_3\alpha_3^n+……+c_{N-m+1}\alpha_{N-m+1}^n ……(4)y1(n)=c11α1n+c12nα2n+……+c1mnm−1α1n+c2α2n+c3α3n+……+cN−m+1αN−m+1n……(4)
其中任意常数c_i、c_{ir}由系统的初始状态(方程的边界条件)确定。
②确定差分方程(1)的一个特解D(n)
求出右端具体表达式 -> 根据结果选择含待定系数的特解 -> 带入方程确定系数
| 输入x[n] | 特解D(n) |
|---|---|
| 常数 | 常数 |
| c o s ( Ω n + ϕ ) cos(\Omega n+\phi)cos(Ωn+ϕ)或s i n ( Ω n + ϕ ) sin(\Omega n+\phi)sin(Ωn+ϕ) | c 1 c o s ( Ω n ) + c 2 s i n ( Ω n ) c_1cos(\Omega n)+c_2sin(\Omega n)c1cos(Ωn)+c2sin(Ωn) |
| a n a^nan | ∑ i = 0 k c i n i a n \sum\limits_{i=0}^kc_in^ia^ni=0∑kcinian(a是方程的k重特征根) |
| n k n^knk | ∑ i = 0 k c i n i \sum\limits_{i=0}^kc_in^ii=0∑kcini |
| n k a n c o s ( Ω n ) n^ka^ncos(\Omega n)nkancos(Ωn)或n k a n s i n ( Ω n ) n^ka^nsin(\Omega n)nkansin(Ωn) | ( B 1 n k + … … + B k n + B k + 1 ) a n c o s ( Ω n ) + ( D 1 n k + … … + D k n + D k + 1 ) a n s i n ( Ω n ) (B_1n^k+……+B_kn+B_{k+1})a^ncos(\Omega n)+(D_1n^k+……+D_kn+D_{k+1})a^nsin(\Omega n)(B1nk+……+Bkn+Bk+1)ancos(Ωn)+(D1nk+……+Dkn+Dk+1)ansin(Ωn) |
③确定完全解中的待定系数
2. 迭代法
将方程(1)进行移项
y ( n ) = − ∑ k = 0 N a k a 0 y ( n − k ) + ∑ r = 0 M b r a 0 x ( n − r ) … … ( 5 ) y(n)=-\sum\limits_{k=0}^N\frac{a_k}{a_0}y(n-k)+\sum\limits_{r=0}^M\frac{b_r}{a_0}x(n-r) ……(5)y(n)=−k=0∑Na0aky(n−k)+r=0∑Ma0brx(n−r)……(5)
import numpy as np
def solveCCLDE(n,x,y0,a,b):
"""迭代法解常系数线性差分方程
N+1=len(a),M+1=len(b)
:param n:返回输出序列的长度
:param x:输入x(n),从x(0)到x(n-1)
:param y0:初始状态,从y(-N)到y(-1)
:param a:输出项系数
:param b:输入项系数
:return y:长度为n的输出序列,从y(0)到y(n-1)
"""
N=len(a)-1
M=len(b)-1
#y[-N]~y[-1]对应x[-M]~x[0],补充x[-M]~x[-1]
x=np.array([0]*M+x)
a=np.mat(a).transpose()
b=np.mat(b).transpose()
b=b/a[-1,0]
a=a/a[-1,0]
y=[]
for _ in range(n):
xx=np.mat(x[_:_+M+1])
yy=np.mat(y0)
y.append((-yy*a[:-1]+xx*b).tolist()[0][0])
y0.append(y[-1])
y0=y0[1:]
return y3. z变换法
利用单边z变换的移位性质
Z [ x ( n − m ) u ( n ) ] = z − m [ X ( z ) + ∑ k = − m − 1 x ( k ) z − k ] … … ( 6 ) \mathcal{Z}[x(n-m)u(n)]=z^{-m}[X(z)+\sum\limits_{k=-m}^{-1}x(k)z^{-k}] ……(6)Z[x(n−m)u(n)]=z−m[X(z)+k=−m∑−1x(k)z−k]……(6)
对方程(1)两边取单边z变换得
∑ k = 0 N a k z − k [ Y ( z ) + ∑ l = − k − 1 y ( l ) z − l ] = ∑ r = 0 M b r z − r [ X ( z ) + ∑ m = − r − 1 x ( m ) z − m ] … … ( 7 ) \sum\limits_{k=0}^Na_kz^{-k}[Y(z)+\sum\limits_{l=-k}^{-1}y(l)z^{-l}]=\sum\limits_{r=0}^Mb_rz^{-r}[X(z)+\sum\limits_{m=-r}^{-1}x(m)z^{-m}] ……(7)k=0∑Nakz−k[Y(z)+l=−k∑−1y(l)z−l]=r=0∑Mbrz−r[X(z)+m=−r∑−1x(m)z−m]……(7)
因为输入序列x(n)为因果序列,则∑ m = − r − 1 x ( m ) z − m = 0 \sum\limits_{m=-r}^{-1}x(m)z^{-m}=0m=−r∑−1x(m)z−m=0,方程变为
∑ k = 0 N a k z − k [ Y ( z ) + ∑ l = − k − 1 y ( l ) z − l ] = ∑ r = 0 M b r z − r X ( z ) … … ( 8 ) \sum\limits_{k=0}^Na_kz^{-k}[Y(z)+\sum\limits_{l=-k}^{-1}y(l)z^{-l}]=\sum\limits_{r=0}^Mb_rz^{-r}X(z) ……(8)k=0∑Nakz−k[Y(z)+l=−k∑−1y(l)z−l]=r=0∑Mbrz−rX(z)……(8)
解出Y(z)得
Y ( z ) = ∑ r = 0 M b r z − r ∑ k = 0 N a k z − k X ( z ) − ∑ k = 0 N [ a k z − k ∑ l = − k − 1 y ( l ) z − l ] ∑ k = 0 N a k z − k … … ( 9 ) Y(z)=\frac{\sum\limits_{r=0}^Mb_rz^{-r}}{\sum\limits_{k=0}^Na_kz^{-k}}X(z)-\frac{\sum\limits_{k=0}^N[a_kz^{-k}\sum\limits_{l=-k}^{-1}y(l)z^{-l}]}{\sum\limits_{k=0}^Na_kz^{-k}} ……(9)Y(z)=k=0∑Nakz−kr=0∑Mbrz−rX(z)−k=0∑Nakz−kk=0∑N[akz−kl=−k∑−1y(l)z−l]……(9)
(9)式中第一项仅与输入有关,与起始状态无关,是零状态响应的z变换,记为Y z s ( z ) Y_{zs}(z)Yzs(z),第二项仅与起始状态有关,与输入无关,是零输入响应的z变换,记为Y z i ( z ) Y_{zi}(z)Yzi(z),令
H ( z ) = ∑ r = 0 M b r z − r ∑ k = 0 N a k z − k … … ( 10 ) H(z)=\frac{\sum\limits_{r=0}^Mb_rz^{-r}}{\sum\limits_{k=0}^Na_kz^{-k}}……(10)H(z)=k=0∑Nakz−kr=0∑Mbrz−r……(10)
H(z)完全又系统特性所决定,称为离散时间系统的“系统函数”。