logo资料库

MATLAB课程设计 信号的取样与恢复.doc

第1页 / 共8页
第2页 / 共8页
第3页 / 共8页
第4页 / 共8页
第5页 / 共8页
第6页 / 共8页
第7页 / 共8页
第8页 / 共8页
资料共8页,全文预览结束
一、 课程设计目的 学会 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 实现》梁虹 梁洁 陈跃斌 等编著 《信号与系统实验》党宏社 编
分享到:
收藏