【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

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

相关推荐
灯澜忆梦17 小时前
GO_并发编程---定时器
开发语言·后端·golang
-银雾鸢尾-17 小时前
C#中的StringBuilder相关方法
开发语言·c#
-银雾鸢尾-17 小时前
C#中结构体与类的区别;抽象类与接口的区别
开发语言·c#
大模型码小白18 小时前
【Python零基础教程】继承、多态与魔法函数:面向对象编程三大核心特性详解
java·大数据·开发语言·人工智能·python·ai编程
段一凡-华北理工大学20 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
Ljwuhe20 小时前
C++——多态
开发语言·c++
心平气和量大福大21 小时前
C#-WPF-Window主窗体
开发语言·c#·wpf
从零开始的代码生活_1 天前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
云小逸1 天前
【C++ 第七阶段:模板、泛型编程与工程综合详解】
开发语言·c++
GIS阵地1 天前
QgsSingleBandPseudoColorRenderer 完整详解(QGIS 3.40.13 C++)
开发语言·前端·c++·qt·qgis