?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((n0
error('arguments must satisfy n1<=n0<=n2')%n0
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;