Calculates a hermitian symmetric square root of the inverse of the covariance matrix of the output error Y-G*U. function PolyTrans = MIMO_ML_InvCovOutputError(data, PolyTrans); Output PolyTrans = structure containing the polynomials and transfer functions evaluated in x PolyTrans.A = denominator polynomial plant transfer function evaluated in x.Plant size 1 x F PolyTrans.G = plant transfer matrix evaluated in x.Plant size ny x nu x F PolyTrans.Tg = plant transient term evaluated in x.Plant size ny x F PolyTrans.sqrtCEinv = hermitian symmetric square root of the inverse of the covariance of the output error (Cov(NY-G*NU)) Input data = structure containing the non-parametric covariance data data.CY = (sample) noise covariance matrix of Y, size: ny x ny x F data.CU = (sample) noise covariance matrix of U, size: nu x nu x F data.CYU = (sample) noise covariance matrix of U, size: ny x nu x F PolyTrans = structure containing the polynomials and transfer functions evaluated in x PolyTrans.A = denominator polynomial plant transfer function evaluated in x.Plant size 1 x F PolyTrans.G = plant transfer matrix evaluated in x.Plant size ny x nu x F PolyTrans.Tg = plant transient term evaluated in x.Plant size ny x F Copyright (c) Rik Pintelon, Vrije Universiteit Brussel - dept. ELEC, November 2009 All rights reserved. Software can be used freely for non-commercial applications only. Version 1 December 2009
0001 function PolyTrans = MIMO_ML_InvCovOutputError(data, PolyTrans); 0002 % 0003 % Calculates a hermitian symmetric square root of the inverse of 0004 % the covariance matrix of the output error Y-G*U. 0005 % 0006 % function PolyTrans = MIMO_ML_InvCovOutputError(data, PolyTrans); 0007 % 0008 % 0009 % Output 0010 % 0011 % PolyTrans = structure containing the polynomials and transfer functions evaluated in x 0012 % PolyTrans.A = denominator polynomial plant transfer function evaluated in x.Plant 0013 % size 1 x F 0014 % PolyTrans.G = plant transfer matrix evaluated in x.Plant 0015 % size ny x nu x F 0016 % PolyTrans.Tg = plant transient term evaluated in x.Plant 0017 % size ny x F 0018 % PolyTrans.sqrtCEinv = hermitian symmetric square root of the inverse of the covariance of the 0019 % output error (Cov(NY-G*NU)) 0020 % 0021 % Input 0022 % 0023 % data = structure containing the non-parametric covariance data 0024 % data.CY = (sample) noise covariance matrix of Y, size: ny x ny x F 0025 % data.CU = (sample) noise covariance matrix of U, size: nu x nu x F 0026 % data.CYU = (sample) noise covariance matrix of U, size: ny x nu x F 0027 % 0028 % PolyTrans = structure containing the polynomials and transfer functions evaluated in x 0029 % PolyTrans.A = denominator polynomial plant transfer function evaluated in x.Plant 0030 % size 1 x F 0031 % PolyTrans.G = plant transfer matrix evaluated in x.Plant 0032 % size ny x nu x F 0033 % PolyTrans.Tg = plant transient term evaluated in x.Plant 0034 % size ny x F 0035 % 0036 % 0037 % Copyright (c) Rik Pintelon, Vrije Universiteit Brussel - dept. ELEC, November 2009 0038 % All rights reserved. 0039 % Software can be used freely for non-commercial applications only. 0040 % Version 1 December 2009 0041 % 0042 0043 0044 %%%%%%%%%%%%%%%%%%%%%%%%%%%% 0045 % initialisation variables % 0046 %%%%%%%%%%%%%%%%%%%%%%%%%%%% 0047 0048 F = size(data.CY, 3); % number of frequencies 0049 ny = size(data.CY, 1); % number of outputs 0050 0051 PolyTrans.sqrtCEinv = zeros(ny, ny, F); % hermitian square root of CEinv 0052 0053 0054 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0055 % Fast calculation of the covariance Cov(NY-G*NU) of the equation error (NY-G*NU). The lines % 0056 % below are equivalent with % 0057 % for kk = 1:F % 0058 % CE = data.CY(:,:,kk) + PolyTrans.G(:,:,kk) * data.CU(:,:,kk) * PolyTrans.G(:,:,kk)' ... % 0059 % - 2*herm(data.CYU(:,:,kk) * PolyTrans.G(:,:,kk)'); % 0060 % end % 0061 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0062 0063 % PolyTrans.sqrtCEinv is used as intermediate variable for CE = Cov(NY-G*NU) 0064 PolyTrans.sqrtCEinv = data.CY + Mat_Mult(Mat_Mult(PolyTrans.G, data.CU), Conj_Trans(PolyTrans.G)) ... 0065 - 2*herm(Mat_Mult(data.CYU, Conj_Trans(PolyTrans.G))); 0066 0067 0068 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0069 % calculation of a hermitian symmetric square root of CEinv = Cov(Ny-G*NU) % 0070 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0071 0072 if ny == 1 0073 PolyTrans.sqrtCEinv = PolyTrans.sqrtCEinv.^(-0.5); 0074 else % more than one output 0075 % relative upper limit under which the singular values are set to zero 0076 % in the pseudo-inverse of the square root of the covariance matrix 0077 delta = 1e-6; 0078 % pseudo-inverse covariance matrix output residuals 0079 PolyTrans.sqrtCEinv = Sqrt_Inv(PolyTrans.sqrtCEinv, delta); 0080 end % if one output 0081