常系数线性差分方程的一般形式为
∑
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}=0
k=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^n an | ∑ i = 0 k c i n i a n \sum\limits_{i=0}^kc_in^ia^n i=0∑kcinian(a是方程的k重特征根) |
n k n^k nk | ∑ i = 0 k c i n i \sum\limits_{i=0}^kc_in^i i=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 y
3. 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}=0
m=−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)完全又系统特性所决定,称为离散时间系统的“系统函数”。