一、 课程设计目的
学会 MATLAB 的使用,掌握 MATLAB 的程序设计方法。
学会用 MATLAB 对信号进行分析和处理。
掌握信号的取样和恢复的仿真。
二、课程设计原理
f
)(t
连续信号
抽样信号
fs
)(t
( jH
)
理想低通滤波器
f
)(0 t
恢复信号
取样脉冲信号
)(
ts
ST
)(
t
三 编程
*******************信号的采样*******************
function fz=caiyang(fy,fs)
%第一个输入变量是原信号函数,信号函数 fy 以字符串的格式输入
%第二个输入变量是采样频率
fs0=10000;
t=[-tp:1/fs0:tp];
k1=0:999;
m1=length(k1);
f=[fs0*k2/m2,fs0*k1/m1];
w=[-2*pi*k2/m2,2*pi*k1/m1];
fx1=eval(fy);
FX1=fx1*exp(-j*[1:length(fx1)]'*w);
%设置原信号的频率数组
m2=length(k2);
k2=-999:-1;
tp=0.1;
%求原信号的离散时间傅里叶变换
%采样周期
figure(1)
% 画原信号波形
subplot(2,1,1),plot(t,fx1,’r’)
title('原信号'), xlabel('时间 t (s)')
axis([min(t),max(t),min(fx1),max(fx1)])
line([min(t),max(t)],[0,0])
% 画原信号幅度频谱
subplot(2,1,2),plot(f,abs(FX1),’r’)
title('原信号幅度频谱') , xlabel('频率 f (Hz)')
axis([-fs,fs,0,max(abs(FX1))+5])
% 对信号进行采样
Ts=1/fs;
t1=-tp:Ts:tp;
f1=[fs*k2/m2,fs*k1/m1];
t=t1;
fz=eval(fy); %获取采样序列
FZ=fz*exp(-j*[1:length(fz)]'*w);
figure(2)
% 画采样序列波形
subplot(2,1,1),stem(t,fz,'.'),
title('取样信号') , xlabel('时间 t (s)')
line([min(t),max(t)],[0,0])
% 画采样信号幅度频谱
subplot(2,1,2),plot(f1,abs(FZ),’m’)
title('取样信号幅度频谱') , xlabel('频率 f (Hz)')
%采样时间序列
%变量替换
%设置采样信号的频率数组
%采样信号的离散时间傅里叶变换
*******************信号的恢复*******************
tp=0.1;
dt=T/10;
function fh=huifu(fz,fs)
%第一个输入变量是采样序列
%第二个输入变量是得到采样序列所用的采样频率
T=1/fs;
t=-tp:dt:tp; n=-tp/T:tp/T;
TMN=ones(length(n),1)*t-n'*T*ones(1,length(t));
fh=fz*sinc(fs*TMN);
k1=0:999;
m1=length(k1);
w=[-2*pi*k2/m2,2*pi*k1/m1];
FH=fh*exp(-j*[1:length(fh)]'*w); % 恢复后的信号的离散时间傅里叶变换
figure(3)
% 画恢复后的信号的波形
subplot(2,1,1),plot(t,fh,’g’),
% 由采样信号恢复原信号
m2=length(k2);
k2=-999:-1;
st1=sprintf('由取样频率 fs=%d',fs);
st2='恢复后的信号';
%图形的标注
title(st) , xlabel('时间 t (s)')
st=[st1,st2];
axis([min(t),max(t),min(fh),max(fh)])
line([min(t),max(t)],[0,0])
% 画重构信号的幅度频谱
f=[10*fs*k2/m2,10*fs*k1/m1];
subplot(2,1,2),plot(f,abs(FH),’g’)
title('恢复后信号的频谱') , xlabel('频率 f (Hz)')
axis([-fs,fs,0,max(abs(FH))+2])
%设置频率数组
**********对信号 f1(t)的取样与恢复**************
输入程序:f1='sin(100*pi*t)';
fs1=caiyang(f1,200);
f2=huifu(fs1,200);
运行结果:
****************对信号 f(t)的取样与恢复********************
wm=1;%信号带宽
wc=1.1*wm;%滤波器截止频率
Ts=0.7*pi/wm;%采样间隔
ws=2*pi/Ts;%采样角频率
n=-100:100;%时域采样点数
nTs=n*Ts;%时域采样点
f=sinc(nTs/pi);
Dt=0.005;t=-15:Dt:15;
fa=f*Ts*wc/pi*sinc((wc/pi)*(ones(length(nTs),1)*t-nTs'*ones(1,length(t))));% 信
号重构
error=abs(fa-sinc(t/pi));
t1=-15:Dt:15;
f1=sinc(t1/pi);
subplot(311);
stem(t1,f1);
xlabel('kTs');
ylabel('f(kTs)');
title('sa(t)的临界采样信号');
subplot(312);
plot(t,fa)
xlabel('t');
ylabel('fa(t)');
title('由 sa(t)得临界采样信号重构 sa(t)');
grid
subplot(313);
plot(t,error)
xlabel('t');
ylabel('error(t)');
title('Ts=0.7*pi error(t)1');
运行结果:
wm=1;%信号带宽
wc=wm;%滤波器截止频率
Ts=1.5*pi/wm;%采样间隔
ws=2*pi/Ts;%采样角频率
n=-100:100;%时域采样点数
nTs=n*Ts;%时域采样点
f=sinc(nTs/pi);
Dt=0.005;t=-15:Dt:15;
fa=f*Ts*wc/pi*sinc((wc/pi)*(ones(length(nTs),1)*t-nTs'*ones(1,length(t))));% 信
号重构
error=abs(fa-sinc(t/pi));
t1=-15:Dt:15;
f1=sinc(t1/pi);
subplot(311);
stem(t1,f1);
xlabel('kTs');
ylabel('f(kTs)');
title('sa(t)的临界采样信号');
subplot(312);
plot(t,fa)
xlabel('t');
ylabel('fa(t)');
title('由 sa(t)得临界采样信号重构 sa(t)');
grid
subplot(313);
plot(t,error)
xlabel('t');
ylabel('error(t)');
title('Ts=1.5*pi error(t)2');
运行结果:
结论:由上两图可以看出,取样间隔为 Ts=0.7π时重构信号与原信号的绝对误差比 Ts=1.5
π时的小,即采样频率 fs 大于原信号频带宽度 fm 的范围内逐渐增大时,由采样信号恢复的
原信号就越接近于原信号。
四 心得体会
通过这次的设计,充分体验了 MATLAB 编程的实际操作的复杂过程及反复修正
的艰难,并且感受到了 MATLAB 的编程氛围。主要是初步掌握一些 MATLAB 在信号
处理中的应用,及怎样用 MATLAB 去解决信号处理方面的问题。
五 主要参考资料
《计算机仿真及应用》 陈怀琛 吴大正 高西全 编著
《信号与线性系统分析》吴大正 主编
《信号与系统分析及 MATLAB 实现》梁虹 梁洁 陈跃斌 等编著
《信号与系统实验》党宏社 编