当前位置: 首页 > news >正文

MATLAB技巧——平滑滤波,给出一定的例程和输出参考

在这里插入图片描述

文章给出若干种MATLAB用来平滑滤波的方法。并给出一定的例程和输出参考。
方法比较多,在实际选择平滑方法时,需根据数据特性(如噪声类型、平滑程度需求)来决定最适合的技术。

文章目录

  • smooth函数
    • 语法
    • 示例:移动平均平滑
  • Savitzky-Golay 滤波 (sgolayfilt)
    • 语法
    • 示例:Savitzky-Golay 滤波
  • 自定义移动平均滤波
    • 自定义移动平均平滑
  • 使用滤波器设计平滑滤波
    • 低通滤波器
  • 卷积实现平滑
    • 示例:卷积平滑
  • 总结

在 MATLAB 中,平滑滤波是一种用于去除数据噪声、提取信号趋势的技术。以下是 MATLAB 中常用的平滑滤波方法及其示例:

smooth函数

smooth 是 MATLAB 提供的专用平滑函数,支持多种平滑方法,如移动平均、局部加权回归等。

语法

smoothedData = smooth(data, span, method)
  • data: 输入数据(向量)。
  • span: 平滑窗口的大小(数据点数)。
  • method: 平滑方法(可选),包括:
    • 'moving'(默认值):移动平均。
    • 'lowess':局部加权线性回归。
    • 'loess':局部加权二次回归。
    • 'sgolay':Savitzky-Golay 滤波。
    • 'rlowess':鲁棒的局部加权线性回归。
    • 'rloess':鲁棒的局部加权二次回归。

示例:移动平均平滑

% 原始数据
x = linspace(0, 4*pi, 100);
y = sin(x) + 0.3*randn(size(x)); % 添加噪声的正弦波% 使用 smooth 进行平滑
span = 5; % 平滑窗口
smoothedY = smooth(y, span, 'moving'); % 移动平均平滑% 可视化
plot(x, y, 'r-', 'DisplayName', '原始数据');
hold on;
plot(x, smoothedY, 'b-', 'LineWidth', 1.5, 'DisplayName', '平滑数据');
legend;
title('平滑滤波示例 作者:matlabfilter');
xlabel('x');
ylabel('y');

在这里插入图片描述

Savitzky-Golay 滤波 (sgolayfilt)

Savitzky-Golay 滤波是一种保留信号特性的平滑方法,适合处理非线性数据。

语法

smoothedData = sgolayfilt(data, order, framelen)
  • order:多项式拟合的阶数(通常为 2 或 3)。
  • framelen:滤波窗口的长度,必须是奇数。

示例:Savitzky-Golay 滤波

% 原始数据
x = linspace(0, 4*pi, 100);
y = sin(x) + 0.3*randn(size(x)); % 添加噪声的正弦波% 使用 sgolayfilt 滤波
order = 2; % 多项式阶数
framelen = 11; % 滤波窗口长度(奇数)
smoothedY = sgolayfilt(y, order, framelen);% 可视化
plot(x, y, 'r-', 'DisplayName', '原始数据');
hold on;
plot(x, smoothedY, 'b-', 'LineWidth', 1.5, 'DisplayName', 'Savitzky-Golay 平滑');
legend;
title('Savitzky-Golay 滤波示例 作者:matlabfilter');
xlabel('x');
ylabel('y');

在这里插入图片描述

自定义移动平均滤波

如果不使用 smooth 函数,可以自行实现简单的移动平均滤波。

自定义移动平均平滑

% 原始数据
x = linspace(0, 4*pi, 100);
y = sin(x) + 0.3*randn(size(x)); % 添加噪声的正弦波% 自定义移动平均
span = 5; % 平滑窗口
smoothedY = movmean(y, span); % 或使用 filter% 可视化
plot(x, y, 'r-', 'DisplayName', '原始数据');
hold on;
plot(x, smoothedY, 'b-', 'LineWidth', 1.5, 'DisplayName', '自定义移动平均');
legend;
title('自定义移动平均滤波示例 作者:matlabfilter');
xlabel('x');
ylabel('y');

