home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l455 / 2.ddi / MUTOOLS1.DI$ / MUFTBTCH.M < prev    next >
Encoding:
Text File  |  1993-03-11  |  3.5 KB  |  119 lines

  1. % function [dsysl,dsysr] =
  2. %      muftbtch(pre_dsysl,Ddata,sens,blk,nmeas,ncntrl,dim,wt)
  3. %
  4. %   Fit the magnitude curve obtained by multiplying the old D 
  5. %   frequency response (from PRE_DSYSL) with the DDATA data. 
  6. %   Returns stable, minimum phase system matrices DSYSL and 
  7. %   DSYSR, which can be absorbed into the original interconnection 
  8. %   structure with multiplications (using MMULT), and one inverse 
  9. %   (using MINV). Once absorbed, a H_infinity design can then be 
  10. %   performed, completing another iteration of MU-SYNTHESIS.
  11. %
  12. %   For the first MU-SYNTHESIS iteration, the variable
  13. %   PRE_DSYSL should be set to the string  'first'.  In subsequent 
  14. %   iterations, PRE_DSYSL should be the previous (left) rational 
  15. %   D-scaling system matrix, DSYSL.
  16. %
  17. %   For MAGFIT the specification of dim=[hmax,htol,nmin,nmax]
  18. %   (suggest dim=[.26,.1,0,3] to get a 3rd order fit of accuracy 
  19. %   of 1dB if possible.) 
  20. %
  21. %   See also: FITMAG, FITSYS, MAGFIT, MUSYNFIT, MUFTBTCH, and MUSYNFLP.
  22.  
  23. function [dsysl,dsysr] = muftbtch(osysl,magdata,sens,blk,nmeas,ncntrl,dim,wt)
  24.  
  25. usg = 'usage: [dsysl,dsysr] =';
  26. usg = [usg ' muftbtch(pre_dsysl,Ddata,sens,blk,nmeas,ncntrl,dim)'];
  27.  
  28. if nargin < 7, disp(usg); return
  29. end
  30. %
  31. [nblk,x] = size(blk);
  32. leftdim = nmeas;
  33.  for i=1:nblk
  34.   if blk(i,2) == 0
  35.     leftdim = leftdim + blk(i,1);
  36.     if blk(i,1) > 1
  37.       disp('full Ds not implemented yet')
  38.       return
  39.     end
  40.   else
  41.     leftdim = leftdim + blk(i,2);
  42.   end
  43.  end
  44. %
  45.  [mtype,mrows,mcols,mnum] = minfo(magdata);
  46.  omega = magdata(1:mnum,mcols+1);
  47.  [stype,srows,scols,snum] = minfo(sens);
  48.  if mnum ~= snum
  49.    error('SENS & MAG data have diff # of points - rerun VMU')
  50.    return
  51.  end
  52.  if nargin == 8
  53.    [wtype,wrows,wcols,wnum] = minfo(wt);
  54.    if wnum ~= mnum
  55.     error('WT & MAG data have diff # of points - rerun VMU')
  56.     return
  57.    end
  58.    supwt = wt(1:mnum,1);
  59.  else
  60.    supwt = ones(mnum,1);
  61.  end
  62. %
  63. %  NORMALIZE THE DATA BY THE LAST DSCALE
  64. %
  65.  magdata(1:mnum,1:mcols-1) = ...
  66.     inv(diag(magdata(1:mnum,mcols)))*magdata(1:mnum,1:mcols-1);
  67. %
  68. % MODIFICATION START %%%%%%%%%%%%%%
  69.  if isstr(osysl)
  70.    if strcmp(osysl,'first');
  71.      osysl_g = eye(leftdim);
  72.    else
  73.      error('First argument should be the string   first   or a SYSTEM matrix')
  74.      return  
  75.    end       
  76.  else        
  77.    [dum1,dum2,dum3,dum4] = minfo(osysl);
  78.    if strcmp(dum1,'syst')
  79.      osysl_g = frsp(osysl,omega);
  80.    elseif strcmp(dum1,'cons')
  81.      osysl_g = osysl;
  82.    else      
  83.      error('First argument should be the string   first   or a SYSTEM matrix')
  84.      return  
  85.    end       
  86.  end         
  87. % MODIFICATION END %%%%%%%%%%%%%%
  88.  loc = 1;
  89.  dsysl = [];
  90.  dsysr = [];
  91.  for i=1:nblk-1
  92.    wt = vpck((abs(sens(1:mnum,i) .* supwt)),omega);
  93.    osysl_g_loc = sel(osysl_g,loc,loc);
  94.    newdata = vabs(mmult(osysl_g_loc,sel(magdata,1,i)));
  95.    
  96.  %  scalard = magfit(newdata,dim,wt);
  97.    scalard = magfit(newdata,dim);
  98.    tmpsys = [];
  99.    for j=1:min([blk(i,1) blk(i,2)])
  100.      tmpsys = daug(tmpsys,scalard);
  101.    end
  102.    dsysl = daug(dsysl,tmpsys);
  103.    dsysr = daug(dsysr,tmpsys);
  104.    if blk(i,1) < blk(i,2)
  105.      for j=1:(blk(i,2)-blk(i,1))
  106.        dsysl = daug(dsysl,scalard);
  107.      end
  108.    elseif blk(i,2) < blk(i,1)
  109.      for j=1:(blk(i,1)-blk(i,2))
  110.        dsysr = daug(dsysr,scalard);
  111.      end
  112.    end
  113.    loc = loc + blk(i,2);
  114.  end
  115.  dsysl = daug(dsysl,eye(blk(nblk,2)+nmeas));
  116.  dsysr = daug(dsysr,eye(blk(nblk,1)+ncntrl));
  117. %
  118. % Copyright MUSYN INC 1991,  All Rights Reserved
  119.