【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

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

相关推荐
冴羽yayujs19 小时前
JavaScript 9 个先有库再有 API 的故事
开发语言·javascript·ecmascript
回忆2012初秋19 小时前
.NET 8.0 实战:基于 MQTTnet 封装高可用的 MQTT 发布/订阅工具类
开发语言·mqtt·.net
Evand J19 小时前
【课题推荐】三模型IMM交互式多模型滤波算法,匀速/左转/右转目标跟踪,附MATLAB代码测试结果
算法·matlab·目标跟踪·无人机·imm·多模型
油丶酸萝卜别吃19 小时前
JavaScript 深度合并函数 deepMerge 实现指南(附完整测试用例)
开发语言·javascript·测试用例
念恒1230619 小时前
Python(for循环进阶)
开发语言·python
AI玫瑰助手20 小时前
Python运算符:算术运算符(加减乘除取模幂)详解
开发语言·python
xiaoye-duck20 小时前
Qt 信号与槽深度解析:connect 用法、自定义信号槽与 Lambda 实战
开发语言·qt
lsx20240620 小时前
C AI 编程助手:助力开发者高效编程
开发语言
沐知全栈开发20 小时前
Eclipse 编译项目指南
开发语言
无限进步_20 小时前
C++11概览与统一初始化
开发语言·c++