1、用 MATLAB 实现下列序列,并画出图形:
① 单位采样序列移位,
;
提示:实现单位采样序列:
,可通过以下语句实现:x=zeros(1,N);x(1)=1;
n=0:10;
x=[zeros(1,3),1,zeros(1,7)];
figure(1);
stem(n,x);
② 单位阶跃序列移位,
提示:实现单位阶跃序列:
,可通过以下语句实现:x=ones(1,N);
,其中 A=2;f=10; =0.005;
n=0:10;
x=[zeros(1,3),1,ones(1,7)];
figure(2);
stem(n,x);
③ 正弦序列,
n=0:10;
A=2;f=10;Ts=0.005;
xn=2*sin(A*pi*f*n*Ts);
figure(3);
stem(n,xn);
④ 指数序列,
n=0:10;
xn=0.9.^n;
figure(4);
stem(n,xn);
⑤ 复指数序列,
,画出该序列的实部、虚部,幅值和相位。
提示:可通过下列语句实现:
实部 real(x),虚部 imag(x),幅值 abs(x),相位 angle(x)
n=-20:20;
xn=exp(0.05+j*pi/4*n);
figure(5);
subplot(411);
stem(n,real(xn));
subplot(412);
stem(n,imag(xn));
subplot(413);
stem(n,abs(xn));
subplot(414);
stem(n,angle(xn));
2、用 MATLAB 实现两个序列相加:
序列 1:x1=[1 0.5 0.3 0],n1=1:4;
序列 2:x2=[0.2 0.3 0.4 0.5 0.8 1],n2=1:6;实现 x=x1+x2,n=1:8,并画出 x 的图
形。
提示:MATLAB 中可用算术运算符“+”实现序列相加,但两个序列的长度必须相等。如果序
列长度不等,或者长度虽然相等但采样的位置不同,就不能运用“+”了。当两序列的长度不
等或位置不对应时,首先应使两者位置对齐,然后通过 zeros 函数左右补零使其长度相等后
再进行相加。
x1=[1 0.5 0.3 0];x1(8)=0;
x2=[0.2 0.3 0.4 0.5 0.8 1];x2(8)=0;n=1:8;
100),3()(−=nnnx0001{)(==nnn100),3()(−=nnunx0001{)(==nnnu100),****2sin(*)(=nTnfAnxssT100,9.0)(=nnxn0.05+j*pi/4*()e,2020nxnn=−
x=x1+x2;
figure(6);
stem(n,x);
3、用 MATLAB 实现序列的反转:
实现
,序列 x(n)采用
,并画出 y(n)的图形。
提示:可利用 fliplr(x) 函数,例如:x=[1 2 3 4];y=fliplr(x);结果为 y=[4 3 2 1],要实现
,需要对 fliplr(x) 函数进行合理运用。
n=0:10;
xn=[zeros(1,3),1,ones(1,7)];
yn=fliplr(xn);%·×ª
m=-fliplr(n);
figure(7);
stem(m,yn);
4、序列的尺度变换,实现插值和抽取:
已知序列
,用 MATLAB 分别实现下列尺度变换。
提示:可对序列 x(n)的下标进行取余计算,余数为零即为插值和抹去的点,函数如下:
mod(nx,m),nx 为序列 x(n)的下标,m 为插值或抽取的倍数。
xn=[1 2 3 4 5 6 7 8];
n=-4:3;
figure(8);
subplot(211);
y1=xn(1:2:length(n));n1=-2:1;
stem(n1,y1);
subplot(212);
y2=zeros(1,16);
for m=1:8
y2(2*m)=xn(m);n2(2*m)=n(m);
end
stem(-8:6,y2(2:end));
1.求两个序列的卷积(离散线性卷积)
对于一个 LSI 系统,设其输入序列为
,其中
。系统为单
位冲激响应
,编程求出输出序列,并画出图形。
提示:输出序列应是输入序列和系统单位冲激相应序列的卷积,在 MATLAB 中可用 conv 函
数来实现两个序列的卷积。但是使用 conv 函数求卷积时,两序列卷积后的输出序列的下标
不是任意的(具体是多少,查函数),所以需要自己构造下标。
n=-5:20;
u1=stepfun(n,0);u2=stepfun(n,10);
u=u1-u2;
h=0.9.^n.*u1;
y=conv(u,h);
figure(1);
subplot(311);
stem(n,u1);
subplot(312);
)()(nxny−=100),3()(−=nnunx)()(nxny−=(){1,2,3,4,5,6,7,8},-43xnn=12()(2){()(/2)ynxnynxn==)10()()(−−=nununx205−n)(*9.0)(nunnh=
stem(n,u);
subplot(313);
stem(-10:40,y);
2.求两个序列的卷积(离散周期卷积)
已知序列
,
,计算它们的周期卷积。
提示:将
和
的主值序列 x(n)和 y(n)作线性卷积,然后再将线性卷积序列以 N 为周
期进行周期延拓。
x=[1 0 1 2 1];
y=[1 1 0 1 2];
z=conv(x,y);
h1=[z(6:9),0]; h2=h1+z(1:5); h3=[h2 h2 h2];
figure(2);
stem(h3);
3.已知 LSI 系统的差分方程为:
,其中
求单位冲激响应
,并画出图形。
提示:可以使用 filter 函数来完成,其调用格式为
,注意 b,a,x 参数都
代表什么,如何设置。
n=-5:30;
b=[1]; a=[1 -1 0.9];
x=[zeros(1,5),1,zeros(1,30)];
H=filter(b,a,x);
figure(3);
stem(n,H);
4.已知 LSI 系统的差分方程为:
求单位阶跃响应
,并画出图形。
,其中
提示:可以使用 filter 函数来完成,其调用格式为
,注意 b,a,x 参数都
n=-5:30;
b=[1]; a=[1 -1 0.9];
x=stepfun(n,0);
g=filter(b,a,x);
figure(4);
stem(n,g);
1. 求下列序列的 z 变换:
①
②
提示:将序列 x(n)符号化,然后利用 ztrans()函数实现对 x(n)进行 z 变换,其结果为 X(z);
simple()函数用于获取符号变量的最简形式;pretty()函数用于将符号表达式化简成与高等数
学课本上显示符号表达式类似的形式。
syms n;
%un=stepfun(n,0);
xn1=cos(n.*pi/2);
~(){1,0,1,2,1}xn=~y(){1,1,0,1,2}n=~()xn~y()n)()2(9.0)1()(nxnynyny=−+−−305−n)(nh),,(xabfilterH=)()2(9.0)1()(nxnynyny=−+−−305−n)(ng),,(xabfilterH=)()2cos()(nunnx=)(2)1()(nunnnx−=
xn2=(n.*(n-1))/2;
Xz1=ztrans(xn1);
Xz2=simplify(ztrans(xn2));
pretty(Xz1);
pretty(Xz2);
2. 求 z 反变换:
①
②
提示:将序列 x(n)符号化,然后利用 iztrans()函数实现求函数 X(z)的 z 反变换 x(n);然后利用
pretty()函数实现与书本上显示一致的符号表达。
syms z;
Xz1=z/(z-2)^2;
Xz2=z*(z-3)/(z^2+2*z+1);
xn1=iztrans(Xz1);
xn2=iztrans(Xz2);
pretty(xn1);
pretty(xn2);
3. 离 散 时 间 线 性 时 不 变 系 统 的 时 域 实 现 : 已 知 因 果 LSI 系 统 的 差 分 方 程 为 :
,写出系统传递函数 H(z)及其收敛域,编程实现以下
内容:
①求系统的零极点,并绘图;
②求系统冲激响应 h(n),并绘图;
③求系统的单位阶跃响应 g(n),并绘图;
④求系统函数的幅频响应 H(ejw),并绘出幅频和相频特性。
提示:b 是差分方程中输入的系数,a 是差分方程中输出的系数。注意缺项的系数前要添加
系数 0。①zplane(b,a)用来实现画出系统的零极点图;②impz(b,a,n)函数,如果 n 是一个整
形变量,impz()计算的是在这些整数点位置上的冲激响应,且从 0 开始。单位阶跃响应可用
stepz(b,a,n)函数,与 impz()函数用法相似。③幅频响应可利用 freqz(b,a,w)函数,其中
w=[0:1:500]*pi/500 或 freqz(b,a,n)函数,可查看 MATLAB Help 了解它的相关用法。③幅频响
应可用 freqz(b,a,w),其中 w=[0:1:500]*pi/500 和 freqz(b,a,n)分别求,可查看 MATLAB Help
了解它的相关用法。
m=-5:30;
b=[1 0 -1]; a=[1 0 -0.81];
%(1)
figure(1);
zplane(b,a);
%(2)
figure(2);
impz(b,a,100);
%(3)
figure(3);
stepz(b,a,100);
%(4)
w=[0:1:100]*pi/25;
figure(4);
freqz(b,a,100,'whole');
figure(5);
2)2()(−=zzzX12)3()(2++−=zzzzzX)2()()2(81.0)(−−+−=nxnxnyny
freqz(b,a,w);
(1)若
是一个 N=12 的有限长序列,利用 MATLAB 计算它的 DFT 并画出
图形。
提示:在计算机上实现信号的频谱分析及其他方面的处理工作时,对信号的要求是:在时域
和频域都应该是离散的,且都应是有限长的,只有 DFS(离散周期序列的傅立叶级数)在时
域和频域都是离散的。因此,DFT 实际上来是自于 DFS 的,只不过仅在时域、频域各取一个
周期而已。本题要求自己编写一个
函数,其中,xn 代表序列 x(n),N 代表有限长
序列的点数。
函数的算法采用 DFT 变换的基本公式,即:
,其中,
。由于 X(k)为复数,所以画
图时,应画 X(k)的幅度特性 abs()和相位特性 angle()。
N=12; n=0:N-1; k=0:N-1;
x=cos(n*pi/6);
WN=exp(-j*(2*pi/N)*n'*k);
X=x*WN;figure(1);
X1=abs(X); X2=angle(X);
subplot(121);stem(n,X1);
subplot(122);stem(n,X2);
(2)对于实序列
① 分解成偶部
和奇部
;
n=0:19; N=length(n); m=mod(-n,N)+1;
x1=0.9.^n; x2=x1(m);
xe=1/2*(x1+x2); xo=1/2*(x1-x2);figure(2);
subplot(321);stem(n,xe);title('x1(n)ż');
subplot(322);stem(n,xo);title('x1(n)Æ æ');
② 验证实序列的性质:
提 示 : 任 意 一 个 实 序 列 都 可 以 表 示 成 偶 对 称 序 列 与 奇 对 称 序 列 之 和 , 即 :
。令
,
,
验证实序列的上述性质。注:因为 MATLAB 的计算精度问题,理论上,
只包含
实部,
只包含虚部,但实际计算中仅是
的虚部很小,
的实部很小。因此,比较时:
本题要求自己编写一个 circevod(x)函数,它的功能是将一个实序列分解成
与
之
和,并分别求出
与
。其中需要有判断语句,判断序列 x(n)是否是实序列并有相应
文字输出;
的求法可参考 mod(-n,N)函数。
)6cos()(nnx=),(Nxndft),(Nxndft−=−==−=1010)()2exp()()(NnNnnkNWnxnkNjnxkX1,,1,0−=Nk200,)9.0()(=nnxn)(nxe)(nxo)](Re[)]([kXnxDFTe=)](Im[)]([kXjnxDFTo=)()()(nxnxnxoe+=]))(()([21)(NenNxnxnx−+=]))(()([21)(NonNxnxnx−−=)]([nxDFTe)]([nxDFTo)]([nxDFTe)]([nxDFTo)])([()])([(nxDFTrealnxDFTreale=)])([()])([(nxDFTimagnxDFTimago=)(nxe)(nxo)(nxe)(nxoNnNx))((−
Xe=dft(xe,N); Xo=dft(xo,N);
X=dft(x1,N); ReX=real(X); ImX=imag(X);
subplot(323);stem(n,Xe);title('xe(n)µÄDFT');
subplot(324);stem(n,ReX);title('Xʵ²¿');
subplot(325);stem(n,imag(Xo));title('xoµÄDFT');
subplot(326);stem(n,ImX);title('XÐ鲿');
(3)给定模拟信号
,以
秒进行采样,
用 DFT 进行信号频谱分析:
①若要能区别该信号中的两个频率分量,试问取样信号的长度 N 至少为多少?
②DFT 的点数 N 分别等于 64、256、1024,画出信号的 N 点 DFT 的幅度谱和相位谱。
N1=64; n1=0:N1-1;
N2=256;n2=0:N2-1;
N3=1024;n3=0:N3-1;
t=0.01*n1;
x=2*sin(4*pi*t)+5*cos(8*pi*t);
X=dft(x,N1);figure(3)
subplot(321);
plot(n1*100/N1,abs(X));axis([0 100 0 150]);
title('x(t)--N=64');
subplot(322);plot(n1*100/N1,angle(X));
title('abs(X)--N=64');
t=0.01*n2;
x=2*sin(4*pi*t)+5*cos(8*pi*t);
X2=dft(x,N2);
subplot(323);plot(n2*100/N2,abs(X2));
title('x(t)--N=256');
subplot(324);plot(n2*100/N2,angle(X2));
title('abs(X)--N=256');
t=0.01*n3;
x=2*sin(4*pi*t)+5*cos(8*pi*t);
X3=dft(x,N3);
subplot(325);plot(n3*100/N3,abs(X3));
title('x(t)--N=1024');
subplot(326);plot(n3*100/N3,angle(X3));
title('abs(X)--N=1024');
DFT
function Xk= dft(xn,N)
n=0:N-1; k=0:N-1;
WN=exp(-j*(2*pi/N)*n'*k);
Xk=xn*WN;
end
(1)求序列 x=[5 2 7 4 1 1 3 9]的快速傅立叶变换,并绘出幅频特性曲线;
提示:采用 fft(x,N)函数,N 为 FFT 的点数,当序列长度小于 N 时,系统自动在序列末尾补
零;当序列长度大于 N 时,系统自动截断序列多余的部分。分别画出幅频特性曲线 abs()和
相频特性曲线 angle()。
x=[5 2 7 4 1 1 3 9];
N=length(x);
)8cos(5)4sin(2)(tttx+=)1:0(01.0−==Nnnt
X=fft(x,N);
figure(1);
subplot(211);
stem(0:N-1,abs(X));
subplot(212);
stem(0:N-1,angle(X));
(2)设一序列中含有两种频率成分,f =2 Hz,f =2.05Hz,采样频率取为 fs=10Hz,即:
x(n)=sin(2 f n/f
)+sin(2 f n/f
),根据公式
<
,要区分出这两种频率成分,N
必须满足多少?
①取 x(n)(0 n<128)时,计算 128 点 FFT,并绘出幅频特性曲线;
②取 x(n)(0 n<128)时,补 384 个 0,计算 512 点 FFT,并绘出幅频特性曲线;
③取 x(n)(0 n<512)时,计算 512 点 FFT,并绘出幅频特性曲线。
f1=2; f2=2.05; fs=10;
figure(2);
%1
N=128;n=0:N-1;
xn=sin(2*pi*f1*n/fs)+sin(2*pi*f2*n/fs);
X=fft(xn,N);
subplot(321);
plot(n*fs/N,abs(X));
subplot(322);
plot(n*fs/N,angle(X));
%2
N=512;n=0:127;
xn=sin(2*pi*f1*n/fs)+sin(2*pi*f2*n/fs);
xn(512)=0;
X=fft(xn,N);
subplot(323);
n=0:N-1;
plot(n*fs/N,abs(X));
subplot(324);
plot(n*fs/N,angle(X));
%3
N=512;n=0:N-1;
xn=sin(2*pi*f1*n/fs)+sin(2*pi*f2*n/fs);
X=fft(xn,N);
subplot(325);
plot(n*fs/N,abs(X));
subplot(326);
plot(n*fs/N,angle(X));
(3)计算序列 y(n)的自相关函数,其中:
x(n)=sin(2 n/8),y(n)=e(n)+x(n),式中 e(n)为一随机噪声,N=100。
提示:随机噪声 e(n)可通过 rand(1,N)函数构造,rand 函数产生[0,1]分布的随机数,均值为
0.5,(1,N)表示的是 1 行 N 列;本程序要求编写产生均值为 0,分布在[-0.5,0.5] 的随机数,
则 e= rand(1,N)-0.5;求 y(n)的自相关函数,可采用 ry=xcorr(yn,yn,'unbiased')函数实现。本
实验要求取
,画出 x(n),y(n)和 y(n)的自相关函数 ry 的波形。
n=0:1:99; N=100;
en=rand(1,N)-0.5;
xn=sin(2*pi*n/8);
yn=en+xn;
121s2sNfs221ff−990n
ry=xcorr(yn,yn,'unbiased');%unbiased-ÎÞÆ «¹À¼Æ
figure(3);
subplot(311);
plot(n,xn);
subplot(312);
plot(n,yn);
subplot(313);
plot(0:2*length(n)-2,ry);
(1)归一化模拟低通滤波器的设计
①巴特沃斯低通滤波器的设计:3dB 通带截止频率和阶数 N 可以完全描述一个巴特沃
斯归一化模拟低通滤波器。编程实现:滤波阶次分别取 N=2、5、10、20,在同一图中绘出
巴特沃斯归一化模拟低通原型滤波器的平方幅频响应曲线。
提示:采用[z0,p0,k0]=buttap(N):N 为巴特沃斯归一化模拟低通滤波器的阶数,返回值为滤
波器组的零点数 z0、极点数组 p0 和增益 k0。[b,a]=zp2tf(z0,p0,k0)该函数从系统的零极点及
增益得到滤波器系统函数的分析多项式系数向量 B 和分母多项式系数向量 A。w=0:2π,
H=freqs(b,a,w)函数求模拟系统的频率响应,用法类似于 freqz。画出平方幅频特性曲线采用
abs(H).^2。在同一图中
N=[2 5 10 20];
w=0:2*pi*100:2*pi*30000;
figure(1);
for i=1:4
[z,p,k]=buttap(N(i));
[b,a]=zp2tf(z,p,k);
[h,w]=freqs(b,a,length(w));
plot(w,abs(h).^2);axis([0 2 0 1]);
hold on;
end
②切比雪夫 I 型低通滤波器的设计:编程实现:滤波阶次分别取 N=2、4、6、8,在同
一图中绘出切比雪夫 I 型模拟低通原型滤波器的平方幅频响应曲线。
提示:采用[z0,p0,k0]=cheb1ap(N,Rp),N 为切比雪夫 I 型归一化模拟低通滤波器的阶数,Rp
为通带最大衰减。[B,A]=zp2tf(z0,p0,k0) ;w=0:2π,H=freqs(b,a,w)函数;其中 Rp=1dB。
N=[2 4 6 8];
w=0:2*pi*100:2*pi*30000;Rp=1;
figure(2);
for i=1:4
[z,p,k]=cheb1ap(N(i),Rp);
[b,a]=zp2tf(z,p,k);
[h,w]=freqs(b,a,length(w));
subplot(2,2,i);
plot(w,abs(h).^2);
end
(2)IIR 数字滤波器设计
IIR 数字滤波器的设计过程
①冲激响应不变法:编程实现:设计巴特沃斯低通滤波器,通带衰减为 Rp=1dB,通带
上限角频率 =0.2π,阻带下限角频率 =0.3π,阻带最小衰减 =15dB,画出设计后的数
实际数字滤波器指标归一化低通滤波器设计指标Ha(p)Ha(s)H(z)MATLAB或查表频率变换脉冲响应不变或双线性变换pssa