PHPolyMatInv

PURPOSE ^

S = PHPolyMatInv(R,T,MaxIter,theta,epsilon);

SYNOPSIS ^

function S = PHPolyMatInv(R,T,MaxIter,theta,epsilon);

DESCRIPTION ^

S = PHPolyMatInv(R,T,MaxIter,theta,epsilon);

  PHPolyMatInv() calculates the inverse of parahermitian polynomial matrix as
  described in [1].

  S = PHPolyMatInv(R) returns the inverse of R. The input R  represents an 
  MxMx(2L+1) parahermitian matrix R(z) of the form
     R(z) = RL'z^L + ... + R1' z + R0 + R1 z^{-1} + ... + RLz^{-L}
  whereby
     R(:,:,1) = RL';
     ...
     R(:,:,L) = R1';
     R(:,:,L+1) = R0;
     R(:,:,L+2) = R1;
     ...
     R(:,:,2*L+1) = RL;
  The function returns a paraunitary matrix S(z) such that approximately
  S(z) R(z) = R(z) S(z) = I. The polynomial matrix S(z) is returned in the 
  same format at R, with the lag parameter forming a 3rd dimension.

  The inversion is based in a polynomial EVD of R, and an inversion of the
  polynomial eigenvalues. The PEVD uses the sequential best rotation (SMD, [2])
  algorithm, and S(z) is determined from a minimum mean square error inverse
  detailed in [1]. 

  S = PHPolyMatInv(R,T) sets the order of the inverse polynomial eigenvalues 
  to 2T (default: T=10*L). 
 
  The SMD algorithm can be influenced by a number of optional inputs:

  S = PHPolyMatInv(R,T,MaxIter) stops the SMD algorithm after MaxIter 
  iteration steps (default: MaxIter=100).

  S = PHPolyMatInv(R,T,MaxIter,theta) stops the SMD algorithm either 
  after MaxIter iteration steps, or once the maximum off-diagonal element 
  falls below a threshold theta (default: theta=1e-5).
 
  S = PHPolyMatInv(R,T,MaxIter,theta,epsilon) curtails the growth of
  both the parahermitian and paraunitary matrices that arise from the PEVD
  of R, by removing a proportion epsilon of the energy from these matrices.

  Input parameters
     R         parahermitian matrix
     T         length of SISO inverses
     MaxIter   max. iterations for PEVD
               (default = 200)
     theta     threshold for off-diagonal values
               (default = 0.00001)
     epsilon   proportion of energy being trimmed to curtail polynomial order

  Output parameter:
     S         inverse parahermitian matrix

  References:
  [1] S. Weiss, A. Millar, and R.W. Stewart: "Inversion of Parahermitian 
      Matrices,"European Signal Processing Conference, Aalborg, Denmark, 
      pp. 447-451, August 2010.
  [2] S. Redif, S. Weiss, and J.G. McWhirter, "Sequential Matrix Diagonali-
      sation Algorithms for Polynomial EVD of Parahermitian Matrices," IEEE
      Transactions on Signal Processing, 63(1):81-89, January 2015.

CROSS-REFERENCE INFORMATION ^

This function calls: This function is called by:

SUBFUNCTIONS ^

SOURCE CODE ^

