Närhet-Sensing Bröstnäsdukar (6 / 8 steg)
Steg 6: Kalmanfilter
Jag försöker också och förklara filtret här.
Rekursivt lösa:
p = p + q;
k = p / (p + r); (vinst)
x = x + k * (rssi_data-x);
p = (1-k) * p;
Det är det!
Initialt villkorar:
x = x_o (bästa gissning)
p = p_o (uppskattningsvis fel)
r = r_o (sensor buller)
q = q_o (process buller) värde mellan 0 och 1
Parametrar i fetstil förblir statiska genom simulering
Så hur väljer vi våra parametrar? Parametern valet är svårt och kräver ofta massor av massera. För att få en uppfattning om hur vi ska välja q och r, låt oss titta på några extrema beteende:
- Om q är mycket större än r, k = 1 och x är bara det uppmätta värdet.
- om r är verkligen små (väldigt mycket nära 0), då k = 1 och x är bara det uppmätta värdet
Detta innebär att q/r eller r/q bör inte vara för stor eller för liten och r bör vara för liten. Igen, du måste massera parametern för att hämta data som du vill. Jag valde Kalman 3 eftersom det är en bra balans mellan fördröjning och filtrering buller, där som Kalman 4 filter buller fint, men släpar för mycket efter data.
Faktiskt, matematik/programmering kan göras ännu enklare om man antar att den process bullret (q) och sensor buller (r) inte förändras över tiden. Om du är övertygad om du har rätt parametrar, kommer att Kalman vinst (k) så småningom stabiliseras till ett enda värde. Du kan förväg beräkna vad värdet är och förenkla filtret:
x = x + k * (rssi_data-x);
För dem också intresserad Kalman-filter används för RSSI data Läs: http://www.cs.tut.fi/sgn/arg/heln/Publications/CSCC2001_Helen.pdf