Philosopher's_Path_Kyoto_3

The cherry blossoms along the Philosophers Path in spring, Kyoto (Japan)

Filtro de Média Móvel

Tópico anterior: << Intro. Processamento Siinais | Próximo tópico: >> Modelagem de sistema térmico.

Segue outro exemplo de sistema discreto.

Exemplo 2) Problema do nível de um rio

Outro exemplo de sistema discreto que é relativamente simples de apreciar é um filtro de média móvel de dois passos (em inglês: two-tap moving average filter). Este sistema pega a média de duas amostras de entrada consecutivas e passa o resultado para a saída do sistema.

filtro_media_movel

O filtro de média móvel é muito útil porque pode mitigar flutuações que podem ocorrer durante uma coleta de dados.

Filtro de média móvel de 2 passos

Por exemplo, considere a situação em que você está medindo o nível de um rio que é afetado por uma maré local. Essas medições irão flutuar à medida que a água se espalha o medidor. Ao tomar a média de duas medições consecutivas, o efeito do movimento agitado da água será reduzido (dê uma olhada nos gráficos no final desta subseção para ver o efeito de um filtro de média móvel).

river_measurement_bar

O sistema de média móvel de dois passos pode ser representado matematicamente pela seguinte equação de diferença:

Mais uma vez, se você resolvesse esta equação de diferença para diferentes valores de , determinaria a saída deste sistema para qualquer entrada . Eu encorajaria você a fazer isso por si mesmo e observar que quando você resolver para você terá um termo na equação; este termo não está definido explicitamente, então você assume que é zero. Além disso, se você resolvesse usando a entrada mostrada na figura acima, você deveria obter um valor de 0,5 para , já que não está definido explicitamente. Resultaria algo como:

Vetor entrada, Vetor saída,












O diagrama de fluxo de sinal da média móvel de dois passos é mostrado abaixo e contém dois multiplicadores, um somador e um operador de atraso (o quadrado com um dentro dele):

filtro_media_movel_2

Os filtros de média móvel podem calcular a média de mais do que apenas duas amostras consecutivas e podem obter a média de qualquer número de amostras consecutivas.

Filtro de média móvel de 4 passos

Como exemplo, um filtro de média móvel de quatro toques é aplicado à seguinte sequência de dados que representa o nível do rio (em metros) medido em intervalos de 20 minutos:

Nível = [.375 .35 .425 .475 .4 .375 .525 .425 .475 .425 .5 .45 .575 .525 .6 .675 .575 .7 .725 .6];

Esses dados brutos aparecem no gráfico abaixo à esquerda na figura abaixo. Você pode ver que as leituras flutuam significativamente. O gráfico à direita mostra o resultado da passagem dos dados por uma média móvel de quatro toques, que calcula a média de 4 amostras consecutivas. Você vê que as flutuações nas leituras foram suavizadas pelo filtro.

Dados brutosDados Filtrados
nivel_rionivel_rio_media_4.png

Você precebe que as flutuações nas leituras foram suavizadas pelo filtro.

A equação de diferençar de um filtro de média móvel de quatro passos é dada por:

Você notará que as primeiras quatro três amostras dos dados filtrados do rio têm uma inclinação relativamente acentuada. Isso ocorre porque as três primeiras saídas (, e ) são todas calculadas usando valores de que são indefinidos e, portanto, assumidos como zero. Isto tem o efeito de distorcer a saída do filtro e os profissionais de DSP precisam estar bem conscientes deste problema ao filtrar dados.

O diagrama de fluxo do sinal é mostrado à seguir:

filtro_media_movel_4

Calculando valores usando Matlab/Octave

Determinar a saída de sistemas discretos (implementar um sistema discreto) pode ser uma tarefa tediosa quando você lida com muitas amostras. Felizmente, os computadores podem realizar os cálculos para nós com extrema rapidez e precisão. Tanto o Matlab quanto o Octave são usados com muita frequência para esse propósito e possuem comandos/funções integrados que o tornam um processo muito simples, por exemplo a função filter(). Entretanto, essas funções exigem que os sistemas discretos sejam descritos em termos de coeficientes e :

ou resumidamente:

a transformada das expressões acima levam à:

ou resumidamente:

(função transferência do filtro)

onde número de amostras atrasadas do sinal ; e número de amostras atrasadas do sinal . Note que os termos e estão associados respectivamente com ponderações (ganhos ou atenuações) que devem ser usadas com os sinas e .

Para entender melhor a função filter(), favor clicar aqui .

Como a equação de diferenças do filtro de média móvel de 4 passos é dado por:

Então os coeficientes e serão: e

Codificando no Matlab/Octave, resulta algo como:

Único problema: se for traçado um gráfico usando apenas o comando plot(nivel), não irá aparecer no gráfico os instantes de captura de cada dado.

Criando série de dados no formato HH:MM

O Matlab permite criar uma série de dados (vetor) baseado em data/hora:

Ops... Resultamos num pequeno erro no momento de criar vetor com horários das capturas... ele acabou ficando com 21 pontos. E deveriam ser 20 pontos. Corrigindo:

Agora podemos tentar plotar o gráfico:

nivel_rio.png

Aplicamos agora o filtro de média móvel de 4 passos:

nivel_rio_media_4.png


Exercício Proposto: desenvolva uma função em C (para Arduino ou PC), ou em Python capaz de realizar filtragem por média móvel, onde o usuário entra com os coeficientes do filtros, o vetor de entrada e este programa retorna o vetor de saída (calculado).

Algo como:

Dica: o algoritmo pode ficar algo como:


Tópico anterior: << Intro. Processamento Siinais | Próximo tópico: >> Modelagem de sistema térmico. Outro tópico: Detalhes sobre a função filter() do Matlab.


Fernando Passold, em 27-31/03/2024.