LusoRobótica - Robótica em Português

Software => Software e Programação => Tópico iniciado por: Kristey em 08 de Abril de 2017, 16:35

Título: Tipos de filtro/tratamento de dados a aplicar a dados recolhidos por sensores
Enviado por: Kristey em 08 de Abril de 2017, 16:35
Boa tarde.

Apesar de ter tido uma cadeira de sensores inteligentes, não abordamos esta temática (  :o >:( )
Normalmente para medição de baterias por ADC adquirir varias medidas e fazer uma media, resolvia a situação.
Mas neste momento estou-me a deparar com um problema de um sensor que trabalha por i2c que me devolve os valores ja tratados da grandeza que mede contudo de vez em quando devolve picos, um valor que varia normalmente à unidade:
124,124,124,124,125,125,125,300,126,126
Obviamente que aquele 300 está errado.

Media:
Por exemplo de 10 valores não me resolve o problema.
Media=142,3

Mediana:
Mediana: 125
A mediana ja resolve por exemplo, mas ignora todos os outros valores (por mais vezes que eles apareçam).

Haverá mais formas de tratar este problema ate de uma forma mais científica?
Título: Re: Tipos de filtro/tratamento de dados a aplicar a dados recolhidos por sensores
Enviado por: senso em 08 de Abril de 2017, 20:03
Fazes a média e descartas valores que ultrapassarem em X % a média, se realmente esse valor for errado.
Tens a certeza que é um valor errado?
Que sensor é?
Título: Re: Tipos de filtro/tratamento de dados a aplicar a dados recolhidos por sensores
Enviado por: Kristey em 09 de Abril de 2017, 00:28
É uma temperatura.
Ja tinha pensado nessa questão da rejeição de valores a cima ou a baixo da media, pensei em ver o "declive da derivada entre dois valores"
Mas realmente esse metodo é melhor.
Título: Re: Tipos de filtro/tratamento de dados a aplicar a dados recolhidos por sensores
Enviado por: Njay em 09 de Abril de 2017, 01:35
Fazes a média e descartas valores que ultrapassarem em X % a média, se realmente esse valor for errado.

Isto.
É um método "standard", não sei o nome. Deitas fora os que estiverem muito fora da média, os "outliers". Em certas aplicações podes ter que ter cuidados adicionais, como não descartar mais do que Y% dos valores por unidade de tempo.
Título: Re: Tipos de filtro/tratamento de dados a aplicar a dados recolhidos por sensores
Enviado por: senso em 09 de Abril de 2017, 14:02
Eu tenho ideia que já li isso ser chamado de data/sample prunning, mas as internets só me mostram decision tree prunning para big data/data minning(que vai dar ao mesmo, é tirar os outliers).
Título: Re: Tipos de filtro/tratamento de dados a aplicar a dados recolhidos por sensores
Enviado por: KammutierSpule em 09 de Abril de 2017, 18:20
Uma maneira que inventei agora "em cima do joelho":

pseudo codigo:

Código: [Seleccione]
var valorActual, mediaAcc;

Loop:
    valorActual = LeSensor();
    if ABS(valorActual - mediaAcc) < THRESHOULD_A_DEFINIR
         mediaAcc = (mediaAcc + valorActual) / 2;
    else
         // ignora valor

Outra alternativa é fazer uma media movel? (media dos ultimos X valores?) e descartar esse valor que sai fora de determinado threshould.

Isto tem um problema, que é.. se houver mesmo uma variacao muito brusca.
Entao a alternativa seria usar a media móvel e como os valores antigos vao sendo perdidos e os novos vao entrando.. quando so houver novos, a diferente dos novos e os antigos está abaixo desse treshould.. e passa a calcular usando os novos valores.

Título: Re: Tipos de filtro/tratamento de dados a aplicar a dados recolhidos por sensores
Enviado por: Sérgio_Sena em 09 de Abril de 2017, 20:24
Boa tarde.

Apesar de ter tido uma cadeira de sensores inteligentes, não abordamos esta temática (  :o >:( )
Normalmente para medição de baterias por ADC adquirir varias medidas e fazer uma media, resolvia a situação.
Mas neste momento estou-me a deparar com um problema de um sensor que trabalha por i2c que me devolve os valores ja tratados da grandeza que mede contudo de vez em quando devolve picos, um valor que varia normalmente à unidade:
124,124,124,124,125,125,125,300,126,126
Obviamente que aquele 300 está errado.

Media:
Por exemplo de 10 valores não me resolve o problema.
Media=142,3

Mediana:
Mediana: 125
A mediana ja resolve por exemplo, mas ignora todos os outros valores (por mais vezes que eles apareçam).

Haverá mais formas de tratar este problema ate de uma forma mais científica?


Problema bastante comum no tratamento de sinais da vida real.
Contudo, o sensor devolver-te um valor tao dispar do nominal, eh estranho por si.

Podes fazer medias e/ou medianas, mas o melhor algoritmo p tratar o TEU sinal, deve ser adaptado ao teu TIPO DE SINAL. Isto porque as aplicacoes sao todas diferentes e todas precisam atencao pessoal e particular.
Poderahs ter q, alem da media/mediana, adicionar mais variaveis ao teu algoritmo de modo a dar-te apenas valores filtrados reais descartando variacoes bruscas.

Eh temperatura da agua q estahs a medir?  Nunca vi a agua a mudar to rapidamente de temperatura. Sinceramente eh um meio muito lento nesse aspecto.
Por isso se sabes q o teu delta-T acima de determinado valor eh errado, entao sabes como corrigir/auto-corrigir o teu algoritmo.

Título: Re: Tipos de filtro/tratamento de dados a aplicar a dados recolhidos por sensores
Enviado por: dropes em 10 de Abril de 2017, 09:16
Realmente não é suposto um sensor de temperatura ter mudanças tão bruscas.
Se tal existe então algo se passa na leitura, interferências externas ou código à mistura.

Principalmente averiguar o motivo destes valores, se for normal deve-se ignorar os picos já que não são usados na prática.
Título: Re: Tipos de filtro/tratamento de dados a aplicar a dados recolhidos por sensores
Enviado por: KammutierSpule em 10 de Abril de 2017, 09:46
Realmente não é suposto um sensor de temperatura ter mudanças tão bruscas.
Se tal existe então algo se passa na leitura, interferências externas ou código à mistura.

Principalmente averiguar o motivo destes valores, se for normal deve-se ignorar os picos já que não são usados na prática.

Este tipo de casos pode ser investigado no hardware (se justificar),
no entanto, por experiencia própria, o software nao pode ignorar estes valores no sentido que alguma coisa tem de fazer com eles mesmo que apareçam.

Já me aconteceu escrever código que partia do princípio que se ia verificar o requisito de hardware, eg: "a temperatura varia entre 0.0V e 2.5V"
Guess what? afinal havia situaçoes que o hardware criava picos maiores que 2.5V e o meu código fazia overflow e o resultado era completamente contrário ao que seria de esperar. Isto aconteceu já com os equipamentos instalados no terreno e não tinha sido testado em laboratorio :/
Título: Re: Tipos de filtro/tratamento de dados a aplicar a dados recolhidos por sensores
Enviado por: beirao em 10 de Abril de 2017, 21:03
Concordo quando o Sena diz que é preciso adequar cada caso à sua situação, porque a ideia de ignorar os valores foram de x % da média é uma boa ideia, mas se estiveres a falar de valores muito baixos estás sujeito a ter problemas...