Go Down

Topic: smoothing pot input (Read 2 times) previous topic - next topic

db2db


Googling arund I found this smoothing algorithm. Seems simple, but I follow how it would work.
Code: [Select]

// declared globally
float smoothADC;

// inside loop() or other repeating function
smoothADC = 0.9 * smoothADC + 0.1 * analogRead(0);



Make sense to anyone?

skyjumper

No, that makes no sense as written. Are you sure nothing is omitted? That code uses an uninitialized variable, which can never ever work. 

skyjumper

What you could do instead is save the last n values and average them. Depending upon the nature of the data that is an easy way to do it that can work well.

Coding Badly

Quote
Googling arund I found this smoothing algorithm.


It's an "exponentially weighted moving average" or EMWA (missing the proper initialization as skyjumper mentioned).

bubulindo


No, that makes no sense as written. Are you sure nothing is omitted? That code uses an uninitialized variable, which can never ever work.  


I think he asked if the algorithm is correct, not if the code was properly written. And it is only the initialization of the variable that is missing (which most likely is cleared and set in more than one place in the code).

That formula you have is a sort of averaging filter. Weighed average I think may be a better name for it.

Basically you have this:

Code: [Select]
smooth = ((smooth * 9) + analogRead(0))/10;

So every new sample has an effect of 10% in your signal. A little Excel sheet can do wonders to show the result of this and different weights applied to this formula.


Eu não sou o teu criado. Se respondo no fórum é para ajudar todos mediante a minha disponibilidade e disposição. Responder por mensagem pessoal iria contra o propósito do fórum e por isso evito-o.
Se realmente pretendes que eu te ajude por mensagem pessoal, então podemos chegar a um acordo e contrato onde me pagas pela ajuda que eu fornecer e poderás então definir os termos de confidencialidade do meu serviço. De forma contrária toda e qualquer ajuda que eu der tem de ser visível a todos os participantes do fórum (será boa ideia, veres o significado da palavra fórum).
Nota também que eu não me responsabilizo por parvoíces escritas neste espaço pelo que se vais seguir algo dito por mim, entende que o farás por tua conta e risco.

Dito isto, mensagens pessoais só se forem pessoais, ou seja, se já interagimos de alguma forma no passado ou se me pretendes convidar para uma churrascada com cerveja (paga por ti, obviamente).

Go Up