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

📄 sb2slmng.m

📁 经典通信系统仿真书籍《通信系统与 MATLAB (Proakis)》源代码
💻 M
📖 第 1 页 / 共 2 页
字号:
function [err, note_name]=sb2slmng(cdn,blkname,posit,in,fl,cod,timer,st);
%SB2SLMNG is the highest level management function for SB2SL.
%	ERR=SB2SLMNG(CDN,BLKNAME,POSIT,IN,FL,COD,TIMER,ST) creates a
%	block with the name BLKNAME, coding number CDN in position POSIT. 
%       The parameters are set up for this block based on the
%       SystemBuild file coding integer IN, real number FL,
%       and string ST.
%
%       COD is a three dimensional vector. The first element indicates
%       whether it is a continuous (0) or discrete (1) time system.
%       The second element indicates whether it does not need (0) or
%       does need (1) a mask. The third element indicates the
%       orientation of the block.
%
%       TIMER is designed for discrete time only. The first element of
%       TIMER is the sampling time. The second element is the initial time.

%	Wes Wang 11/27/92
% 	Copyright (c) 1990-93 by The MathWorks, Inc.
% 	$Revision: 1.27 $  $Date: 1994/09/16 01:13:29 $

%load data
err=0;
note_name = [];
sb2sldat
clear blankt pointer str_ori
ios = in(4:7);

posit(4) = max(posit(4), 10+5*max(in(4),in(5)));
posit(3:4)=posit(1:2)+posit(3:4);

if cdn == 1,
  new_system(blkname);
  set_param(blkname, 'position', posit);
%  disp('Illegal block, report to The MathWorks.')
  if ios(1) > 0   %Define I/O port, so the block has I/O for add_line
    for i=1:ios(1)
       add_block('built-in/Inport',[blkname,'/input',num2str(i)]);
       set_param([blkname '/input' num2str(i)],'position',...
		[10,10+30*i,30,30+30*i],...
		'hide name',0,...
		'Port',num2str(i));
    end;
  end %if
  if ios(2) > 0
    for i=1:ios(2)
       add_block('built-in/Outport',[blkname,'/output',num2str(i)]);
       set_param([blkname '/output' num2str(i)],...
                'position',[40,10+30*i,60,30+30*i],...
		'hide name',0,...
		'Port',num2str(i));
    end;
  end;
  set_param(blkname,'Mask Display','Illigel\nBlock')
  err = sb2slerr(blkname,'We have never seen this block type before');
  return
end;

Func_name = deblank(block(cdn,:));
add1 = ['built-in/' Func_name];
if cdn>=21 & cdn<=27 & cdn~=26 & cod(1)~=0
  add1 = ['built-in/Discrete ' Func_name];
  if cdn == 25
    add1 = ['built-in/Discrete State-space'];
  elseif cdn == 27
    add1 = ['built-in/Unit Delay'];
  end;
end;

if cdn == 2 | cod(2) > 0   % need a mask
  new_system(blkname);
  set_param(blkname, 'position', posit);
  if ios(1) > 0   %Define I/O port, so the block has I/O for add_line
    for i=1:ios(1)
       add_block('built-in/Inport',[blkname,'/input',num2str(i)]);
       set_param([blkname '/input' num2str(i)],'position',...
		[1230,1010,1250,1033],...
		'hide name',0,...
		'Port',num2str(i));
    end;
  end %if
  if ios(2) > 0
    for i=1:ios(2)
       add_block('built-in/Outport',[blkname,'/output',num2str(i)]);
       set_param([blkname '/output' num2str(i)],...
		'hide name',0,...
		'Port',num2str(i));
    end;
  end %if
  if in(2) == 1 %  if cdn == 2
    if in(3) == 1
