【数字信号处理】实验二 Z 变换和傅立叶变换

一、实验目的

掌握 Z 变换和反变换和傅立叶变换在 MATLAB 中的处理过程,应用 MATLAB 信号处理工具箱提供的求连续和离散系统频率响应的函数。

二、实验内容

1. 有限长序列的 Z 变换和逆 Z 变换

x1=[1,2,3]; ns1=-1;
nf1=ns1+length(x1)-1;
x2=[2,4,3,5];ns2=-2;
nf2=ns1+length(x1)-1;
x=conv(x1,x2)
n=(ns1+ns2):(nf1+nf2)

2.求 Z 多项式分式的逆变换

clear,close all
x=[2,4,3,5];nsx=-2;
nfx=nsx+length(x)-1;
Bw=-3;nsbw=-1;
Aw=[2,-2.2,.5];nsaw=0;
B=conv(-3,x);
A=Aw;
nsy=nsaw-(nsbw-nsx)
[r,p,k]=residuez(B,A)
nf=input('终点时间 nf= ');
n=min(nsx,nsy):nf;
yi=(r(1)*p(1).^(n-nsy)+r(2)*p(2).^(n-nsy)).*stepseq(nsy,n(1),nf);
yd =k(1) *impseq(nsy,n(1),nf)+k(2) *impseq(-1-nsy,n(1),nf);
y=yi+yd;
xe=zeros(1,length(n));
xe(find((n>=nsx)&(n<=nfx)==1))=x;
subplot(2,1,1),stem(n,xe,'.'),line([min(n(1),0),nf],[0,0])
subplot(2,1,2),stem(n,y,'.'),line([min(n(1),0),nf],[0,0])

3. 离散时间傅立叶变换

disp('八点时间信号的离散时间傅立叶变换')
x0=sin(2*pi*[1:8]/8)*5;
dt=2*pi/8;
w=linspace(-8,2*pi,1000)/dt;
X0=dtft(x0,w)*dt;
subplot(3,1,1),plot(w,abs(X0)),axis([-
8,max(w),0,max(abs(X0))]),grid,shg
disp('重复 N 次的八点时间信号的离散时间傅立叶变换')
N=input('N= ');
x1=reshape(x0'*ones(1,N),1,N*length(x0));
X1=dtft(x1,w)*dt;
subplot(3,1,2),plot(w,abs(X1)),axis([-
8,max(w),0,max(abs(X1))]),grid,shg
disp('重复无穷次的八点信号的离散傅立叶变换')
pause,X2=fft(x0*dt);
w1=2*pi*[0:length(x0)-1]/length(x0);
subplot(3,1,3),stem([-w1,w1],[abs(X2),abs(X2)]),grid,shg
axis([-8,max(w),0,max(abs(X2))]),grid,shg

4. 由离散序列恢复模拟信号

clear;close all;
A=444.128;a=50*sqrt(2)*pi;b=a;
for k=1:2
 if k==1 Fs=400;
 elseif k==2 Fs=1000;end
 T=1/Fs;dt=T/3;
 Tp=0.03;
 t=0:dt:Tp;
 n=0:Tp/T;
 TMN=ones(length(n),1)*t-n'*T*ones(1,length(t));
 x=A*exp(-a*n*T).*sin(b*n*T);
 xa=x*sinc(Fs*TMN);
 subplot(2,1,k);plot(t,xa);hold on
 axis([0,max(t),min(xa)-10,max(xa)+10]);
 st1=sprintf('由 Fs=%d',Fs);
 st2='Hz 的采样序列 x(n)重构的信号';
 st=[st1,st2];title(st)
 ylabel('xa(t)');
 xo=A*exp(-a*t).*sin(b*t);
 stem(t,xo,'.');line([0,max(t)],[0,0])
 emax2=max(abs(xa-xo))
end

5. 梳状滤波器零极点和幅频特性

clear;close all
b=[1,0,0,0,0,0,0,0,-1];
a0=1;
a1=[1,0,0,0,0,0,0,0,-(0.8)^8];
a2=[1,0,0,0,0,0,0,0,-(0.9)^8];
a3=[1,0,0,0,0,0,0,0,-(0.98)^8];
[H,w]=freqz(b,a0);
[H1,w1]=freqz(b,a1);
[H2,w2]=freqz(b,a2);
[H3,w3]=freqz(b,a3);
subplot(4,2,1),zplane(b,a0),grid
subplot(4,2,2),zplane(b,a1),grid
subplot(4,2,3),plot(w/pi,abs(H)),grid
subplot(4,2,4),plot(w1/pi,abs(H1)),grid
subplot(4,2,5),zplane(b,a2),grid
subplot(4,2,6),zplane(b,a3),grid
subplot(4,2,7),plot(w2/pi,abs(H2)),grid
subplot(4,2,8),plot(w3/pi,abs(H3)),grid

6. 低通滤波效果及傅立叶变换时域卷积定理验证

clear;close all
n=0:255;N=4096;
x=cos(0.04*pi*n)+cos(0.08*pi*n)+cos(0.4*pi*n);
w=randn(size(x));
x=x+0.3*w;
b=[1,2,1];
B=0.0003738*conv(conv(b,b),b);
a1=[1,-1.2686,0.7051];
a2=[1,-1.0106,0.3583];
a3=[1,-0.9044,0.2155];
A=conv(conv(a1,a2),a3);
y=filter(B,A,x);
X=fft(x,N);
Y=fft(y,N);
[H,f]=freqz(B,A,N,'whole');
Ym=H'.*X;
k=0:N-1;f=2*k/N;
subplot(3,2,1);stem(x,'.');
xlabel('n'),ylabel('x(n)')
subplot(3,2,2);plot(f,abs(X));
xlabel('w/pi'),ylabel('|FT[y(n)]|')
subplot(3,2,3);stem(y,'.');
xlabel('n'),ylabel('y(n)')
axis([0,60,-1,1])
subplot(3,2,4);plot(f,abs(Y));
xlabel('w/pi'),ylabel('|FT[y(n)]|')
subplot(3,2,5);plot(f/pi,abs(H));
xlabel('w/pi'),ylabel('H 幅度')
subplot(3,2,6);plot(f/pi,abs(Ym));
xlabel('w/pi'),ylabel('Ym 幅度')

三、实验中遇到的问题及解决过程

  1. 没有注意到中英文输入法的标点符号是有区别的,导致最后程序执行的时候出现了好几个错误
  2. 输入程序的时候,对于中括号和小括号的配对没有注意,导致执行时出现了错误

四、实验提问

  1. = =是什么意思?等于的意思。
  2. plot是什么意思?绘图的意思。

五、实验总结

通过本次实验,使我进一步学习了数字信号处理实验的一些基本操作。

附:程序清单

此处为语雀加密文本卡片,点击链接查看:https://www.yuque.com/yuqueyonghuaez4ch/bqm5qg/mgm5c6#i4WcU

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值