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