离散时间系统
离散时间系统是讲输入序列x(n)(通常称作激励)变换成输出序列y(n)(通常称作响应)的一种运算,变换过程用T[.]描述。因此,一个离散时间系统可以表示为 y ( n ) = T [ x ( n ) ] y(n)=T[x(n)] y(n)=T[x(n)]
离散时间系统分为线性和非线性两种。同时具有叠加性(superposition property)和齐次性(homogeneity)或均匀性的系统,通常称为线性离散系统。
当若干个输入信号同时作用于系统,总的输出信号等于各个输入信号单独作用时所产生的输出信号之和,这个性质称为叠加性。
线性系统用数学语言描述如下:
若序列 y 1 ( n ) y_1(n) y1(n)和 y 2 ( n ) y_2(n) y2(n)分别是输入序列 x 1 ( n ) x_1(n) x1(n)和 x 2 ( n ) x_2(n) x2(n)的输出响应,即 y 1 ( n ) = T [ x 1 ( n ) ] y_1(n)=T[x_1(n)] y1(n)=T[x1(n)], y 2 ( n ) = T [ x 2 ( n ) ] y_2(n)=T[x_2(n)] y2(n)=T[x2(n)],如果系统T[]是线性系统,那么下列关系式一定成立
T [ x 1 ( n ) + x 2 ( n ) ] = T [ x 1 ( n ) ] + T [ x 2 ( n ) ] = y 1 ( n ) + y 2 ( n ) T[x_1(n) + x_2(n)] = T[x_1(n)] + T[x_2(n)] = y_1(n) + y_2(n) T[x1(n)+x2(n)]=T[x1(n)]+T[x2(n)]=y1(n)+y2(n),这个关系式说明系统具有叠加性
T [ a x 1 ( n ) ] = a T [ x 1 ( n ) ] = a y 1 ( n ) T[ax_1(n)] =aT[x_1(n)] = ay_1(n) T[ax1(n)]=aT[x1(n)]=ay1(n),这个关系式说明系统具有比例性或齐次性
上面的两个式子结合起来表示为:
T [ a x 1 ( n ) + b x 2 ( n ) ] = a T [ x 1 ( n ) ] + b T [ x 2 ( n ) ] = a y 1 ( n ) + b y 2 ( n ) T[ax_1(n) + bx_2(n)] = aT[x_1(n)] + bT[x_2(n)] = ay_1(n) + by_2(n) T[ax1(n)+bx2(n)]=aT[x1(n)]+bT[x2(n)]=ay1(n)+by2(n)
如果系统的输出响应随输入的移位而移位,即
y ( n ) = T [ x ( n ) ] y(n)=T[x(n)] y(n)=T[x(n)],则 y ( n − k ) = T [ x ( n − k ) ] y(n-k)=T[x(n-k)] y(n−k)=T[x(n−k)],
称这样的系统为时不变系统(time-invariant system),式中k为任意常数
描述一个线性时不变离散时间系统,有两种方法
- 用单位冲激函数来表征系统
- 用差分方程(difference)来描述系统输入和输出之间的关系
离散时间系统响应
离散时间LTI系统可用线性常数差分方程来表示,即
∑ i = 0 N a i y ( n − 1 ) = ∑ j = 0 M b j x ( n − j ) \sum_{i=0}^{N}a_iy(n-1) = \sum_{j=0}^{M}b_jx(n-j) ∑i=0Naiy(n−1)=∑j=0Mbjx(n−j),其中, a i ( i = 0 , 1 , … … , N ) a_i(i=0,1,……,N) ai(i=0,1,……,N)和 a j ( j = 0 , 1 , … … , M ) a_j(j=0,1,……,M) aj(j=0,1,……,M)为实常数
在MATLAB中,函数filter可以用来对差分方程在指定的时间范围内的输入序列所产生的响应进行求解,该函数的调用方法如下:
y=filter(b,a,x)
其中,x为输入的离散序列,y为输出的离散序列,y的长度与x的长度一样,b与a分别为差分方程右端与左端的系数向量
已知 y ( k ) − 0.35 y ( k − 1 ) + 1.5 y ( k − 2 ) = f ( k ) + f ( k − 1 ) y(k) - 0.35y(k-1) + 1.5y(k-2) = f(k) + f(k-1) y(k)−0.35y(k−1)+1.5y(k−2)=f(k)+f(k−1), f ( k ) = ( 1 2 ) 2 ε ( k ) f(k)=(\frac{1}{2})^2\varepsilon(k) f(k)=(21)2ε(k),求零状态响应
代码:
a = [1 -0.35 1.5];
b = [1 1];
t = 0:20;
x = (1/2).^t;
y = filter(b,a,x)
subplot(1,2,1)
stem(t,x)
title('输入序列')
grid on
xlabel('n');
ylabel('h(n)');
subplot(1,2,2)
stem(t,y)
title('响应序列')
xlabel('n');
ylabel('h(n)');
grid on
输出结果:
y =
Columns 1 through 16
1.0000 1.8500 -0.1025 -2.4359 -0.5113 3.5686 2.0628 -4.6075 -4.6952 5.2738 8.8915 -4.7972 -15.0155 1.9407 23.2027 5.2100
Columns 17 through 21
-32.9805 -19.3582 42.6954 43.9807 -48.6498
离散时间系统的冲激响应和阶跃响应
在MATLAB中, 函数impz用于求解离散时间系统单位冲激响应,其调用形式为
h = impz(b,a,k)
式中,b和a分别是差分方程右端和左端的系数向量,k表示输出序列的取值范围(可省略),h是系统单位冲激响应(如果没有参数,直接调用impz(b,a,k),则MATLAB就会在当前绘图窗口中自动画出系统单位冲激响应的图形)
代码:
k = 0:10;
a = [1 6 4];
b = [1 3];
h =impz(b,a,k);
subplot(1,2,1);
stem(k,h);
xlabel('n');
ylabel('h(n)');
title('单位冲激响应的近似值');
grid on;
hk = -(-1).^k + 2*(-2).^k;
subplot(1,2,2);
stem(k,h);
xlabel('n');
ylabel('h(n)');
title('单位冲激响应的理论值');
grid on;
离散时间信号的卷积和运算
离散时间信号的卷积定义为
y ( n ) = x ( n ) ∗ h ( n ) = ∑ m = − ∞ ∞ x ( m ) h ( n − m ) y(n) = x(n) * h(n) = \sum_{m=-\infty}^{\infty}x(m)h(n-m) y(n)=x(n)∗h(n)=∑m=−∞∞x(m)h(n−m)
在MATLAB中,函数conv是用于计算两个离散序列卷积和的函数,其调用形式为
c = conv(a,b)
式中,a、b分别为待卷积的两序列的向量表示,c是卷积结果。向量c的长度为向量a、b的长度之和减1,即length© = length(a) + length(b) - 1
已知某系统的单位取样响应为 h ( h ) = 0. 9 n [ u ( n ) − u ( n − 9 ) ] h(h)=0.9^n[u(n)-u(n-9)] h(h)=0.9n[u(n)−u(n−9)],试用MATLAB求当激励信号为$x(n)=u(n)-u(n-4)时,系统的零状态响应
代码:
clear
nx = -1:5;
nh = -2:10;
x = uDT(nx) - uDT(nx - 4);
h = 0.9.^nh.*(uDT(nh) - uDT(nh-9));
y = conv(x,h);
ny1 = nx(1) + nh(1);
ny = ny1 + (0:(length(nx) + length(nh) -2));
subplot(131);
stem(nx,x,'fill');
grid on;
xlabel('x');
ylabel('x(n)');
title('x(n)');
axis([-4 16 0 3]);
subplot(132);
stem(nh,h,'fill');
grid on;
xlabel('n');
ylabel('h(n)');
title('n(n)');
axis([-4 16 0 3]);
subplot(133);
stem(ny,y,'fill');
grid on;
xlabel('n');
ylabel('y(n)');
title('y(n) =x(n)*h(n)');
axis([-4 16 0 3]);
参考文献:
- 《精通MATLAB信号处理》,沈再阳编写,清华大学出版社