基于MATLAB的信号采样与离散系统的时域分析报告.docx
《基于MATLAB的信号采样与离散系统的时域分析报告.docx》由会员分享,可在线阅读,更多相关《基于MATLAB的信号采样与离散系统的时域分析报告.docx(13页珍藏版)》请在冰豆网上搜索。
基于MATLAB的信号采样与离散系统的时域分析报告
基于matlab的信号采样与离散系统的时域分析
原理
1、信号采样与重建的原理
取样定理:
论述了在一定条件下,一个连续信号完全可以用离散样本值表示。
这些样本值包含了该连续信号的全部信息,利用这些样本值可以恢复原信号。
可以说,取样定理在连续信号与离散信号之间架起了一座桥梁。
为其互为转换提供了理论依据。
所谓“取样”就是利用取样脉冲序列s(t)从连续信号f(t)中“抽取”一系列离散样本值的过程。
这样得到的离散信号称为取样信号fs(t)。
画fs(t)的频谱时,设定ωS≥2ωm,这时其频谱不发生混叠,因此能设法(如利用低通滤波器)从Fs(j)中取出F(j),即从fs(t)中恢复原信号f(t);否则将发生混叠。
设有限时宽余弦信号f(t)=cos(2Πt/3)(0≤t≤40),用它近似理想余弦信号,用MATLAB编程求该信号和其采样信号的频谱,对比观察过采样和欠采样状态。
采样周期通过键盘输入。
程序:
%时域采样定理
display('奈奎斯特周期0.25秒,Ts<0.25,过采样,Ts>0.2.5,欠采样');
display('Pleaseinputthevalueofsampleperiod');
Ts=input('Ts=');
%绘制有限长余弦信号y=cos(2/3*pi*t)
t=0:
0.01:
40;
y=cos(2/3*pi*t);
subplot(221);
plot(t,y);
axis([06-1.11.1]);
xlabel('t单位:
s','Fontsize',8);
title('f(t)');
line([06],[00],'color',[000]);
%数值求解余弦信号的频谱
N=300;
W=2*pi*5;
k=-N:
N;
w=k*W/N;
Y=0.01*y*exp(-j*t'*w);%求f(t)的傅里叶变换F1(ω)
Y=abs(Y);
subplot(222);
plot(w/pi,Y)
axis([-2,2,0,pi*7+0.2]);
title('F(j\omega)');
xlabel('\omega单位:
pi');
%采样后的余弦信号
subplot(223);
plot(t,y,'b:
');%绘制包络
holdon
t2=0:
Ts:
40;
y2=cos(2/3*pi*t2);
stem(t2,y2);
axis([06-1.11.1]);
xlabel('t单位:
s','Fontsize',8);
title('fs(t)');
holdoff
%采样后余弦信号的频谱
Y2=Ts*y2*exp(-j*t2'*w);
Y2=abs(Y2);
subplot(224);
plot(w/pi,Y,'b')%蓝色绘制原信号频谱
xlabel('\omega单位:
pi');
title('Fs(j\omega)');
holdon
plot(w/pi,Y2,'r');%红色绘制采样信号频谱
axis([-2,2,0,pi*10]);
holdoff
%end
2.离散时间系统
(1)线性时不变(LTI)离散时间系统用常系数线性差分方程进行描述:
其中,f[k]和y[k]分别表示系统的输入和输出,N=max(n,m)是差分方程的阶数。
系统的零状态响应就是在系统初始状态为零条件下微分方程的解。
在零初始状态下,MATLAB控制系统工具箱提供了一个filter函数,可以计算差分方程描述的系统的响应,其调用形式为:
y=filter(b,a,f)
其中,
、
分别是系统差分方程左、右端的系数向量,f表示输入向量,y表示输出向量。
注意,输出序列的长度与输入序列的长度相同。
(2)离散系统的冲激响应、阶跃响应分别是输入信号为
和
所对应的零状态响应。
MATLAB控制系统工具箱专门提供了两个函数求解离散系统的冲激响应和阶跃响应。
冲激响应:
h=impz(b,a,K),其中的h表示系统的单位序列响应,
、
分别是系统差分方程左、右端的系数向量,K表示输出序列的时间范围。
阶跃响应:
g=stepz(b,a,N),其中的g表示系统的单位阶跃序列响应,b和a的含义与上相同,N表示输出序列的长度。
(3)卷积是信号与系统中一个最基本、也是最重要的概念之一。
在时域中,对于LTI离散时间系统,其零状态响应等于输入信号与系统冲激响应的卷积;而利用卷积定理,这种关系又对应频域中的乘积。
MATLAB信号处理工具箱提供了一个计算两个离散序列卷积和的函数conv。
设向量a、b代表待卷积的两个序列,则c=conv(a,b)就是a与b卷积后得到的新序列。
我们知道两个序列卷积以后,一般而言所得新序列的时间范围、序列长度都会发生变化。
例如设f1(n)长度为5,-3≤n≤1;f2(n)长度为7,2≤n≤8;则卷积后得到的新序列长度为5+7-1=11,且有在-1≤n≤9时,新序列的值不为零。
三
1.运行例题参考程序,对比观察过采样(Ts=0.05s)和欠采样状态(Ts=3.0s)。
display('周期1.5秒,Ts<1.5,过采样,Ts>1.5,欠采样');
扩展:
wm=2/3*pi
wc=wm
ws=60*wm
ws2=1*wm
ts=2*pi/ws
ts2=2*pi/ws2
n=-300:
300
nts=n*ts
nts2=n*ts2
f=cos(2/3*pi*nts)
f2=cos(2/3*pi*nts2)
dt=0.005
t=0:
dt:
6
y=cos(2/3*pi*t)
fa=f*ts*wc/pi*sinc((wc/pi)*(ones(length(nts),1)*t-nts'*ones(1,length(t))));
error=abs(fa-cos(2/3*pi*t))
fa2=f2*ts*wc/pi*sinc((wc/pi)*(ones(length(nts),1)*t-nts'*ones(1,length(t))));
error2=abs(fa2-cos(2/3*pi*t))
t1=0:
0.05:
6
f1=cos(2/3*pi*t1)
subplot(221)
stem(t1,f1)
xlabel('kts')
ylabel('f(kts)')
title('cos(2/3*pi*t)的过采样信号')
grid
subplot(222)
plot(t,error)
xlabel('t')
ylabel('error(t)')
title('过采样信号重建与源信号的误差error(t)')
grid
subplot(223)
plot(t,y,'b:
');
holdon
t3=0:
3:
6
f3=cos(2/3*pi*t3)
stem(t3,f3)
xlabel('kts')
ylabel('f(kts)')
axis([06-1.11.1]);
title('cos(2/3*pi*t)的欠采样信号')
grid
subplot(224)
plot(t,error2)
xlabel('t')
ylabel('error2(t)')
title('欠采样信号重建与源信号的误差error(t)')
grid
2.设有限时宽周期信号f(t)=5+cos(2Πt)+cos(4Πt)(0≤t≤40),用MATLAB编程求该信号和其采样信号的频谱,对比观察过采样和欠采样状态。
display('Pleaseinputthevalueofsampleperiod');
Ts=input('Ts=');
t=0:
0.01:
40;
y=5+cos(2*pi*t)+cos(4*pi*t);
subplot(221);
plot(t,y);
axis([063.17.1]);
xlabel('t单位:
s','Fontsize',8);
title('f(t)');
line([06],[00],'color',[000]);
%数值求解余弦信号的频谱
N=300;
W=2*pi*5;
k=-N:
N;
w=k*W/N;
Y=0.01*y*exp(-j*t'*w);%求f(t)的傅里叶变F1(ω)
Y=abs(Y);
subplot(222);
plot(w/pi,Y)
axis([-2,2,0,pi*10+0.2]);
title('F(j\omega)');
xlabel('\omega单位:
pi');
%采样后的余弦信号
subplot(223);
plot(t,y,'b:
');%绘制包络
holdon
t2=0:
Ts:
40;
y2=5+cos(2*pi*t2)+cos(4*pi*t2);
stem(t2,y2);
axis([063.17.1]);
xlabel('t单位:
s','Fontsize',8);
title('fs(t)');
holdoff
%采样后余弦信号的频谱
Y2=Ts*y2*exp(-j*t2'*w);
Y2=abs(Y2);
subplot(224);
plot(w/pi,Y,'b')%蓝色绘制原信号频谱
xlabel('\omega单位:
pi');
title('Fs(j\omega)');
holdon
plot(w/pi,Y2,'r');%红色绘制采样信号频谱
axis([-2,2,0,pi*10]);
holdoff
%end
TS=0.05
TS=1
已知系统的差分方程为
,输入为
。
计算系统的零状态响应
、单位序列响应
和阶跃响应
,
t=0:
10
a=[1-0.70.1]
b=[7-20]
f=0.4.^t
subplot(131)
y=filter(b,a,f)
stem(t,y)
title('零状态响应y[k]')
xlabel('k')
ylabel('y[k]')
gridon
subplot(132)
h=impz(b,a,t)
stem(t,h)
gridon
title('单位序列响应h[k]')
xlabel('k')
ylabel('h[k]')
subplot(133)
g=stepz(b,a,11)
stem(t,g)
gridon
xlabel('k')
ylabel('g(k)')
title('阶跃响应g[k]')
3.已知系统的单位序列响应为
=
,输入信号为
。
利用MATLAB计算:
a.
b.
t=0:
10
h=u(t)-u(t-5)
f=(0.5.^t).*(u(t)-u(t-5))
f2=(0.5.^(t-2)).*(u(t-2)-u(t-7))
c=conv(h,f)
c2=conv(h,f2)
subplot(221)
stem(t,h)
gridon
xlabel('k')
ylabel('h[k]')
title('h[k]')
subplot(222)
stem(t,f)
gridon
xlabel('k')
ylabel('f[k]')
title('f[k]')
subplot(223)
stem(c)
gridon
xlabel('k')
ylabel('y1[k]')
title('y1[k]=h[k]*f[k]')
subplot(224)
stem(c2)
gridon
xlabel('k')
ylabel('y2[k]')
title('y2[k]=h[k]*f[k-2]')