Contents
Example 23: Periodic-LPV model of a wind turbine system
close all; clear; clc;
LPV model of a wind turbine system
% LPV system h = 0.1; % sample time M = wtsLPV(h); [l,r,n,m] = size(M);
Closed-loop identification experiment
Simulation of the model in closed loop
% Parameters j = 35; % period np = 1000; % number of periods N = np*j; % number of data points % Measured data from the scheduling parameters t = (0:h:h*(N-1))'; Omr = 2*pi/(h*j); mu1 = sin(Omr*t); mu2 = sin(Omr*t+2/3*pi); mu3 = -mu1-mu2; mu = [ones(N,1) mu1 mu2]; % Distarbance and excitation signals u = [randn(N,3) randn(N,3) 1e3.*randn(N,1)]; % Simulation of the LPV system in closed loop options = simset('solver','FixedStepDiscrete'); [t,x,y] = sim('SwtsLPV',[t(1) t(end)],options,[t u mu(:,2:3)]); u = [y(:,7:9) u(:,7)]; y = y(:,1:6); % signal scaling and trending [us,Du,ys,Dy] = sigscale(u,y);
Identification of the model in closed loop
% Defining a number of constants p = 12; % past window size f = 10; % future window size % Periodic-LPV identification ckeep = [1 1 1 1 1 1; 0 0 0 1 1 1; 0 0 0 1 1 1]'; % do not keep the first three outputs of C1 and C2 pnd = pschedclust(mu,f,p); [S,x,TU,K] = pordvarx(us,ys,mu,f,p,pnd,'none','gcv',0,[2 0 0 1 0],ckeep); [x,CC] = pmodx(x,TU,K,n,[1e-12 1e-8 1e-6 1e-4],[1e-12 1e-8 1e-6 1e-4]); [A,B,C,D,K] = px2abcdk(x,us,ys,mu,f,p,[2 0 0 1 0],pnd); % Plot singular values and canonocal coefficients figure, semilogy(S,'x'); title('Singular values after LQ factorization') figure, semilogy(CC,'x'); title('Canonical correlation coefficients')


Optimize results with the prediction error method
Mid = idafflpv(A,B,C,D,K,[],h); % [Mp,us,ys] = idafflpvA2idss(Mid,us,ys,mu(:,2:3)); % set(Mp,'SSParameterization','Free','DisturbanceModel','Estimate','nk',zeros(1,size(D,2))); % Mp = pem(iddata(ys,us,h),Mp); % Mp = idss2idafflpvA(Mp,m);
Verification results
% Simulation of real LPV system uv = [zeros(N,3) randn(N,3) 1e3.*randn(N,1)]; yv = sim(M,uv,t,[mu1 mu2 mu3]); % Simulation of identified LPV system Mid.b = B*(kron(eye(m),inv(Du))); Mid.c = Dy*C; Mid.d = Dy*D*(kron(eye(m),inv(Du))); yid = sim(Mid,uv(:,4:end),t,mu(:,2:3)); disp('VAF of identified LPV system') vaf(yv,yid)
VAF of identified LPV system ans = 97.9819 99.7006 99.5031 98.3372 99.8716 99.2135
Identification results
% Plot eigenvalues figure hold on title('Poles of identified LPV system (no noise)') [cx,cy] = pol2cart(linspace(0,2*pi),ones(1,100)); plot(cx,cy,'k'); Ad = M.a; plot(real(eig(Ad(:,1:n))),imag(eig(Ad(:,1:n))),'k+','LineWidth',0.1,'MarkerEdgeColor','k', 'MarkerFaceColor','k', 'MarkerSize',10); plot(real(eig(A(:,1:n))),imag(eig(A(:,1:n))),'bx'); axis([-1 1 -1 1]); legend('STABBND','TRUE','PBSID-opt','Location','West'); axis square hold off
