www.pudn.com > RadarSignals.rar > ambfn7.m
% "ambfn7.m" - builds an MMI and calls dedicated m-files to calcualte the signal
% complex envelope, plot signals phase, amplitude and frequency structure, and
% ambiguity function and periodic ampbiguity function
%
% Written by Nadav Levanon and Eli Mozeson, Dept. of EE-Systems, Tel Aviv University
%
% ambfn7.m includes a "User defined" line to the preset values list. The line
% is activated each time the user changes one of the signal parameters
% ambfn7.m also allows the user to save/load the signal and plot parameters
%
clear all
close all
% create the parameters input figure
inputfig=figure;
set(inputfig,'Position',[6 51 520 690],'MenuBar','none','visible','off');
% create results figure (ambiguity function plot)
ambfig=figure;
set(ambfig,'Position',[274 52 749 670],'Name','ambiguity function plot','visible','off');
% create results figure (signal parameters plot)
sigfig=figure;
set(sigfig,'Position',[274 52 749 670],'Name','signal parameters plot','visible','off');
% create results figure (Autocorelation and Spectrum plot)
acffig=figure;
set(acffig,'Position',[274 52 749 670],'Name','Autocorrelation and Spectrum plot','visible','off');
% create results figure (Periodic ambiguity plot)
pambfig=figure;
set(pambfig,'Position',[274 52 749 670],'Name','Periodic ambiguity plot','visible','off');
% set default values for the signal and plot - single carrier parameters
acode=1; % signal amplitude modulation flag
pcode=1; % signal phase modultaion flag
u_amp=ones(1,13); % signal amplitude vector
u_phase=zeros(1,13); % signal phase vector
u_basic=u_amp.*exp(j*u_phase*pi); % signal complex envelope (no frequency modulation)
fcode=1; % signal frequency modulation flag
f_basic=zeros(1,13); % signal frequncy modulation vector
% set default values for the signal and plot - ambiguity grid parameters
F=5; % maximal displayed Doppler is F/Mtb
r=10; % signal is sampled r times in each tb (r/tb sampling rate)
N=100; % number of points in the delay axis for ambiguity plot is 2N
K=50;df=F/K/length(u_amp); % number of points in the Doppler axis for ambiguity plot is K
T=1; % maximal delay displayed for the ambiguity plot is T*Mtb
% initilaize flag of signal calculation
sigflag=0; % signal was not calculated yet
% initilaize strings for title of the plots
titlest='';
% create amplitude modulation input row
y_u_amp=530;
u_amp_legend = uicontrol(inputfig,'Style','text',...
'String','Amplitude','Pos',[25 y_u_amp 100 20 ]);
u_amp_text = uicontrol(inputfig,'Style','edit',...
'String',num2str(u_basic),'Position',[125 y_u_amp 300 20],...
'Callback',[...
'sigflag=0;'...
'set(preset,''value'',12);',...
'u_amp=str2num(get(u_amp_text,''String''));'...
'set(u_amp_text,''String'',num2str(u_amp));']);
u_amp_on = uicontrol(inputfig,'Style','radio',...
'Pos',[425 y_u_amp 20 20 ],'Value',1,'Callback',[...
'sigflag=0;'...
'set(preset,''value'',12);',...
'set(u_amp_on,''value'',get(u_amp_on,''value'')),'...
'acode=get(u_amp_on,''value'');']);
% create phase modulation input row
y_u_phase=505;
u_phase_legend = uicontrol(inputfig,'Style','text',...
'String','Phase/pi','Pos',[25 y_u_phase 100 20 ]);
u_phase_text = uicontrol(inputfig,'Style','edit',...
'String',num2str(u_phase),'Position',[125 y_u_phase 300 20],...
'Callback',[...
'sigflag=0;'...
'set(preset,''value'',12);',...
'u_phase=str2num(get(u_phase_text,''String''));'...
'set(u_phase_text,''String'',num2str(u_phase));']);
u_phase_on = uicontrol(inputfig,'Style','radio',...
'Pos',[ 425 y_u_phase 20 20 ],'Value',1,'Callback',[...
'sigflag=0;'...
'set(preset,''value'',12);',...
'set(u_phase_on,''value'',get(u_phase_on,''value'')),'...
'pcode=get(u_phase_on,''value'');']);
% create frequency modulation input row
y_freq=480;
freq_legend = uicontrol(inputfig,'Style','text',...
'String','Frequency*tb','Pos',[25 y_freq 100 20 ]);
freq_text = uicontrol(inputfig,'Style','edit',...
'String',num2str(f_basic),'Position',[125 y_freq 300 20],...
'Callback',[...
'sigflag=0;'...
'set(preset,''value'',12);',...
'f_basic=str2num(get(freq_text,''String''));'...
'set(freq_text,''String'',num2str(f_basic));']);
freq_on = uicontrol(inputfig,'Style','radio',...
'Pos',[ 425 y_freq 20 20 ],'Value',1,'Callback',[...
'sigflag=0;'...
'set(preset,''value'',12);',...
'set(freq_on,''value'',get(freq_on,''value'')),'...
'fcode=get(freq_on,''value'');']);
% create F input slider
y_F = 375;
sli_F = uicontrol(inputfig,'Style','Slider','sliderstep',[0.01 0.1],...
'Position',[125 y_F 300 20],'Min',0,'Max',60,'Value',F,'Callback',[...
'set(F_cur,''String'',',...
'num2str(get(sli_F,''Val''))),',...
'F=get(sli_F,''Val'');',...
'df=F/K/length(u_amp);']);
F_cur = uicontrol(inputfig,'style','edit','Pos',[ 425 y_F 50 20 ],...
'String',num2str(get(sli_F,'Value')),'Callback',[...
'set(sli_F,''Val'',',...
'str2num(get(F_cur,''String''))),',...
'F=get(sli_F,''Val'');',...
'df=F/K/length(u_amp);']);
F_lbl = uicontrol(inputfig,'style','Text',...
'Pos',[ 25 y_F 100 20 ],'String','F*Mtb');
% create r input slider
y_r = 400;
sli_r = uicontrol(inputfig,'Style','Slider','Position',[125 y_r 300 20],...
'Min',1,'Max',300,'Value',r,'Callback',[...
'sigflag=0;'...
'set(r_cur,''String'',num2str(floor(get(sli_r,''Val'')))),',...
'r=floor(get(sli_r,''Val''));']);
r_cur = uicontrol(inputfig,'style','edit','Pos',[425 y_r 50 20],...
'String',num2str(floor(get(sli_r,'Value'))),'Callback',[...
'sigflag=0;'...
'set(sli_r,''Val'',str2num(get(r_cur,''String''))),',...
'r=floor(get(sli_r,''Val''));']);
r_lbl = uicontrol(inputfig,'style','Text',...
'Pos',[25 y_r 100 20],'String','r');
% create N input slider
y_N = 325;
sli_N = uicontrol(inputfig,'Style','Slider','Position',[125 y_N 300 20],...
'Min',1,'Max',300,'Value',N,'Callback',[...
'set(N_cur,''String'',',...
'num2str(floor(get(sli_N,''Val'')))),',...
'N=floor(get(sli_N,''Val''));']);
N_cur = uicontrol(inputfig,'style','edit',...
'Pos',[425 y_N 50 20],'String',num2str(floor(get(sli_N,'Value'))),'Callback',[...
'set(sli_N,''Val'',',...
'str2num(get(N_cur,''String''))),',...
'N=floor(get(sli_N,''Val''));']);
N_lbl = uicontrol(inputfig,'style','Text',...
'Pos',[25 y_N 100 20],'String','N');
% create T input slider
y_T = 350;
sli_T = uicontrol(inputfig,'Style','Slider','Position',[125 y_T 300 20],...
'Min',0.01,'Max',1.1,'Value',T,'sliderstep',[0.01 0.1],'Callback',[...
'set(T_cur,''String'',',...
'num2str(get(sli_T,''Val''))),',...
'T=get(sli_T,''Val'');']);
T_cur = uicontrol(inputfig,'style','edit',...
'Pos',[425 y_T 50 20],'String',num2str(get(sli_T,'Value')),'Callback',[...
'set(sli_T,''Val'',',...
'str2num(get(T_cur,''String''))),',...
'T=get(sli_T,''Val'');']);
T_lbl = uicontrol(inputfig,'style','Text',...
'Pos',[25 y_T 100 20],'String','T');
% create K input slider
y_K = 300;
sli_K = uicontrol(inputfig,'Style','Slider','Position',[125 y_K 300 20],...
'Min',1,'Max',200,'Value',K,'Callback',[...
'set(K_cur,''String'',',...
'num2str(floor(get(sli_K,''Val'')))),',...
'K=floor(get(sli_K,''Val''));',...
'df=F/K/length(u_amp);']);
K_cur = uicontrol(inputfig,'style','edit',...
'Pos',[425 y_K 50 20],'String',num2str(floor(get(sli_K,'Value'))),'Callback',[...
'set(sli_K,''Val'',',...
'str2num(get(K_cur,''String''))),',...
'K=floor(get(sli_K,''Val''));',...
'df=F/K/length(u_amp);']);
K_lbl = uicontrol(inputfig,'style','Text',...
'Pos',[25 y_K 100 20],'String','K');
% create calculate and draw ambiguity function push buttom
pushtocalculate1=uicontrol(inputfig,'Style','Push','Position',[14 23 112 20 ],...
'String','Ambiguity Fun.','Callback',[...
'if sigflag==0,'...
' calplotsig7;'...
'end;',...
'sigflag=1;',...
'cal_and_plot_amb_fn7;']);
% create calculate and draw signal parameters push buttom
pushtocalculate2=uicontrol(inputfig,'Style','Push','Position',[140 23 112 20 ],...
'String','Cal.&Plot Sig.','Callback',[...
'sigflag=1;'...
'calplotsig7']);
% create calculate and draw acfun and spectrum push buttom
pushtocalculate3=uicontrol(inputfig,'Style','Push','Position',[266 23 112 20 ],...
'String','ACF.&SPEC Plot.','Callback',[...
'if sigflag==0,'...
' calplotsig7;'...
'end;',...
'sigflag=1;',...
'cal_and_plot_acf_and_spec7;']);
% create calculate and draw acfun and spectrum push buttom
pushtocalculate3=uicontrol(inputfig,'Style','Push','Position',[400 23 112 20 ],...
'String','Periodic amb.','Callback',[...
'if sigflag==0,'...
' calplotsig7;'...
'end;',...
'sigflag=1;',...
'cal_and_plot_pamb7;']);
% create save signal and grid definition push buttom
pushtocalculate4=uicontrol(inputfig,'Style','Push','Position',[100 270 112 20 ],...
'String','Save parameters','Callback',[...
'[newmatfile,newpath] = uiputfile(''*.mat'', ''Save As'');',...
'if newpath~=0,',...
' wd=cd;',...
' cd(newpath);',...
' eval([''save '' newmatfile '' acode pcode fcode u_amp u_phase f_basic F r N K T'']);',...
' cd(wd);',...
'end']);
% create load signal and grid definition push buttom
pushtocalculate5=uicontrol(inputfig,'Style','Push','Position',[300 270 112 20 ],...
'String','Load parameters','Callback',[...
'[newmatfile,newpath] = uigetfile(''*.mat'', ''Load'');',...
'if newpath~=0,',...
' wd=cd;',...
' cd(newpath);',...
' eval([''load '' newmatfile '' acode pcode fcode u_amp u_phase f_basic F r N K T'']);',...
' cd(wd);',...
' set(u_amp_text,''String'',num2str(u_amp));',...
' set(u_amp_on,''Value'',acode);',...
' set(u_phase_text,''String'',num2str(u_phase));',...
' set(u_phase_on,''Value'',pcode);',...
' set(freq_text,''String'',num2str(f_basic));',...
' set(freq_on,''Value'',fcode);',...
' set(sli_F,''Value'',F);',...
' set(F_cur,''String'',num2str(F));',...
' set(sli_r,''Value'',r);',...
' set(r_cur,''String'',num2str(r));',...
' set(sli_N,''Value'',N);',...
' set(N_cur,''String'',num2str(N));',...
' set(sli_K,''Value'',K);',...
' set(K_cur,''String'',num2str(K));',...
' set(sli_T,''Value'',T);',...
' set(T_cur,''String'',num2str(T));',...
' set(preset,''value'',12);',...
' df=F/K/length(u_amp);',...
'end']);
% create listbox for selection of preset type of signals
presetnames={'Pulse','LFM ','Weighted LFM','Costas, 7 elements ','Barker, 13 elements','Frank, 16 elements','Complementary pair',...
'Pulse train, 6 pulses','Stepped frequency pulse train, 6 pulses (zoom)',...
'Weighted stepped frequency, 8 pulses (zoom)','P4, 25 elements','User Defined'};
z=[0 0 0 0];
presetamp={ones(1,13),ones(1,51),ones(1,51).*sqrt(chebwin(51,50))',ones(1,7),...
ones(1,13),ones(1,16),[ones(1,3) zeros(1,7) ones(1,3)],[0 0 1 z 1 z 1 z 1 z 1 z 1 0 0],...
[0 0 1 z 1 z 1 z 1 z 1 z 1 0 0],[0 0 1 z 1 z 1 z 1 z 1 z 1 z 1 z 1 0 0].*sqrt(chebwin(40,50))',ones(1,25),1};
presetphase={zeros(1,13),zeros(1,51),zeros(1,51),zeros(1,7),...
[0 0 0 0 0 1 1 0 0 1 0 1 0],[0 0 0 0 0 1/2 1 -1/2 0 1 0 1 0 -1/2 1 1/2],...
[0 0 1 zeros(1,7) 0 1/2 0],zeros(1,30),zeros(1,30),zeros(1,40),1/25*(0:24).^2-(0:24),0};
presetfreq={zeros(1,13),.0031*[-25:25],.0031*[-25:25],[4 7 1 6 5 2 3]-4,...
zeros(1,13),zeros(1,16),zeros(1,13),zeros(1,30),.78*[0 0 -2.5 z -1.5 z -.5 z .5 z 1.5 z 2.5 0 0],.7*[0 0 -3.5 z -2.5 z -1.5 z -.5 z .5 z 1.5 z 2.5 z 3.5 0 0],zeros(1,25),0};
presetdf={.007,.0032,.0032,.095,.0308,.0312,.03,.01,.0075,.0075,.0266,.01};
presetr={10,1,1,20,10,10,10,10,40,40,5,100};
presetN={130,50,50,140,130,160,130,285,45,45,117,100};
presetK={50,60,60,60,50,50,60,60,60,60,90,100};
presetvalues=struct('Name',presetnames,'amp',presetamp,'phase',presetphase,'freq',presetfreq,...
'df',presetdf,'r',presetr,'N',presetN,'K',presetK);
preset = uicontrol(inputfig,'Style','ListBox','position',[20 610 480 50],'String',presetnames,...
'callback',[...
' sigflag=0;'...
' df=presetvalues(get(preset,''value'')).df;',...
' r=presetvalues(get(preset,''value'')).r;',...
' set(r_cur,''String'',num2str(r));',...
' set(sli_r,''val'',r);',...
' N=presetvalues(get(preset,''value'')).N;',...
' set(N_cur,''String'',num2str(N));',...
' set(sli_N,''val'',N);',...
' K=presetvalues(get(preset,''value'')).K;',...
' set(K_cur,''String'',num2str(K));',...
' set(sli_K,''val'',K);',...
' u_amp=presetvalues(get(preset,''value'')).amp;',...
' set(u_amp_text,''String'',num2str(presetvalues(get(preset,''value'')).amp));',...
' set(u_amp_on,''val'',1);',...
' T=N/r/length(u_amp);',...
' set(T_cur,''String'',num2str(T));',...
' set(sli_T,''val'',T);',...
' F=df*K*length(u_amp);',...
' set(F_cur,''String'',num2str(F));',...
' set(sli_F,''val'',F);',...
' u_phase=presetvalues(get(preset,''value'')).phase;',...
' set(u_phase_text,''String'',num2str(presetvalues(get(preset,''value'')).phase));',...
' set(u_phase_on,''val'',1);',...
' set(freq_text,''String'',num2str(presetvalues(get(preset,''value'')).freq));',...
' set(freq_on,''val'',1);',...
' f_basic=presetvalues(get(preset,''value'')).freq;']);
% add credits and legend
credits=uicontrol(inputfig,'style','text','position',[20 60 480 50],'String',...
['Written by Eli Mozeson and Nadav Levanon' sprintf('\n') ...
'Dept. of EE-Systems, Tel Aviv University']);
legend=uicontrol(inputfig,'style','text','position',[20 120 480 140],...
'HorizontalAlignment','left',...
'String',...
[ 'Legend:',sprintf('\n') ...
'M - number of bits (length of phase/amplitude/frequency vector)',sprintf('\n') ...
'tb - length of each bit (signal length is M*tb)',sprintf('\n') ...
'r - number of samples per bit',sprintf('\n') ...
'F - maximal Doppler shift for ambiguity and spectrum plot normalized by M*tb',sprintf('\n') ...
'T - maximal delay normalized to M*tb',sprintf('\n') ...
'N - number of delay bins on each side of ambiguity plot',sprintf('\n') ...
'K - number of positive Doppler shifts on ambiguity plot']);
legend0=uicontrol(inputfig,'style','text','position',[20 660 480 20],...
'HorizontalAlignment','left',...
'String','Chose a signal from the preset list or define your own using the GUI');
legend1=uicontrol(inputfig,'style','text','position',[20 560 480 40],...
'HorizontalAlignment','left',...
'String',...
[ 'Edit text to change amplitude, phase or frequency vectors',sprintf('\n') ...
'Use radio bottons on the right to activate or deactivate modulation']);
legend2=uicontrol(inputfig,'style','text','position',[20 430 480 40],...
'HorizontalAlignment','left',...
'String',...
[ 'Use sliders to continusly increse or decrese values',sprintf('\n') ...
'or use text on the right to enter any value']);
figure(inputfig);