Juegos - Filtro de kalman, matlab

 
Vista:

Filtro de kalman, matlab

Publicado por Antonio Valle (1 intervención) el 28/11/2011 15:43:32
Hola,

mi nombre es Antonio, y soy nuevo en esto, tanto en el foro, como por llevar poco tiempo programando, pues soy Ing. Agrónomo y me coge algo de lejos.

Os introduzco un poco con lo que estoy, y de ahí mis dudas. Tengo unos sensores instalados en campo que me registran valores de humedad de suelo cada 5 min, y como siempre, tienen ruidos, por lo que estoy pensando en aplicar un filtro para suavizar, y a su vez poder predecir a futuro, según veo art. publicados.

Llevo ya bastantes días, y entiendo el funcionamiento del filtro. estoy usando el libro Kalman filtering using matlab de Grewal, realizando sus ejercícios,.. Yo pensaba que su implementación era algo así crivial, que introducía mi vector de observaciones, matlab lo reconocía, y aplicaba mi filtro, pero veo que es más complicado, hasta el punto que no me veo capaz aplicarlo. Es ahí mi duda! Tengo además ejemplos, asumo que es ruido blanco, conozco el error de estimación del sensor.... Pero me cuesta implementarlo, y mis dudas son:

1. Tengo la señal de un sensor individual. A esto puedo aplicar el filtro, o necesito varios sensores. Usando un solo sensor, la matriz n*m tiene tamaño 1, verdad?
2. Cómo obtengo mi ec/ de estado??? Es una ec/ diferencial ordinaria (quizás me estoy complicando mucho??).
3. Tengo alguna rutina en matlab, que no es demasiado complicado seguirla, pero.... No sé el paso de tener mis datos y meterlos en esa rutina, y luego comparar los datos estimados con los mios originales.

Os adjunto mi rutina y por ejemplo, un extracto del sensor. La verdad que esos datos son demasiado buenos para los que tengo otras veces.

Gracias,




clear all
close all
clc

% Filtro de Kalman para la estimación de una constante
% El modelo de estados es x_k=x_(k-1) +N(0,var_estados)
% El de observaciones es y_k=x_k+N(0,var_obs)
% Se introduce el número de datos y el valor a estimar
% Se introduce un estimador inicial y su desviación típica
% A continuación al desviación típica en la observación y estados
% Se dibuja el estimador, las observaciones y la varianza de la estimación

%datos medidos
y=dlmread('arbol5.txt'); %vector de 8000 valores
% N=input('numero de datos '); %8000
N=length(y);
dt=5; %intervalo entre medidas
t=[0:5:(N-1)*dt];
figure
plot(t,y);


% x0=input('valor a estimar\ ');
x0=y(1);;
% estado_inicial=input('valor inicial del estimador ');
estado_inicial=x0;
% incertidumbre_inicial=input('desviacion estimador inicial ');
incertidumbre_inicial=0.02;
% desv_observacion=input('desviacion tipica en la observacion ');
desv_observacion=0.02;
% desv_estados=input('desviacion tipica en modelo de estados ');
desv_estados=0.01;
var_obs=desv_observacion*desv_observacion;
var_estados=desv_estados*desv_estados;
X=zeros(N+1,1); % contendra las estimaciones
X_antes=zeros(N+1,1);
Ganancia=zeros(N+1,1);
Y=zeros(N+1,1); % contendra las observaciones
P_antes=zeros(N+1,1); % contendra la varianza de estimadore sin observacion
P_despues=zeros(N+1,1); % contendra la varianza de la estimacion
X(1)=estado_inicial;
P_despues(1)=incertidumbre_inicial*incertidumbre_inicial;
for k=2:N+1
X_antes(k)=X(k-1);
P_antes(k)=P_despues(k-1)+var_estados;
Ganancia(k)=P_antes(k)/(P_antes(k)+var_obs);
Y(k)=x0+desv_observacion*randn(1);
X(k)=X_antes(k)+Ganancia(k)*(Y(k)-X_antes(k));
P_despues(k)=(1-Ganancia(k))*P_antes(k);
end
close all
figure
plot([1:N+1],X), title('Estimador de Kalman');
figure
plot([2:N+1],Y(2:N+1)), title('Observaciones');
figure
plot([2:N+1],P_despues(2:N+1)), title('Varianza del estimador de Kalman');


0.287
0.288
0.289
0.29
0.292
0.294
0.295
0.296
0.297
0.297
0.297
0.296
0.295
0.294
0.293
0.292
0.291
0.291
0.29
0.29
0.29
0.289
0.289
0.288
0.288
0.288
0.288
0.288
0.288
0.289
0.29
0.291
0.292
0.292
0.292
0.293
0.293
0.294
0.295
0.295
0.294
0.293
0.293
0.292
0.291
0.29
0.29
0.29
0.289
0.289
0.288
0.288
0.287
0.287
0.286
0.286
0.287
0.287
0.288
0.288
0.288
0.29
0.29
0.291
0.291
0.292
0.294
0.294
0.293
0.292
0.291
0.29
0.29
0.289
0.288
0.287
0.287
0.286
0.286
0.285
0.285
0.284
0.284
0.284
0.284
0.284
0.285
0.285
0.287
0.289
0.291
0.293
0.295
0.297
0.299
0.299
0.298
0.296
0.295
0.294
0.292
0.291
0.291
0.29
0.29
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder