📄 modplt.m
字号:
function modplt
% MODPLT Signal plotting for MODGUI.
% ADSP Toolbox: Version 2.0
% For use with "Analog and Digital Signal Processing", 2nd Ed.
% Published by PWS Publishing Co.
%
% Ashok Ambardar, EE Dept. MTU, Houghton, MI 49931, USA
% http://www.ee.mtu/faculty/akambard.html
% e-mail: akambard@mtu.edu
% Copyright (c) 1998
f = gcf;
ui = get(f,'userdata');
carrier_edt = ui(24);
duration_edt = ui(27);
ct_axes = ui(29);
ct_line = ui(30);
mag_axes = ui(34);
mag_line = ui(35:36);
meth_pop = ui(10);
am_index = ui(41);
pm_index = ui(46);
fm_index = ui(48);
ssb_pop = ui(49);
det_chk = ui(42);
tau_edt = ui(44);
%%%%%%%%%
if get(ui(5),'userdata')==1
set(f,'currentaxes',ui(29));
zoom out,zoom reset
set(f,'currentaxes',ui(34));
zoom out,zoom reset
end
%%%%%%%%%
ele_mat = get(ui(1),'userdata');
[r,c] = size(ele_mat);
% if no signal defined, get out.
if ~length(ele_mat),
set(ct_line,'xdata',0,'ydata',0);
set(mag_line,'xdata',0,'ydata',0);
return;
end
i = sqrt(-1);
%% MESSAGE SIGNAL
f_c = str2num(get(carrier_edt,'string'));
duration = str2num(get(duration_edt,'string'));
dt=duration/500;
t_vec=(0:499)*dt;
x_vec = zeros(size(t_vec));
for k = 1:r,
val1 = ele_mat(k,1);
val2 = ele_mat(k,2);
val3 = ele_mat(k,3);
x = val1 * cos(2*pi*val2*t_vec + val3*pi/180);
x_vec = x_vec + x;
end
tmin=min(t_vec);tmax=max(t_vec);
set(ct_line,'xdata',t_vec,'ydata',x_vec);
set(ct_axes,'xlim',[tmin,tmax],'ylim',[min(x_vec),max(x_vec)]);
set(ui(50),'userdata',t_vec(:));
%MODULATED SIGNAL
method = get(meth_pop,'value');
opr_tit = get(ui(34),'title');
if method==1,
x_mod=x_vec.*cos(2*pi*f_c*t_vec);
tit_str = 'DSB SC Modulated Signal';
elseif method==2,
k_b = str2num(get(am_index,'string'));
if ~length(k_b)
errordlg('Value of beta not specified.','Input Error');
return
elseif k_b <=0
errordlg('Beta must be positive.','Input Error');
return;
end
x_mod=(1+k_b*x_vec).*cos(2*pi*f_c*t_vec);
tit_str = 'Standard AM Modulated Signal';
elseif method == 3, %SSB
x_i=x_vec.*cos(2*pi*f_c*t_vec);
x_h = 0*x_i;
for k = 1:r,
val1 = ele_mat(k,1);
val2 = ele_mat(k,2);
val3 = ele_mat(k,3);
x = val1 * cos(2*pi*val2*t_vec + (val3-90)*pi/180);
x_h = x_h + x;
end
x_q=x_h.*sin(2*pi*f_c*t_vec);
ssb_type =get(ssb_pop,'value');
if ssb_type == 1, %(USB)
x_mod = x_i-x_q;
tit_str = 'SSB Modulated Signal: Upper Sideband';
elseif ssb_type == 2, %LSB
x_mod = x_i+x_q;
tit_str = 'SSB Modulated Signal: Lower Sideband';
end
% k_p in (rad/unit) (for PM) or k_f(Hz/unit) (for FM).
elseif method == 4, %PM
k_p = str2num(get(pm_index,'string'));
if ~length(k_p)
errordlg('Value of Kp not specified.','Input Error');
return
elseif k_p <=0
errordlg('Kp must be positive.','Input Error');
return;
end
x_mod=cos(2*pi*f_c*t_vec + k_p*x_vec);
tit_str = 'Phase Modulated (PM) Signal';
elseif method == 5, %FM
k_f = str2num(get(fm_index,'string'));
if ~length(k_f)
errordlg('Value of Kf not specified.','Input Error');
return
elseif k_f <=0
errordlg('Kf must be positive.','Input Error');
return;
end
x_mod=cos(2*pi*(f_c*t_vec + k_f*cumsum(x_vec)*dt));
tit_str = 'Frequency Modulated (FM) Signal';
end
set(mag_line(1),'xdata',t_vec,'ydata',x_mod);
dmin=min(x_mod);dmax=max(x_mod);
set(mag_axes,'xlim',[tmin,tmax],'ylim',[dmin,dmax]);
set(ui(51),'userdata',[x_vec(:) x_mod(:)]);
env_det = get(det_chk,'value');
if method > 2 | env_det == 0
set(mag_line(2),'xdata',0,'ydata',0);
set(opr_tit,'string',tit_str);
return
end
tau = str2num(get(tau_edt,'string'));
if ~length(tau)
errordlg('Value of tau not specified.','Input Error');
set(mag_line(2),'xdata',0,'ydata',0);
set(opr_tit,'string',tit_str);
return
elseif tau <=0
errordlg('Tau must be positive.','Input Error');
set(mag_line(2),'xdata',0,'ydata',0);
set(opr_tit,'string',tit_str);
return;
end
x_det(1)=x_mod(1);
for i=2:length(x_mod)
if x_det(i-1)>x_mod(i)
x_det(i)=x_det(i-1)*exp(-dt/tau);
else
x_det(i)=x_mod(i);
end
end
set(mag_line(2),'xdata',t_vec,'ydata',x_det);
dmax=max([x_mod,x_det]);dmin=min([x_mod,x_det]);
set(mag_axes,'ylim',[dmin,dmax]);
set(ui(52),'userdata',x_det(:));
if method == 1
tit_str = 'DSB SC Modulated and Detected Signal';
else
tit_str = 'Standard AM Modulated and Detected Signal';
end
set(opr_tit,'string',tit_str);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -