Digitalni filtr napeti potenciometru jednoduch dig. filtr celocisleny
nesvacil@posys.eu
nesvacil@posys.eu
Středa Duben 8 21:43:57 CEST 2009
Dobrý den,
máte pravdu, taky jsem si uvědomil, že to není lineární. Nicméně to možná bude lépe vyhovovat. Říkám si, že měření
hodnot bude v gaussově křivce ? Tomu bude více slušet nějaké jiné zpracování než lineární.
Tohle teda nevim ???
>A[n] = 3/4*A[n-1] + X[n], Y[n] = A[n]/4
>A[n] = (k-1)/k*A[n-1] + X[n]
Proc tam taky pocitate tech 63%, to jako -3dB ??
Ten vzorec filtru bude asi spise takto nebo ne ?
Y[n]= Y[n-1] * 3/4 + 1/4 X[n]
Coz je IIR filtr prvniho radu, bych rekl ... ?
Jirka
Lukáš Grepl napsal(a):
>> muzete udelat jednoduchy dig. filtr celociselny. Prumer poslednich
>> ctyr napriklad. Neni nutny zadny kruhovy buffer. Staci si pamatovat
>> soucet.
>
> Pro klouzavý průměr posledních (např. čtyřech) hodnot, kde každá má
> stejnou váhu je vždy potřeba nějaký ten buffer na zapamatování minulých
> hodnot mít (ať už v jakékoliv podobě).
>
> Teoreticky to probíhá takto
> A[0] = 0
> A[1] = X[1]
> A[2] = X[1] + X[2]
> A[3] = X[1] + X[2] + X[3]
> A[4] = X[1] + X[2] + X[3] + X[4]
> A[5] = X[2] + X[3] + X[4] + X[5]
> A[6] = X[3] + X[4] + X[5] + X[6]
> A[7] = X[4] + X[5] + X[6] + X[7]
> atd...
>
> Nicméně v každém kroku stačí udělat jen jeden součet a jeden rozdíl,
> takže z výpočetního hlediska to má příjemnou složitost O(1).
>
> Obecně jde o následující výpočet (pro velikost bufferu N průměruje
> poslední N vzorků):
> A[n] = A[n-1] - A[n-N] + X[n]
> Y[n] = A[n] / N
>
> v praxi se to napíše takto
> A := A - B[n] + X;
> B[n] := X;
> n := (n + 1) mod N;
> Y := A / N;
>
> Jemnou modifikací se dá dosáhnout toho, že pro buffer o velikosti N se
> průměruje N+1 posledních vzorků.
>
>> Algoritmus pro prumer posl.4:
>>
>> 1. Pri prvnim mereni naplnim hodnotu souctu 4x danou hodnotou tj.
>> jednoduchy bitovy posun 2x 2. Vysledna hodnota po prvnim a jakemkoliv
>> dalsim mereni je zase posun bitovy 2x na druhou stranu 3. Pri zapisu
>> nove hodnoty do souctu nejrpve odectu 1/4 tj. s posunem bitu 2x a
>> pote prictu novou hodnotu.
>
> Tohle je v podstatě číslicová dolní propust prvního řádu - tj. realizuje
> to exponenciální zapomínání, nikoliv lineární. V podstatě děláte
>
> A[n] = 3/4*A[n-1] + X[n], Y[n] = A[n]/4
>
> předpokládejme A[0] = 0
> potom postupně
> A[1] = X[1]
> A[2] = 3/4*X[1] + X[2]
> A[3] = 9/16*X[1] + 3/4*X[2] + X[3]
> A[4] = 27/64*X[1] + 9/16*X[2] + 3/4*X[3] + X[4]
> A[5] = 81/256*X[1] + 27/64*X[2] + 9/16*X[3] + 3/4*X[4] + X[5]
> A[6] = 243/1024*X[1] + ... + X[5]
> A[7] = 729/4096*X[1] + ...... + X[6]
> atd.
>
> To samozřejmě v principu není na závadu a je to naprosto legitimní
> postup, pokud to tak chcete. Ale nedá se říct, že je to průměrování
> posledních čtyřech vzorků. Všimněte si, že na výsledek mají teoreticky
> vliv, při nekonečně přesnosti, dokonce všechny vzorky za celou historii.
>
> Pokud vzorec filtru zobecním na
> A[n] = (k-1)/k*A[n-1] + X[n]
> potom časová konstanta filtru (počet vzorků pro přenesení ~63% skokové
> změny vstupní hodnoty na výstup) je
>
> d = 1/ln(k/(k-1))
>
> tedy pro k=4 je d ~ 3.5. Po cca 3*d už bude výstup téměř ustálený.
>
> Snad jsem se v tom někde nezamotal.
>
> Lukáš Grepl
> _______________________________________________
> 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