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);