📄 dualteq.m
字号:
textPos = [grpleft+labelWidth+0.085+labelWidth yPos textWidth textHeight]; callbackStr = 'dualteq(''setUmax'')'; str = sprintf('250'); mat = [250]; UmaxHndl = uicontrol( ... 'Style','edit', ... 'Units','normalized', ... 'Position',textPos, ... 'Max',1, ... 'Horiz','right', ... 'Background','white', ... 'Foreground','black', ... 'String',str,'Userdata',mat, ... 'callback',callbackStr);
% Cmin label yPos=frmBottom-frmBorder; labelPos = [grpleft yPos labelWidth textHeight]; h = uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',labelPos, ... 'Horiz','left', ... 'String','Cmin', ... 'Interruptible','off', ... 'BackgroundColor',[0.5 0.5 0.5], ... 'ForegroundColor','white'); % set Cmin textPos = [grpleft+labelWidth-.015 yPos textWidth textHeight]; callbackStr = 'dualteq(''setCmin'')'; str = sprintf('39'); mat = [39]; CminHndl = uicontrol( ... 'Style','edit', ... 'Units','normalized', ... 'Position',textPos, ... 'Max',1, ... 'Horiz','right', ... 'Background','white', ... 'Foreground','black', ... 'String',str,'Userdata',mat, ... 'callback',callbackStr); % Cmax label yPos=frmBottom-frmBorder; labelPos = [grpleft+labelWidth+.1 yPos labelWidth textHeight]; h = uicontrol( ... 'Style','text', ... 'Units','normalized', ... 'Position',labelPos, ... 'Horiz','left', ... 'String','Cmax', ... 'Interruptible','off', ... 'BackgroundColor',[0.5 0.5 0.5], ... 'ForegroundColor','white'); % set Cmax yPos=frmBottom-frmBorder; textPos = [grpleft+labelWidth+0.085+labelWidth yPos textWidth textHeight]; callbackStr = 'dualteq(''setCmax'')'; str = sprintf('59'); mat = [59]; CmaxHndl = uicontrol( ... 'Style','edit', ... 'Units','normalized', ... 'Position',textPos, ... 'Max',1, ... 'Horiz','right', ... 'Background','white', ... 'Foreground','black', ... 'String',str,'Userdata',mat, ... 'callback',callbackStr); % put all handles in userdata of the parent object fhndlList=[freqzHnd NbHndl NwHndl NHndl CGHndl MarginHndl ... DminHndl DmaxHndl PwrHndl AWGNHndl CSAHndl viewHndl ... helpHndl closeHndl methodHndl h11 h21 h31 h41 h51 h61 UminHndl ...
UmaxHndl CminHndl CmaxHndl]; set(figNumber, ... 'Visible','on', ... 'UserData',fhndlList); drawnow axes(freqzHnd) set(freqzHnd,'Userdata',[]) dualteq('design') set(gcf,'Pointer','arrow','handlevisibility','callback'); set(0,'showHiddenHandles',shh) return % change method elseif strcmp(action,'changemethod'), v = get(gco,'value'); % 1=min-ISI,2=MBR
set(gco,'userdata',v); return % set Nbelseif strcmp(action,'setNb'), hndlList=get(gcf,'Userdata'); nw = get(hndlList(3),'userdata'); meth = get(hndlList(15),'value'); v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % do not allow Nb<1 or if MSSNR is chosen Nb<=Nw if vv < 1 | (vv <= nw & meth == 3), vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)); return % set Nwelseif strcmp(action,'setNw'), hndlList=get(gcf,'Userdata'); nb = get(hndlList(2),'userdata'); meth = get(hndlList(15),'value'); v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % do not allow Nw<1 or if MSSNR is chosen Nw>=Nb if vv <= 1 | (vv >= nb & meth == 3), vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)) return % set coding gain elseif strcmp(action,'setCG'), hndlList=get(gcf,'Userdata'); v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % do not allow negative coding gain if vv < 0, vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)) return % set margin elseif strcmp(action,'setMargin'), hndlList=get(gcf,'Userdata'); v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % do not allow negative margin if vv < 0, vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)) return % set input power elseif strcmp(action,'setPwr'), hndlList=get(gcf,'Userdata'); v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % do not allow negative input power if vv < 0, vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)) return % set white noise power elseif strcmp(action,'setAWGN'), hndlList=get(gcf,'Userdata'); v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % do not allow negative noise power if vv > 0, vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)) return % set channel number elseif strcmp(action,'setCSA'), hndlList=get(gcf,'Userdata'); v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % only have 8 CSA channel numbered 1-8 if vv < 1 | vv > 8, vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)) return % set Dmin elseif strcmp(action,'setDmin'), hndlList=get(gcf,'Userdata');
Dmax = get(hndlList(8),'Userdata');
v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % Dmin cannot be smaller than 1 and larger than Dmax if vv<1 | vv > Dmax, vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)) return % set Dmax elseif strcmp(action,'setDmax'), hndlList=get(gcf,'Userdata'); Dmin = get(hndlList(7),'Userdata'); v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % Dmax cannot be smaller than 1 and Dmin if vv < 1 | vv < Dmin, vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)) return % set N elseif strcmp(action,'setN'), hndlList=get(gcf,'Userdata'); v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % N has to be a power of 2 if (floor(log(vv)/log(2))-(log(vv)/log(2))) ~= 0 vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)) return
% set Umin elseif strcmp(action,'setUmin'), hndlList=get(gcf,'Userdata');
Umax = get(hndlList(23),'Userdata');
v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % Dmin cannot be smaller than 1 and larger than Dmax if vv<1 | vv > Umax, vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)) return % set Umax elseif strcmp(action,'setUmax'), hndlList=get(gcf,'Userdata'); Umin = get(hndlList(22),'Userdata'); v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % Dmax cannot be smaller than 1 and Dmin if vv < 1 | vv < Umin, vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)) return
% set Cmin elseif strcmp(action,'setCmin'), hndlList=get(gcf,'Userdata');
Cmax = get(hndlList(25),'Userdata');
v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % Dmin cannot be smaller than 1 and larger than Dmax if vv<1 | vv > Cmax, vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)) return % set Cmax elseif strcmp(action,'setCmax'), hndlList=get(gcf,'Userdata'); Cmin = get(hndlList(24),'Userdata'); v = get(gco,'Userdata'); s = get(gco,'String'); vv = eval(s,num2str(v(1))); % Dmax cannot be smaller than 1 and Dmin if vv < 1 | vv < Cmin, vv = v; end set(gco,'Userdata',vv,'String',num2str(vv)) return % design TEQ elseif strcmp(action,'design'), set(gcf,'Pointer','watch'); % get handles axHndl=gca; fhndlList=get(gcf,'Userdata'); freqzHndl = fhndlList(1); NbHndl = fhndlList(2); NwHndl = fhndlList(3); NHndl = fhndlList(4); CGHndl = fhndlList(5); MarginHndl = fhndlList(6); DminHndl = fhndlList(7); DmaxHndl = fhndlList(8); PwrHndl = fhndlList(9); AWGNHndl = fhndlList(10); CSAHndl = fhndlList(11); viewHndl = fhndlList(12); helpHndl = fhndlList(13); closeHndl = fhndlList(14); methodHndl = fhndlList(15); methRateHndl = fhndlList(16); methSNRHndl = fhndlList(17); methSSNRHndl = fhndlList(18); methMSEHndl = fhndlList(19); methDelayHndl = fhndlList(20); methMaxHndl = fhndlList(21);
UminHndl = fhndlList(22);
UmaxHndl = fhndlList(23);
CminHndl = fhndlList(24);
CmaxHndl = fhndlList(25); colors = get(gca,'colororder'); % init variables Nb = get(NbHndl,'userdata'); Nw = get(NwHndl,'userdata'); N = get(NHndl,'userdata'); codingGain = get(CGHndl,'userdata'); margin = get(MarginHndl,'userdata'); Dmin = get(DminHndl,'userdata'); Dmax = get(DmaxHndl,'userdata'); totalInputPower = get(PwrHndl,'userdata'); AWGNpower = get(AWGNHndl,'userdata'); loopNum = get(CSAHndl,'userdata'); method = get(methodHndl,'value');
UsedMin=get(UminHndl,'userdata');
UsedMax=get(UmaxHndl,'userdata');
CdualMin=get(CminHndl,'userdata');
CdualMax=get(CmaxHndl,'userdata'); barflag = 0; %number of iteration per TEQ tap numIter = 1000; %generate signal,noise, and channel data [recNoisySig,receivedSignal,noise,channel,inputSignal,gamma,fs] = ... siggen(N,AWGNpower,loopNum,totalInputPower,codingGain,margin,barflag); %save tmp1.mat inputSignal, receivedSignal, noise; %estimate the power spectrums [inputSpecAll, noiseSpecAll, channelGainAll]=... specestim(inputSignal,noise,channel,N,barflag);
%first pass for whole bandwidth teq design
usedSubs = [UsedMin:UsedMax]';
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -