Digitalni filtr napeti potenciometru

nesvacil@posys.eu nesvacil@posys.eu
Čtvrtek Duben 9 21:58:09 CEST 2009


Ja jsem v jinem casti vlakna uvedl malinko jiny vzorec vcetne postupu v mcu

Y[n] = Y[n-1]*[k-1]/k  + X[n]/k

Jinak to totiz neudela prumer s minulou hodnotou a leze z toho nesmysl.

Pro k=4:
Y[n] = Y[n-1]*3/4  + X[n]/4

Uprava na celociselnou matiku tj. pamatuji si soucet:


Y[n] = Y[n-1]*3/4  + X[n]/4            | *4   ... matematicky si to vynasobim 4 jako posun bit 2x
4*Y[n] = Y[n-1]*3  + X[n]
4*Y[n] = 4*Y[n-1] -Y[n-1]  + X[n]      | .. jeste lepe upravim, aby tam nebylo 3 to se dost blbe dela

Nyni vypocty:
Pro x=[0,3,3,3,3,3,3,3,4,4,4,4,4]


4*Y[0]  = 3              = 3
4*Y[1]  = 3  -  3/4 + 3  = 6
4*Y[2]  = 6  -  6/4 + 3  = 8
4*Y[3]  = 8  -  8/4 + 3  = 9
4*Y[4]  = 9  -  9/4 + 3  = 10
4*Y[5]  = 10 - 10/4 + 3  = 11
4*Y[6]  = 11 - 11/4 + 3  = 12
4*Y[7]  = 12 - 12/4 + 3  = 12
4*Y[8]  = 12 - 12/4 + 4  = 13
4*Y[9]  = 13 - 13/4 + 4  = 14
4*Y[10] = 14 - 14/4 + 4  = 15
4*Y[11] = 15 - 15/4 + 4  = 16
4*Y[12] = 16 - 16/4 + 4  = 16

Pokud z toho 4*Y[n] udelam Y[n] tj. pri vystupu hodnotu az podelim

Y[0]  = 3              = 0
Y[1]  = 3  -  3/4 + 3  = 1
Y[2]  = 6  -  6/4 + 3  = 2
Y[3]  = 8  -  8/4 + 3  = 2
Y[4]  = 9  -  9/4 + 3  = 2
Y[5]  = 10 - 10/4 + 3  = 2
Y[6]  = 11 - 11/4 + 3  = 3
Y[7]  = 12 - 12/4 + 3  = 3
Y[8]  = 12 - 12/4 + 4  = 3
Y[9]  = 13 - 13/4 + 4  = 3
Y[10] = 14 - 14/4 + 4  = 3
Y[11] = 15 - 15/4 + 4  = 4
Y[12] = 16 - 16/4 + 4  = 4


Jirka

Aleš Novák napsal(a):
> TH> Konverguje to podstatně pomaleji než by konvergoval klouzavý průměr.
> 
> TH> Y[n] = Y[n-1]- Y[n-1]/k + X[n]
> TH> k=4, X=3
> 
> TH> Y[0] =  0
> TH> Y[1] =  0 -  0/4 + 3 =  3
> TH> Y[2] =  3 -  3/4 + 3 =  6
> TH> Y[3] =  6 -  6/4 + 3 =  8
> TH> Y[4] =  8 -  8/4 + 3 =  9
> TH> Y[5] =  9 -  9/4 + 3 = 10
> TH> Y[6] = 10 - 10/4 + 3 = 11
> TH> Y[7] = 11 - 11/4 + 3 = 12
> TH> Y[8] = 12 - 12/4 + 3 = 12
> 
> A ted zmena X=2
> 
> Y[9]  = 12 - 12/4 + 2 = 11
> Y[10] = 11 - 11/4 + 2 = 11
> Y[11] = 11 - 11/4 + 2 = 11
> 
> Dle meho nazoru to nefunguje. Meli bysme dospet k hodnote 8.
> 
> 
> Ja kdysi pouzil nasledujici metodu celociselne filtrace (myslim, ze je
> to normalni filtr prvniho radu):
> - Vypocitam rozdil (nova hodnota - filtrovana hodnota).
> - Tento rozdil vydelim konstantou tlumeni a vysledek
>   prictu k filtrovane hodnote. V pripade float matematiky tady
>   koncime. Tento postup uz tady byl uveden. V celociselne matematice
>   ale zbyde po deleni jeste zbytek (kladny nebo zaporny).
> - Tyto zbytky postupne scitam do sumy zbytku.
> - pokud abs(suma zbytku)>=konstanta tlumeni, zvetsim nebo zmensim
>   filtrovanou hodnotu o jedna podle znamenka sumy zbytku a tuto sumu
>   zbytku zmensim nebo zvetsim o konstantu tlumeni tak, aby se priblizila
>   k nule.
> 
> Jde o to, ze kdyz bude rozdil nove a filtrovane hodnoty napr. jedna,
> tak postupnym kumulovanim zbytku drive nebo pozdeji tyto kumuly
> dosahnou hodnoty tlumeni a filtrovanou hodnotu "postrcim" spravnym
> smerem a kumuly srazim o hodnotu tlumeni blize k nule.
>   
> Pouzil jsem to v x51 v matematice bez znamenka a bylo to trochu
> slozitejsi. Ale v Simatiku S5 se znamenkem to bylo presne podle popisu
> vyse.
> 
> Jeste bych mel jednu otazku k filtrum: filtr druheho radu sestavim
> tak, ze takoveto filtry zaradim dva za sebe? Tedy ze druhy filtr bude
> filtrovat vysledek z prvniho filtru. Ma to nejaky smysl v praxi?
> 
> Novalex
> 
> 
> HS>> Ja jsem to resil trochu jinak a tady IMHO float aritmetika potreba neni:
> 
> HS>> // Xs je suma N vzorku
> HS>> Xs -= Xs/N;
> HS>> Xs += AD;
> 
> HS>> X = Xs/N;
> 
> HS>> Hynek Sladky
> 
> 
> HS>> Lukáš Grepl wrote:
>>>>>>> Na jednoduché zatlumení nepotřebujete kruhový buffer. Stačí 1 proměnná. X 
>>>>>>> X = Xo + ( AD - Xo ) / n
>>>>>>> Xo - proměnná před měřením
>>>>>>> AD - výsledek měření
>>>>>>> n - útlum
> 
> 
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz
> Hw-list@list.hw.cz
> http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list