⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 teqdemo.m

📁 ADSL经典仿真程序
💻 M
📖 第 1 页 / 共 4 页
字号:
      'String',labelStr, ...      'Callback',callbackStr);     % help button   labelStr='Information';   callbackStr='teqdemo(''info'')';   helpHndl=uicontrol( ...      'Style','pushbutton', ...      'Units','normalized', ...      'Position',[left frmBottom btnWid btnHt], ...      'String',labelStr, ...      '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];   set(figNumber, ...      'Visible','on', ...      'UserData',fhndlList);      drawnow   axes(freqzHnd)   set(freqzHnd,'Userdata',[])   teqdemo('design')   set(gcf,'Pointer','arrow','handlevisibility','callback');   set(0,'showHiddenHandles',shh)   return         % change method elseif strcmp(action,'changemethod'),   v = get(gco,'value');     % 1=MMSE-UEC,2=MMSE-UTC,3=MSSNR,4=GEO,5=min-ISI,6=MBR,7=DCC,8=DCM,9=MP,   % 10=MMP, 11=Eig-App 12=ARMA   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      % 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);         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');   barflag = 1;   chflag = 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,chflag);    %save tmp1.mat inputSignal, receivedSignal, noise;   %estimate the power spectrums   [inputSpecAll, noiseSpecAll, channelGainAll]=...      specestim(inputSignal,noise,channel,N,barflag);      %calculate SNRs and usable channels   [subMFBall,subMFB,usedSubs,noiseSpec,channelGain,inputSpec] = ...   calcsnrs(inputSpecAll,channelGainAll,noiseSpecAll,gamma);   % chose method and design TEQ   [B, W, D, MSE, Dv, I,title_str] = selmeth(method,inputSignal,...      receivedSignal,noise,channel(1:N),...   Nb,Nw,Dmin,Dmax,barflag,N,numIter,inputSpec,noiseSpec,channelGain,...   usedSubs,gamma);   % get performance results   [SSNR, SNR, subSNR,geoSNRfinal,geoSNRmfb,bDMTfinal,bDMTmfb,...         RDMTfinal,RDMTmfb,hw,Fh,Fw,colorNoiseaft,Fhw] = ...      perform(W,B,channel,D,Nb,N,inputSignal,noise,...      channelGainAll,inputSpecAll,noiseSpecAll,margin,codingGain,fs,subMFBall,usedSubs);      % put results into table   str = sprintf('%1.3fe6',RDMTfinal/1e6);   set(methRateHndl,'string',str);   str = sprintf('%3.1f',SNR);   set(methSNRHndl,'string',str);   str = sprintf('%3.1f',SSNR);   set(methSSNRHndl,'string',str);   str = sprintf('%3.0f',D);   set(methDelayHndl,'string',str);   if MSE == 0,       str = '-';   else      str = sprintf('%3.1e',MSE);   end   set(methMSEHndl,'string',str);   str = sprintf('%1.3fe6',RDMTmfb/1e6);   set(methMaxHndl,'string',str);         % save results to disk in order to use it in other functions    save singleteqtmpresults title_str N hw B D Nb W Nw subSNR subMFB channel Fh ...	   noiseSpec colorNoiseaft Dv Dmin Dmax Fhw Fw usedSubs ...        inputSignal receivedSignal noise;      TEQequalizerTaps = W;   TEQtargetImpulseResp = B;   TEQoptimalDelay = D;   TEQoriginalChannel = channel;   TEQequalizedChannel = hw;   TEQmatchedFilterBoundPerChannel = subMFB;   TEQSNRperChannel = subSNR;   TEQoriginalChannelFreqResp = Fh;   TEQequalizerFreqResp = Fw;   TEQequalizedChannelFreqResp = Fhw;   TEQchanNoisePowSpecAfterEqual = colorNoiseaft;   TEQchanNoisePowSpecBeforeEqual = noiseSpec;   TEQperformanceVersusDelay = Dv;   TEQDmin = Dmin;   TEQDmax = Dmax;   TEQNb = Nb;   TEQNw = Nw;   TEQN = N;   TEQCodingGain=codingGain;   TEQMargin=margin;   TEQInputPower=totalInputPower;   TEQAWGNPower=AWGNpower;   TEQLoopnum=loopNum;      save singleteqresults fhndlList TEQequalizerTaps TEQtargetImpulseResp  ...	   TEQoptimalDelay TEQoriginalChannel TEQequalizedChannel ...	   TEQmatchedFilterBoundPerChannel TEQSNRperChannel ...	   TEQoriginalChannelFreqResp TEQequalizerFreqResp ...	   TEQequalizedChannelFreqResp TEQchanNoisePowSpecAfterEqual...	   TEQchanNoisePowSpecBeforeEqual TEQDmin TEQDmax TEQNb TEQNw TEQN TEQCodingGain...       TEQMargin TEQInputPower TEQAWGNPower TEQLoopnum;	      % plot result   teqdemo('plotGraph');   set(gcf,'Pointer','arrow');   return      % plot graphelseif strcmp(action,'plotGraph'),  legend off  set(gcf,'Pointer','watch');   % get handles   fhndlList = get(gcf,'Userdata');   viewHndl = fhndlList(12);   freqzHndl = fhndlList(1);   methodindex=get(fhndlList(15),'Userdata');   % set axis   axHndl = gca;   axes(freqzHndl);   % which graph is going to be plotted   graphNum = get(viewHndl,'value');    %1= TIR/SIR, 2= TEQ impulse res., 3= TEQ freq. res., 4= SNR/MFB   %5=original and short channel impulse res, 6 = noise power spec.,    %7= delay plot, 8= equalized channel freq      % load results for current TEQ   load singleteqtmpresults;   freqAxis = 1:N/2+1;      % plot chosen graph   if graphNum == 1             if (methodindex ==1 | methodindex == 2)      legend off      hw100 = hw(1:100)/norm(hw);      axhndlList = get(freqzHndl,'UserData');      hndl = plot(hw100); 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -