matelab实验信号.docx
《matelab实验信号.docx》由会员分享,可在线阅读,更多相关《matelab实验信号.docx(21页珍藏版)》请在冰豆网上搜索。
matelab实验信号
实验1离散时间信号的时域分析
一、实验目的
(1)了解MATLAB语言的主要特点及作用;
(2)熟悉MATLAB主界面,初步掌握MATLAB命令窗和编辑窗的操作方法;
(3)学习简单的数组赋值、数组运算、绘图的程序编写;
(4)了解常用时域离散信号及其特点;
(5)掌握MATLAB产生常用时域离散信号的方法。
二、知识点提示
本章节的主要知识点是利用MATLAB产生数字信号处理的几种常用典型序列、数字序列的基本运算;重点是单位脉冲、单位阶跃、正(余)弦信号的产生;难点是MATLAB关系运算符“==、>=”的使用。
二、实验内容
1.在MATLAB中利用逻辑关系式
来实现
序列,显示范围
。
(函数命名为impseq(n0,n1,n2))并利用该函数实现序列:
;
1.%函数文件
functiony=impseq(n0,n1,n2)
n=n1:
1:
n2;
y=[(n-n0)==0];
stem(n,y);
%脚本文件
y=2*impseq(3,-3,10)+impseq(6,-3,10);
x=-3:
1:
10;
stem(x,y)
2.在MATLAB中利用逻辑关系式
来实现
序列,显示范围
。
(函数命名为stepseq(n0,n1,n2))
并利用该函数实现序列:
%函数文件
functiony=stepseq(n0,n1,n2)
n=n1:
1:
n2;
y=[(n-n0)>=0];
stem(n,y);
%脚本文件
y=stepseq(-2,-5,20)+stepseq(2,-5,20);
x=-5:
1:
20;
stem(x,y)
3.在MATLAB中利用数组运算符“.^”来实现一个实指数序列。
如:
n=0:
1:
50;
x=0.3.^n
stem(n,x)
4.在MATLAB中用函数sin或cos产生正余弦序列,如:
n=0:
0.2:
20;
x=11*sin(0.3*pi*n+pi/5)+5*cos(0.3*pi*n)
stem(n,x)
5.已知
,试显示
在
区间的波形。
n=0:
1:
20;
x=3*cos(2*pi*n/10);
subplot(2,2,1)
stem(n,x)
n=0:
1:
20;
x2=3*cos(2*pi*(n-3)/10);
subplot(2,2,2)
stem(n,x)
n=0:
1:
20;
x3=3*cos(2*pi*(n+3)/10);
subplot(2,2,3)
stem(n,x)
另种做法:
%生成函数文件
functiony=chap1_5(n)
x=0:
20;
xx=x-n;
y=3*cos(2*pi/10.*xx);
stem(x,y)
%生成脚本文件
n=(0:
1:
20);n=(0:
1:
20);
x1=3*cos(2*pi/10*n);x2=3*cos(2*pi/10*(n-3));
stem(n,x1)stem(n,x2)
n=(0:
1:
20);
x3=3*cos(2*pi/10*(n+3));
stem(n,x3)
6.参加运算的两个序列维数不同,已知
,
,求
。
n1=-4:
6;
n01=-2;
x1=[(n1-n01)>=0];
n2=-5:
8;
n02=4;
x2=[(n2-n02)>=0];
n=min([n1,n2]):
max([n1,n2]);
N=length(n);
y1=zeros(1,N);
y2=zeros(1,N);
y1(find((n>=min(n1))&(n<=max(n1))))=x1;
y2(find((n>=min(n2))&(n<=max(n2))))=x2;
x=y1+y2;
stem(n,x);
四、思考题
1.1产生单位脉冲序列和单位阶跃序列各有几种方法?
如何使用?
.答:
产生单位脉冲序列函数:
(1)functiony=impseq(n0,,n1,n2)
n=n1:
n2;
y-[(n-n0)==0];
(2)直接利用单位脉冲函数chrac
产生单位阶跃序列函数:
(1)functiony=stepseq(n0,n1,n2)
n=n1:
n2;
y=[(n-n0)>=0];
(2);利用程序产生单位阶跃序列函数
n=n1:
n2;
y=[zeros91,n0-n1],ones(1,n2-n0+1)]
stem(n,y)
1.2进行序列的相乘运算时应注意什么问题?
进行序列的相乘运算时应该注意两个序列进行相乘运算时,必须是同一时刻的两个数值对应相乘,即同一横坐标点的函数值对应相乘。
实验2离散时间系统的时域分析
一、实验目的
(1)加深对时域信号抽样与恢复的基本原理的理解;
(2)掌握应用线性卷积求解离散时间系统响应的基本方法;
(3)掌握求解离散时间系统冲击响应和频率响应程序的编写方法,了解常用子函数。
二、实验内容
1.已知一个连续时间信号
,
,取最高有限带宽频率
。
分别显示原连续时间信号波形和
三种情况下抽样信号波形,并尝试用内插公式重建原信号。
f0=1;
t0=1/f0;
t=0:
0.01:
3*t0;
f=sin(2*pi*f0*t)+1/3*sin(6*pi*f0*t);
subplot(4,1,1);
plot(t,f);
fm=5*f0;
fori=1:
3;
fs=i*fm;
ts=1/fs;
n=0:
ts:
3*t0;
f1=sin(2*pi*f0*n)+1/3*sin(6*pi*f0*n);
subplot(4,1,i+1);
stem(n,f1,'filled');
end;
2.在MATLAB中利用内部函数conv来计算两个有限长序列的卷积。
给出两个序列,试求其卷积结果。
x=[5936-8];
h=[18752011149];
y=conv(x,h);
M=length(y)-1;
n=-4:
1:
M-4;
stem(n,y);
xlabel('n');ylabel('幅度');
3.在MATLAB中利用filter函数在给定输入和差分方程时求差分方程的解。
给出如下差分方程:
(1)计算并画出冲击响应
(2)由此
确定系统是否稳定。
N=61;
a=[1];
b=[1-0.90.5];
x=[1zeros(1,N-1)];
k=-10:
1:
50;
y=filter(a,b,x);
stem(k,y)
xlabel('n');ylabel('幅度')
由图像可以看出,该系统函数是有界的,所以该函数是稳定的
4.系统函数表达式如下,试分析系统的频率响应并画出图形。
(幅频、相频)
b=[1,0,1];
a=[1,-1.414,0.64];
[H,w]=freqz(b,a,1000,'whole');
subplot(2,2,1);
plot(w/pi,abs(H));
ylabel('|H|');
title('幅频特性');
subplot(2,2,2);
plot(w/pi,angle(H));
ylabel('|H|');
title('相频特性');
三、思考题
2.1奈奎斯特抽样定理的内容是什么?
2.2什么是内插公式?
在MATLAB中内插公式可以用什么函数来编写程序?
2.3离散线性时不变系统中的差分方程和系统函数有何联系?
公式中的系数在编写程序时须注意什么问题?
2.4MATLAB中提供的conv卷积子函数使用中须满足什么条件?
如果条件不满足应如何处理?
二.思考题
1.答:
奈奎斯特抽样定理:
若频带宽度有限的,要从抽样信号中无失真地恢复原信号,抽样频率应大于2倍信号最高频率。
当抽样频率小于2倍频谱最高频率时,信号的频谱有混叠;当抽样频率大于2倍频谱最高频率时,信号的频谱无混叠。
2.答:
内插公式:
该函数是interpft(x,n),x是包含等间隔取样的周期函数值,n是要求得到的点数。
3.答:
在离散线性时不变系统中,对差分方程进行z变换,然后进行整理,可得到系统函数。
若原式中存在着缺项,必须在相应的对置上补零。
4.答:
用matlab里的conv函数求卷积,只能求有限长序列的卷积。
调用conv函数计算序列卷积时,该函数将向量f1和f2以外的序列样值均视为零,因此,当序列f1(k)或是f2(k)为无限长序列时调用conv函数就可能出现误差。
如果碰到无限长序列时,我们必须将其截断才能求带入到conv函数中,此时,函数将把截断区域外的区间视为零,故conv计算出的卷积只有部分是真实的。
实验3DFS、DFT与FFT
一、实验目的
(1)了解DFS、DFT与DTFT的联系;
(2)加深对FFT基本理论的理解;
(3)掌握用MATLB语言进行傅里叶变换时常用的子函数;
二、实验内容
1.已知
,求
的DFT和IDFT。
要求画出序列傅里叶变换对应的
图形,并画出原信号与傅里叶逆变换
图形进行比较
1.xn=[01234567]
N=length(xn);
n=0:
N-1;
k=0:
N-1;
Xk=xn*exp(-j*2*pi/N).^(n'*k);
x=(Xk*exp(j*2*pi/N).^(n'*k))/N;
figure,subplot(2,2,1),stem(n,xn);
title('x(n)');
subplot(2,2,2),stem(n,abs(x));
title('IDFT|X(k)|');
subplot(2,2,3),stem(k,abs(Xk));
title('|X(k)|');
subplot(2,2,4),stem(k,angle(Xk));
title('arg|X(k)|');
axis([0,N,1.1*min(angle(Xk)),1.1*max(angle(Xk))])
2.已知周期序列的主值
,求
周期重复次数为4次时的DFS。
要求画出原主值和周期序列信号,并画出序列傅里叶变换对应的
图形。
2.xn=[01234567];
N=length(xn);
n=0:
4*N-1;
k=0:
4*N-1;
xn1=xn(mod(n,N)+1);
Xk=xn1*exp(-j*2*pi/N).^(n'*k);
figure,subplot(2,2,1),stem(xn);
title('原主值信号(n)');
subplot(2,2,2),stem(n,xn1);
title('周期序列信号');axis([0,4*N,min(xn1),1.1*max(xn1)])
subplot(2,2,3),stem(k,abs(Xk));
title('|X(k)|');axis([0,4*N,1.1*min(abs(Xk)),1.1*max(abs(Xk))])
subplot(2,2,4),stem(k,angle(Xk));
title('arg|X(k)|');axis([0,4*N,1.1*min(angle(Xk)),1.1*max(angle(Xk))])
3.已知
,画出由离散时间傅里叶变换求得的幅度谱
图形。
3.xn=[01234567];
N=length(xn);
n=0:
N-1;
w=linspace(-2*pi,2*pi);
X=xn*exp(-j*n'*w);
figure,subplot(3,1,1),stem(n,xn)
title('x(n)');
subplot(3,1,2),plot(w,abs(X));
axis([-2*pi,2*pi,1.1*min(abs(X)),1.1*max(abs(X))]);
title('幅度谱');
subplot(3,1,3),plot(w,angle(X));
axis([-2*pi,2*pi,1.1*min(angle(X)),1.1*max(angle(X))]);
title('相位谱');
4.已知系统响应为
,输入为
,求系统输出
。
(提示信息:
利用圆周卷积代替线性卷积)
4.n1=[0:
1:
19];
h=cos(0.5*n1)+sin(0.2*n1);
n2=[0:
1:
9];
x=exp(0.2*n2);
y=conv(x,h);
>>n=length(y)-1;
>>N=0:
1:
n;
>>stem(N,y)
三、实验报告
总结DFT、DTFT与DFS三者之间的关系,列写调试通过的实验程序及产生的曲线图形。
实验4数字滤波器的设计
一、实验目的
(1)加深对脉冲响应不变法、双线性变换法、窗函数法和频率采样法的了解;
(2)掌握MATLAB进行滤波器设计的子函数。
二、实验内容
1.利用脉冲响应不变法,用巴特沃斯滤波器原型设计一个低通滤波器,满足:
,采样频率为10000Hz。
Fs=10000;
wp=0.2*pi;
ws=0.3*pi;
wp=tan(wp/2);
ws=tan(ws/2);
[N,wn]=buttord(wp,ws,0.5,40,'s');
[z,p,k]=buttap(N);
[b,a]=zp2tf(z,p,k);
[B,A]=lp2lp(b,a,wp);
[bz,az]=bilinear(B,A,.5);
[h,w]=freqz(bz,az,256,Fs);
figure
plot(w,abs(h))
gridon
2.利用双线性变换法设计巴特沃斯高通数字滤波器,满足:
通带边界频率为400Hz,阻带边界频率为200Hz,通带衰减小于3dB,阻带衰减大于15dB,采样频率为1000Hz。
(提示信息:
利用函数buttord,butter)
fp=400;
fs=200;
Rp=3;
Rs=15;
wp=fp*2*pi;
ws=fs*2*pi;
FS=1000;
T=1/FS;
Wp=wp/(FS);
Ws=ws/(FS);
wp2=2*tan(Wp/2)/T;
ws2=2*tan(Ws/2)/T;
[N,Wn]=buttord(wp2,ws2,Rp,Rs,'s');
[z,p,k]=buttap(N);
[Bap,Aap]=zp2tf(z,p,k);
[Bbs,Abs]=lp2hp(Bap,Aap,Wn);
[Bbz,Abz]=bilinear(Bbs,Abs,FS);
[hw,w]=freqz(Bbz,Abz,512);
figure()
plot(w/pi,20*log10(abs(hw)));
grid
axis([0,1,-200,10]);
title('ButterworthTypeHighpassDigitalFileter')
xlabel('w/pi')
ylabel('幅度(dB)')
3.用窗函数法设计一个线性相位FIR低通滤波器,满足:
通带边界频率
,阻带边界频率
,阻带衰减不小于50dB,通带波纹不大于1dB。
wp=0.6*pi;
ws=0.7*pi;
wdelta=ws-wp;
N=ceil(8*pi/wdelta)
ifrem(N,2)==0
N=N+1;
end
Nw=N;
wc=(wp+ws)/2;
n=0:
N-1;
alpha=(N-1)/2;
m=n-alpha+0.00001;
hd=sin(wc*m)./(pi*m);
win=(hanning(Nw))';
h=hd.*win;
b=h;
freqz(b,1,512)
N=
80
4.用频率采样法设计一高通数字滤波器,满足:
阻带边界频率
,通带边界频率
,设过渡带中的频率样本值为
。
M=32;%所需频率采样点个数
Wp=0.8*pi;%通带截止频率
m=0:
M/2;%阻频带上的采样点
Wm=2*pi*m./(M+1);%阻带截止频率
mtr=ceil(Wp*(M+1)/(2*pi));%向正方向舍入ceil(3.5)=4;ceil(-3.2)=-3;
Ad=[Wm>=Wp];
Ad(mtr)=0.28;
Hd=Ad.*exp(-j*0.5*M*Wm);%构造频域采样向量H(k)
Hd=[Hdconj(fliplr(Hd(2:
M/2+1)))];
%fliplr函数实现矩阵的左右翻转conj是求复数的共轭
h=real(ifft(Hd));%h(n)=IDFT[H(k)]
w=linspace(0,pi,1000);%用于产生0,pi之间的1000点行矢量
H=freqz(h,[1],w);%滤波器的幅频特性图
figure
(1)
plot(w/pi,20*log10(abs(H)));%参数分别是归一化频率与幅值
xlabel('w/pi');
ylabel('幅度(dB)');
axis([01-500]);