Este capítulo descreve o Filtro de Kalman em uma dimensão. O principal objetivo deste capítulo é explicar o conceito do Filtro de Kalman de uma forma simples e intuitiva, sem usar ferramentas que podem parecer complexas e confusas.
Avançaremos para as equações do Filtro de Kalman passo a passo.
Como mencionei anteriormente, o Filtro de Kalman é baseado em cinco equações. Já estamos familiarizados com duas delas:
Neste capítulo, iremos derivar outras três equações do filtro de Kalman.
Vamos relembrar nosso primeiro exemplo (medição do peso da barra de ouro), fizemos várias medições e calculamos a estimativa pela média.
Chegamos no seguinte resultado:
No gráfico acima, você pode ver o valor real, o valor estimado e as medições, vs. o número de medições.
As diferenças entre as medições (amostras azuis) e o valor verdadeiro (linha verde) são erros de medição. Uma vez que os erros de medição são aleatórios, podemos descrevê-los pela variância (\ (\sigma^{2} \)). A variação dos erros de medição pode ser fornecida pelo fornecedor da balança ou pode ser derivada pelo procedimento de calibração. A variação dos erros de medição é na verdade a incerteza de medição.
Vamos denotar a incerteza de medição por \(r \).
A diferença entre a estimativa (linha vermelha) e o valor verdadeiro (linha verde) é o erro de estimativa. Como você pode ver, o erro de estimativa torna-se cada vez menor à medida que fazemos mais medições, e ele converge para zero, enquanto o valor estimado converge para o valor verdadeiro. Não sabemos qual é o erro de estimativa, mas podemos estimar a incerteza na estimativa.
Vamos denotar a incerteza da estimativa por \(p \).
Vamos dar uma olhada nas medidas de peso FDP (Função de Densidade de Probabilidade).
No gráfico a seguir, podemos ver dez medidas do peso da barra de ouro.
Como você pode ver, 8 entre 10 medições estão próximas o suficiente do valor verdadeiro, portanto, o valor verdadeiro está dentro dos limites de \( 1 \sigma \).
A incerteza de medição ( \( r \) ) é a variância da medição ( \(\sigma^{2} \) ).
Vamos derivar a terceira equação que é a Equação de Ganho de Kalman . Agora, vou apresentar a derivação intuitiva da Equação de ganho de Kalman. A derivação matemática será mostrada nos próximos capítulos.
Em um filtro de Kalman, os parâmetros \( \alpha \) - \( \beta \) (- \( \gamma \) ) são calculados dinamicamente para cada iteração do filtro. Esses parâmetros são chamados de Ganho de Kalman e denotados por \( K_{n} \).
A Equação de ganho de Kalman é a seguinte:
\( p_{n,n-1} \) | é a incerteza da estimativa extrapolada |
\( r_{n} \) | é a incerteza da medição |
O ganho de Kalman é um número entre zero e um:
\[ 0 \leq K_{n} \leq 1 \]
Vamos reescrever a equação de atualização de estado:
Como você pode ver, o ganho de Kalman \( \left( K_{n} \right) \) é o peso que damos à medição. E \( \left(1-K_{n} \right) \) é o peso que damos à estimativa.
Quando a incerteza da medição é muito grande e a incerteza da estimativa muito pequena, o Ganho de Kalman é próximo a zero. Consequentemente, damos um grande peso à estimativa e um pequeno peso à medição.
Por outro lado, quando a incerteza da medição é muito pequena e a incerteza da estimativa muito grande, o Ganho de Kalman é próximo a um. Consequentemente, damos um peso pequeno à estimativa e um peso grande à medição.
Se a incerteza da medição for igual à incerteza da estimativa, o ganho de Kalman será igual a 0.5.
A equação de Ganho de Kalman é a terceira equação do filtro de Kalman.
A seguinte equação define a atualização da incerteza estimada:
\( K_{n} \) | é o ganho de Kalman |
\( p_{n,n-1} \) | é a incerteza da estimativa que foi calculada durante a estimativa do filtro anterior |
\( p_{n,n} \) | é a estimativa de incerteza do estado atual |
Esta equação atualiza a incerteza estimada do estado atual. É chamada de Equação de Atualização da Covariância. Por que covariância? Veremos isso nos próximos capítulos.
É bastante claro a partir da equação que a incerteza da estimativa é sempre menor a cada iteração do filtro, uma vez que \(\left (1-K_ {n} \right) \leq 1 \). Quando a incerteza da medição é grande, o ganho de Kalman será baixo, portanto, a convergência da incerteza da estimativa seria lenta. No entanto, quando a incerteza da medição é pequena, o ganho de Kalman será alto e a incerteza da estimativa convergirá rapidamente para zero.
A Equação de Atualização de Covariância é a quarta equação do Filtro de Kalman.
Assim como a extrapolação de estado, a extrapolação da incerteza estimada é feita com as equações do modelo dinâmico.
Em nosso segundo exemplo, no caso do radar unidimensional, a posição alvo prevista é:
isto é, a posição prevista é igual à posição estimada atual mais a velocidade estimada atual multiplicada pelo tempo. A velocidade prevista é igual à estimativa da velocidade atual (assumindo o modelo de velocidade constante).
A estimativa de extrapolação da incerteza seria:
\( p^{x} \) | é a incerteza da estimativa da posição |
\( p^{v} \) | é a incerteza da estimativa de velocidade |
ou seja, a incerteza da estimativa da posição prevista é igual à incerteza da estimativa da posição atual mais a incerteza da estimativa da velocidade atual multiplicada pelo tempo ao quadrado. A incerteza da estimativa da velocidade prevista é igual à incerteza da estimativa da velocidade atual (assumindo o modelo de velocidade constante).
Em nosso primeiro exemplo (medição do peso da barra de ouro), a dinâmica do sistema é constante. Assim, a estimativa de extrapolação da incerteza seria:
\( p \) | é a incerteza da estimativa do peso da barra de ouro |
A equação de extrapolação da incerteza estimada é chamada de Equação de Extrapolação de Covariância e esta é a quinta equação do Filtro de Kalman.
Neste capítulo, vamos combinar todas as peças em um único algoritmo. Como o filtro \( \alpha \), \(\beta \), (\(\gamma \) ), o filtro Kalman utiliza o algoritmo "Medir, Atualizar, Prever".
O gráfico a seguir fornece uma descrição esquemática de baixo nível do algoritmo:
As entradas do filtro são:
A inicialização foi realizada apenas uma vez e fornece dois parâmetros:
Os parâmetros de inicialização podem ser fornecidos por outro sistema, outro processo (por exemplo, processo de busca no radar) ou suposição baseada na experiência ou conhecimento teórico. Mesmo que os parâmetros de inicialização não sejam precisos, o filtro de Kalman poderá convergir próximo ao valor real.
A medição é realizada para cada ciclo de filtro e fornece dois parâmetros:
Além do valor medido, o filtro de Kalman requer os parâmetros de incerteza de medição. Normalmente, este parâmetro é fornecido pelo fornecedor do equipamento ou pode ser obtido pela calibração do equipamento de medição. A incerteza da medição do radar depende de vários parâmetros, como SNR (Relação Sinal Ruído), largura do feixe, largura de banda, tempo no alvo, estabilidade do relógio e muito mais. Cada medição de radar tem SNR diferente, largura do feixe e tempo no alvo. Portanto, esse radar calcula a incerteza de medição para cada medição e relata ao rastreador.
As saídas do filtro são:
Além da Estimativa do Estado do Sistema, o Filtro de Kalman também fornece Estimativa da Incerteza! Temos o mérito da precisão da estimativa. Como já mencionei, a incerteza da estimativa é dada por:
\[ p_{n,n}=~ \left( 1-K_{n} \right) p_{n,n-1} \]
e \( p_{n,n} \) está sempre ficando menor a cada iteração do filtro, uma vez que \( \left( 1-K_{n} \right) \leq 1 \)
Portanto, cabe a nós decidir quantas medições tomar. Se estamos medindo a altura do edifício, e estamos interessados na precisão de 3 centímetros (\ (\sigma \)), faremos as medições até que a incerteza da estimativa (\ (\sigma^{2} \)) seja menor que 9 centímetros.
A tabela a seguir resume as cinco equações do Filtro de Kalman.
Equação | Nome da Equação | Nomes alternativos usados na literatura |
---|---|---|
\( \hat{x}_{n,n}=~ \hat{x}_{n,n-1}+ K_{n} \left( z_{n}- \hat{x}_{n,n-1} \right) \) | Atualização de estado | Equação de Filtragem |
\( \hat{x}_{n+1,n}= \hat{x}_{n,n}+ \Delta t\hat{\dot{x}}_{n,n} \) \( \hat{\dot{x}}_{n+1,n}= \hat{\dot{x}}_{n,n} \) (Para dinâmica de velocidade constante) |
Extrapolação de Estado |
Equação de Predição Equação de Transição Equação de Previsão Modelo Dinâmico Modelo Espaço de Estados |
\( K_{n}= \frac{p_{n,n-1}}{p_{n,n-1}+r_{n}} \) | Ganho de Kalman | Equação de Peso |
\( p_{n,n}=~ \left( 1-K_{n} \right) p_{n,n-1} \) | Atualização da Covariância | Equação de Correção |
\( p_{n+1,n}= p_{n,n} \) (Para dinâmica constante) |
Extrapolação da Covariância | Equação Preditora da Covariância |
A figura a seguir fornece uma descrição detalhada do diagrama de blocos do Filtro de Kalman.
Conforme mencionado acima, a inicialização foi realizada apenas uma vez e fornece dois parâmetros:
A inicialização é seguida por previsão.
O processo de medição deve fornecer dois parâmetros:
O processo de atualização de estado é responsável pela estimativa do estado atual do sistema.
As entradas do processo de atualização de estado são:
Com base nas entradas, o processo de atualização de estado calcula o ganho de Kalman e fornece duas saídas:
Esses parâmetros são as saídas do Filtro Kalman.
O processo de previsão extrapola o estado atual do sistema e a incerteza da estimativa do estado atual do sistema para o próximo estado do sistema, com base no modelo dinâmico do sistema.
Na primeira iteração do filtro, as saídas de inicialização são tratadas como Estimativa de Estado Anterior e Incerteza.
Nas próximas iterações do filtro, as saídas de previsão tornam-se a Estimativa do Estado Anterior e a Incerteza.
O Ganho de Kalman define um peso da medição e um peso da estimativa anterior ao formar uma nova estimativa.
Uma baixa incerteza de medição em relação à incerteza estimada resultaria em um alto ganho de Kalman (próximo a 1). Como resultado, a nova estimativa ficaria próxima da medição. A figura a seguir ilustra a influência do alto ganho de Kalman na estimativa na aplicação de rastreamento de aeronaves.
Uma alta incerteza de medição em relação à incerteza estimada resultaria em um baixo ganho de Kalman (próximo a 0). Com isso, a nova estimativa ficaria próxima da estimativa anterior. A figura a seguir ilustra a influência do baixo Ganho de Kalman na estimativa na aplicação de rastreamento de aeronaves.
Agora, entendemos o algoritmo do Filtro de Kalman e estamos prontos para o primeiro exemplo numérico.
Sabemos com certeza que a altura do edifício não muda com o tempo, pelo menos durante o curto processo de medição.
We know for sure, that the building height doesn’t change over time, at least during the short measurement process.
Pode-se estimar a altura do edifício simplesmente olhando para ele.
A altura estimada do edifício é:
\[ \hat{x}_{0,0}=60m \]
Agora devemos inicializar a incerteza da estimativa. O erro de estimativa humano (desvio padrão) é de cerca de 15 metros: \ (\sigma = 15 \). Consequentemente, a variância é 225: \(\sigma^{2} = 225 \).
\[ p_{0,0}=225 \]
Agora, devemos prever o próximo estado com base nos valores de inicialização.
Como o modelo dinâmico do sistema de uso é constante, ou seja, o edifício não muda sua altura, então:
\[ \hat{x}_{1,0}=\hat{x}_{1,0}= 60m \]
A incerteza da estimativa extrapolada (variância) também não muda:
\[ p_{1,0}= p_{0,0}=225 \]
A primeira medição é: \( z_{1}=48.54m \).
Uma vez que o desvio padrão (\ (\sigma \)) do erro de medição do altímetro é 5, a variância (\ (\sigma ^ {2} \)) seria 25, portanto, a incerteza de medição é: \ (r_{1} = 25 \).
Cálculo de Ganho de Kalman:
\[ K_{1}= \frac{p_{1,0}}{p_{1,0}+r_{1}}= \frac{225}{225+25}=0.9 \]
Estimando o estado atual:
\[ \hat{x}_{1,1}=~ \hat{x}_{1,0}+ K_{1} \left( z_{1}- \hat{x}_{1,0} \right) =60+0.9 \left( 48.54-60 \right) =49.69m \]
Atualizando a incerteza da estimativa atual:
\[ p_{1,1}=~ \left( 1-K_{1} \right) p_{1,0}= \left( 1-0.9 \right) 225=22.5 \]
Uma vez que o modelo dinâmico do sistema de uso é constante, ou seja, o edifício não muda sua altura, então:
\[ \hat{x}_{2,1}=\hat{x}_{1,1}= 49.69m \]
A incerteza da estimativa extrapolada (variância) também não muda:
\[ p_{2,1}= p_{1,1}=22.5 \]
Após um atraso de tempo unitário, a estimativa prevista da iteração anterior torna-se uma estimativa anterior na iteração atual:
\[ \hat{x}_{2,1}=49.69m \]
A incerteza da estimativa extrapolada torna-se a incerteza da estimativa anterior:
\[ p_{2,1}= 22.5 \]
A segunda medição é: \( z_{2}=47.11m \)
A incerteza de medição é: \( r_{2}=25 \)
Cálculo de ganho de Kalman:
\[ K_{2}= \frac{p_{2,1}}{p_{2,1}+r_{2}}= \frac{22.5}{22.5+25}=0.47 \]
Estimando o estado atual:
\[ \hat{x}_{2,2}=~ \hat{x}_{2,1}+ K_{2} \left( z_{2}- x_{2,1} \right) =49.69+0.47 \left( 47.11-49.69 \right) =48.47m \]
Atualizando a incerteza da estimativa atual:
\[ p_{2,2}=~ \left( 1-K_{2} \right) p_{2,1}= \left( 1-0.47 \right) 22.5=11.84 \]
Uma vez que o modelo dinâmico do sistema de uso é constante, ou seja, o edifício não muda sua altura, então:
\[ \hat{x}_{3,2}=\hat{x}_{2,2}= 48.47m \]
A incerteza da estimativa extrapolada (variância) também não muda:
\[ p_{3,2}= p_{2,2}=11.84 \]
Os cálculos para as próximas iterações são resumidos na próxima tabela:
\( n \) | \( z_{n} \) | Estimativas do estado atual ( \( K_{n} \) , \( \hat{x}_{n,n} \) , \( p_{n,n} \) ) | Predição ( \( \hat{x}_{n+1,n} \) , \( p_{n+1,n} \) ) |
---|---|---|---|
3 | \( 55.01m \) | \[ K_{3}= \frac{11.84}{11.84+25}=0.32 \] \[ \hat{x}_{3,3}=~ 48.47+0.32 \left( 55.01 -48.47 \right) =50.57m \] \[ p_{3,3}= \left( 1-0.32 \right) 11.84=8.04 \] | \[ \hat{x}_{4,3}= \hat{x}_{3,3}=50.57m \] \[ p_{4,3}= p_{3,3}=8.04 \] |
4 | \( 55.15m \) | \[ K_{4}= \frac{8.04}{8.04+25}=0.24 \] \[ \hat{x}_{4,4}=~ 50.57+0.24 \left( 55.15 -50.57 \right) =51.68m \] \[ p_{4,4}= \left( 1-0.24 \right) 8.04=6.08 \] | \[ \hat{x}_{5,4}= \hat{x}_{4,4}=51.68m \] \[ p_{5,4}= p_{4,4}=6.08 \] |
5 | \( 49.89m \) | \[ K_{5}= \frac{6.08}{6.08+25}=0.2 \] \[ \hat{x}_{5,5}= 51.68+0.2 \left( 49.89 -51.68 \right) =51.33m \] \[ p_{5,5}= \left( 1-0.2 \right) 6.08=4.89 \] | \[ \hat{x}_{6,5}= \hat{x}_{5,5}=51.33m \] \[ p_{6,5}= p_{5,5}=4.89 \] |
6 | \( 40.85m \) | \[ K_{6}= \frac{4.89}{4.89+25}=0.16 \] \[ \hat{x}_{6,6}=~ 51.33+0.16 \left( 40.85 -51.33 \right) =49.62m \] \[ p_{6,6}= \left( 1-0.16 \right) 4.89=4.09 \] | \[ \hat{x}_{7,6}= \hat{x}_{6,6}=49.62m \] \[ p_{7,6}= p_{6,6}=4.09 \] |
7 | \( 46.72m \) | \[ K_{7}= \frac{4.09}{4.09+25}=0.14 \] \[ \hat{x}_{7,7}=~ 49.62+0.14 \left( 46.72 -49.62 \right) =49.21m \] \[ p_{7,7}= \left( 1-0.14 \right) 4.09=3.52 \] | \[ \hat{x}_{8,7}= \hat{x}_{7,7}=49.21m \] \[ p_{8,7}= p_{7,7}=3.52 \] |
8 | \( 50.05m \) | \[ K_{8}= \frac{3.52}{3.52+25}=0.12 \] \[ \hat{x}_{8,8}= 49.21+0.12 \left( 50.05 -49.21 \right) =49.31m \] \[ p_{8,8}= \left( 1-0.12 \right) 3.52=3.08 \] | \[ \hat{x}_{9,8}= \hat{x}_{8,8}=49.31m \] \[ p_{9,8}= p_{8,8}=3.08 \] |
9 | \( 51.27m \) | \[ K_{9}= \frac{3.08}{3.08+25}=0.11 \] \[ \hat{x}_{9,9}=~ 49.31+0.11 \left( 51.27 -49.31 \right) =49.53m \] \[ p_{9,9}= \left( 1-0.11 \right) 3.08=2.74 \] | \[ \hat{x}_{10,9}= \hat{x}_{9,9}=49.53m \] \[ p_{10,9}= p_{9,9}=2.74 \] |
10 | \( 49.95m \) | \[ K_{10}= \frac{2.74}{2.74+25}=0.1 \] \[ \hat{x}_{10,10}=~ 49.53+0.1 \left( 49.95 -49.53 \right) =49.57m \] \[ p_{10,10}= \left( 1-0.1 \right) 2.74=2.47 \] | \[ \hat{x}_{11,10}= \hat{x}_{10,10}=49.57m \] \[ p_{11,10}= p_{10,10}=2.47 \] |
O gráfico a seguir compara o valor verdadeiro, os valores medidos e as estimativas.
Como você pode ver, o valor estimado converge cerca de 49.5 metros após 7 medições.
O próximo gráfico compara a incerteza da medição e a incerteza estimada.
Na primeira iteração do filtro, a incerteza da estimativa está próxima da incerteza da medição e diminui rapidamente. Após 10 medições, a incerteza estimada (\ (\sigma^{2} \)) é 2.47, ou seja, o desvio padrão do erro da estimativa é: \ (\sigma = \sqrt[]{2,47} = 1.57m \)
Portanto, podemos dizer que a estimativa da altura do edifício é: \ (49.57 \pm 1.57m \)
O próximo gráfico mostra o ganho de Kalman.
Como você pode ver, o ganho de Kalman está diminuindo, tornando o peso de medição cada vez menor.
Neste exemplo, medimos a altura do edifício usando o Filtro Kalman unidimensional. Ao contrário do filtro \( \alpha - \beta - (\gamma) \), o ganho de Kalman é dinâmico e depende da precisão do dispositivo de medição.
No início, a inicialização do Filtro de Kalman não é precisa. Portanto, o peso das medições na Equação de Atualização do Estado é alto e a incerteza da estimativa é alta.
A cada iteração, o peso da medição é menor e a incerteza da estimativa é menor.
A saída do Filtro de Kalman inclui a estimativa e a incerteza da estimativa.
Agora, vamos atualizar a Equação de Extrapolação de Covariância com a variável de ruído do processo.
Em um mundo real, existem incertezas no modelo dinâmico do sistema. Por exemplo, quando queremos estimar o valor da resistência do resistor, assumimos o modelo dinâmico constante, ou seja, a resistência não muda entre as medições. No entanto, a resistência pode mudar ligeiramente devido à flutuação da temperatura ambiente. Ao rastrear mísseis balísticos com o radar, a incerteza do modelo dinâmico inclui mudanças aleatórias na aceleração do alvo. Para a aeronave, as incertezas são muito maiores devido às possíveis manobras da aeronave.
Por outro lado, quando estimamos a localização de um objeto estático usando o receptor GPS, a incerteza do modelo dinâmico é zero, uma vez que o objeto estático não se move. A incerteza do modelo dinâmico é chamada de Ruído do Processo. Na literatura, também é denominado ruído de planta, ruído de condução, ruído de dinâmica, ruído de modelo e ruído de sistema. O ruído do processo produz erros de estimativa.
No exemplo anterior, estimamos a altura do edifício. A altura do edifício não muda. Portanto, não levamos em consideração o ruído do processo.
A Variância de ruído do processo é indicada pela letra \(q \).
A Equação de Extrapolação de Covariância deve incluir a Variância de Ruído do Processo.
A Equação de Extrapolação de Covariância para dinâmica constante é:
\[ p_{n+1,n}= p_{n,n}+ q_{n} \]
Estas são as equações do Filtro de Kalman atualizadas em uma dimensão:
Equação | Nome da Equação | Nomes alternativos usados na literatura |
---|---|---|
\( \hat{x}_{n,n}=~ \hat{x}_{n,n-1}+ K_{n} \left( z_{n}- \hat{x}_{n,n-1} \right) \) | Atualização de estado | Equação de Filtragem |
\( \hat{x}_{n+1,n}= \hat{x}_{n,n}+ \Delta t\hat{\dot{x}}_{n,n} \) \( \hat{\dot{x}}_{n+1,n}= \hat{\dot{x}}_{n,n} \) (Para dinâmica de velocidade constante) |
State Extrapolation |
Equação de Predição Equação de Transição Equação de Previsão Modelo Dinâmico Modelo Espaço de Estados |
\( K_{n}= \frac{p_{n,n-1}}{p_{n,n-1}+r_{n}} \) | Ganho de Kalman | Equação de Peso |
\( p_{n,n}=~ \left( 1-K_{n} \right) p_{n,n-1} \) | Atualização da Covariância | Equação de Correção |
\( p_{n+1,n}= p_{n,n} + q_{n} \) (For constant dynamics) |
Extrapolação da Covariância | Equação Preditora da Covariância |
Nós gostariamos de estimar a temperatura de um líquido em um tanque.
Nós presumimos que em regime estacionário a temperatura do líquido é constante. Entretanto, algumas flutuações na temperatura real do líquido são possíveis. Podemos descrever a dinâmica do sistema pela equação seguinte:
\[ x_{n}=T+ w_{n} \]
onde:
\( T \) é a temperatura constante
\( w_{n} \) é um ruído de processo aleatório \( q \)
O gráfico a seguir compara a temperatura real do líquido e as medições.
Antes da primeira iteração, precisamos inicializar o Filtro de Kalman e prever o próximo estado (que é o primeiro estado).
Nós não sabemos qual a temperatura do líquido, e nosso palpite é 10\( ^{o}C \).
\[ \hat{x}_{0,0}=10^{o}C \]
Nosso palpite é bem impreciso. Configuramos nosso erro de estimativa de inicialização \( \sigma \) com 100. A Incerteza de Estimativa da inicialização é o erro de variância \( \left( \sigma ^{2} \right) \):
\[ p_{0,0}=100^{2}=10,000 \]
Essa variância é muito alta. Se inicializarmos com um valor mais significativo vamos obter um a convergência do Filtro de Kalman mais rápida.
Agora, nós devemos prever o próximo estado baseado nos valores de inicialização.
Uma vez que nosso modelo tem dinâmica constante, a estimativa prevista é igual a estimativa atual:
\[ \hat{x}_{1,0}=10^{o}C \]
A extrapolação da incerteza de estimativa (variância):
\[ p_{1,0}= p_{0,0}+q=10000+ 0.0001=10000.0001 \]
O valor de medição:
\[ z_{1}=~ 49.95^{o}C \]
Uma vez que o erro de medição é 0.1 ( \( \sigma \) ), a variância ( \( \sigma ^{2} \) ) seria 0.01, logo a incerteza de medição é:
\[ r_{1}= 0.01 \]
Cálculo do Ganho de Kalman:
\[ K_{1}= \frac{p_{1,0}}{p_{1,0}+r_{1}}= \frac{10000.0001}{10000.0001+0.01} = 0.999999 \]
O Ganho de Kalman é quase 1, ou seja, nosso erro de estimativa é muito maior que o erro de medição. Portanto, o peso de estimativa é insignificante, enquanto o peso de medição é quase 1.
Estimando o estado atual:
\[ \hat{x}_{1,1}=~ \hat{x}_{1,0}+ K_{1} \left( z_{1}- \hat{x}_{1,0} \right) =10+0.999999 \left( 49.95-10 \right) =49.95^{o}C \]
Atualizar a incerteza de estimativa atual:
\[ p_{1,1}=~ \left( 1-K_{1} \right) p_{1,0}= \left( 1-0.999999 \right) 10000.0001=0.01 \]
Uma vez que o Modelo Dinâmico do sistema utilizado é constante, ou seja, a temperatura do líquido não varia, então:
\[ \hat{x}_{2,1}=\hat{x}_{1,1}= 49.95^{o}C \]
A extrapolação da incerteza de estimativa (variância) é:
\[ p_{2,1}= p_{1,1}+q=0.01+ 0.0001=0.0101 \]
O valor de medição:
\[ z_{2}=~ 49.967^{o}C \]
Uma vez que o erro de medição é 0.1 ( \( \sigma \) ), a variância ( \( \sigma^{2} \) ) seria 0.01, logo a incerteza de medição é:
\[ r_{2}= 0.01 \]
cálculo do Ganho de Kalman:
\[ K_{2}= \frac{p_{2,1}}{p_{2,1}+r_{2}}= \frac{0.0101}{0.0101+0.01} = 0.5 \]
O Ganho de Kalman é 0.5, ou seja, o peso da estimativa e o peso de medição são iguais.
Estimando o estado atual:
\[ \hat{x}_{2,2}=~ \hat{x}_{2,1}+ K_{2} \left( z_{2}- \hat{x}_{2,1} \right) =49.95+0.5 \left( 49.967-49.95 \right) =49.959^{o}C \]
Atualizar a incerteza de estimativa atual:
\[ p_{2,2}=~ \left( 1-K_{2} \right) p_{2,1}= \left( 1-0.5 \right) 0.0101=0.005 \]
Uma vez que o Modelo Dinâmico do sistema utilizado é constante, ou seja, a temperatura do líquido não varia, então:
\[ \hat{x}_{3,2}=\hat{x}_{2,2}= 49.959^{o}C \]
A extrapolação da incerteza de estimativa (variância) é:
\[ p_{3,2}= p_{2,2}+q=0.005+ 0.0001=0.0051 \]
Os cálculos para as próximas iterações estão resumidos na tabela a seguir:
\( n \) | \( z_{n} \) | Estimativas do estado atual ( \( K_{n} \) , \( \hat{x}_{n,n} \) , \( p_{n,n} \) ) | Predição ( \( \hat{x}_{n+1,n} \) , \( p_{n+1,n} \) ) |
---|---|---|---|
3 | \( 50.1^{o}C \) | \[ K_{3}= \frac{0.0051}{0.0051+0.01}=0.3388 \] \[ \hat{x}_{3,3}=~ 49.959+0.3388 \left( 50.1-49.959 \right) =50.007^{o}C \] \[ p_{3,3}= \left( 1-0.3388 \right)0.0051 =0.0034 \] | \[ \hat{x}_{4,3}= \hat{x}_{3,3}=50.007^{o}C \] \[ p_{4,3}= 0.0034+0.0001=0.0035 \] |
4 | \( 50.106^{o}C \) | \[ K_{4}= \frac{0.0035}{0.0035+0.01}=0.2586 \] \[ \hat{x}_{4,4}=~ 50.007+0.2586 \left( 50.106-50.007 \right) =50.032^{o}C \] \[ p_{4,4}= \left( 1-0.2586 \right) 0.0035=0.0026 \] | \[ \hat{x}_{5,4}= \hat{x}_{4,4}=50.032^{o}C \] \[ p_{5,4}= 0.0026+0.0001=0.0027 \] |
5 | \( 49.992^{o}C \) | \[ K_{5}= \frac{0.0027}{0.0027+0.01}=0.2117 \] \[ \hat{x}_{5,5}= 50.032+0.2117 \left( 49.992-50.032 \right) =50.023^{o}C \] \[ p_{5,5}= \left( 1-0.2117 \right) 0.0027=0.0021 \] | \[ \hat{x}_{6,5}= \hat{x}_{5,5}=50.023^{o}C \] \[ p_{6,5}= 0.0021+0.0001=0.0022 \] |
6 | \( 49.819^{o}C \) | \[ K_{6}= \frac{0.0022}{0.0022+0.01}=0.1815 \] \[ \hat{x}_{6,6}=~ 50.023+0.1815 \left( 49.819-50.023 \right) =49.987^{o}C \] \[ p_{6,6}= \left( 1-0.1815 \right) 0.0022=0.0018 \] | \[ \hat{x}_{7,6}= \hat{x}_{6,6}=49.987^{o}C \] \[ p_{7,6}= 0.0018+0.0001=0.0019 \] |
7 | \( 49.933^{o}C \) | \[ K_{7}= \frac{0.0019}{0.0019+0.01}=0.1607 \] \[ \hat{x}_{7,7}=~ 49.987+0.1607 \left( 49.933-49.987 \right) =49.978^{o}C \] \[ p_{7,7}= \left( 1-0.1607 \right) 0.0019=0.0016 \] | \[ \hat{x}_{8,7}= \hat{x}_{7,7}=49.978^{o}C \] \[ p_{8,7}= 0.0016+0.0001=0.0017 \] |
8 | \( 50.007^{o}C \) | \[ K_{8}= \frac{0.0017}{0.0017+0.01}=0.1458 \] \[ \hat{x}_{8,8}= 49.978+0.1458 \left( 50.007-49.978 \right) =49.983^{o}C \] \[ p_{8,8}= \left( 1-0.1458 \right) 0.0017=0.0015 \] | \[ \hat{x}_{9,8}= \hat{x}_{8,8}=49.983^{o}C \] \[ p_{9,8}= 0.0015+0.0001=0.0016 \] |
9 | \( 50.023^{o}C \) | \[ K_{9}= \frac{0.0016}{0.0016+0.01}=0.1348 \] \[ \hat{x}_{9,9}=~ 49.983+0.1348 \left( 50.023-49.983 \right) =49.988^{o}C \] \[ p_{9,9}= \left( 1-0.1348 \right) 0.0016=0.0014 \] | \[ \hat{x}_{10,9}= \hat{x}_{9,9}=49.988^{o}C \] \[ p_{10,9}= 0.0014+0.0001=0.0015 \] |
10 | \( 49.99^{o}C \) | \[ K_{10}= \frac{0.0015}{0.0015+0.01}=0.1265 \] \[ \hat{x}_{10,10}=~ 49.988+0.1265 \left( 49.99 -49.988 \right) =49.988^{o}C \] \[ p_{10,10}= \left( 1-0.1265 \right) 0.0015=0.0013 \] | \[ \hat{x}_{11,10}= \hat{x}_{10,10}=49.988^{o}C \] \[ p_{11,10}= 0.0013+0.0001=0.0014 \] |
O gráfico a seguir compara o valor real, os valores medidos e os valores estimados.
Como você pode ver, o valor estimado converge para o valor real.
O próximo gráfico mostra a incerteza de estimativa.
A incerteza de estimativa rapidamente cai. Após 10 medições, ela tem um valor de 0.0013 ( \( \sigma ^{2} \) ), ou seja, o desvio padrão do erro de estimativa é: \( \sigma = \sqrt[]{0.0013}=0.036^{o}C \)
Então, nós podemos dizer que a temperatura estimada do líquido é: \( 49.988 \pm 0.036_{ }^{o}C \)
O próximo gráfico mostra o Ganho de Kalman.
Como você pode ver, o Ganho de Kalman éstá caindo, fazendo o peso de medição ficar cada vez menor.
Nesse exemplo nós medimos a temperatura de um líquido usando o Filtro de Kalman unidimensional. Embora a dinâmica do sistema inclua um ruído de processo aleatório, o Filtro de Kalman pôde nos fornecer uma boa estimação.
Assim como no exemplo anterior, nesse exemplo vamos medir a temperatura de um líquido em um tanque. A dinâmica do sistema não é constante, o líquido está aquecendo a uma taxa de 0.1\( ^{o}C \) por segundo.
Os parâmetros do Filtro de Kalman são similares ao exemplo anterior:
Preste atenção, embora a dinâmica do sistema real não seja constante (uma vez que o líquido está aquecendo), vamos tratar o sistema como um com dinâmica constante (a temperatura não varia).
O gráfico a seguir compara a temperatura real do líquido e as medições.
A iteração zero é similiar ao exemplo anterior.
Antes da primeira iteração, precisamos inicializar o Filtro de Kalman e prever o próximo estado (que é o primeiro estado).
Nós não sabemos qual a temperatura do líquido no tanque e nosso palpite é \( ^{o}C \).
\[ \hat{x}_{0,0}=10^{o}C \]
Nosso palpite é bem impreciso, nós configuramos nosso erro de estimativa de inicialização ( \( \sigma \) ) em 100. A Incerteza de Estimativa da inicialização é o erro de variância \( \left( \sigma ^{2} \right) \):
\[ p_{0,0}=100^{2}=10,000 \]
Essa variância é muito alta. Se nós inicializarmos com um valor mais significativo, vamos conseguir uma convergência do Filtro de Kalman mais rápida.
Agora, devemos prever o próximo estado baseado nos valores iniciais.
Uma vez que nosso modelo tem dinâmica constante, a estimativa prevista é igual à estimativa atual:
\[ \hat{x}_{1,0}=10^{o}C \]
A extrapolação da incerteza de estimativa (variância):
\[ p_{1,0}= p_{0,0}+q=10000+ 0.0001=10000.0001 \]
Os cálculos para as próximas iterações estão resumidos na tabela a seguir:
\( n \) | \( z_{n} \) | Estimativa dos estados atuais( \( K_{n} \) , \( \hat{x}_{n,n} \) , \( p_{n,n} \) ) | Predição ( \( \hat{x}_{n+1,n} \) , \( p_{n+1,n} \) ) |
---|---|---|---|
1 | \( 50.45^{o}C \) | \[ K_{1}= \frac{10000.0001}{10000.0001+0.01} = 0.999999 \] \[ \hat{x}_{1,1}=~ 10+0.999999 \left( 50.45-10 \right) =50.45^{o}C \] \[ p_{1,1}= \left( 1-0.999999 \right) 10000.0001=0.01 \] | \[ \hat{x}_{2,1}= \hat{x}_{1,1}=50.45^{o}C \] \[ p_{2,1}= 0.01+0.0001=0.0101 \] |
2 | \( 50.967^{o}C \) | \[ K_{2}= \frac{0.0101}{0.0101+0.01}=0.5025 \] \[ \hat{x}_{2,2}=~ 50.45+0.5025 \left( 50.967-50.45 \right) =50.71^{o}C\] \[ p_{2,2}= \left( 1-0.5025 \right) 0.0101=0.005 \] | \[ \hat{x}_{3,2}= \hat{x}_{2,2}=50.71^{o}C \] \[ p_{3,2}= 0.005+0.0001=0.0051 \] |
3 | \( 51.6^{o}C \) | \[ K_{3}= \frac{0.0051}{0.0051+0.01}=0.3388 \] \[ \hat{x}_{3,3}=~ 50.71+0.3388 \left( 51.6-50.71 \right) =51.011^{o}C\] \[ p_{3,3}= \left( 1-0.3388 \right) 0.0051=0.0034 \] | \[ \hat{x}_{4,3}= \hat{x}_{3,3}=51.011^{o}C \] \[ p_{4,3}= 0.0034+0.0001=0.0035 \] |
4 | \( 52.106^{o}C \) | \[ K_{4}= \frac{0.0035}{0.0035+0.01}=0.2586 \] \[ \hat{x}_{4,4}=~ 51.011+0.2586 \left( 52.106-51.011 \right) =51.295^{o}C \] \[ p_{4,4}= \left( 1-0.2586 \right) 0.0035=0.0026 \] | \[ \hat{x}_{5,4}= \hat{x}_{4,4}=51.295^{o}C \] \[ p_{5,4}= 0.0026+0.0001=0.0027 \] |
5 | \( 52.492^{o}C \) | \[ K_{5}= \frac{0.0027}{0.0027+0.01}=0.2117 \] \[ \hat{x}_{5,5}= 51.295+0.2117 \left( 52.492-51.295 \right) =51.548^{o}C \] \[ p_{5,5}= \left( 1-0.2117 \right) 0.0027=0.0021 \] | \[ \hat{x}_{6,5}= \hat{x}_{5,5}=51.548^{o}C \] \[ p_{6,5}= 0.0021+0.0001=0.0022 \] |
6 | \( 52.819^{o}C \) | \[ K_{6}= \frac{0.0022}{0.0022+0.01}=0.1815 \] \[ \hat{x}_{6,6}=~ 51.548+0.1815 \left( 52.819-51.548 \right) =51.779^{o}C \] \[ p_{6,6}= \left( 1-0.1815 \right) 0.0022=0.0018 \] | \[ \hat{x}_{7,6}= \hat{x}_{6,6}=51.779^{o}C \] \[ p_{7,6}= 0.0018+0.0001=0.0019 \] |
7 | \( 53.433^{o}C \) | \[ K_{7}= \frac{0.0019}{0.0019+0.01}=0.1607 \] \[ \hat{x}_{7,7}=~ 51.779+0.1607 \left( 53.433-51.779 \right) =52.045^{o}C \] \[ p_{7,7}= \left( 1-0.1607 \right) 0.0019=0.0016 \] | \[ \hat{x}_{8,7}= \hat{x}_{7,7}=52.045^{o}C \] \[ p_{8,7}= 0.0016+0.0001=0.0017 \] |
8 | \( 54.007^{o}C \) | \[ K_{8}= \frac{0.0017}{0.0017+0.01}=0.1458 \] \[ \hat{x}_{8,8}= 52.045+0.1458 \left( 54.007-52.045 \right) =52.331^{o}C \] \[ p_{8,8}= \left( 1-0.1458 \right) 0.0017=0.0015 \] | \[ \hat{x}_{9,8}= \hat{x}_{8,8}=52.331^{o}C \] \[ p_{9,8}= 0.0015+0.0001=0.0016 \] |
9 | \( 54.523^{o}C \) | \[ K_{9}= \frac{0.0016}{0.0016+0.01}=0.1348 \] \[ \hat{x}_{9,9}=~ 52.331+0.1348 \left( 54.523-52.331 \right) =52.626^{o}C \] \[ p_{9,9}= \left( 1-0.1348 \right) 0.0016=0.0014 \] | \[ \hat{x}_{10,9}= \hat{x}_{9,9}=52.626^{o}C \] \[ p_{10,9}= 0.0014+0.0001=0.0015 \] |
10 | \( 54.99^{o}C \) | \[ K_{10}= \frac{0.0015}{0.0015+0.01}=0.1265 \] \[ \hat{x}_{10,10}=~ 2.626+0.1265 \left( 54.99 -52.626 \right) =52.925^{o}C \] \[ p_{10,10}= \left( 1-0.1265 \right) 0.0015=0.0013 \] | \[ \hat{x}_{11,10}= \hat{x}_{10,10}=52.925^{o}C \] \[ p_{11,10}= 0.0013+0.0001=0.0014 \] |
O gráfico a seguir comapra o valor real, os valores medidos e os valores estimados.
Como você pode ver, o Filtro de Kalman falhou em fornecer uma estimação confiável. Há um erro de atraso na estimação do filtro. Nós já encontramos o erro de atraso no Exemplo 3, onde estimamos a posição de uma aeronave em acelaração usando o filtro \( \alpha - \beta \) que presume uma velocidade constante para a aeronave. Nos livramos do erro de atraso no Exemplo 4, onde substituimos o filtro \( \alpha - \beta \) pelo filtro \( \alpha -\beta -\gamma \) que presume uma aceleração.
Existem duas razões que causam o erro de atraso no nosso exemplo do Filtro de Kalman:
Existem dois caminhos possíveis para corrigir o erro de atraso:
Nesse exemplo, nós medimos a temperatura de um líquido em aquecimento usando o Filtro de Kalman unidimensional com uma dinâmica de modelo constante. Nós observamos o erro de atraso na estimação do Filtro de Kalman. Esse erro é causado pela definição errada da dinâmica do modelo e pela definição errada do modelo do processo.
P errp de atraso pode ser corrigido com a definição apropriada da dinâmica do modelo ou do modelo do processo.
Esse exemplo é semelhante ao exemplo anterior com apenas uma mudança. Uma vez que nosso processo não está bem definido, vamos aumentar a incerteza do processo \( \left( q \right) \) de 0.0001 para 0.15.
Antes da primeira iteração, precisamos incializar o Filtro de Kalman e prever o próximo estado (que é o primeiro estado).
A inicialização zero é similar ao exemplo anterior.
Nós não sabemos qual é a temperatura do líquido no tanque e nosso palpite é 10\( ^{o}C \).
\[ \hat{x}_{0,0}=10^{o}C \]
Nosso palpite é bem impreciso, configuramos o erro de estimativa de inicialização ( \( \sigma \) ) com valor 100. A Incerteza de Estimativa da inicialização é o erro de variância \( \left( \sigma ^{2} \right) \):
\[ p_{0,0}=100^{2}=10,000 \]
Essa variância é muito alta. Se nós inicializarmos com um valor mais significativo, vamos conseguir uma convergência do Filtro de Kalman mais rápida.
Agora, devemos prever o próximo estado baseado nos valores de inicialização.
Uma vez que nosso modelo tem dinâmica constante, a estimativa prevista é igual a estimativa atual:
\[ \hat{x}_{1,0}=10^{o}C \]
A extrapolação da incerteza de estimativa (variância):
\[ p_{1,0}= p_{0,0}+q=10000+ 0.15=10000.15 \]
Os cálculos para as próximas iterações estão resumidos na tabela a seguir:
\( n \) | \( z_{n} \) | Estimativa dos estados atuais( \( K_{n} \) , \( \hat{x}_{n,n} \) , \( p_{n,n} \) ) | Predição ( \( \hat{x}_{n+1,n} \) , \( p_{n+1,n} \) ) |
---|---|---|---|
1 | \( 50.45^{o}C \) | \[ K_{1}= \frac{10000.15}{10000.15+0.01} = 0.999999 \] \[ \hat{x}_{1,1}=~ 10+0.999999 \left( 50.45-10 \right) =50.45^{o}C \] \[ p_{1,1}= \left( 1-0.999999 \right)10000.15=0.01 \] | \[ \hat{x}_{2,1}= \hat{x}_{1,1}=50.45^{o}C \] \[ p_{2,1}= 0.01+0.15=0.16 \] |
2 | \( 50.967^{o}C \) | \[ K_{2}= \frac{0.16}{0.16+0.01}=0.9412 \] \[ \hat{x}_{2,2}=~ 50.45+0.9412 \left( 50.967-50.45 \right) =50.94^{o}C\] \[ p_{2,2}= \left( 1-0.9412 \right) 0.16=0.0094 \] | \[ \hat{x}_{3,2}= \hat{x}_{2,2}=50.94^{o}C \] \[ p_{3,2}= 0.0094+0.15=0.1594 \] |
3 | \( 51.6^{o}C \) | \[ K_{3}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{3,3}=~ 50.94+0.941 \left( 51.6-50.94 \right) =51.56^{o}C\] \[ p_{3,3}= \left( 1-0.941 \right) 0.1594=0.0094 \] | \[ \hat{x}_{4,3}= \hat{x}_{3,3}=51.56^{o}C \] \[ p_{4,3}= 0.0094+0.15=0.1594 \] |
4 | \( 52.106^{o}C \) | \[ K_{4}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{4,4}=~ 51.56+0.941 \left( 52.106-51.56 \right) =52.07^{o}C \] \[ p_{4,4}= \left( 1-0.941 \right) 0.1594=0.0094 \] | \[ \hat{x}_{5,4}= \hat{x}_{4,4}=52.07^{o}C \] \[ p_{5,4}= 0.0094+0.15=0.1594 \] |
5 | \( 52.492^{o}C \) | \[ K_{5}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{5,5}= 52.07+0.941 \left( 52.492-52.07 \right) =52.47^{o}C \] \[ p_{5,5}= \left( 1-0.941 \right) 0.1594=0.0094 \] | \[ \hat{x}_{6,5}= \hat{x}_{5,5}=52.47^{o}C \] \[ p_{6,5}= 0.0094+0.15=0.1594 \] |
6 | \( 52.819^{o}C \) | \[ K_{6}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{6,6}=~ 52.47+0.941 \left( 52.819-52.47 \right) =52.8^{o}C \] \[ p_{6,6}= \left( 1-0.941 \right) 0.1594=0.0094 \] | \[ \hat{x}_{7,6}= \hat{x}_{6,6}=52.8^{o}C \] \[ p_{7,6}= 0.0094+0.15=0.1594 \] |
7 | \( 53.433^{o}C \) | \[ K_{7}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{7,7}=~ 52.8+0.941 \left( 53.433-52.8 \right) =53.4^{o}C \] \[ p_{7,7}= \left( 1-0.941 \right) 0.1594=0.0094 \] | \[ \hat{x}_{8,7}= \hat{x}_{7,7}=53.4^{o}C \] \[ p_{8,7}= 0.0094+0.15=0.1594 \] |
8 | \( 54.007^{o}C \) | \[ K_{8}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{8,8}= 53.4+0.941 \left( 54.007-53.4 \right) =53.97^{o}C \] \[ p_{8,8}= \left( 1-0.941 \right) 0.1594=0.0094 \] | \[ \hat{x}_{9,8}= \hat{x}_{8,8}=53.97^{o}C \] \[ p_{9,8}= 0.0094+0.15=0.1594 \] |
9 | \( 54.523^{o}C \) | \[ K_{9}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{9,9}=~ 53.97+0.941 \left( 54.523-53.97 \right) =54.49^{o}C \] \[ p_{9,9}= \left( 1-0.941 \right) 0.1594=0.0094 \] | \[ \hat{x}_{10,9}= \hat{x}_{9,9}=54.49^{o}C \] \[ p_{10,9}= 0.0094+0.15=0.1594 \] |
10 | \( 54.99^{o}C \) | \[ K_{10}= \frac{0.1594}{0.1594+0.01}=0.941 \] \[ \hat{x}_{10,10}=~ 54.49+0.941 \left( 54.99 -54.49 \right) =54.96^{o}C \] \[ p_{10,10}= \left( 1-0.941 \right) 0.1594=0.0094 \] | \[ \hat{x}_{11,10}= \hat{x}_{10,10}=54.96^{o}C \] \[ p_{11,10}= 0.0094+0.15=0.1594 \] |
O gráfico a seguir comaprar o valor real, os valores medidos e os valores estimados.
Como você pode ver, as estimativas estão seguindo as medições. Não há erro de atraso.
O próximo gráfico mostra o Ganho de Kalman.
Devido à alta incerteza do processo, o peso de medição é muito maior que o peso de estimativa, logo o Ganho de Kalman é alto, e converge em 0.94.
Nós podemos nos livrar do erro de atraso configurando a alta incerteza do processo. Entretanto, uma vez que nosso modelo não está bem definido, nós obtemos estimativas ruidosas que são quase iguais às medições, e perdemos o objetivo do Filtro de Kalman.
A melhor implementação do Filtro de Kalman deve envolver o modelo que é bem próximo da realidade deixando um espaço pequeno para o ruído do processo. Entretanto, o modelo preciso nem sempre está disponível. Por exemplo, o piloto de um avião pode decidir realizar subitamente uma manobra que vai mudar a trajetória prevista da aeronave. Nesse caso, o ruído do processo deve ser aumentado.