线性时不变离散系统可用线性常系数差分方程描述,即 ∑ i = 0 N a i y ( n − i ) = ∑ j = 0 M b j x ( n − j ) sum_{i=0}^Na_iy(n-i)=sum_{j=0}^Mb_jx(n-j) ∑i=0Naiy(n−i)=∑j=0Mbjx(n−j),其中, y ( k ) y(k) y(k)为系统的输出序列, x ( k ) x(k) x(k)为输出序列。将上式两边进行Z变换得到 H ( z ) = Y ( z ) X ( z ) = ∑ j = 0 M b j z − j ∑ i = 0 N a i z − i = B ( z ) A ( z ) H(z)=frac{Y(z)}{X(z)}=frac{sum_{j=0}^Mb_jz^{-j}}{sum_{i=0}^Na_iz^{-i}}=frac{B(z)}{A(z)} H(z)=X(z)Y(z)=∑i=0Naiz−i∑j=0Mbjz−j=A(z)B(z),因式分解后有 H ( z ) = C ∏ j = 1 M ( z − q j ) ∏ i = 1 N ( z − p i ) H(z)=Cfrac{prod_{j=1}^{M}(z-q_j)}{prod_{i=1}^{N}(z-p_i)} H(z)=C∏i=1N(z−pi)∏j=1M(z−qj),其中,C为常数, q j ( j = 1 , 2 , … … , M ) q_j(j=1,2,……,M) qj(j=1,2,……,M)为 H ( z ) H(z) H(z)的M个零点, p i ( i = 1 , 2 , … … , N ) p_i(i=1,2,……,N) pi(i=1,2,……,N)为 H ( z ) H(z) H(z)的N个零点。系统函数 H ( z ) H(z) H(z)的零极点分布完全决定了系统的特性,若某系统函数的零极点已知,则系统函数便可确定下来。
离散系统函数频域分析
离散系统的频率响应 H ( e j w ) H(e^{jw}) H(ejw)对于某因果稳定离散系统,如果激励序列为正弦序列 x ( n ) = A s i n ( w 0 n ) u ( n ) x(n)=Asin(w_0n)u(n) x(n)=Asin(w0n)u(n),则系统的稳态响应为 y s s ( n ) = A ∣ H ( e j w ) ∣ s i n [ w n + φ ( w ) ] u ( n ) y_{ss}(n)=A|H(e^{jw})|sin[wn+varphi (w)]u(n) yss(n)=A∣H(ejw)∣sin[wn+φ(w)]u(n)
定义离散系统的频率响应为 H ( e j w ) = H ( z ) ∣ z = e j w = ∣ H ( e j w ) ∣ e j φ ( w ) H(e^{jw})=H(z)|_{z=e^{jw}}=|H(e^{jw})|e^{jvarphi(w)} H(ejw)=H(z)∣z=ejw=∣H(ejw)∣ejφ(w),其中, ∣ H ( e j w ) ∣ |H(e^{jw})| ∣H(ejw)∣为离散系统的幅频特性; φ ( w ) varphi(w) φ(w)为离散系统的相频特性; H ( e j w ) H(e^{jw}) H(ejw)是以 2 π 2pi 2π为周期的周期函数,只要确定 H ( e j w ) H(e^{jw}) H(ejw)在 ∣ w ∣ ⩽ π |w| leqslant pi ∣w∣⩽π范围内的情况,便可分析出系统的整个频率特性。
利用几何矢量求解离散系统的频响,设 e j w − p i = A i e j θ i , e j w − q j = B j e j ψ j e^{jw}-p_i=A_ie^{jtheta_i},e^{jw}-q_j=B_je^{jpsi_j} ejw−pi=Aiejθi,ejw−qj=Bjejψj,那么,离散系统的频率响应为 H ( e j w ) = ∏ j = 1 M B j e j ( ψ 1 + ψ 2 + … … + ψ M ) ∏ i = 1 N A i e i ( θ 1 + θ 2 + … … + θ N ) = ∣ H ( e j w ) ∣ e j φ ( w ) H(e^{jw})=frac{prod_{j=1}^{M}B_je^{j(psi_1+psi_2+……+psi_M)}}{prod_{i=1}^{N}A_ie^{i(theta_1+theta_2+……+theta_N)}}=|H(e^{jw})|e^{jvarphi(w)} H(ejw)=∏i=1NAiei(θ1+θ2+……+θN)∏j=1MBjej(ψ1+ψ2+……+ψM)=∣H(ejw)∣ejφ(w),那么,系统的幅频特性和相频特性分别为 H ( e j w ) = ∏ j = 1 M B j ∏ i = 1 N A i , φ ( w ) = ∏ j = 1 M ψ j − ∏ i = 1 N θ i H(e^{jw})=frac{prod_{j=1}^{M}B_j}{prod_{i=1}^{N}A_i},varphi(w)=prod_{j=1}^{M}psi_j-prod_{i=1}^{N}theta_i H(ejw)=∏i=1NAi∏j=1MBj,φ(w)=∏j=1Mψj−∏i=1Nθi
利用MATLAB求解频率响应的过程如下:
1. 根据系统函数H(z)定义分子、分母多项式系统向量B和A
2. 调用函数ljdt求出H(z)的零极点,并绘出零极点图
3. 定义Z平面单位圆上的k个频率分点
4. 求出H(z)所有的零点和极点到这些等分点的距离
5. 求出H(z)所有的零点和极点到这些等分点矢量的相角
6. 求出系统的$|H(e^{jw})|$和$varphi(w)$
7. 绘制指定范围内系统的幅频曲线和相频曲线
在MATLAB中,函数freqz用于求离散时间系统频响特性,该函数的调用方法如下:
[H,w]=freqz(B,A,N)
[H,w]=freqz(B,A,N,'whole')
其中,B与A分别表示H(z)的分子与分母多项式的系数向量,N为正整数,默认值为512;返回值w包含 [ 0 , π ] [0,pi] [0,π]范围内的N个频率等分点,返回值H则是离散时间系统频率响应 H ( e j w ) H(e^{jw}) H(ejw)在 [ 0 , π ] [0,pi] [0,π]范围内N个频率处对应的值。
例:绘制离散系统的频响曲线 H ( z ) = z − 1.3 z H(z)=frac{z-1.3}{z} H(z)=zz−1.3
运行程序如下:
B=[1 -1.3];
A=[1 0];
[H,w]=freqz(B,A,400,'whole');
Hf=abs(H);
Hx=angle(H);
clf;
subplot(121);
plot(w,Hf);
title('离散系统幅频特性曲线');
xlabel('频率');
ylabel('幅度');
grid on;
subplot(122);
plot(w,Hx);
xlabel('频率');
ylabel('幅度');
grid on;
title('离散系统相频特性曲线');
结果:
例:绘制离散系统的幅频响应和相频响应
clear all;close all;clc;
w=(-4*pi:0.001:4*pi) + eps;
X=1./(1-0.6*exp(-j*w));
subplot(211);
plot(w/pi,abs(X),'lineWidth',2);
xlabel('omega/pi');
ylabel('|H(e^j^omega)|');
title('幅度响应');
axis([-3.2 3.2 0.5 2.2]);
grid;
subplot(212);
plot(w/pi,angle(X),'lineWidth',2);
xlabel('omega/pi');
ylabel('theta(omega)');
title('相频响应');
axis([-3.2 3.2 -0.6 0.6]);
grid;
set(gcf,'color','w');
运行结果:
离散系统函数零点分析
离散时间系统的函数定义为
H
(
z
)
=
Y
(
z
)
X
(
z
)
H(z)=frac{Y(z)}{X(z)}
H(z)=X(z)Y(z)
如果系统函数的有理函数表达式为
H
(
z
)
=
b
1
z
m
+
b
2
z
m
−
1
+
…
…
+
b
m
z
+
b
m
+
1
a
1
z
n
+
a
2
z
n
−
1
+
…
…
+
a
n
z
+
a
n
+
1
H(z)=frac{b_1z^m+b_2z^{m-1}+……+b_mz+b_{m+1}}{a_1z^n+a_2z^{n-1}+……+a_nz+a_{n+1}}
H(z)=a1zn+a2zn−1+……+anz+an+1b1zm+b2zm−1+……+bmz+bm+1
在MATLAB中,系统函数的零极点可以通过函数roots得到,也可以借助函数tf2zp得到,tf2zp的语句格式为
[Z,P,K] = tf2zp(B,A)
其中,B与A分别表示H(z)的分子与分母多项式的系数向量。它的作用是将H(z)的有理分式表示为零极点增益形式 H ( z ) = k ( z − z 1 ) ( z − z 2 ) … … ( z − z m ) ( z − p 1 ) ( z − p x ) … … ( z − p n ) H(z)=kfrac{(z-z_1)(z-z_2)……(z-z_m)}{(z-p_1)(z-p_x)……(z-p_n)} H(z)=k(z−p1)(z−px)……(z−pn)(z−z1)(z−z2)……(z−zm)
函数zplane用于绘制H(z)的零极点图,该函数的调用格式为
zplane(z,p)
绘制出列向量z中的零点(以符号“。”表示)和列向量p中的极点(以符号“X”表示),以及参考单位圆,并在多阶零点和极点的右上角标出其阶数。如果z和p为矩阵,则会以不同的颜色绘出z和p各列中的零点和极点
例:已知某离散系统的系统函数为
H
(
z
)
=
2
z
+
1
3
z
5
−
2
z
4
+
1
H(z)=frac{2z+1}{3z^5-2z^4+1}
H(z)=3z5−2z4+12z+1
试用MATLAB求出该系统的零极点,并画出零极点分布图,判断该系统是否稳定。用函数roots求得
H
(
z
)
H(z)
H(z)的零极点后,就可以用函数plot绘制出系统的零极点图。下面是求系统零极点,并绘制其零极点图的MATLAB实用函数ljdt,同时还绘制出了单位圆。
子程序如下:
function ljdt(A,B)
p = roots(A); %求系统的极点
q = roots(B); %求系统的零点
p = p'; %将极点列向量转置为行向量
q = q'; %将零点列向量转置为行向量
x = max(abs([p q 1])); %确定纵坐标范围
x = x + 0.1;
y = x; %确定横坐标范围
clf
hold on
axis([-x x -y y]); %确定坐标轴的显示范围
w = 0:pi/300:2*pi;
t = exp(i*w);
plot(t) %画单位圆
axis('square')
plot([-x x],[0 0]); %画横坐标轴
plot([0 0],[-y y]); %画纵坐标轴
text(0.1,x,'jIm[z]');
text(y,1/10,'Re[z]');
plot(real(p),imag(p),'x'); %画极点
plot(real(q),imag(q),'o');
title('零极点图');
hold off
运行程序如下:
a = [3 -2 0 0 0 1];
b = [2 1];
ljdt(a,b);
p = roots(a)
q = roots(b)
pa = abs(p)
运行结果:
p =
0.8212 + 0.4270i
0.8212 - 0.4270i
-0.1367 + 0.7316i
-0.1367 - 0.7316i
-0.7024 + 0.0000i
q =
-0.5000
pa =
0.9256
0.9256
0.7442
0.7442
0.7024
例:各种系统零极点图的实现
运行程序如下:
%绘制a系统零极点分布图及系统单位序列响应
z = 0; %定义系统零点位置
p = 0.25; %定义系统极点位置
k = 1; %定义系统增益
subplot(221);
zplane(z,p);
grid on;
%绘制系统零极点分布图
subplot(222);
[num,den] = zp2tf(z,p,k);
impz(num,den);
%绘制系统单位序列响应时域波形
title('h(n)');
grid on;
%定义标题
%绘制b系统零极点分布图及系统单位序列响应
p = 1;
subplot(223);
zplane(z,p);
grid on;
[num,den] = zp2tf(z,p,k);
subplot(224);
impz(num,den);
title('h(n)');
grid on;
运行程序如下:
离散系统差分函数求解
连续函数f(t)经过采样后,获得采样函数f(kT),那么
一阶向前和向后差分形式分别为
Δ
f
(
k
)
=
f
(
k
+
1
)
−
f
(
k
)
Delta f(k)=f(k+1)-f(k)
Δf(k)=f(k+1)−f(k)
∇
f
(
k
)
=
f
(
k
)
−
f
(
k
−
1
)
nabla f(k)=f(k)-f(k-1)
∇f(k)=f(k)−f(k−1)
二阶向前和向后的差分形式分别为
Δ
2
f
(
k
)
=
Δ
f
(
k
+
1
)
=
f
(
k
+
2
)
−
2
f
(
k
+
1
)
+
f
(
k
)
Delta ^2f(k)=Delta f(k+1)=f(k+2)-2f(k+1)+f(k)
Δ2f(k)=Δf(k+1)=f(k+2)−2f(k+1)+f(k)
∇
2
f
(
k
)
=
∇
[
Δ
f
(
k
)
]
=
f
(
k
)
−
2
f
(
k
−
1
)
+
f
(
k
−
2
)
nabla ^2f(k)=nabla[ Delta f(k)]=f(k)-2f(k-1)+f(k-2)
∇2f(k)=∇[Δf(k)]=f(k)−2f(k−1)+f(k−2)
根据上式可以推导出向前和向后的n阶差分为
Δ
n
f
(
k
)
=
Δ
n
−
1
f
(
k
+
1
)
−
Δ
n
−
1
f
(
k
)
Delta ^nf(k)=Delta ^{n-1}f(k+1)-Delta ^{n-1}f(k)
Δnf(k)=Δn−1f(k+1)−Δn−1f(k)
∇
n
f
(
k
)
=
Δ
n
−
1
f
(
k
)
−
Δ
n
−
1
f
(
k
−
1
)
nabla ^nf(k)=Delta ^{n-1}f(k)-Delta ^{n-1}f(k-1)
∇nf(k)=Δn−1f(k)−Δn−1f(k−1)
连续系统的时间序列方程为
d
2
c
(
t
)
/
d
t
2
+
a
d
c
(
t
)
/
d
t
+
b
c
(
t
)
=
k
r
(
t
)
d^2c(t)/dt^2+adc(t)/dt+bc(t)=kr(t)
d2c(t)/dt2+adc(t)/dt+bc(t)=kr(t)
上式中的微分用差分方程替代,则有
d
2
c
(
t
)
/
d
t
2
=
Δ
2
c
(
t
)
=
c
(
k
+
2
)
−
2
c
(
k
+
1
)
+
c
(
k
)
d^2c(t)/dt^2=Delta^2c(t)=c(k+2)-2c(k+1)+c(k)
d2c(t)/dt2=Δ2c(t)=c(k+2)−2c(k+1)+c(k)
d
c
(
t
)
/
d
t
=
c
(
k
+
1
)
−
c
(
k
)
dc(t)/dt=c(k+1)-c(k)
dc(t)/dt=c(k+1)−c(k)
推导到离散时间系统,c(k)代替c(t),r(k)代替r(t),则有
[
c
(
k
+
2
)
−
2
c
(
k
+
1
)
+
c
(
k
)
]
+
a
[
c
(
k
+
1
)
−
c
(
k
)
]
+
b
c
(
k
)
=
k
r
(
k
)
[c(k+2)-2c(k+1)+c(k)]+a[c(k+1)-c(k)]+bc(k)=kr(k)
[c(k+2)−2c(k+1)+c(k)]+a[c(k+1)−c(k)]+bc(k)=kr(k)
整理得
c
(
k
+
2
)
+
(
a
−
2
)
c
(
k
+
1
)
+
(
1
−
a
+
b
)
c
(
k
)
=
k
r
(
k
)
c(k+2)+(a-2)c(k+1)+(1-a+b)c(k)=kr(k)
c(k+2)+(a−2)c(k+1)+(1−a+b)c(k)=kr(k)
由此可以推导出一般离散系统的差分方程为
c
(
k
+
n
)
+
a
1
c
(
k
+
n
−
1
)
+
a
2
(
k
+
n
−
2
)
+
…
…
+
a
n
c
(
k
)
=
b
0
r
(
k
+
m
)
+
b
1
r
(
k
+
m
−
1
)
+
…
…
+
b
m
r
(
k
)
c(k+n)+a_1c(k+n-1)+a_2(k+n-2)+……+a_nc(k)=b_0r(k+m)+b_1r(k+m-1)+……+b_mr(k)
c(k+n)+a1c(k+n−1)+a2(k+n−2)+……+anc(k)=b0r(k+m)+b1r(k+m−1)+……+bmr(k)
差分方程的解分为通解与特解,通解是与方程的初始状态有关的解,特解与外部输入有关,他描述系统在外部输入作用下的强迫运动
例:求解差分方程 y ( n ) − 0.5 y ( n − 1 ) − 0.45 y ( n − 2 ) = 0.55 x ( n ) + 0.5 x ( n − 1 ) − x ( n − 2 ) y(n)-0.5y(n-1)-0.45y(n-2)=0.55x(n)+0.5x(n-1)-x(n-2) y(n)−0.5y(n−1)−0.45y(n−2)=0.55x(n)+0.5x(n−1)−x(n−2),其中 x ( n ) = 0. 7 n ε ( n ) x(n)=0.7^n varepsilon (n) x(n)=0.7nε(n),初始状态 y ( − 1 ) = 1 , y ( − 2 ) = 2 , x ( − 1 ) = 2 , x ( − 2 ) = 3 y(-1)=1,y(-2)=2,x(-1)=2,x(-2)=3 y(−1)=1,y(−2)=2,x(−1)=2,x(−2)=3
运行程序如下:
num = [0.55 0.5 -1];
den = [1 -0.5 -0.45];
x0 = [2 3];
y0 = [1 2];
N = 50;
n = [0:N - 1]';
x = 0.7.^n;
Zi = filtic(num,den,y0,x0);
[y,Zf] = filter(num,den,x,Zi);
plot(n,x,'r-',n,y,'b--');
title('响应');
xlabel('n');
ylabel('x(n)-y(n)');
legend('输入x','输入y',1);
grid;
运行结果如下图:
例:编制程序求解下列两个系统差分方程的单位脉冲响应,并绘出其图形。
y
[
n
]
+
0.75
y
[
n
−
1
]
+
0.125
y
[
n
−
2
]
=
x
[
n
]
−
x
[
n
−
1
]
y[n]+0.75y[n-1]+0.125y[n-2]=x[n]-x[n-1]
y[n]+0.75y[n−1]+0.125y[n−2]=x[n]−x[n−1]
运行程序如下:
clc;
N = 32;
x_delta = zeros(1,N);
x_delta(1) = 1;
p = [1,-1,0];
d = [1,0.75,0.125];
h1_delta = filter(p,d,x_delta);
subplot(211);
stem(0:N-1,h1_delta,'r');
hold off;
xlabel('方程1的单位脉冲序列');
x_unit = ones(1,N);
h1_unit = filter(p,d,x_unit);
subplot(212);
stem(0:N-1,h1_unit,'r');
hold off;
xlabel('方程1的阶跃响应');
运行结果如下:
参考文献:
- 《精通MATLAB信号处理》,沈再阳编写,清华大学出版社
最后
以上就是慈祥眼睛最近收集整理的关于MATLAB信号处理---学习小案例(11)---离散系统中的Z域描述的全部内容,更多相关MATLAB信号处理---学习小案例(11)---离散系统中内容请搜索靠谱客的其他文章。
发表评论 取消回复