【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

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

相关推荐
papership2 分钟前
【入门级-C++程序设计:11、指针与引用-引 用】
c语言·开发语言·c++·青少年编程
常乐か1 小时前
VS2022+QT5.15.2+OCCT7.9.1的开发环境搭建流程
开发语言·qt·opencascade
IT毕设实战小研2 小时前
基于SpringBoot的救援物资管理系统 受灾应急物资管理系统 物资管理小程序
java·开发语言·vue.js·spring boot·小程序·毕业设计·课程设计
yzx9910132 小时前
PHP 开发全解析:从基础到实战的进阶之路
开发语言·php
gAlAxy...3 小时前
Java List 集合详解(ArrayList、LinkedList、Vector)
java·开发语言
kyle~5 小时前
Qt---Qt函数库
开发语言·qt
Acrelhuang5 小时前
基于柔性管控终端的新能源汽车充电站有序充电系统设计与实现
java·开发语言·人工智能
麻雀无能为力5 小时前
python自学笔记8 二维和三维可视化
开发语言·笔记·python