0001 function S = PHPolyMatInv(R,T,MaxIter,theta,epsilon);
0002 %S = PHPolyMatInv(R,T,MaxIter,theta,epsilon);
0003 %
0004 %  PHPolyMatInv() calculates the inverse of parahermitian polynomial matrix as
0005 %  described in [1].
0006 %
0007 %  S = PHPolyMatInv(R) returns the inverse of R. The input R  represents an
0008 %  MxMx(2L+1) parahermitian matrix R(z) of the form
0009 %     R(z) = RL'z^L + ... + R1' z + R0 + R1 z^{-1} + ... + RLz^{-L}
0010 %  whereby
0011 %     R(:,:,1) = RL';
0012 %     ...
0013 %     R(:,:,L) = R1';
0014 %     R(:,:,L+1) = R0;
0015 %     R(:,:,L+2) = R1;
0016 %     ...
0017 %     R(:,:,2*L+1) = RL;
0018 %  The function returns a paraunitary matrix S(z) such that approximately
0019 %  S(z) R(z) = R(z) S(z) = I. The polynomial matrix S(z) is returned in the
0020 %  same format at R, with the lag parameter forming a 3rd dimension.
0021 %
0022 %  The inversion is based in a polynomial EVD of R, and an inversion of the
0023 %  polynomial eigenvalues. The PEVD uses the sequential best rotation (SMD, [2])
0024 %  algorithm, and S(z) is determined from a minimum mean square error inverse
0025 %  detailed in [1].
0026 %
0027 %  S = PHPolyMatInv(R,T) sets the order of the inverse polynomial eigenvalues
0028 %  to 2T (default: T=10*L).
0029 %
0030 %  The SMD algorithm can be influenced by a number of optional inputs:
0031 %
0032 %  S = PHPolyMatInv(R,T,MaxIter) stops the SMD algorithm after MaxIter
0033 %  iteration steps (default: MaxIter=100).
0034 %
0035 %  S = PHPolyMatInv(R,T,MaxIter,theta) stops the SMD algorithm either
0036 %  after MaxIter iteration steps, or once the maximum off-diagonal element
0037 %  falls below a threshold theta (default: theta=1e-5).
0038 %
0039 %  S = PHPolyMatInv(R,T,MaxIter,theta,epsilon) curtails the growth of
0040 %  both the parahermitian and paraunitary matrices that arise from the PEVD
0041 %  of R, by removing a proportion epsilon of the energy from these matrices.
0042 %
0043 %  Input parameters
0044 %     R         parahermitian matrix
0045 %     T         length of SISO inverses
0046 %     MaxIter   max. iterations for PEVD
0047 %               (default = 200)
0048 %     theta     threshold for off-diagonal values
0049 %               (default = 0.00001)
0050 %     epsilon   proportion of energy being trimmed to curtail polynomial order
0051 %
0052 %  Output parameter:
0053 %     S         inverse parahermitian matrix
0054 %
0055 %  References:
0056 %  [1] S. Weiss, A. Millar, and R.W. Stewart: "Inversion of Parahermitian
0057 %      Matrices,"European Signal Processing Conference, Aalborg, Denmark,
0058 %      pp. 447-451, August 2010.
0059 %  [2] S. Redif, S. Weiss, and J.G. McWhirter, "Sequential Matrix Diagonali-
0060 %      sation Algorithms for Polynomial EVD of Parahermitian Matrices," IEEE
0061 %      Transactions on Signal Processing, 63(1):81-89, January 2015.
0062 
0063 % S.Weiss, UoS, updated 6/6/2015
0064 
0065 %------------------------------------------------
0066 %   check for optional parameters
0067 %------------------------------------------------
0068 if nargin<5, epsilon = 0.0; end;
0069 if nargin<4, theta = 0.00001; end;
0070 if nargin<3, MaxIter = 200; end;
0071 if nargin<2, T = 10*size(R,3); end;
0072 
0073 %------------------------------------------------
0074 %   polynomial EVD
0075 %------------------------------------------------
0076 [Q,Gamma] = SMD(R,MaxIter,theta,0.0);
0077 GammaInv = DiagInverse(Gamma,T,1e-5);
0078 S = PolyMatConv(ParaHerm(Q),PolyMatConv(GammaInv,Q));
0079 
0080 
0081 
0082 %------------------------------------------------
0083 %  subroutine DiagInverse()
0084 %------------------------------------------------
0085 function Hinv = DiagInverse(D,T,gamma);
0086 % Inversion of a diagonal polynomial matrix D. D does not have
0087 % to be diagonal, but for the calculation of Dinv, only the on-diagonal
0088 % elements of D are considered.
0089 %
0090 % The inverse is calculated on the index interval [-T;+T].
0091 %
0092 % The diagonal elements of D are truncated if there are tails with
0093 % elements smaller than the variable gamma.
0094 %
0095 % Input parameters:
0096 %    D         KxK polynomial matrix
0097 %    T         length of inverse (or lag of its autocorrelation sequence)
0098 %    gamma     element size for truncation
0099 %
0100 % Output parameters:
0101 %    Dinv      KxK diagonal matrix containing the inverse
0102 %              polynomials of the on-diagonal elements of H.
0103 %
0104 % S. Weiss, 28/12/2006
0105 
0106 [M,N,L] = size(D);
0107 Dinv = zeros(M,M,T);
0108 for m = 1:M,
0109    d = shiftdim(D(m,m,:));
0110    ZeroPosition = find(abs(d)>gamma);        % identify zeros
0111    d = d(ZeroPosition(1):ZeroPosition(end));   % truncate
0112    hinv = AcsMmseInv(d,T);
0113    Hinv(m,m,:) = hinv;
0114 end;
0115 
0116 
0117 %------------------------------------------------
0118 %  subroutine AcsMmseInv()
0119 %------------------------------------------------
0120 function s = AcsMmseInv(r,T);
0121 % Inverts the response r which is assumed to have the
0122 % properties of an autocorrelation sequence. The inverse
0123 % is constrained to the same symmetry conditions as r,
0124 % with a length of 2T+1, i.e. corresponding to an inverse
0125 % autocorrelation sequence with maximum lag +/-T.
0126 %
0127 % Input parameters
0128 %    r     autocorrelation sequence
0129 %    T     maximum lag of inverse
0130 %
0131 % Output parameter
0132 %    s     inverse of r
0133 %
0134 % S. Weiss, univ of Strathclyde, 24/1/2010
0135 
0136 %-----------------------------------------------------
0137 % setup matrix equation
0138 %-----------------------------------------------------
0139 T2 = (T+1)/2;
0140 R = toeplitz([r; zeros(T-1,1)],[r(1) zeros(1,T-1)]);
0141 R1 = R(:,1:T2) + fliplr(R(:,T2:end));
0142 R2 = R(:,1:T2) - fliplr(R(:,T2:end));
0143 R_real = [real(R1)  -imag(R2);
0144         imag(R1)   real(R2)];
0145 d_real = zeros(2*(length(r)+T-1),1);
0146 d_real( (length(r)+T)/2 ) = 1;
0147 
0148 %-----------------------------------------------------
0149 % pseudo-inverse
0150 %-----------------------------------------------------
0151 s_real = pinv(R_real)*d_real;
0152 
0153 %-----------------------------------------------------
0154 % assemble inverse
0155 %-----------------------------------------------------
0156 s = [s_real(1:T2); zeros(T2-1,1)] + sqrt(-1)*[s_real(T2+1:2*T2); ...
0157                     zeros(T2-1,1)];
0158 s = s + conj(flipud(s));
0159

Generated on Mon 03-Jul-2023 19:45:57 by m2html © 2005