Contents

Example 18: Discretization of continuous LPV model of wing flutter

close all; clear; clc;

Wing flutter model

% Numerical values of parameters
a = -0.6847;
b = 0.135;
mw = 2.049;
mt = 12.387;
rho = 1.225;
ch = 27.43;
ca = 0.036;
cla = 6.28;
clb = 3.358;
cma = (0.5+a)*cla;
cmb = -0.635;
xa = (0.0873-(b+a*b))/b;
Ia = 0.0517+mw*xa^2*b^2;
kh = 2844.4;
ka = 2.84;

% System variables
d = (mt*Ia-mw^2*xa^2*b^2);

% System matrices for continuous-time
A0 = [0 0 1 0; 0 0 0 1;
    -Ia*kh/d +ka*mw*xa*b/d -Ia*ch/d +mw*xa*b*ca/d
    +mw*xa*b*kh/d -(mt/d)*ka +mw*xa*b*ch/d -mt*ca/d];
A1 = [0 0 0 0; 0 0 0 0;
    0 0 -(Ia*rho*b*cla+mw*xa*rho*b^3*cma)/d -(Ia*rho*b^2*cla*(0.5-a)+mw*xa*rho*b^4*cma*(0.5-a))/d;
    0 0 (mw*xa*rho*b^2*cla + mt*rho*b^2*cma)/d (mw*xa*rho*b^3*cla*(0.5-a)+mt*rho*b^3*cma*(0.5-a))/d];
A2 = [0 0 0 0; 0 0 0 0;
    0 -(Ia*rho*b*cla+mw*xa*b^3*rho*cma)/d 0 0;
    0 (mw*xa*b^2*rho*cla+mt*rho*b^2*cma)/d 0 0];

B0 = [0; 0; 0; 0];
B1 = [0; 0; 0; 0];
B2 = [0; 0; (-Ia*rho*b*clb-mw*xa*b^3*rho*cmb)/d; (mw*xa*b^2*rho*clb+mt*rho*b^2*cmb)/d];

sys = idafflpv([A0 A1 A2],[B0 B1 B2],[eye(2,4) zeros(2,4*2)],zeros(2,3));

Discretization of continuous LPV model

% discrete approximation
sysde1 = c2d(sys,0.05,'euler','linear');
sysde2 = c2d(sys,0.05,'euler','quadratic');
sysde3 = c2d(sys,0.05,'tustin','linear');
sysde4 = c2d(sys,0.05,'tustin','quadratic');

Discretization results

% scheduling signals
t = (0:0.01:0.1)';
v = linspace(1,12,length(t))';
p = [v v.^2];
pq = [v v.^2 v.^2 v.^3 v.^4];

% pole and zero locations
sys0 = idafflpv2ss(sys,p);
figure, pzmap(sys0);
syse1 = idafflpv2ss(sysde1,p);
syse2 = idafflpv2ss(sysde2,pq);
syse3 = idafflpv2ss(sysde3,p);
syse4 = idafflpv2ss(sysde4,pq);
figure, pzmap(syse1,'y',syse2,'g',syse3,'c',syse4,'b');

Performance of discretization

% discretization
Ts = [0.01 0.02 0.05 0.1 0.2 0.5 1];

% scheduling signals
t = (0:Ts(1):100)';
u = sin(0.2.*t);
v = linspace(1,12,length(t))';
p = [v v.^2];
pq = [v v.^2 v.^2 v.^3 v.^4];

% continuous simulation
[yc,tc] = sim(sys,u,t,p);

% euler approximation
sysde1 = c2d(sys,Ts(1),'euler','linear');
[ye1,te1] = sim(sysde1,u,t,p);
sysdeq1 = c2d(sys,Ts(1),'euler','quadratic');
[yeq1,teq1] = sim(sysdeq1,u,t,pq);

VAFE = zeros(2,length(Ts));
VAFT = zeros(2,length(Ts));
VAFE1 = zeros(2,length(Ts));
VAFT1 = zeros(2,length(Ts));
VAFEQ = zeros(2,length(Ts));
VAFTQ = zeros(2,length(Ts));
VAFE1Q = zeros(2,length(Ts));
VAFT1Q = zeros(2,length(Ts));
for j = 1:length(Ts);
    t = (0:Ts(j):100)';
    u = sin(0.2.*t);
    v = linspace(1,12,length(t))';
    p = [v v.^2];
    pq = [v v.^2 v.^2 v.^3 v.^4];

    % euler approximation
    sysde = c2d(sys,Ts(j),'euler','linear');
    [ye,te] = sim(sysde,u,t,p);

    % tustin approximation
    sysdt = c2d(sys,Ts(j),'tustin','linear');
    [yt,tt] = sim(sysdt,u,t,p);

    % euler approximation
    sysdeq = c2d(sys,Ts(j),'euler','quadratic');
    [yeq,teq] = sim(sysdeq,u,t,pq);

    % tustin approximation
    sysdtq = c2d(sys,Ts(j),'tustin','quadratic');
    [ytq,ttq] = sim(sysdtq,u,t,pq);

    ys = interp1q(tc,yc',t);
    ys1 = interp1q(te1,ye1,t);
    ysq1 = interp1q(teq1,yeq1,t);
    VAFE(:,j) = vaf(ys,ye);
    VAFT(:,j) = vaf(ys,yt);
    VAFE1(:,j) = vaf(ys1,ye);
    VAFT1(:,j) = vaf(ys1,yt);
    VAFEQ(:,j) = vaf(ys,yeq);
    VAFTQ(:,j) = vaf(ys,ytq);
    VAFE1Q(:,j) = vaf(ysq1,yeq);
    VAFT1Q(:,j) = vaf(ysq1,ytq);
end


figure,semilogx(Ts,mean(VAFE),'y',Ts,mean(VAFEQ),'g',Ts,mean(VAFT),'c',Ts,mean(VAFTQ),'b');
xlabel('Sample Time [s]')
ylabel('VAF [%]')
legend('Poly (linear)','Poly (quad)','Tustin (linear)','Tustin (quad)','Location','SouthWest');

figure,semilogx(Ts,mean(VAFE1),'y',Ts,mean(VAFE1Q),'g',Ts,mean(VAFT1),'c',Ts,mean(VAFT1Q),'b');
xlabel('Sample Time [s]')
ylabel('VAF [%]')
legend('Poly (linear)','Poly (quad)','Tustin (linear)','Tustin (quad)','Location','SouthWest');

figure,semilogx(Ts,mean(VAFE),'y',Ts,mean(VAFEQ),'g',Ts,mean(VAFT),'c',Ts,mean(VAFTQ),'b');
xlabel('Sample Time [s]')
ylabel('VAF [%]')
legend('Poly (linear)','Poly (quad)','Tustin (linear)','Tustin (quad)','Location','SouthWest');
axis([0.01 1 99 100]);

figure,semilogx(Ts,mean(VAFE1),'y',Ts,mean(VAFE1Q),'g',Ts,mean(VAFT1),'c',Ts,mean(VAFT1Q),'b');
xlabel('Sample Time [s]')
ylabel('VAF [%]')
legend('Poly (linear)','Poly (quad)','Tustin (linear)','Tustin (quad)','Location','SouthWest');
axis([0.01 1 99 100]);