collapse

* Links de Robótica

* Posts Recentes

Nova vida às lâmpadas de halogéneo? por jm_araujo
[Hoje às 14:37]


Compra colectiva seeedstudio por beirao
[15 de Dezembro de 2017, 23:06]


Robot Wars International Special por beirao
[12 de Dezembro de 2017, 22:52]


Docker por nnr
[12 de Dezembro de 2017, 13:41]


Comprar transformador de +/-12Volts por jm_araujo
[12 de Dezembro de 2017, 10:16]


Embedded World 2018 por KammutierSpule
[12 de Dezembro de 2017, 09:05]


Esquema Fonte Bancada por almamater
[12 de Dezembro de 2017, 08:13]


Meu projecto - Arm Robot com arduino por Diogo Bento
[11 de Dezembro de 2017, 23:18]


Ajuda Projecto IR / RF por dio123
[09 de Dezembro de 2017, 10:53]


Drivers Arduino UNO! por dio123
[09 de Dezembro de 2017, 10:46]

Autor Tópico: Tipos de filtro/tratamento de dados a aplicar a dados recolhidos por sensores  (Lida 624 vezes)

0 Membros e 1 Visitante estão a ver este tópico.

Offline Kristey

  • Mini Robot
  • *
  • Mensagens: 753
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?
« Última modificação: 08 de Abril de 2017, 16:49 por Kristey »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.404
  • Helpdesk do sitio
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 é?
Avr fanboy

Offline Kristey

  • Mini Robot
  • *
  • Mensagens: 753
É 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.

Offline Njay

  • Mini Robot
  • *
  • Mensagens: 3.150
    • Tróniquices
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.
« Última modificação: 09 de Abril de 2017, 01:37 por Njay »

Offline senso

  • Global Moderator
  • Mini Robot
  • *****
  • Mensagens: 9.404
  • Helpdesk do sitio
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).
Avr fanboy

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.144
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.


Offline Sérgio_Sena

  • Administrator
  • Mini Robot
  • *****
  • Mensagens: 1.642
    • Electronic Gear for Musicians
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.


Offline dropes

  • Mini Robot
  • *
  • Mensagens: 1.932
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.

Offline KammutierSpule

  • Mini Robot
  • *
  • Mensagens: 1.144
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 :/

Offline beirao

  • Mini Robot
  • *
  • Mensagens: 1.499
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...
"O único lugar onde o sucesso vem antes do trabalho, é no dicionário" - Albert Einstein