kalman-filter
Version:
Kalman filter (and Extended Kalman Filter) Multi-dimensional implementation in Javascript
45 lines (38 loc) • 1.41 kB
JavaScript
/**
*Verifies that dimensions are matching and set dynamic.dimension and observation.dimension
* with respect of stateProjection and transition dimensions
*@param {ObservationConfig} observation
*@param {DynamicConfig} dynamic
*@returns {ObservationConfig, DynamicConfig}
*/
module.exports = function ({observation, dynamic}) {
const {stateProjection} = observation;
const {transition} = dynamic;
const dynamicDimension = dynamic.dimension;
const observationDimension = observation.dimension;
if (dynamicDimension && observationDimension && Array.isArray(stateProjection) && (dynamicDimension !== stateProjection[0].length || observationDimension !== stateProjection.length)) {
throw (new TypeError('stateProjection dimensions not matching with observation and dynamic dimensions'));
}
if (dynamicDimension && Array.isArray(transition) && dynamicDimension !== transition.length) {
throw (new TypeError('transition dimension not matching with dynamic dimension'));
}
if (Array.isArray(stateProjection)) {
return {
observation: Object.assign({}, observation, {
dimension: stateProjection.length,
}),
dynamic: Object.assign({}, dynamic, {
dimension: stateProjection[0].length,
}),
};
}
if (Array.isArray(transition)) {
return {
observation,
dynamic: Object.assign({}, dynamic, {
dimension: transition.length,
}),
};
}
return {observation, dynamic};
};