UNPKG

@ai-on-browser/data-analysis-models

Version:

Data analysis model package without any dependencies

48 lines (44 loc) 1.02 kB
/** * Savitzky-Golay filter */ export default class SavitzkyGolayFilter { // https://en.wikipedia.org/wiki/Savitzky%E2%80%93Golay_filter // http://vp-happy-rikei-life.com/archives/9254949.html /** * @param {number} k Number of coefficients */ constructor(k) { this._k = k this._t = (k - 1) / 2 const c = (m, i) => { return (3 * m ** 2 - 7 - 20 * i ** 2) / 4 / ((m * (m ** 2 - 4)) / 3) } this._w = [] for (let i = -this._t; i <= this._t; i++) { this._w.push(c(this._k, i)) } } /** * Returns predicted values. * @param {number[]} x Training data * @returns {number[]} Predicted values */ predict(x) { const p = [] for (let i = 0; i < x.length; i++) { const s = Math.max(0, i - this._t) const e = Math.min(x.length - 1, i + this._t) const target = x.slice(s, e + 1) if (target.length < this._k) { p.push(x[i]) } else { let v = 0 for (let k = 0; k < target.length; k++) { v += target[k] * this._w[k] } p.push(v) } } return p } }