GenerateMIMOSources

PURPOSE ^

[H,D,F] = GenerateMIMOSources(L,P,M,K,gamma,Mode)

SYNOPSIS ^

function [H,D,F] = GenerateMIMOSources(L,P,M,K,gamma,Mode)

DESCRIPTION ^

[H,D,F] = GenerateMIMOSources(L,P,M,K,gamma,Mode)

  GenerateMIMOSources(L,P,M,K) produces a source model for M-array data 
  emanating from L independent Gaussian sources spectrally shaped by Pth 
  order moving average (MA, i.e. finite impulse response) innovation 
  filters. The source signals are then mixed by a random MxL paraunitary 
  matrix of order K.

  GenerateMIMOSources(L,P,M,K,gamma) operates the same but the additional 
  input parameter gamma limits the radii of zeros in the MA innovation 
  filters. This restricts the dynamic range of the generated spectra.

  A flow graph of this source model is given in [1]. In the context of 
  multichannel coding, M=L is required to avoid a division by zero, as the 
  geometric mean of variances is zero for M>L. The purpose of limiting the 
  dynamic range of source PSDs is driven by the same aim, and keeps the 
  problem numerically tractable.

  The source model does currently not permit the overdetermined case where 
  the number of sources exceeds the number of sensors.

  [H,D,F]=GenerateMIMOSources(L,P,M,K,gamma) returns the paraunitary 
  mixing matrix H(z) of dimension MxL and order K in H; D represents a 
  diagonal parahermitian matrix D(z) containing the power spectra of the L 
  sources prior to convolutive mixing. Minimum phase filters of order P 
  that generate such PSDs from unit variance complex Gaussian white noise 
  are contained in the columns of the matrix F.

  [H,D,F]=GenerateMIMOSources(L,P,M,K,gamma,Mode) returns a real-valued
  source model for Mode='real', and a complex valued one by default.

  Input parameters
     L       number of independent sources
     P       order of MA innovation filter
     M       dimension of array generated (M>=L)
     K       order of paraunitary mixing matrix
     gamma   max radius for zeros in the innovation filters
           (default value is 1)
     Mode    'real' for readl valued, 'complex valued' (default)

  Output parameters
     H       paraunitary matrix
     D       diagonal, parahermitian matrix
     F       columns are the innovation filters, whose 
             ACFs generate the diagonal entries of D.

  Reference:

  [1] S. Redif, S. Weiss and J.G. McWhirter, "Sequential Matrix 
      Diagonalisation 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:

SOURCE CODE ^

