Kalman Filter
AdvancedEl bloque KalmanFilter estima el estado oculto de un sistema lineal a partir de una medición ruidosa. En cada paso de muestreo predice la evolución del estado basándose en el modelo físico y la entrada conocida, corrigiendo luego esa predicción con la medición disponible ponderada según la confianza relativa: el ruido de proceso Q frente al ruido de medición R.
Describa el sistema en tiempo continuo (dx/dt = A·x + B·u) con Q como densidad espectral por segundo, y el bloque lo discretiza de forma exacta para el tiempo de muestreo fijado, incluyendo el ruido estocástico. Maneja dos estados y una medición, cubriendo el seguimiento de posición/velocidad, plantas de primer orden con sesgo desconocido y modelos de baterías linealizados. Además del vector de estado estimado, entrega su incertidumbre (σ), las ganancias de Kalman y el cuadrado de la innovación normalizada (NIS), métrica estadística que verifica si Q y R están sintonizados adecuadamente. Opera sincrónicamente en cada muestra, continúa prediciendo ante pérdidas de señal de medición y se integra directamente en lazos cerrados de control.
Entradas. z es la medición y u la entrada de control conocida. Reset reinicia el filtro desde su estado inicial. Una entrada Valid menor a 0.5 hace que el filtro prediga sin corrección de medida.
Offset representa el término constante del modelo de medición z = C·x + offset. Al linealizar una curva de sensor no lineal alrededor de un punto de operación se obtiene una tangente afín; conectar la entrada Offset permite gobernar dinámicamente este término desde el diagrama.
Modelo Matemático
Donde:
x̂es el vector estimado de dos estados yPsu matriz de covarianza.zes la medición yula entrada de control conocida (retenedor de orden cero por período).- El modelo continuo se discretiza de manera exacta mediante exponencial de matriz y el algoritmo de Van Loan para Q.
Kes la ganancia de Kalman ySla varianza escalar de la innovación.- La primera muestra omite la predicción y corrige directamente el estado inicial; una muestra con Valid < 0.5 omite la actualización.
Entradas y Salidas
| Direction | ID | Label | Tipo | Status |
|---|---|---|---|---|
| → In | in1 |
z | number | Required |
| → In | in2 |
u | number | Optional |
| → In | in3 |
Reset | number | Optional |
| → In | in4 |
Dropout | number | Optional |
| → In | in5 |
Offset | number | Optional |
| ← Out | x_hat_0 |
x̂₀ | number | Output |
| ← Out | x_hat_1 |
x̂₁ | number | Output |
| ← Out | sigma_0 |
σ₀ | number | Output |
| ← Out | sigma_1 |
σ₁ | number | Output |
| ← Out | k_gain_0 |
K₀ | number | Output |
| ← Out | k_gain_1 |
K₁ | number | Output |
| ← Out | z_hat |
ẑ | number | Output |
| ← Out | innovation |
Innov. | number | Output |
| ← Out | innovation_cov |
S | number | Output |
| ← Out | nis |
NIS | number | Output |
Parámetros
| Parámetros | Label | Tipo | Por defecto | Descripción |
|---|---|---|---|---|
sampleTime |
Sample Time | number | 1 |
Filter period in seconds |
model |
Model | select | continuous |
Continuous: dx/dt = A·x + B·u, discretised exactly for the sample time. Discrete: x[k+1] = A·x[k] + B·u[k], already for this sample time |
a |
A (2x2) | vector | 0 1; 0 0 |
State matrix, row by row |
b |
B (2x1) | vector | 0 1 |
Input matrix |
c |
C (1x2) | vector | 1 0 |
Measurement row |
d |
D | number | 0 |
Direct feedthrough from u to the measurement |
offset |
Measurement Offset | number | 0 |
Constant term in z = C·x + D·u + offset, e.g. the intercept of a linearised curve |
q |
Q | vector | 0 0.01 |
Process noise: two numbers for the diagonal, four for the full matrix. Per second (a density) for a continuous model, per sample for a discrete one |
r |
R | number | 1 |
Measurement noise variance |
xInit |
Initial Estimate | vector | 0 0 |
|
pInit |
Initial Covariance | vector | 1 1 |
Two numbers for the diagonal, four for the full matrix |
Ejemplos de Uso
Estimación de una señal senoidal ruidosa
Una señal senoidal lenta afectada por ruido gaussiano (σ = 0.15) ingresa a un filtro de Kalman de velocidad constante muestreado a 50 Hz. El filtro reduce el error RMS de 0.150 a 0.040.
Observación de velocidad sin tacómetro
Filtrado de un transductor de posición cuantificado para obtener posición y velocidad simultáneamente sin la amplificación de ruido que produce una diferenciación numérica directa.
Observaciones y Buenas Prácticas
- Salidas σ:
x̂₀ ± 2σ₀define un intervalo de confianza del 95 % cuando el modelo es acertado. Verifíquelo con la salida NIS (promedio temporal cercano a 1). - Entrada Valid: Conéctela al estado del sensor. Por debajo de 0.5, el bloque solo predice y σ crece hasta que se restablezcan lecturas válidas.
- Lazos cerrados: La estimación puede alimentar un controlador cuya salida regrese como
u. Al utilizar la entrada previa en la predicción, parad = 0no se genera un lazo algebraico. - Robustez numérica: Matrices con dimensiones incorrectas activan de forma segura el modelo predeterminado sin detener la simulación.
Bloques Relacionados
- BatterySocEkf" class="bw-link">BatterySocEkf
- DiscreteStateSpace" class="bw-link">DiscreteStateSpace
- RandomNumber" class="bw-link">RandomNumber