当前位置:首页 > JavaScript

js实现滤波

2026-02-01 18:32:05JavaScript

滤波实现方法

在JavaScript中实现滤波通常涉及信号处理或数据平滑。以下是几种常见的滤波方法:

移动平均滤波

移动平均是最简单的滤波方法之一,通过计算数据点周围窗口的平均值来平滑数据。

js实现滤波

function movingAverageFilter(data, windowSize) {
  const result = [];
  for (let i = 0; i < data.length; i++) {
    const start = Math.max(0, i - Math.floor(windowSize / 2));
    const end = Math.min(data.length, i + Math.ceil(windowSize / 2));
    const window = data.slice(start, end);
    const avg = window.reduce((sum, val) => sum + val, 0) / window.length;
    result.push(avg);
  }
  return result;
}

指数平滑滤波

指数平滑给予近期数据更大的权重,适用于时间序列数据。

js实现滤波

function exponentialSmoothing(data, alpha) {
  const result = [data[0]];
  for (let i = 1; i < data.length; i++) {
    result.push(alpha * data[i] + (1 - alpha) * result[i - 1]);
  }
  return result;
}

中值滤波

中值滤波能有效去除脉冲噪声,通过取窗口中值代替当前值。

function medianFilter(data, windowSize) {
  const result = [];
  const halfWindow = Math.floor(windowSize / 2);
  for (let i = 0; i < data.length; i++) {
    const start = Math.max(0, i - halfWindow);
    const end = Math.min(data.length, i + halfWindow + 1);
    const window = data.slice(start, end);
    window.sort((a, b) => a - b);
    result.push(window[Math.floor(window.length / 2)]);
  }
  return result;
}

卡尔曼滤波

对于更复杂的系统,可以实现简单的卡尔曼滤波器。

class KalmanFilter {
  constructor(initialState, initialUncertainty, measurementNoise, processNoise) {
    this.state = initialState;
    this.uncertainty = initialUncertainty;
    this.measurementNoise = measurementNoise;
    this.processNoise = processNoise;
  }

  update(measurement) {
    const kalmanGain = this.uncertainty / (this.uncertainty + this.measurementNoise);
    this.state = this.state + kalmanGain * (measurement - this.state);
    this.uncertainty = (1 - kalmanGain) * this.uncertainty + this.processNoise;
    return this.state;
  }
}

应用场景选择

移动平均适合简单平滑需求;指数平滑适用于时间序列预测;中值滤波对去除离群点有效;卡尔曼滤波适合动态系统状态估计。实际应用中可根据噪声类型和处理需求选择适当方法。

标签: js
分享给朋友:

相关文章

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…

js 实现全屏

js 实现全屏

使用 requestFullscreen 方法 通过调用元素的 requestFullscreen 方法可以实现全屏。该方法兼容现代浏览器,但不同浏览器可能需要前缀。 const element =…

js 实现全选

js 实现全选

实现全选功能的方法 使用 JavaScript 实现全选功能通常需要操作复选框(checkbox)的状态。以下是几种常见的实现方式。 通过 DOM 操作实现全选 // 获取全选复选框和子复选框 co…