Digitalni filtr napeti potenciometru

Lukáš Grepl L.Grepl@sh.cvut.cz
Čtvrtek Duben 9 13:48:52 CEST 2009


>>> 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

>> Akorat to vyzaduje float aritmetiku. Nekdy je jednodussi obetovat
>> par B pameti na kruhovy buffer.

> Proč to vyžaduje FLOAT aritmetiku ?

Ne, že by to přímo vyžadovalo, ale dochází pak k hysterezi. Pokud budeme 
uvažovat celočíselnou aritmetiku se zakrouhlováním výsledku na celou 
část, tak např.:

filtr Y[n] = Y[n-1] + (X[n] - Y[n-1])/k, kde k = 8
vstup X[n] = 7

Y[0] = 0
Y[1] = 0 + (7 - 0)/8 = 0
Y[2] = 0 + (7 - 0)/8 = 0
Y[3] = 0 + (7 - 0)/8 = 0
atd...
Výstup filtru by se měl ustálit na hodnotě 7, ale nikdy se nepohne z 
počáteční hodnoty 0.

Když bude jiný počáteční/aktuální stav, např. 14, potom
Y[0] = 14
Y[1] = 14 + (7 - 14)/8 = 14
Y[2] = 14 + (7 - 14)/8 = 14
Y[3] = 14 + (7 - 14)/8 = 14
atd.
Výstup filtru by se měl ustálit na hodnotě 7, ale nikdy se nepohne pro 
změnu z počáteční hodnoty 14.

Ještě třetí příklad, stav 0, vstup 8
Y[0] = 0
Y[1] = 0 + (8 - 0)/8 = 1
Y[2] = 1 + (8 - 1)/8 = 1
Y[3] = 1 + (8 - 1)/8 = 1
Takže se výstup pohne o kousek, ale zase zůstane velmi vzdálen správné 
hodnotě.

Chování takového filtru vykazuje zmíněnou hysterezi v tom smyslu, že 
"malé" (menší než k) rozdíly aktuální vstupní a výstupní hodnoty 
nezpůsobí změnu stavu filtru. Dá se to řešit např. vhodným škálováním 
vstupní hodnoty před vstupem do výpočtu.

Lukáš Grepl



Další informace o konferenci Hw-list