0001 function [H,D,F] = GenerateMIMOSources(L,P,M,K,gamma,Mode)
0002 %[H,D,F] = GenerateMIMOSources(L,P,M,K,gamma,Mode)
0003 %
0004 %  GenerateMIMOSources(L,P,M,K) produces a source model for M-array data
0005 %  emanating from L independent Gaussian sources spectrally shaped by Pth
0006 %  order moving average (MA, i.e. finite impulse response) innovation
0007 %  filters. The source signals are then mixed by a random MxL paraunitary
0008 %  matrix of order K.
0009 %
0010 %  GenerateMIMOSources(L,P,M,K,gamma) operates the same but the additional
0011 %  input parameter gamma limits the radii of zeros in the MA innovation
0012 %  filters. This restricts the dynamic range of the generated spectra.
0013 %
0014 %  A flow graph of this source model is given in [1]. In the context of
0015 %  multichannel coding, M=L is required to avoid a division by zero, as the
0016 %  geometric mean of variances is zero for M>L. The purpose of limiting the
0017 %  dynamic range of source PSDs is driven by the same aim, and keeps the
0018 %  problem numerically tractable.
0019 %
0020 %  The source model does currently not permit the overdetermined case where
0021 %  the number of sources exceeds the number of sensors.
0022 %
0023 %  [H,D,F]=GenerateMIMOSources(L,P,M,K,gamma) returns the paraunitary
0024 %  mixing matrix H(z) of dimension MxL and order K in H; D represents a
0025 %  diagonal parahermitian matrix D(z) containing the power spectra of the L
0026 %  sources prior to convolutive mixing. Minimum phase filters of order P
0027 %  that generate such PSDs from unit variance complex Gaussian white noise
0028 %  are contained in the columns of the matrix F.
0029 %
0030 %  [H,D,F]=GenerateMIMOSources(L,P,M,K,gamma,Mode) returns a real-valued
0031 %  source model for Mode='real', and a complex valued one by default.
0032 %
0033 %  Input parameters
0034 %     L       number of independent sources
0035 %     P       order of MA innovation filter
0036 %     M       dimension of array generated (M>=L)
0037 %     K       order of paraunitary mixing matrix
0038 %     gamma   max radius for zeros in the innovation filters
0039 %           (default value is 1)
0040 %     Mode    'real' for readl valued, 'complex valued' (default)
0041 %
0042 %  Output parameters
0043 %     H       paraunitary matrix
0044 %     D       diagonal, parahermitian matrix
0045 %     F       columns are the innovation filters, whose
0046 %             ACFs generate the diagonal entries of D.
0047 %
0048 %  Reference:
0049 %
0050 %  [1] S. Redif, S. Weiss and J.G. McWhirter, "Sequential Matrix
0051 %      Diagonalisation Algorithms for Polynomial EVD of Parahermitian
0052 %      Matrices," IEEE Transactions on Signal Processing, 63(1):81-89,
0053 %      January 2015.
0054 
0055 % Stephan Weiss, August 2012
0056 % real valued option, S. Weiss, Oct 2018
0057 
0058 %--------------------------------------------------------
0059 %   Input Parameter Check
0060 %--------------------------------------------------------
0061 if nargin==4,
0062    gamma=1;
0063 end;
0064 if M < L,
0065   error('more sources than array elements');
0066 end;
0067 RealMode = 0;
0068 if nargin==6,
0069   if Mode=='real',
0070      RealMode=1;
0071   end;
0072 end;  
0073 
0074 %--------------------------------------------------------
0075 %   Paraunitary Matrix
0076 %--------------------------------------------------------
0077 H = eye(M);  
0078 for k = 1:K,
0079   if RealMode==1, 
0080      v = randn(M,1);
0081   else
0082      v = randn(M,1) + sqrt(-1)*randn(M,1);
0083   end;
0084   v = v./norm(v,2);
0085   Hnew = zeros(M,M,2);
0086   if RealMode==1,
0087     [Q,~] = qr(randn(M,M));
0088   else  
0089     [Q,~] = qr(randn(M,M) + sqrt(-1)*randn(M,M));  
0090   end;  
0091   Hnew(:,:,1) = v*(v'*Q);
0092   Hnew(:,:,2) = Q - Hnew(:,:,1);
0093   H = PolyMatConv(H,Hnew);
0094 end;
0095 
0096 %--------------------------------------------------------
0097 %   Source Innovation Filters
0098 %--------------------------------------------------------
0099 if RealMode==1,
0100   P2 = floor(P/2);
0101   P = 2*P2;
0102   Fz = (rand(P2-1,L)*gamma).*exp(sqrt(-1)*2*pi*rand(P2-1,L));  % zeros
0103   Fz = [Fz; conj(Fz)];
0104 else    
0105   Fz = (rand(P-1,L)*gamma).*exp(sqrt(-1)*2*pi*rand(P-1,L));  % zeros
0106 end;
0107 F = zeros(P,L);
0108 for l = 1:L,
0109    F(:,l) = poly( Fz(:,l)).';
0110 end;
0111 F(:,1) = F(:,1)./norm(F(:,1),2);
0112 Ffd = abs(fft(F,1024,1));
0113 for l = 1:L-1,
0114    alpha = min(Ffd(:,l)./Ffd(:,l+1));
0115    Ffd(:,l+1) = alpha*Ffd(:,l+1);
0116    F(:,l+1) = alpha*F(:,l+1);
0117 end;
0118 
0119 %--------------------------------------------------------
0120 %   Output Parameters
0121 %--------------------------------------------------------
0122 D1 = zeros(L,L,P);
0123 for l = 1:L,
0124   for p = 1:P,
0125     D1(l,l,p) = F(p,l);
0126   end;
0127 end;
0128 D = PolyMatConv(D1,ParaHerm(D1));
0129 H = H(:,1:L,:);
0130 
0131 
0132

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