离散LSI系统分析 下载本文

?1H(z)?AmNk?1?(1?cMmz)?AzN?Mz?1)?1?(z?cm?1Nk?1M (2.10)

m))?(1?dk?(z?dj?k假设系统稳定,将z?ej?代入上式,得到频率响应

H(ej?)?Aej(N?M)设N?M,由式(2.11)得到

(e??m?1Nk?1M (2.11)

?cm)?H(ej?)ejarg[H(ekj?)]?(e??dj)?1H(ej?)?AmNk?1?(eNj? (2.12)

?cm)k?(e??dj)在z平面上,示,同样和

ej??cm用一根由零点c指向单位圆(ej?)上任一点B的向量表

cmBm, 。

ej??dk和

用一根由极点d指向单位圆(ej?)上任一点B的向量来表示,dkBcmBkdkB 分别称为零点矢量和极点矢量,用极坐标表示为:

cmB?cmej?mdkB?dkej?k将

cmBdkB表示式代入式(2.12),得到

?1H(ej?)?AmNk?1?(eNj??cm)k?(e??djj??1?AmN?ck?1N

mB?H(ej?)ej?(?)B)?dk|H(e)|?A?cm?1Nk?1N (2.13)

m?dNNm?1k?(?)???m???kk?1 (2.14)

系统或者信号的频率特性由式(2.13)和式(2.14)确定。按照式(2.13),知道零极点的分布后,可以很容易地确定零极点位置对系统特性的影响。当B点转到极点附近时,极点矢量长度最短,因而幅度特性可能出现峰值,且极点愈靠近单位圆,极点矢量长度愈短,峰值愈高愈尖锐。如果极点在单位圆上,则幅度特性为?,系统不稳定。对于零点,情况相反,当B点转到零点附近时,零点矢量长度变短,幅度特性将出现谷值,且零点愈靠近单位圆,谷值愈接近零。当零点在单位圆上时,谷值为零。综上所述,极点位置主要影响频响的峰值位置及尖锐程度,零点位置主要影响频响的谷值位置及形状。

Matlab提供了专门用于求离散系统频率响应的函数freqz(),其调用格式如下: [H,w] = freqz(b,a,n):返回数字系统的n点频率值(复数),这n个点均匀地分布在[0,π]上,系统默认的采样点数目为512点;

[H,f] = freqz(b,a,n,Fs):用于对

H(ej?)在[0,Fs/2]上等间隔采样n点,采样点频率及相应的频响值分别存放在f和H中。

H = freqz(b,a,w):用于对

H(ej?)在[0,2π]上进行采样,采样频率点由w指定。 H = freqz(b,a,f,Fs):用于对

H(ej?)在[0,Fs]上进行采样,采样频率点由f指定。 freqz(b,a,n):用于在当前图形窗口中绘制幅频和相频特性曲线。 下面介绍几个实用的函数:

mag=abs(H):求解系统的绝对幅频响应;

db=20*log10((mag+eps)/max(mag)):求解系统的相对幅频响应; pha=angle(H): 求解系统的相频响应; grd=grpdelay(b,a,w): 求解系统的群延迟。

三、实验内容

1.设某LTI系统的

h[n]??[n?5],输入x[n]?u[n]?u[n?5],求系统输出y[n]?x[n]*h[n]:

主程序如下: clear;clf;clc;

n=[-5:20]; %设定一个n的观察范围

h=delta(n-5);x=stepseq(0,-5,20)-stepseq(5,-5,20); [y,ny]=conv_m(x,n,h,n)

subplot(2,2,1);stem(n,x);title('x[n]'); xlabel('n');axis([-5,20,0,1.2]);grid on; subplot(2,2,2);stem(n,h);title('h[n]'); xlabel('n');axis([-5,20,0,1.2]);grid on;

subplot(2,2,3);stem(ny,y);title('y[n]'); xlabel('n');axis([-5,20,0,1.2]);grid on; delta.m

function y=delta(x) y=(x==0);

stepseq.m的源程序如下:

function [x,n]=stepseq(n0,n1,n2)

if nargin~=3%nargin(number of arguments input);“ ~=”表示不相等

disp('Usage: Y=stepseq(n0,n1,n2)');

return;

else if((n0n2)|(n1>n2))

error('arguments must satisfy n1<=n0<=n2')%n0n2或者n1>n2

end n=[n1:n2]; x=[(n-n0)>=0];

conv_m.m的源程序如下:

function[y,ny]=conv_m(x,nx,h,nh)

%Modified convolution routine for signal processing %[y,ny]=conv_m(x,nx,h,nh) %y=convolution result %ny=support of y

%x=first signal on support nx

%nx=support of x

%h=second signal on support nh %nh=support of h if nargin~=4

disp('Usage:Y=conv_m(x,nx,h,nh)'); return; end;

nyb=nx(1)+nh(1); %ny's begining nye=nx(length(x))+nh(length(h)); %ny's end

ny=[nyb:nye]; %ny仅仅为了计算一下结果y对应的横坐标范围

y=conv(x,h); %Convolution and polynomial multiplication;conv为MATLAB的固有函数

%conv_m函数比conv函数多用了用于表示横坐标范围的ny、nx、nh,因为这里假定二维坐标范围nx和nh可能从负数开始,所以要重新计算y的横坐标范围ny;如果nx和nh均为[0:N],则可以直接得出ny为[0:2N](正如conv函数中那样);在conv_m和conv函数中,x和h的横坐标范围都可以实不相等的

思考题:若解:因为

y[n]?x[n]*?[n?n]0,试写出

y[n]与x[n]的关系,并对MATLAB的仿真结果。

??n?n0?函数是延时器,所以y[n]=x[n]* ??n?n0?=x[n-n0]。

?n?2.设某线性时不变系统的h[n]=??0??10?n?5?输入信号为x[n]=?

?0其它?0?n?5

其它求输出:a :y[n]?x[n]*h[n]; b:y[n]?x[n]*h[n?5]

12(a)主程序如下:

n=[-5:20];

u1=stepseq(0,-5,20);u2=stepseq(6,-5,20);%u1=u[n];u2=u[n-6] %input x[n]

x=u1-u2;

%impulse response h[n] h=n.*x;

subplot(3,1,1);stem(n,x);axis([-5 20 0 2]);title('Input Sequence'); ylabel('x[n]');

subplot(3,1,2);stem(n,h);axis([-5 20 0 6]);title('Inpulse Response'); ylabel('h[n]'); %output response

[y1,ny]=conv_m(x,n,h,n);%conv_m为自定义求卷积的函数

subplot(3,1,3);stem(ny,y1);title('Output Sequence');xlabel('n'); ylabel('y_1[n]');

(b)主程序如下:

n=-10:20;

u1=stepseq(0,-10,20);u2=stepseq(6,-10,20);%u1=u[n];u2=u[n-6] %input x[n] x=u1-u2;

u3=stepseq(-5,-10,20);u4=stepseq(1,-10,20);%u3=u[n+5];u4=u[n-1] x1=u3-u4;

%impulse rsponse h[n+5] h=(n+5).*x1;