Der Sensor ist verrauscht. Die Daten können plötzlich abprallen. Menschen sind auch sehr analog. Selbst wenn ich denke, ich halte meinen Finger, schwanken die Daten.
Wenn dies so wie es ist digital verwendet wird, führt dies zu einem sehr instabilen System. Daher ist es wichtig, einen Filter zu haben, der die Rohdaten aufbereitet.
Verwenden Sie den EMA-Filter (Exponential Moving Average). [(Referenz)](https://ja.wikipedia.org/wiki/%E7%A7%BB%E5%8B%95%E5%B9%B3%E5%9D%87#%E6%8C%87% E6% 95% B0% E7% A7% BB% E5% 8B% 95% E5% B9% B3% E5% 9D% 87)
S_t = α \times Y_{t-1} + (1-α) \times S_{t-1}
Je größer der Wert von α ist, desto kleiner ist das Gewicht des alten Wertes. Und umgekehrt.
Verstärkt kurzzeitige Schwankungen. Sie können Daten erhalten, die das Summen unterdrücken.
var lastVal: CGFloat = 0.0
var alpha: CGFloat = 0.4
func lowpass(val: CGFloat) -> CGFloat {
lastVal = alpha * val + lastVal * (1 - alpha)
return lastVal
}
Es wird nur die momentane Schwankungskomponente verwendet. Sie können die Daten abrufen, wenn sie sich plötzlich ändern.
var lastVal: CGFloat = 0.0
var alpha: CGFloat = 0.4
func highpass(val: CGFloat) -> CGFloat {
lastVal = alpha * val + lastVal * (1 - alpha)
return val - lastVal
}
Recommended Posts