%      set_param(blkname,'Mask Display',...
%       'plot([1 1 3 3 20 20 21 21 23],[5 6 6 1 1 6 6 7 5],[1 1 3 3 20 20 21 21 23],[5 4 4 9 9 4 4 3 5]); GROUP');
    elseif in(3) == 2
	err = sb2slerr(blkname,'Condition Block (Not Supported)');
    elseif in(3) == 3
        st =  setstr(st');
        indx = find(st=='|');
        st = st(indx(2)+1:indx(3)-1);
        set_param(blkname,'Mask Display',st);
        % bug fix for '/' in the sequence
        pt = find(st == '/');
        if ~isempty(pt)
          for i = length(pt) : -1 : 1
            st = [st(1:pt(i)), '/', st(pt(i)+1:length(st))];
          end;
        end;
        if length(st) >= 255
           st = st(1:254);
        end;
        add_block('built-in/Note',[blkname,'/',st]);
        set_param([blkname,'/',st],'position',[100,50,110,60]);
    else
      err = sb2slerr(blkname,'We have never seen this block type before');
      % will not appear here.
    end;

  elseif in(2) == 2 %  elseif cdn == 5   %general algebraic
    if in(3) == 1
      sb2slga(blkname,in,fl);
    elseif in(3) ==2 %  elseif cdn == 6
      sb2slml(blkname,in);
    elseif in(3) ==3
      sb2sl121(blkname,in,fl,cod,timer);
    elseif in(3) >= 4 & in(3) <= 7 %  elseif cdn >= 8 & cdn <= 11
      sb2slml(blkname,in);
    elseif in(3) == 8
      sb2sl121(blkname,in,fl,cod,timer);
    else
      err = sb2slerr(blkname,'We have never seen this block type before');
    end;

  elseif in(2) == 3
    if (in(3) <=8) & (in(3) ~= 6)
      if in(4) == in(5)
        sb2sl121(blkname,in,fl,cod,timer);
      else  % for the case of 2D Look Up Table
        sb2sl221(blkname,in,fl,cod,timer);
      end;
    elseif in(3) == 6
      if in(4) == 2*in(5)
        sb2sl221(blkname,in,fl,cod,timer);
      elseif in(4) ==1
        sb2sllit(blkname,in,fl);
      else
        err = sb2slerr(blkname,'We did not know there is such input-output pair');
      end;
    elseif in(3) == 9
      sb2sllit(blkname,in,fl) %linear interpolation table
    elseif in(3) == 10
      sb2slmul(blkname,in,fl,st,cod,timer);
    else 
      err = sb2slerr(blkname,'We have never seen this block type before');
    end;

  elseif in(2) == 4 %elseif cdn == 21
    if in(3) == 1
      sb2slss(blkname,in,fl,cod,timer);
    elseif in(3) == 2 %elseif cdn == 22
      sb2sltf(blkname,in,fl,cod,timer);
    elseif in(3) == 3 % elseif cdn == 23
      sb2slgzp(blkname,in,fl,cod,timer);
    elseif in(3) == 4 % elseif cdn == 24
      sb2slgzp(blkname,in,fl,cod,timer);
    elseif in(3) == 5 %  elseif cdn == 25
      sb2slint(blkname,in,fl,cod,timer);
    elseif in(3) == 6
      sb2slhys(blkname,in,fl,cod,timer);
    elseif in(3) == 7
      sb2sldly(blkname,in,fl,cod,timer);
    elseif in(3) == 8 
      sb2sllti(blkname,in,fl,cod,timer);
    elseif in(3) == 9
      sb2slpid(blkname,in,fl,cod,timer);
    elseif in(3) == 10
      sb2slspr(blkname,in,fl,cod,timer);
    else
      err = sb2slerr(blkname,'We have never seen this block type before');
    end;
  elseif in(2) == 5
    if in(3) <= 2 | in(3) >= 6  %sin,cos,asin,cos(asin),acos
      sb2sl121(blkname,in,fl,cod,timer);
    else
      sb2sl221(blkname,in,fl,cod,timer);
    end;   

  elseif in(2) == 6
                   % user defined blocks
    sb2slmat(blkname,in,fl,cod,timer);

  elseif in(2) == 7 % gain block
     sb2sl121(blkname,in,fl,cod,timer);

  elseif in(2) == 8
     sb2sl121(blkname,in,fl,cod,timer);

  elseif in(2) == 9 
    if in(3) == 1  % elseif cdn == 48  %cartesian to polar
      sb2slc2p(blkname);
    elseif in(3) == 2 % elseif cdn == 49  %polar to cartesian
      sb2slp2c(blkname);
    elseif in(3) == 3 %  elseif cdn == 50  %cartesian to spherical
      sb2slc2s(blkname);
    elseif in(3) == 4 %  elseif cdn == 51  % spherical to cartesian
      sb2sls2c(blkname);
    elseif in(3) == 5
      sb2slcoo(blkname,in)
    elseif in(3) == 6
      sb2slcoo(blkname,in)
    else
      err = sb2slerr(blkname,'We have never seen this block type before');
    end;
  elseif in(2) == 10
    % input source, 
    sb2slsc(blkname,in,fl,cod,timer);

  elseif in(2) == 11
    if in(3) == 1
       sb2slga(blkname,in,fl);
    elseif in(3) == 2
       sb2slsft(blkname,in,fl,cod,timer);
    elseif in(3) == 3
       sb2sl221(blkname,in,fl,cod,timer);
    elseif in(3) == 4
       sb2sl221(blkname,in,fl,cod,timer);
    elseif in(3) == 5
        sb2slswt(blkname,in,fl,cod,timer);
    elseif in(3) == 6
       sb2slgtb(blkname,in,fl,cod,timer);
    elseif in(3) == 7 %stop simulation
       sb2sl121(blkname,in,fl,cod,timer);
    elseif in(3) == 8
      err = sb2slerr(blkname,'We have never seen this block type before');
    elseif in(3) == 9
      err = sb2slerr(blkname,'Fuzzy Logic Block (Not Supported)');
    elseif in(3) == 10
      err = sb2slerr(blkname,'Expert System (Not Supported)');
    end;
  elseif in(2) == 13
      err = sb2slerr(blkname,'State Transition Diagram (Not Supported)');
    % to be done
  elseif in(2) == 14
    err = sb2slerr(blkname,'Data Storage (Not Supported)');
  else
    err = sb2slerr(blkname,deblank(face(cdn,:)));
  end;

⌨️ 快捷键说明

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