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