@bencevans/kalman-filter
Version:
49 lines • 2.19 kB
JavaScript
;
exports.__esModule = true;
var KalmanFilter = /** @class */ (function () {
function KalmanFilter(_a) {
var initialEstimate = _a.initialEstimate, initialErrorInEstimate = _a.initialErrorInEstimate;
this.previousEstimate = initialEstimate;
this.previousErrorInEstimate = initialErrorInEstimate;
}
KalmanFilter.prototype.update = function (_a) {
var measurement = _a.measurement, errorInMeasurement = _a.errorInMeasurement;
var kalmanGain = this.previousErrorInEstimate /
(this.previousErrorInEstimate + errorInMeasurement);
var currentEstimate = this.previousEstimate +
kalmanGain * (measurement - this.previousEstimate);
var currentErrorInEstimate = (1 - kalmanGain) * this.previousErrorInEstimate;
this.previousEstimate = currentEstimate;
this.previousErrorInEstimate = currentErrorInEstimate;
return [currentEstimate, currentErrorInEstimate];
};
return KalmanFilter;
}());
exports["default"] = KalmanFilter;
var KalmanFilterArray = /** @class */ (function () {
function KalmanFilterArray(_a) {
var initialEstimate = _a.initialEstimate, initialErrorInEstimate = _a.initialErrorInEstimate;
this.filters = initialEstimate.map(function (initialEstimate) {
return new KalmanFilter({
initialEstimate: initialEstimate,
initialErrorInEstimate: initialErrorInEstimate
});
});
}
KalmanFilterArray.prototype.update = function (_a) {
var measurement = _a.measurement, errorInMeasurement = _a.errorInMeasurement;
var errorInEstimate;
var estimates = this.filters.map(function (filter, index) {
var _a = filter.update({
measurement: measurement[index],
errorInMeasurement: errorInMeasurement
}), estimate = _a[0], _errorInEstimate = _a[1];
errorInEstimate = _errorInEstimate;
return estimate;
});
return [estimates, errorInEstimate];
};
return KalmanFilterArray;
}());
exports.KalmanFilterArray = KalmanFilterArray;
//# sourceMappingURL=index.js.map