%% =========================================================================== % Copyright (C) 1998-2000 % by Telia Research AB, Lulea, Sweden; All rights reserved. % % Description : Graphical setup window for duplex simulator % % File : uiSetup.m % Project : FSAN duplex model % Author(s) : Tomas Nordstrom (Tomas.Nordstrom@FTW.at) % : Daniel Bengtsson (Daniel.J.Bengtsson@Telia.se) % % CVS: $Id: uiSetup.m,v 1.3 2001/08/20 10:25:54 tono Exp $ %% =========================================================================== % Change History % 1998-12-15 (ToNo) Created % 1998-12-16 (ToNo) Added popups for scenario and duplex setting % 1998-12-16 (ToNo) Added parameter editing and start button % 1998-12-17 (ToNo) Removed uiInit (set things here instead) % 1998-12-17 (ToNo) Added more parameters for editing (like PBO) % 1998-12-22 (ToNo) Added more comments % 1999-01-04 (ToNo) Fixed handling of efficiencyLoss % 1999-01-05 (ToNo) Changed modem under test selection, Added FSAN % noise model selection, Removed precalc models % 1999-01-11 (ToNo) Let HAM band flag be reflected in PSD plot % and allowed instant window resizing % 1999-01-14 (ToNo) Working on the str2mat/mat2str & char bug % 1999-02-05 (DaB) Added go function in go button % 1999-02-07 (ToNo) Modified layout to encompass NEXT/FEXT/3cXT levels % 1999-02-12 (ToNo) Added support for PBOmaxlen % 1999-02-25 (ToNo) Generlized list (tfplist) handling % 1998-02-26 (ToNo) Made tt scenarios into a list % 1999-08-12 (DaB) Rewritten for new efficiencyLoss struct % 1999-08-19 (DaB) Updated for new tfplan struct % 1999-10-01 (DaB) Rewritten for new ex struct % 1999-10-22 (ToDo) Added ADSL eff box % 2000-03-31 (UvAn) Updated gui.lc when new entry from VDSL duplex popup menu % 2001-07-05 (ToNo) Now we support two-sided colored background noise %% =========================================================================== global ex; global gui; gui.tfplan = getList(ex.tfplist,gui.vdslDuplex); gui.lc = getList(ex.lclist,gui.tfplan.lcname); gui.tfplan.PSD.PBO.param.maxlen=getMaxVDSLlength(ex.tt.topology,ex.tt.traffic); gui.efficiencyLoss.ADSL = 0.1; figure(gui.setupfig); % Use and show our setup window set(gui.setupfig,'ResizeFcn','uiSetup') clf; gui.figsize=get(gcf,'Position'); % Define sizes and positions of figures gui.fwidth=gui.figsize(3); gui.fheight=gui.figsize(4); gui.uiheight=225; % User interaction area height gui.plotheight=(gui.fheight-gui.uiheight)/2; % Make space for two diagrams gui.plotbd=35; % Coordinates for some of the drawing areas (axes); RECT = [left, gui.bottom, width, height] gui.coordall=[1 1 gui.fwidth gui.fheight]; gui.coordui=[1 gui.fheight-gui.uiheight gui.fwidth gui.uiheight]; gui.coordfm=[gui.plotbd gui.plotheight+gui.plotbd gui.fwidth-gui.plotbd*2 gui.plotheight-gui.plotbd*2]; gui.coordfl=[gui.plotbd gui.plotbd gui.fwidth-gui.plotbd*2 gui.plotheight-gui.plotbd*2]; % Set up drawing areas gui.sallax=axes('Units','pixels','pos',gui.coordall); % The whole window axis('off'); gui.suiax=axes('Units','pixels','pos',gui.coordui); % User interaction area fill([0 0 1 1] ,[0 1 1 0],'w'); axis('off'); gui.plotheight=(gui.fheight-gui.uiheight)/2; gui.tgui.fax=axes('Units','pixels','pos',gui.coordfm); % Area for TF plan axis('off'); gui.psdax=axes('Units','pixels','pos',gui.coordfl); % Area for VDSL PSD mask axis('off'); gui.fontSize=get(0,'DefaultTextFontSize'); %% =========================================================================== % Show & set parameters axes(gui.sallax); % Print version tmpstr= sprintf('Version %.1f',fsansimuVersion); text(gui.fwidth-10, gui.fheight-10, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize, 'HorizontalAlignment', 'right'); % Set up scenario popup menu tmpstr= sprintf('Scenario:'); text(20, gui.fheight-20, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+2,'FontWeight','bold'); gui.scen = getNameList(gui.ttlist); tmpval=1; for i=1:length(gui.scen(:,1)), % get previous value selected if strcmp(deblank(gui.scen(i,:)),ex.tt.name) tmpval=i; break; end end uicontrol('style','popupmenu','string', gui.scen, 'value',tmpval,... 'units','pixels','pos',[20, gui.fheight-50 270 20], ... 'FontSize', gui.fontSize+1, 'BackgroundColor', [1 1 0.9], ... 'callback', 'ex.tt=getList(gui.ttlist,deblank(gui.scen(get(gcbo, ''value''),:)));axes(gui.psdax);plotTTstructure(ex.tt);gui.tfplan.PSD.PBO.param.maxlen=getMaxVDSLlength(ex.tt.topology,ex.tt.traffic); set(gui.pbolenui,''string'',num2str(gui.tfplan.PSD.PBO.param.maxlen));' ... ); % Set up FSAN noise model gui.dval=getNoiseModels; tmpval=1; for i=1:length(gui.dval(:,1)), % get previous value selected if strcmp(deblank(gui.dval(i,:)),ex.param.FSANNoiseModel) tmpval=i; break; %% WHAT is this tmpval used for? /ToNo 990929 end end tmpstr= sprintf('Use noise model:'); text(20, gui.fheight-60, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+1); uicontrol('style','popupmenu','string', gui.dval, 'value',1,... 'units','pixels','pos',[20, gui.fheight-90 270 20], ... 'FontSize', gui.fontSize+1, 'BackgroundColor', [1 1 0.9], ... 'callback', 'ex.param.FSANNoiseModel=deblank(gui.dval(get(gcbo, ''value''),:));' ... ); % Set up VDSL duplex popup menu k=1;gui.vval=1; for i=1:length(ex.tfplist), if strncmp(ex.tfplist(i).name,'VDSL',4) gui.modemcells(k)={ex.tfplist(i).name}; if strcmp(ex.tfplist(i).name,gui.vdslDuplex) gui.vval=k; end k=k+1; end end gui.modems=str2mat(char(gui.modemcells)); tmpstr= sprintf('VDSL duplex:'); text(20, gui.fheight-100, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+1); uicontrol('style','popupmenu','string', gui.modems, 'value',gui.vval,... 'units','pixels','pos',[20, gui.fheight-130 270 20], ... 'FontSize', gui.fontSize+1, 'BackgroundColor', [1 1 0.9], ... 'callback', 'gui.vdslDuplex=deblank(gui.modems(get(gcbo, ''value''),:));axes(gui.tgui.fax);gui.tfplan=getList(ex.tfplist,gui.vdslDuplex);gui.lc=getList(ex.lclist,gui.tfplan.lcname);plotTFplan(gui.tfplan,''Lin'');set(gui.pbomui,''value'',findStrIndex(getPBOmethods,gui.tfplan.PSD.PBO.method));set(gui.pbopfui,''string'',num2str(gui.tfplan.PSD.PBO.param.freq));set(gui.pboplui,''string'',num2str(gui.tfplan.PSD.PBO.param.len));set(gui.efflvui,''string'',num2str(gui.lc.param.efficiencyLoss));set(gui.tduui,''string'',num2str(gui.tfplan.timeDivision.up));set(gui.tddui,''string'',num2str(gui.tfplan.timeDivision.down));' ... ); % Buttons to run things uicontrol('string','GO', 'Position', [310 gui.fheight-gui.uiheight+10 60 20],... 'callback','callbackGO;') uicontrol('string','Close all', 'Position', [430 gui.fheight-gui.uiheight+10 60 20],... 'callback','close all') % Parameters to edit gui.lheight=gui.fheight-20; gui.delta=20; gui.lheight=gui.lheight-gui.delta; tmpstr= sprintf('Fast calculation:'); text(310, gui.lheight, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+1); uicontrol('style','checkbox','Value',ex.param.frequency.fastrecalc,... 'units','pixels','HorizontalAlignment','left',... 'pos',[510 gui.lheight-10 20 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'ex.param.frequency.fastrecalc=get(gcbo,''value'');' ... ); gui.lheight=gui.lheight-gui.delta; tmpstr= sprintf('Force HAM band:'); text(310, gui.lheight, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+1); uicontrol('style','checkbox','Value',gui.tfplan.PSD.HAM.active,... 'units','pixels','HorizontalAlignment','left',... 'pos',[510 gui.lheight-10 20 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'gui.tfplan.PSD.HAM.active=get(gcbo,''value'');axes(gui.tgui.fax);plotTFplan(gui.tfplan,''Lin'');' ... ); gui.lheight=gui.lheight-gui.delta; tmpstr= sprintf('Test Modem:'); text(310, gui.lheight, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+1); tmpstr= sprintf('ADSL'); text(430, gui.lheight, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+1); uicontrol('style','checkbox','Value',gui.testADSL,... 'units','pixels','HorizontalAlignment','left',... 'pos',[510 gui.lheight-10 20 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'gui.testADSL=get(gcbo,''value'');' ... ); gui.lheight=gui.lheight-gui.delta; tmpstr= sprintf('Background noise LT:'); text(310, gui.lheight, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+1); uicontrol('style','edit',... 'string',ex.param.bgNoise.LT,'units','pixels',... 'HorizontalAlignment','left',... 'pos',[430 gui.lheight-10 100 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'ex.param.bgNoise.LT=get(gcbo,''string'');' ... ); gui.lheight=gui.lheight-gui.delta; tmpstr= sprintf('SNR max:'); text(310, gui.lheight, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+1); uicontrol('style','edit',... 'string',num2str(gui.lc.param.SNRMax),'units','pixels',... 'HorizontalAlignment','left',... 'pos',[430 gui.lheight-10 100 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'gui.lc.param.SNRMax=str2num(get(gcbo,''string''));' ... ); gui.lheight=gui.lheight-gui.delta; tmpstr= sprintf('VDSL Line Code: %s',gui.lc.name); text(310, gui.lheight, tmpstr, 'Units','pixels', 'FontSize', gui.fontSize+1); gui.lheight=gui.lheight-gui.delta; text(310, gui.lheight, 'Level:', 'Units','pixels', 'FontSize', gui.fontSize+1); text(360, gui.lheight, 'NEXT:', 'Units','pixels', 'FontSize', gui.fontSize+1); text(420, gui.lheight, 'FEXT:', 'Units','pixels', 'FontSize', gui.fontSize+1); text(480, gui.lheight, '3cXT:', 'Units','pixels', 'FontSize', gui.fontSize+1); gui.lheight=gui.lheight-gui.delta; uicontrol('style','edit', 'string',num2str(ex.param.XTlevel.NEXT), ... 'units','pixels','HorizontalAlignment','left',... 'pos',[360 gui.lheight-10 50 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'ex.param.XTlevel.NEXT=str2num(get(gcbo,''string''));' ... ); uicontrol('style','edit', 'string',num2str(ex.param.XTlevel.FEXT), ... 'units','pixels','HorizontalAlignment','left',... 'pos',[420 gui.lheight-10 50 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'ex.param.XTlevel.FEXT=str2num(get(gcbo,''string''));' ... ); uicontrol('style','edit', 'string',num2str(ex.param.XTlevel.thirdCXT), ... 'units','pixels','HorizontalAlignment','left',... 'pos',[480 gui.lheight-10 50 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'ex.param.XTlevel.thirdCXT=str2num(get(gcbo,''string''));' ... ); % Parameters connected to the modem choosen gui.lheight=gui.fheight-125; tfplan=getList(ex.tfplist,gui.vdslDuplex); gui.lheight=gui.lheight-gui.delta; tmpstr= sprintf('PBO method:'); text(20, gui.lheight, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+1); gui.pbomethods=getPBOmethods; gui.pboval=findStrIndex(gui.pbomethods,gui.tfplan.PSD.PBO.method); gui.pbomui=uicontrol('style','popupmenu','string', gui.pbomethods, 'value',gui.pboval,... 'units','pixels','pos',[120, gui.lheight-10 100 20], ... 'FontSize', gui.fontSize+1, 'BackgroundColor', [1 1 0.9], ... 'callback', ... 'gui.tfplan.PSD.PBO.method=deblank(gui.pbomethods(get(gcbo, ''value''),:));' ... ); gui.lheight=gui.lheight-gui.delta; gui.pboparamstart=110; tmpstr= sprintf('PBO param:'); text(20, gui.lheight, tmpstr, 'Units','pixels', 'FontSize', gui.fontSize+1); text(gui.pboparamstart, gui.lheight, 'f:', 'Units','pixels', 'FontSize', gui.fontSize+1); gui.pbopfui=uicontrol('style','edit',... 'string',num2str(gui.tfplan.PSD.PBO.param.freq./1e6),'units','pixels',... 'HorizontalAlignment','left',... 'pos',[gui.pboparamstart+10 gui.lheight-10 30 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'gui.tfplan.PSD.PBO.param.freq=str2num(get(gcbo,''string'')).*1e6;' ... ); text(gui.pboparamstart+40, gui.lheight, 'MHz,', ... 'Units','pixels', 'FontSize', gui.fontSize); text(gui.pboparamstart+75, gui.lheight, 'l:', ... 'Units','pixels', 'FontSize', gui.fontSize+1); gui.pboplui=uicontrol('style','edit',... 'string',num2str(gui.tfplan.PSD.PBO.param.len),'units','pixels',... 'HorizontalAlignment','left',... 'pos',[gui.pboparamstart+85 gui.lheight-10 30 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'gui.tfplan.PSD.PBO.param.len=str2num(get(gcbo,''string''));' ... ); text(gui.pboparamstart+115, gui.lheight, 'm,', ... 'Units','pixels', 'FontSize', gui.fontSize); tmpstr= sprintf('l_m_a_x:'); text(gui.pboparamstart+130, gui.lheight-5, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+1); gui.pbolenui=uicontrol('style','edit',... 'string',num2str(gui.tfplan.PSD.PBO.param.maxlen),'units','pixels',... 'HorizontalAlignment','left',... 'pos',[gui.pboparamstart+155 gui.lheight-10 35 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'gui.tfplan.PSD.PBO.param.maxlen=str2num(get(gcbo,''string''));' ... ); gui.lheight=gui.lheight-gui.delta; tmpstr= sprintf('Eff. loss VDSL'); text(20, gui.lheight, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+1); gui.efflvui=uicontrol('style','edit',... 'string',num2str(gui.lc.param.efficiencyLoss), ... 'units','pixels','HorizontalAlignment','left',... 'pos',[120 gui.lheight-10 40 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'gui.lc.param.efficiencyLoss=str2num(get(gcbo,''string''));' ... ); tmpstr= sprintf('ADSL'); text(180, gui.lheight, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+1); gui.efflaui=uicontrol('style','edit',... 'string',num2str(gui.efficiencyLoss.ADSL), ... 'units','pixels','HorizontalAlignment','left',... 'pos',[220 gui.lheight-10 40 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'gui.efficiencyLoss.ADSL=str2num(get(gcbo,''string''));' ... ); gui.lheight=gui.lheight-gui.delta; tmpstr= sprintf('Time div. up:'); text(20, gui.lheight, tmpstr, ... 'Units','pixels', 'FontSize', gui.fontSize+1); gui.tduui=uicontrol('style','edit',... 'string',num2str(gui.tfplan.timeDivision.up),'units','pixels',... 'HorizontalAlignment','left',... 'pos',[120 gui.lheight-10 40 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'gui.tfplan.timeDivision.up=str2num(get(gcbo,''string''));' ... ); text(180, gui.lheight, 'down:', 'Units','pixels', 'FontSize', gui.fontSize+1); gui.tddui=uicontrol('style','edit',... 'string',num2str(gui.tfplan.timeDivision.down),'units','pixels', ... 'HorizontalAlignment','left',... 'pos',[220 gui.lheight-10 40 20],'backgroundcolor', [1 1 0.9], ... 'callback', 'gui.tfplan.timeDivision.down=str2num(get(gcbo,''string''));' ... ); % Show traffic and topology structure axes(gui.psdax); plotTTstructure(ex.tt); % Show PSD masks for VDSL modem axes(gui.tgui.fax); gui.fax.min=ex.param.frequency.min; gui.fax.max=ex.param.frequency.max; plotTFplan(getList(ex.tfplist,gui.vdslDuplex),'Lin'); drawnow;