kalman
Diseñar un filtro de Kalman para la estimación de estados
Sintaxis
Descripción
[
crea un filtro de Kalman dado el modelo de planta kalmf
,L
,P
] = kalman(sys
,Q
,R
,N
)sys
y de los datos de covarianza de ruido Q
, R
y N
. La función calcula un filtro de Kalman para utilizar en un estimador de Kalman con la configuración que se muestra en el siguiente diagrama.
Puede generar el modelo sys
con las entradas conocidas u y las entradas de ruido blanco de proceso w, de forma que w consta de las últimas Nw entradas en sys
. La salida de la planta "verdadera" yt consta de todas las salidas de sys
. También puede proporcionar los datos de covarianza de ruido Q
, R
y N
. El filtro de Kalman devuelto kalmf
es un modelo de espacio de estados que toma las entradas conocidas u y las mediciones con ruido y, y genera una estimación de la salida de la planta verdadera y una estimación de los estados de la planta. kalman
también devuelve las ganancias de Kalman L
y la matriz de covarianzas de error de estado estacionario P
.
[
calcula un filtro de Kalman cuando existe una de las siguientes condiciones o ambas.kalmf
,L
,P
] = kalman(sys
,Q
,R
,N
,sensors
,known
)
No se miden todas las salidas de
sys
.Las entradas de perturbación w no son las últimas entradas de
sys
.
El vector índice sensors
especifica qué salidas de sys
se miden. Estas salidas generan y. El vector índice known
especifica qué entradas son conocidas (determinístico). Las entradas conocidas generan u. El comando kalman
toma las entradas restantes de sys
como entradas estocásticas w.
[
especifica el tipo de estimador para un valor kalmf
,L
,P
,Mx
,Z
,My
] = kalman(___,type
)sys
en tiempo discreto.
type = 'current'
: calcula las estimaciones de salida y las estimaciones de estado utilizando todas las mediciones disponibles hasta .type = 'delayed'
: calcula las estimaciones de salida y las estimaciones de estado utilizando solo las mediciones hasta . El estimador con retardo es más fácil de implementar dentro de los lazos de control.
Puede utilizar el argumento de entrada type
con cualquiera de las combinaciones de argumentos de entrada anteriores.
Ejemplos
Diseñar un filtro de Kalman para una planta SISO
Diseñe un filtro de Kalman para una planta con ruido blanco aditivo w en la entrada y v en la salida, como se muestra en el siguiente diagrama.
Supongamos que la planta tiene las siguientes matrices de espacio de estados y es una planta en tiempo discreto con un tiempo de muestreo no especificado (Ts = -1
).
A = [1.1269 -0.4940 0.1129 1.0000 0 0 0 1.0000 0]; B = [-0.3832 0.5919 0.5191]; C = [1 0 0]; D = 0; Plant = ss(A,B,C,D,-1); Plant.InputName = 'un'; Plant.OutputName = 'yt';
Para utilizar kalman
, debe proporcionar un modelo sys
que tenga una entrada para el ruido w
. De este modo, sys
no es igual a Plant
, ya que Plant
toma la entrada un = u + w
. Puede generar sys
creando una unión de suma para la entrada de ruido.
Sum = sumblk('un = u + w'); sys = connect(Plant,Sum,{'u','w'},'yt');
De manera equivalente, puede utilizar sys = Plant*[1 1]
.
Especifique las covarianzas de ruido. Puesto que la planta tiene una entrada de ruido y una salida, estos valores son escalares. En la práctica, estos valores son propiedades de las fuentes de ruido en su sistema, que se determina midiendo el sistema o por otros medios. En este ejemplo, supongamos que ambas fuentes de ruido tienen la misma covarianza unitaria y no están correlacionadas (N
= 0).
Q = 1; R = 1; N = 0;
Diseñe el filtro.
[kalmf,L,P] = kalman(sys,Q,R,N); size(kalmf)
State-space model with 4 outputs, 2 inputs, and 3 states.
El filtro de Kalman kalmf
es un modelo de espacio de estados que tiene dos entradas y cuatro salidas. kalmf
toma como entradas la señal de entrada de la planta u y la salida de la planta con ruido . La primera salida es la salida de la planta verdadera estimada . Las tres salidas restantes son las estimaciones de estado . Examine los nombres de entrada y salida de kalmf
para ver cómo kalman
los etiqueta en consecuencia.
kalmf.InputName
ans = 2x1 cell
{'u' }
{'yt'}
kalmf.OutputName
ans = 4x1 cell
{'yt_e'}
{'x1_e'}
{'x2_e'}
{'x3_e'}
Examine las ganancias de Kalman L
. En una planta SISO con tres estados, L
es un vector columna de tres elementos.
L
L = 3×1
0.3586
0.3798
0.0817
Para ver un ejemplo que muestra cómo usar kalmf
para reducir el error de medición debido al ruido, consulte Filtro de Kalman.
Diseñar un filtro de Kalman para una planta MIMO
Considere una planta con tres entradas, una de las cuales represente el ruido de proceso w y dos salidas medidas. La planta tiene cuatro estados.
Suponiendo las siguientes matrices de espacio de estados, cree sys
.
A = [-0.71 0.06 -0.19 -0.17; 0.06 -0.52 -0.03 0.30; -0.19 -0.03 -0.24 -0.02; -0.17 0.30 -0.02 -0.41]; B = [ 1.44 2.91 0; -1.97 0.83 -0.27; -0.20 1.39 1.10; -1.2 0 -0.28]; C = [ 0 -0.36 -1.58 0.28; -2.05 0 0.51 0.03]; D = zeros(2,3); sys = ss(A,B,C,D); sys.InputName = {'u1','u2','w'}; sys.OutputName = {'y1','y2'};
Puesto que la planta solo tiene una entrada de ruido de proceso, la covarianza Q es un escalar. En este ejemplo, asuma que el ruido de proceso tiene covarianza unitaria.
Q = 1;
kalman
utiliza las dimensiones de Q
para determinar qué entradas son conocidas y cuáles son las entradas de ruido. Para el escalar Q
, kalman
asume una entrada de ruido y utiliza la última entrada, a menos que especifique lo contrario (consulte Planta con salidas no medidas).
Para el ruido de medición en las dos salidas, especifique una matriz de covarianzas de ruido de 2 por 2. En este ejemplo, utilice una varianza unitaria para la primera salida y una varianza de 1.3 para la segunda salida. Establezca los valores fuera de la diagonal en cero para indicar que los dos canales de ruido no están correlacionados.
R = [1 0; 0 1.3];
Diseñe el filtro de Kalman.
[kalmf,L,P] = kalman(sys,Q,R);
Examine las entradas y las salidas. kalman
utiliza las propiedades InputName
, OutputName
, InputGroup
y OutputGroup
de kalmf
para ayudar a recordar qué representan las entradas y las salidas de kalmf
.
kalmf.InputGroup
ans = struct with fields:
KnownInput: [1 2]
Measurement: [3 4]
kalmf.InputName
ans = 4x1 cell
{'u1'}
{'u2'}
{'y1'}
{'y2'}
kalmf.OutputGroup
ans = struct with fields:
OutputEstimate: [1 2]
StateEstimate: [3 4 5 6]
kalmf.OutputName
ans = 6x1 cell
{'y1_e'}
{'y2_e'}
{'x1_e'}
{'x2_e'}
{'x3_e'}
{'x4_e'}
Así, las dos entradas conocidas u1
y u2
son las dos primeras entradas de kalmf
y las dos salidas medidas y1
e y2
son las dos últimas entradas en kalmf
. En las salidas de kalmf
, las primeras dos son las salidas estimadas, y las cuatro restantes son las estimaciones de estado. Para usar el filtro de Kalman, conecte estas entradas con la planta y las señales de ruido de forma análoga a la que se muestra para una planta SISO en Filtro de Kalman.
Planta con salidas no medidas
Considere una planta con cuatro entradas y dos salidas. La primera y la tercera entrada son conocidas, mientras que la segunda y la cuarta representan el ruido de proceso. La planta también tiene dos salidas, pero solo se mide la segunda.
Utilice las siguientes matrices de espacio de estados para crear sys
.
A = [-0.37 0.14 -0.01 0.04; 0.14 -1.89 0.98 -0.11; -0.01 0.98 -0.96 -0.14; 0.04 -0.11 -0.14 -0.95]; B = [-0.07 -2.32 0.68 0.10; -2.49 0.08 0 0.83; 0 -0.95 0 0.54; -2.19 0.41 0.45 0.90]; C = [ 0 0 -0.50 -0.38; -0.15 -2.12 -1.27 0.65]; D = zeros(2,4); sys = ss(A,B,C,D,-1); % Discrete with unspecified sample time sys.InputName = {'u1','w1','u2','w2'}; sys.OutputName = {'yun','ym'};
Para utilizar kalman
para diseñar un filtro para este sistema, utilice los argumentos de entrada known
y sensors
para especificar qué entradas de la planta son conocidas y qué salida se mide.
known = [1 3]; sensors = [2];
Especifique las covarianzas de ruido y diseñe el filtro.
Q = eye(2); R = 1; N = 0; [kalmf,L,P] = kalman(sys,Q,R,N,sensors,known);
Al examinar las etiquetas de entrada y salida de kalmf
se pueden observar las entradas que prevé el filtro y las salidas que devuelve.
kalmf.InputGroup
ans = struct with fields:
KnownInput: [1 2]
Measurement: 3
kalmf.InputName
ans = 3x1 cell
{'u1'}
{'u2'}
{'ym'}
kalmf
toma como entrada las dos entradas conocidas de sys
y las salidas medidas con ruido de sys
.
kalmf.OutputGroup
ans = struct with fields:
OutputEstimate: 1
StateEstimate: [2 3 4 5]
La primera salida de kalmf
es la estimación del valor verdadero de la salida de la planta medida. Las salidas restantes son las estimaciones de estado.
Argumentos de entrada
sys
— Modelo de planta con ruido de proceso
modelo ss
Modelo de planta con ruido de proceso, especificado como modelo de espacio de estados (ss
). La planta tiene entradas conocidas u y entradas de ruido blanco de proceso w. La salida de la planta yt
no incluye el ruido de medición.
Puede escribir las matrices de espacio de estados de un modelo de planta de ese tipo como:
kalman
asume el ruido gaussiano v en la salida. De este modo, en tiempo continuo, las ecuaciones de espacio de estados con las que funciona kalman
son:
En tiempo discreto, las ecuaciones de espacio de estados son:
Si no utiliza el argumento de entrada known
, kalman
utiliza el tamaño de Q
para determinar qué entradas de sys
son entradas de ruido. En este caso, kalman
trata las últimas entradas Nw = size(Q,1)
como las entradas de ruido. Cuando las entradas de ruido w
no son las últimas entradas de sys
, puede utilizar el argumento de entrada known
para especificar qué entradas de la planta son conocidas. kalman
trata el resto de las entradas como estocásticas.
Para ver otras restricciones de las propiedades de las matrices de la planta, consulte Limitaciones.
Q
— Covarianza de ruido de proceso
escalar | matriz
Covarianza de ruido de proceso, especificada como escalar o matriz de Nw por Nw, donde Nw es el número de entradas de ruido de la planta. kalman
utiliza el tamaño de Q
para determinar qué entradas de sys
son entradas de ruido, tomando las últimas entradas Nw = size(Q,1)
para que sean las entradas de ruido a menos que especifique lo contrario con el argumento de entrada known
.
kalman
asume que el ruido de proceso w es ruido gaussiano con covarianza Q
= E(wwT). Cuando la planta solo tiene una entrada de ruido de proceso, Q
es un escalar igual a la varianza de w. Cuando la planta tiene varias entradas de ruido no correlacionadas, Q
es una matriz diagonal. En la práctica, se determinan los valores adecuados para Q
midiendo o haciendo conjeturas fundamentadas sobre las propiedades del ruido del sistema.
R
— Covarianza de ruido de medición
escalar | matriz
Covarianza de ruido de medición, especificada como escalar o matriz de Ny por Ny, donde Ny es el número de salidas de la planta. kalman
asume que el ruido de medición v es ruido blanco con covarianza R
= E(vvT). Cuando la planta solo tiene un canal de salida, R
es un escalar igual a la varianza de v. Cuando la planta tiene varios canales de salida con ruido de medición no correlacionado, R
es una matriz diagonal. En la práctica, se determinan los valores adecuados para R
midiendo o haciendo conjeturas fundamentadas sobre las propiedades del ruido del sistema.
Para ver otras restricciones de la covarianza de ruido de medición, consulte Limitaciones.
N
— Covarianza cruzada de ruido
0 (predeterminado) | escalar | matriz
Covarianza cruzada de ruido, especificada como escalar o matriz de Ny por Nw. kalman
supone que el ruido de proceso w y el ruido de medición v satisfacen N
= E(wvT). Si las dos fuentes de ruido no están correlacionadas, puede omitir N
, lo que es equivalente a establecer N = 0
. En la práctica, se determinan los valores adecuados para N
midiendo o haciendo conjeturas fundamentadas sobre las propiedades del ruido del sistema.
sensors
— Salidas medidas de sys
vector
Salidas medidas de sys
, especificadas como vector de índices que identifica qué salidas de sys
se miden. Por ejemplo, supongamos que el sistema tiene tres salidas, pero solo se miden dos de ellas, que se corresponden con la primera y la tercera salida de sys
. En este caso, establezca sensors = [1 3]
.
known
— Entradas conocidas de sys
vector
Entradas conocidas de sys
, especificadas como vector de índices que identifica qué entradas son conocidas (determinista). Por ejemplo, supongamos que el sistema tiene tres entradas, pero solo la primera y la segunda entrada son conocidas. En este caso, establezca known = [1 2]
. kalman
interpreta cualquier entrada restante de sys
como estocástica.
type
— Tipo de estimador en tiempo discreto
'current'
(predeterminado) | 'delayed'
Tipo de estimador en tiempo discreto que se desea calcular, especificado como 'current'
o 'delayed'
. Esta entrada solo es pertinente para sys
en tiempo discreto.
'current'
: calcula las estimaciones de salida y las estimaciones de estado utilizando todas las mediciones disponibles hasta .'delayed'
: calcula las estimaciones de salida y las estimaciones de estado utilizando solo las mediciones hasta . El estimador con retardo es más fácil de implementar dentro de los lazos de control.
Para obtener información sobre cómo calcula kalman
las estimaciones actuales y con retardo, consulte Estimación en tiempo discreto.
Argumentos de salida
kalmf
— Estimador de Kalman
modelo ss
Estimador de Kalman o filtro de Kalman, devuelto como modelo de espacio de estados (ss
). El estimador resultante tiene entradas y salidas . Es decir, kalmf
toma como entradas la entrada de la planta u y la salida de la planta con ruido y, y genera como salidas la salida de la planta estimada sin ruido y los valores de estado estimados .
kalman
establece automáticamente las propiedades InputName
, OutputName
, InputGroup
y OutputGroup
de kalmf
para ayudar a recordar qué entradas y salidas se corresponden con cada señal.
En el caso de las ecuaciones de estado y de salida de kalmf
, consulte Estimación en tiempo continuo y Estimación en tiempo discreto.
L
— Ganancias de filtro
arreglo
Ganancias de filtro, devueltas como arreglo de tamaño Nx por Ny, donde Nx es el número de estados en la planta y Ny es el número de salidas de la planta. En tiempo continuo, la ecuación de estado del filtro de Kalman es:
En tiempo discreto, la ecuación de estado es:
Para obtener información sobre estas expresiones y sobre cómo se calcula L
, consulte Estimación en tiempo continuo y Estimación en tiempo discreto.
P
, Z
— Covarianzas de error de estado estacionario
arreglo
Covarianzas de error de estado estacionario, devueltas como Nx por Nx, donde Nx es el número de estados en la planta. El filtro de Kalman calcula las estimaciones de estado que minimizan P
. En tiempo continuo, la covarianza de error de estado estacionario está dada por:
En tiempo discreto, las covarianzas de error de estado estacionario están dadas por:
Para obtener más información sobre estas cantidades y cómo las utiliza kalman
, consulte Estimación en tiempo continuo y Estimación en tiempo discreto.
Mx
, My
— Ganancias de innovación de los estimadores de estado
arreglo
Ganancias de innovación de los estimadores de estado para sistemas en tiempo discreto, devueltas como arreglo.
Mx
y My
son pertinentes solo cuando type
= 'current'
, que es el estimador predeterminado para sistemas en tiempo discreto. Para sys
en tiempo continuo o type
= 'delayed'
, Mx = My = []
.
En el caso del estimador de tipo 'current'
, Mx
y My
son las ganancias de innovación en las ecuaciones de actualización:
Cuando no hay alimentación directa entre la entrada de ruido w y la salida de la planta y (es decir, cuando H = 0, consulte Estimación en tiempo discreto), , y la estimación de salida se simplifica como .
Las dimensiones de los arreglos Mx
y My
dependen de las dimensiones de sys
de la siguiente forma.
Mx
: Nx por Ny, donde Nx es el número de estados en la planta y Ny es el número de salidas.My
: Ny por Ny.
Para obtener información sobre cómo kalman
obtiene Mx
y My
, consulte Estimación en tiempo discreto.
Limitaciones
Los datos de la planta y de ruido deben satisfacer:
(C,A) es detectable, donde:
y , donde
no tiene ningún modo no controlable en el eje imaginario en tiempo continuo, o en el círculo unitario en tiempo discreto.
Algoritmos
Estimación en tiempo continuo
Considere una planta en tiempo continuo con las entradas conocidas u, el ruido blanco de proceso w y el ruido blanco de medición v:
Las señales de ruido w y v satisfacen:
El filtro de Kalman, o estimador de Kalman, calcula una estimación de estado que minimiza la covarianza de error de estado estacionario:
El filtro de Kalman tiene las siguientes ecuaciones de estado y de salida:
Para obtener la ganancia del filtro L, kalman
resuelve una ecuación algebraica de Riccati para obtener
donde
P resuelve la ecuación algebraica de Riccati correspondiente.
El estimador utiliza las entradas conocidas u y las mediciones y para generar las estimaciones de salida y de estado y .
Estimación en tiempo discreto
La planta discreta está dada por:
En tiempo discreto, las señales de ruido w y v satisfacen:
El estimador en tiempo discreto tiene la siguiente ecuación de estado:
kalman
resuelve una ecuación discreta de Riccati para obtener la matriz de ganancia L:
donde
kalman
puede calcular dos variantes del estimador de Kalman en tiempo discreto, el estimador actual (type
= 'current'
) y el estimador con retardo (type
= 'delayed'
).
Estimador actual: genera las estimaciones de salida y las estimaciones de estado utilizando todas las mediciones disponibles hasta . Este estimador tiene la ecuación de salida
donde las ganancias de innovación Mx y My se definen como:
De este modo, Mx actualiza la estimación de estado utilizando la nueva medición :
Del mismo modo, My calcula la estimación de salida actualizada:
Cuando H = 0, , y la estimación de salida se simplifica como .
Estimador con retardo: genera las estimaciones de salida y las estimaciones de estado utilizando solo las mediciones hasta yv[n–1]. Este estimador tiene la ecuación de salida:
El estimador con retardo es más fácil de implementar dentro de los lazos de control.
Historial de versiones
Introducido antes de R2006a
Abrir ejemplo
Tiene una versión modificada de este ejemplo. ¿Desea abrir este ejemplo con sus modificaciones?
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)