在这里插入图片描述

使用滤波器设计平滑滤波

可以使用低通滤波器对数据进行平滑。MATLAB 提供了多种滤波器设计工具,如 butterfiltfilt 等。

低通滤波器

% 原始数据
x = linspace(0, 4*pi, 100);
y = sin(x) + 0.3*randn(size(x)); % 添加噪声的正弦波% 设计低通滤波器
fc = 0.1; % 截止频率(归一化到 Nyquist 频率)
[b, a] = butter(2, fc); % 二阶巴特沃斯滤波器% 应用滤波器
smoothedY = filtfilt(b, a, y); % 零相位滤波% 可视化
plot(x, y, 'r-', 'DisplayName', '原始数据');
hold on;
plot(x, smoothedY, 'b-', 'LineWidth', 1.5, 'DisplayName', '低通滤波');
legend;
title('低通滤波器平滑示例 作者:matlabfilter');
xlabel('x');
ylabel('y');

在这里插入图片描述

卷积实现平滑

均值核高斯核实现平滑。

示例:卷积平滑

% 原始数据
x = linspace(0, 4*pi, 100);
y = sin(x) + 0.3*randn(size(x)); % 添加噪声的正弦波% 卷积平滑
kernel = ones(1, 5) / 5; % 均值核
smoothedY = conv(y, kernel, 'same'); % 'same' 保持输出长度% 可视化
plot(x, y, 'r-', 'DisplayName', '原始数据');
hold on;
plot(x, smoothedY, 'b-', 'LineWidth', 1.5, 'DisplayName', '卷积平滑');
legend;
title('卷积平滑示例 作者:matlabfilter');
xlabel('x');
ylabel('y');

在这里插入图片描述

总结

  • 简单平滑:使用 smoothmovmean
  • 高精度平滑:使用 sgolayfilt 或自定义低通滤波器。
  • 灵活平滑:使用卷积或滤波器设计。

选择平滑方法时,需根据数据特性(如噪声类型、平滑程度需求)来决定最适合的技术。

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

http://www.xdnf.cn/news/144955.html

相关文章:

  • openGauss手工配置主备
  • Java大师成长计划之第3天:Java中的异常处理机制
  • 神经网络基础[损失函数,bp算法,梯度下降算法 ]
  • Linux 内核网络协议栈中 inet_stream_ops 与 tcp_prot 的深度解析
  • 搜索一个冷门搜索不到可以搜索专栏
  • 回归测试:保障软件质量的重要防线
  • A Comprehensive Survey of Spoken Language Models
  • 《AI大模型趣味实战》构建基于Flask和Ollama的AI助手聊天网站:分布式架构与ngrok内网穿透实现
  • 什么是测试驱动开发(TDD)?
  • C# 综合示例 库存管理系统7 主界面(FormMain)
  • 38 python random
  • 唯创安全:从传统到智能,工厂智能叉车AI防撞系统解决方案
  • 什么是非关系型数据库
  • 如何避免IDEA每次打开新项目都重复配置Maven?
  • 【交互式数据仪表板】Plotly Dash完全指南:从零搭建到部署全流程 | Python数据可视化必备
  • CSS Position 属性完全指南
  • 02.05、链表求和
  • 10前端项目----商品详情页/滚轮行为
  • 第七章.干货干货!!!Langchain4j开发智能体-文生图文生视频
  • QT窗口相关控件及其属性
  • 大模型——快速部署和使用 Deep Research Web UI
  • linux安装单节点Elasticsearch(es),安装可视化工具kibana
  • 如何创建极狐GitLab 私密议题?
  • 【MySQL】(8) 联合查询
  • 常见网络安全攻击类型深度剖析(二):SQL注入攻击——原理、漏洞利用演示与代码加固方法
  • MySQL 存储过程:解锁数据库编程的高效密码
  • 抓包工具Wireshark的应用解析
  • 期货有哪些种类?什么是股指、利率和外汇期货?
  • 日本企业突破机器人感知技术:人形机器人获嗅觉能力
  • 华硕NUC产品闪耀第31届中国国际广播电视信息网络展览会