【MATLAB例程】滑动窗口均值滤波、中值滤波、最小值/最大值滤波对比。附代码下载链接

本文给出滑动窗口均值滤波、中值滤波、最小值/最大值滤波对比。最小值和最大值仅在特定环境下可用,均值滤波和中值滤波具有普适性,可直接用

文章目录

  • 例程介绍
    • 📦 程序结构简介
    • 🔄 四类滑动滤波器实现
    • 📊 对比分析与可视化
  • 运行结果
  • MATLAB源代码

例程介绍

给出使用滑动窗口对信号进行:

  • 均值滤波
  • 中值滤波
  • 最大值滤波
  • 最小值滤波
    并给出对比

📦 程序结构简介

1️⃣ 数据生成

  • 构造了一个长度为 N = 1000 的模拟信号 clean_signal,包含 2 Hz 与 10 Hz 的正弦成分。
  • 添加高斯白噪声构成 noisy_signal

2️⃣ 滤波器参数设置

  • 设置滑动窗口大小 window_size = 15,是后续滤波器缓冲区的核心参数。

🔄 四类滑动滤波器实现

✅ 均值滤波器(Moving Average)

  • 通过一个循环缓冲区 mean_buffer 记录当前窗口内的数据;
  • 每步更新中仅用加减法维护窗口总和,避免重复计算均值;
  • 时间复杂度:O(N)

✅ 中值滤波器(Median Filter)

  • 同样维护一个缓冲区,每步对当前窗口进行 median() 运算;
  • 没有使用堆优化,适合中等窗口规模;
  • 时间复杂度:O(N * log(W)),W为窗口大小

✅ 最大值 & 最小值滤波器

  • 遍历窗口并使用 max() / min() 函数;
  • 可用于边缘检测、包络提取等场景;
  • 时间复杂度类似中值滤波器,待优化方向:使用单调队列

📊 对比分析与可视化

图形输出

  • 逐一绘制每种滤波器的结果与真实信号、噪声信号对比;
  • 提供子图方式直观展示效果差异;
  • 最后一幅图将四种滤波器输出整体比较。

📉 性能评估

程序会输出:

  • 每种方法的运行时间(以秒计)
  • 均方误差(MSE)作为滤波精度评估
  • 内存消耗估算(单位 KB)
  • 相较于 MATLAB 内置 movmean 的处理效率对比

运行结果

信号真值与实际带噪声的值对比曲线:

各方法滤波对比图像:

窗口大小对处理时间的影响:

各滤波方法的RMSE对比:

MATLAB源代码

部分代码如下:

matlab 复制代码
%% 高效滑动窗口滤波器 - 不使用任何自定义函数,直接运行
% author:Evand(matlabfilter)
% 2025-08-06/Ver1

clear; clc; close all;
rng(0);

%%  生成测试信号
N = 1000;  % 信号长度
t = (0:N-1)' / 100;  % 时间向量

% 原始信号:正弦波 + 噪声
clean_signal = sin(2*pi*2*t) + 0.5*sin(2*pi*10*t);
noise = 0.3 * randn(N, 1);
noisy_signal = clean_signal + noise;

fprintf('生成测试信号完成:%d个数据点\n', N);

%% 滤波器参数设置
window_size = 15;  % 窗口大小
fprintf('窗口大小:%d\n\n', window_size);

%% 高效均值滤波器实现(增量计算)
fprintf('开始均值滤波处理...\n');
tic;

% 初始化均值滤波器变量
mean_buffer = zeros(1, window_size);  % 循环缓冲区
mean_index = 1;                       % 当前索引
mean_sum = 0;                         % 当前窗口和
mean_count = 0;                       % 当前有效数据数
mean_filtered = zeros(N, 1);          % 输出结果

% 逐点处理
for n = 1:N
    % 获取要被替换的旧值
    old_value = mean_buffer(mean_index);
   

完整代码的下载链接:https://download.csdn.net/download/callmeup/91603293

如需帮助,或有导航、定位滤波相关的代码定制需求,请点击下方卡片联系作者

相关推荐
honder试试4 小时前
焊接自动化测试平台图像处理分析-模型训练推理
开发语言·python
机器学习之心4 小时前
PINN驱动的高阶偏微分方程求解MATLAB代码
matlab·物理信息神经网络·高阶偏微分方程
民乐团扒谱机4 小时前
逻辑回归算法干货详解:从原理到 MATLAB 可视化实现
数学建模·matlab·分类·数据挖掘·回归·逻辑回归·代码分享
^Rocky4 小时前
JavaScript性能优化实战
开发语言·javascript·性能优化
ponnylv5 小时前
深入剖析Spring Boot启动流程
java·开发语言·spring boot·spring
萧邀人5 小时前
第一课、Cocos Creator 3.8 安装与配置
开发语言
Jayden_Ruan5 小时前
C++逆向输出一个字符串(三)
开发语言·c++·算法
不吃鱼的羊5 小时前
启动文件Startup_vle.c
c语言·开发语言
VBA63376 小时前
VBA之Word应用第四章第二节:段落集合Paragraphs对象(二)
开发语言
点云SLAM6 小时前
C++ 常见面试题汇总
java·开发语言·c++·算法·面试·内存管理