logo资料库

调制和解调实验报告.doc

第1页 / 共13页
第2页 / 共13页
第3页 / 共13页
第4页 / 共13页
第5页 / 共13页
第6页 / 共13页
第7页 / 共13页
第8页 / 共13页
资料共13页,剩余部分请下载后查看
试验三:信号幅度的调制与解调 cos( 0t ,即得到已调信号: ) )( ty  f )( t cos( 0t  ) , 一、设计思路: 设带限信号 )(t f 的频谱为 ( jF ) ,现将 )(t f 乘以载波信号 如下图。 实现信号解调的原理图如下图。 若要从多个已调信号中解调出其中的一个信号,只需将已调信号再乘以该已调信号的载波信号,并进行低通率波即可 得到原信号 )(t f 。下图是多路频分复用系统的示意图。 二、方案设计 信号设计: f 1 )( t  sin(  0 t )  sin( 3  0 t 3/)  sin( 5  0 t 5/) 。 f 2 )( t  sin(  0 t )  sin( 3  0 t 3/)  cos( 2  0 t /) t ,
f 3 )( t  sin(   ) t 0 cos( 3  0 t 3/) 。 载波信号频率应远大于 05 。 方案一:使用 GUI 图形届面显示信号的时域及频域波形。 低通滤波器:可以使用理想数字低通滤波器。 方案二:使用 Simulink 界面实现信号的处理,使用示波器观测信号的时域波形;使用频谱仪显示信号的频谱图。 模拟低通滤波器:可选用巴特沃斯低通滤波器。 综合两种方案的特点,最终选择方案一. 三、算法设计 1.GUI 界面设计 2.GUI 程序设计 信号时域波形与频谱显示控制程序部分: function pushbutton1_Callback(hObject, eventdata, handles) st1=str2double(get(handles.edit2,'string')); st2=str2double(get(handles.edit1,'string')); t = eval(get(handles.edit3,'String')); m1=get(handles.radiobutton1,'value'); m2=get(handles.radiobutton2,'value'); m3=get(handles.radiobutton3,'value'); persistent c if isempty(c)
c=0 end c=c+1; if(m1==1) if(st2<=(5*st1)) errordlg('输入数值违规,输入 w0 值应大于 5 倍的信号频率 ,请重新输入!') else f=sin(st1.*t)+sin(3*st1.*t)/3+sin(5*st1.*t)/5; g=cos(st2.*t); w1=st1 w2=3*st1 w3=5*st1 h=fft(f) Fp=abs(h); Xp=angle(h) if(mod(c,2)~=0) % Create frequency plot axes(handles.shiyu) plot(t,f,'r'); set(handles.shiyu,'XMinorTick','on') grid on; % Create pinyu plot axes(handles.pinyu) plot(t,Fp,'b'); set(handles.pinyu,'XMinorTick','on') xlabel('幅频特性') grid o str=sprintf('f1=sin(%d*t)+sin(%d*t)/%d+sin(%d*t)/%d',w1,w2,w2,w3,w3); set(handles.text3,'string',str); str=sprintf('g=cos(%d*t)',st2); set(handles.text4,'string',str); end if(mod(c,2)==0) axes(handles.pinyu) plot(t,Xp,'b'); set(handles.pinyu,'XMinorTick','on')
xlabel('相频特性') grid on axes(handles.shiyu) plot(t,f,'r'); set(handles.shiyu,'XMinorTick','on') grid on; str=sprintf('f1=sin(%d*t)+sin(%d*t)/%d',w1,w2,w2); set(handles.text3,'string',str); str=sprintf('g=cos(%d*t)',st2); set(handles.text4,'string',str); end end end if(m2==1) if(st2<=(5*st1)) errordlg('输入数值违规,输入 w0 值应大于 5 倍的信号频率 ,请重新输入!') else f=sin(st1.*t)+sin(5*st1.*t)/5; g=cos(st2.*t); w1=st1 w2=3*st h=fft(f) Fp=abs(h); Xp=angle(h) if(mod(c,2)~=0) % Create frequency plot axes(handles.shiyu) plot(t,f,'r'); set(handles.shiyu,'XMinorTick','on') grid on; % Create pinyu plot axes(handles.pinyu) plot(t,Fp,'b'); set(handles.pinyu,'XMinorTick','on') xlabel('幅频特性') grid on
str=sprintf('f2=sin(%d*t)+sin(%d*t)/%d',w1,w2,w2); set(handles.text3,'string',str); str=sprintf('g=cos(%d*t)',st2); set(handles.text4,'string',str); end if(mod(c,2)==0) axes(handles.pinyu) plot(t,Xp,'b'); set(handles.pinyu,'XMinorTick','on') xlabel('相频特性') grid on axes(handles.shiyu) plot(t,f,'r'); set(handles.shiyu,'XMinorTick','on') grid on; str=sprintf('f2=sin(%d*t)+sin(%d*t)/%d',w1,w2,w2); set(handles.text3,'string',str); str=sprintf('g=cos(%d*t)',st2); set(handles.text4,'string',str); end end end if(m3==1) if(st2<=(5*st1)) errordlg('输入数值违规,输入 w0 值应大于 5 倍的信号频率 ,请重新输入!') else f=sin(st1.*t)+sin(3*st1.*t)/3; g=cos(st2.*t); w1=st1 w2=3*st1 h=fft(f) Fp=abs(h); Xp=angle(h) if(mod(c,2)~=0) % Create frequency plot
axes(handles.shiyu) plot(t,f,'r'); set(handles.shiyu,'XMinorTick','on') grid on; % Create pinyu plot axes(handles.pinyu) plot(t,Fp,'b'); set(handles.pinyu,'XMinorTick','on') xlabel('幅频特性') grid on str=sprintf('f3=sin(%d*t)+sin(%d*t)/%d',w1,w2,w2); set(handles.text3,'string',str); str=sprintf('g=cos(%d*t)',st2); set(handles.text4,'string',str); end if(mod(c,2)==0) axes(handles.pinyu) plot(t,Xp,'b'); set(handles.pinyu,'XMinorTick','on') xlabel('相频特性') grid on axes(handles.shiyu) plot(t,f,'r'); set(handles.shiyu,'XMinorTick','on') grid on; str=sprintf('f3=sin(%d*t)+sin(%d*t)/%d',w1,w2,w2); set(handles.text3,'string',str); str=sprintf('g=cos(%d*t)',st2); set(handles.text4,'string',str); end end end 信号调制波形显示程序: function pushbutton2_Callback(hObject, eventdata, handles) st1=str2double(get(handles.edit2,'string'));
st2=str2double(get(handles.edit1,'string')) t = eval(get(handles.edit3,'String')); m1=get(handles.radiobutton1,'value'); m2=get(handles.radiobutton2,'value'); m3=get(handles.radiobutton3,'value'); if(m1==1) if(st2<=(5*st1)) errordlg('输入数值违规,输入w0值应大于5倍的信号频率 ,请重新输入!') else f=sin(st1.*t)+sin(3*st1.*t)/3+sin(5*st1.*t)/5; g=cos(st2.*t); ft=f.*g w1=st1 w2=3*st1 w3=5*st axes(handles.tiaozhi) plot(t,ft,'r'); set(handles.tiaozhi,'XMinorTick','on') xlabel('调制波形') grid on axes(handles.shiyu) plot(t,f,'b'); set(handles.shiyu,'XMinorTick','on') grid on; str=sprintf('f1=sin(%d*t)+sin(%d*t)/%d+sin(%d*t)/%d',w1,w2,w2,w3,w3); set(handles.text3,'string',str); str=sprintf('g=cos(%d*t)',st2); set(handles.text4,'string',str); end end if(m2==1) if(st2<=(5*st1)) errordlg('输入数值违规,输入w0值应大于5倍的信号频率 ,请重新输入!') else f=sin(st1.*t)+sin(5*st1.*t)/5; g=cos(st2.*t); ft=f.*g w1=st1 w2=5*st axes(handles.tiaozhi) plot(t,ft,'r'); set(handles.tiaozhi,'XMinorTick','on') xlabel('调制波形') grid on axes(handles.shiyu)
plot(t,f,'b'); set(handles.shiyu,'XMinorTick','on') grid on; str=sprintf('f2=sin(%d*t)+sin(%d*t)/%d',w1,w2,w2); set(handles.text3,'string',str); str=sprintf('g=cos(%d*t)',st2); set(handles.text4,'string',str); end end if(m3==1) if(st2<=(5*st1)) errordlg('输入数值违规,输入w0值应大于5倍的信号频率 ,请重新输入!') else f=sin(st1.*t)+sin(3*st1.*t)/3; g=cos(st2.*t); ft=f.*g w1=st1 w2=3*st1 axes(handles.tiaozhi) plot(t,ft,'r'); set(handles.tiaozhi,'XMinorTick','on') xlabel('调制波形') grid on axes(handles.shiyu) plot(t,f,'b'); set(handles.shiyu,'XMinorTick','on') grid on; str=sprintf('f3=sin(%d*t)+sin(%d*t)/%d',w1,w2,w2); set(handles.text3,'string',str); str=sprintf('g=cos(%d*t)',st2); set(handles.text4,'string',str); end end 解调信号波形显示程序: function pushbutton3_Callback(hObject, eventdata, handles) st1=str2double(get(handles.edit2,'string')); st2=str2double(get(handles.edit1,'string')) t = eval(get(handles.edit3,'String')); m1=get(handles.radiobutton1,'value'); m2=get(handles.radiobutton2,'value'); m3=get(handles.radiobutton3,'value'); if(m1==1) if(st2<=(5*st1)) errordlg('输入数值违规,输入w0值应大于5倍的信号频率 ,请重新输入!') else
分享到:
收藏