function Theta = MIMO_ML_Constrain(Theta, ModelVar); Impose the following constraints on the plant model parameters: 1. reciprocity B 2. norm([a, vec(b), vec(ig)] = 1 Output parameter Theta = see input parameters Input parameters Theta = new estimate plant, noise, and initial conditions parameters structure with fields 'A', 'B', 'Ig' Theta = struct('A',[],'B',[], 'Ig', []) Theta.A = 1 x (OrderA+1) Theta.A(r) = coefficient a(r-1) of Omega^(r-1) Theta.B = ny x nu x (OrderB+1) Theta.B(i,j,r) = coefficient b(i,j,r-1) of Omega^(r-1) Theta.Ig = ny x (OrderIg+1) Theta.Ig(i,r) = coefficient ig(i,r-1) of Omega^(r-1) ModelVar = contains the information about the model to be identified structure with fields 'Transient', 'ThePlane', 'TheModel', 'Reciprocal', ... ModelVar.Transient = 1 then the initial conditions of the plant and/or noise are estimated ModelVar.PlantPlane = plane of the plant model 's': continuous-time; 'w': sqrt(s)-domain 'z': discrete-time; '': plane not defined ModelVar.Struct = model structure 'EIV': errors-in-variables (noisy input-output data) 'OE': generalised output error (known input, noisy output) ModelVar.RecipPlant = 1 if plant model is reciprocal: G(i,j) = G(j,i) ModelVar.nu = number of inputs ModelVar.ny = number of outputs ModelVar.na = order polynomial A ModelVar.nb = order matrix polynomial B ModelVar.nig = order vector polynomial Ig Copyright (c) Rik Pintelon, Vrije Universiteit Brussel - dept. ELEC, November 2009 All rights reserved. Software can be used freely for non-commercial applications only.
0001 function Theta = MIMO_ML_Constrain(Theta, ModelVar); 0002 % 0003 % function Theta = MIMO_ML_Constrain(Theta, ModelVar); 0004 % 0005 % Impose the following constraints on the plant model parameters: 0006 % 1. reciprocity B 0007 % 2. norm([a, vec(b), vec(ig)] = 1 0008 % 0009 % 0010 % Output parameter 0011 % 0012 % Theta = see input parameters 0013 % 0014 % 0015 % Input parameters 0016 % 0017 % Theta = new estimate plant, noise, and initial conditions parameters 0018 % structure with fields 'A', 'B', 'Ig' 0019 % Theta = struct('A',[],'B',[], 'Ig', []) 0020 % Theta.A = 1 x (OrderA+1) 0021 % Theta.A(r) = coefficient a(r-1) of Omega^(r-1) 0022 % Theta.B = ny x nu x (OrderB+1) 0023 % Theta.B(i,j,r) = coefficient b(i,j,r-1) of Omega^(r-1) 0024 % Theta.Ig = ny x (OrderIg+1) 0025 % Theta.Ig(i,r) = coefficient ig(i,r-1) of Omega^(r-1) 0026 % 0027 % ModelVar = contains the information about the model to be identified 0028 % structure with fields 'Transient', 'ThePlane', 'TheModel', 'Reciprocal', ... 0029 % ModelVar.Transient = 1 then the initial conditions of the plant and/or noise are estimated 0030 % ModelVar.PlantPlane = plane of the plant model 0031 % 's': continuous-time; 0032 % 'w': sqrt(s)-domain 0033 % 'z': discrete-time; 0034 % '': plane not defined 0035 % ModelVar.Struct = model structure 0036 % 'EIV': errors-in-variables (noisy input-output data) 0037 % 'OE': generalised output error (known input, noisy output) 0038 % ModelVar.RecipPlant = 1 if plant model is reciprocal: G(i,j) = G(j,i) 0039 % ModelVar.nu = number of inputs 0040 % ModelVar.ny = number of outputs 0041 % ModelVar.na = order polynomial A 0042 % ModelVar.nb = order matrix polynomial B 0043 % ModelVar.nig = order vector polynomial Ig 0044 % 0045 % 0046 % Copyright (c) Rik Pintelon, Vrije Universiteit Brussel - dept. ELEC, November 2009 0047 % All rights reserved. 0048 % Software can be used freely for non-commercial applications only. 0049 % 0050 0051 nu = ModelVar.nu; 0052 ny = ModelVar.ny; 0053 0054 0055 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0056 % constraint on plant model parameters % 0057 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 0058 0059 if ModelVar.RecipPlant 0060 for jj = 1:nu % column index 0061 for ii = 1+jj:ny % row index 0062 lji = jj + ny*(ii-1); % block position coefficients b(jj,ii) polynomial 0063 % reciprocity plant model 0064 if lji <= nu*ny % test for rectangular matrices 0065 Theta.B(jj,ii,:) = Theta.B(ii,jj,:); 0066 end % if 0067 end % ii 0068 end % jj 0069 end % if symmetric B 0070 0071 NormPlant = norm([Theta.A.'; Theta.B(:); Theta.Ig(:)]); 0072 Theta.A = Theta.A/NormPlant; 0073 Theta.B = Theta.B/NormPlant; 0074 Theta.Ig = Theta.Ig/NormPlant; 0075