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