Finding out Q and R matrices of a given system.

조회 수: 11 (최근 30일)
Misha
Misha 2014년 3월 22일
답변: John Petersen 2014년 7월 28일
Hi everyone, I have a system with A, B, C, D matrices and I want to get a Kalman filter response, but I cannot figure out Q and R matrices. I would be really thankful if anybody could check out my code and tell me how to find Q and R matrices and get a desired response. Thank you
a=0.304;
S=a^2*pi;
v=0.015;
v3=0.03;
L=0.28;
Ts=0.01;
Sd=v*pi;
Sa=v3*pi;
g=9.81;
h10=0.06;
h20=0.04;
h30=0.02;
C13=(Sd/S)*g/sqrt(2*g*(h10-h30));
C23=(Sd/S)*g/sqrt(2*g*(h20-h30));
%state space model
A=[-C13 0 C13; 0 -C23 C23; C13 C23 -C13-C23-Sa/S*g/sqrt(2*g*h30)];
B=[1/S 0 0; 0 1/S 0; 0 0 0];
C=[1 0 0;0 1 0; 0 0 1];
D=[0 0 0; 0 0 0; 0 0 0];
Delta_t=0.01;
Q=??
R=eye(3)
Plant = ss(A,B,C,0,-1,'inputname',{'u' 'w' 'z'},...
'outputname',{'y' 'e' 'r'});
[kalmf,L,P,M]=kalman(Plant,Q,R)
kalmf = kalmf(1,:)
kalmf
a = A;
b = [1/S 0 0; 0 1/S 0; 0 0 0] ;
c = C;
d = [0 0 0;0 0 0; 0 0 0];
P = ss(a,b,c,d,-1,'inputname',{'u' 'w' 'v'},...
'outputname',{'y' 'yv' 'yz'});
sys = parallel(Plant,kalmf,1,1,[],[])
SimModel = feedback(sys,1,4,2,1)
% Delete yv from I/O list
SimModel = SimModel([1 3],[1 2 3])
SimModel.inputname
SimModel.outputname
t = [0:100]';
u = sin(t/5);
n = length(t)
randn('seed',0)
w = sqrt(Q)*randn(n,1);
z = sqrt®*randn(n,1);
[out,x] = lsim(SimModel,[w,z,u])
y = out(:,1); % true response
ye = out(:,2); % filtered response
yv = y + z; % measured response
subplot(211), plot(t,y,'--',t,ye,'-'),
xlabel('No. of samples'), ylabel('Output')
title('Kalman filter response')
subplot(212), plot(t,y-yv,'-.',t,y-ye,'-'),
xlabel('No. of samples'), ylabel('Error')

답변 (1개)

John Petersen
John Petersen 2014년 7월 28일
R and Q are the plant and sensor uncertainty covariance. I can't tell from your code which is which. You can start with an initial guess based on sensor specs and your understanding of the system. From there you can adjust the values as needed for your purposes.

카테고리

Help CenterFile Exchange에서 State-Space Control Design and Estimation에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by