Contents

Example 22: Third-order SIMO Periodic-LPV model

close all; clear; clc;

Periodic third-order LPV model

% System matrices
A1 = [0 0.9 0.2; -0.9 0.5 0; -0.2 0 0.2];
A2 = [0.60 -0.5 0.5; 0.50 0.60 0; -0.5 0 0.6];
A12 = [A1 A2];
B12 = [1 0.4; 1 0.2 ; 1 0.12];
C12 = [0.2 1 0.5 0.2 0.1 1; 0.2 0.1 1 0.3 0.4 0.8];
D12 = [0.1 0.2; 0.2 0.1];
K0 = [0.0130 0.0225; 0.0089 0.0060; 0.0002 -0.0010];

n = size(A12,1);    % The order of the system
m = size(A12,2)/n;  % The number of scheduling parameters
r = size(B12,2)/m;  % The number of inputs
l = size(C12,1);    % The number of outputs

Open-loop identification experiment

Simulation of the model in open loop

% Defining a number of constants
j = 18;     % period
np = 1000;  % number of periods
N = np*j;   % number of data points

% Measured data and the scheduling parameters
t = (0:N-1)';
u = randn(N,r);
mu1 = 0.8*sin(2*pi*(1:N)'./j) + 0.2;
mu3 = 0.8*cos(2*pi*(1:N)'./j) + 0.2;
mu = [mu1 mu3];

% Simulation of the system without noise
Alpv = [zeros(n) A12];
Blpv = [zeros(n,r) B12];
Clpv = [zeros(l,n) C12];
Dlpv = [zeros(l,r) D12];
Klpv = [K0 zeros(n,2*l)];
M = idafflpv(Alpv,Blpv,Clpv,Dlpv,Klpv,[],1);
y0 = sim(M,u,t,mu);

% Simulation of the system with noise
e = 0.1.*randn(N,l);
y = sim(M,u,t,mu,e);
disp('Signal to noise ratio (SNR) (open-loop)')
snr(y,y0)
Signal to noise ratio (SNR) (open-loop)

ans =

   21.1911   19.1111

Identification of the model in open loop

% Defining a number of constants
p = 7;     % past window size
f = 7;     % past window size

% LPV identification without noise
pnd = pschedclust(mu,f,p);
[S,X,TU,K] = pordvarx(u,y,mu,f,p,pnd,'tikh','gcv',0,[0 0 0 0 1]);
[x,CC] = pmodx(X,TU,K,n,1e-4,1e-8);
[A,B,C,D,K] = px2abcdk(x,u,y,mu,f,p,[0 0 0 0 1],pnd);
figure, semilogy(S,'x');
title('Singular values')
disp('Canonical correlation coefficients')
CC(1:n)
Canonical correlation coefficients

ans =

    0.9993    0.9988    0.9957

Verification results

% Simulation of identified LPV system
Aidm = [zeros(n) A];
Bidm = [zeros(n,r) B];
Cidm = [zeros(l,n) C];
Didm = [zeros(l,r) D];
Kidm = [zeros(n,l) K];
Mm = idafflpv(Aidm,Bidm,Cidm,Didm,Kidm,[],1);
yidm = sim(Mm,u,t,mu);
disp('VAF of identified LPV system')
vaf(y,yidm)
VAF of identified LPV system

ans =

   98.7543
   98.1991