kalman-filter
Version:
Kalman filter (and Extended Kalman Filter) Multi-dimensional implementation in Javascript
40 lines (35 loc) • 1.25 kB
JavaScript
const {padWithZeroCols: padWithZeros} = require('simple-linalg');
const {identity} = require('simple-linalg');
/**
*Builds the stateProjection given an observedProjection
*@param {ObservationConfig} observation
*@param {DynamicConfig} dynamic
*@returns {ObservationConfig, DynamicConfig} the model containing the created stateProjection
*/
module.exports = function ({observation, dynamic}) {
const {observedProjection, stateProjection} = observation;
const observationDimension = observation.dimension;
const dynamicDimension = dynamic.dimension;
if (observedProjection && stateProjection) {
throw (new TypeError('You cannot use both observedProjection and stateProjection'));
}
if (observedProjection) {
const stateProjection = padWithZeros(observedProjection, {columns: dynamicDimension});
return {
observation: Object.assign({}, observation, {
stateProjection,
}),
dynamic,
};
}
if (observationDimension && dynamicDimension && !stateProjection) {
const observationMatrix = identity(observationDimension);
return {
observation: Object.assign({}, observation, {
stateProjection: padWithZeros(observationMatrix, {columns: dynamicDimension}),
}),
dynamic,
};
}
return {observation, dynamic};
};