一维信号波峰与波谷自动检测系统
项目介绍
本项目是一款基于MATLAB开发的高效信号处理系统,专门用于自动化识别和提取一维时间序列信号中的局部极大值(波峰)和局部极小值(波谷)。系统集成了信号模拟、预处理、特征提取及可视化功能,通过科学的参数配置,能够从包含噪声和离群点的复杂背景中准确提取信号的核心特征。该系统广泛适用于医疗电心信号分析、工业振动监测及金融数据分析等场景。
功能特性
- 复杂信号模拟:支持生成包含主波、谐波、高斯随机噪声以及突发离群干扰项的复合模拟信号,用于验证算法稳健性。
- 双重预处理机制:内置中值滤波(Median Filter)用于消除脉冲噪声,结合移动平均平滑(Moving Average)进一步压制随机白噪声。
- 自动化极值检测:通过设定高度阈值、最小峰间距及峰宽限制,实现对有效特征点的精准提取,避免伪极值干扰。
- 统计特征提取:自动计算波峰/波谷数量、均值、标准差、信号周期以及峰峰值(Peak-to-Peak)等核心指标。
- 直观可视化界面:生成包含原始信号对比、平滑处理效果及特征点标注的多维度图表,支持结果的实时预览。
使用方法
- 环境配置:确保计算机已安装 MATLAB 并在路径中包含信号处理工具箱(Signal Processing Toolbox)。
- 执行程序:在 MATLAB 命令行窗口中运行主程序代码。
- 结果获取:
- 命令行窗口将实时打印信号分析统计报告(包含波峰波谷数量、平均幅值、平均周期等)。
- 程序将自动弹出可视化图形窗口,分为“信号预处理前后对比”和“波峰与波谷自动检测结果”两个子图。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 必备工具箱:Signal Processing Toolbox。
实现逻辑与详细功能说明
代码实现遵循了从信号合成到预处理,再到特征提取与结果呈现的标准闭环流程:
- 实验准备与模拟信号:
系统首先建立 1000Hz 的采样环境。生成的测试信号由两个不同频率的正弦波(2Hz 和 8Hz)叠加而成,模拟具有节律性的脉搏波。随后注入标准差为 0.15 的高斯噪声,并手动在 0.5 秒和 1.2 秒处植入极大的正负离群点,用以测试系统对异常数据的容错能力。
- 信号预处理模块:
为了解决原始信号中的尖峰干扰,系统首先应用阶数为 5 的中值滤波,有效剔除孤立的离群点。之后使用窗口长度为 20 个采样点的移动平均算法进行平滑处理,为后续的极值检测提供稳定的基准线。
- 极值自动检测算法:
系统利用 findpeaks 函数进行波峰检测,其核心逻辑包括:
- 设置最小峰值高度为 0.2,过滤低幅值背景噪声。
- 设置最小峰间距为采样率的 10%(即 0.1 秒),防止对同一波峰的重复触发。
- 应用最小峰宽约束,确保提取的是具有物理意义的特征波形而非瞬时波动。
对于波谷检测,系统采用将平滑信号取反的逻辑,再次调用同类算法,从而实现对称的检测效果。
- 特征分析逻辑:
在检测到极值点后,系统执行二次计算:
- 利用时间索引的差分值计算相邻波峰间的平均周期。
- 采用最近邻搜索逻辑,为每一个波峰匹配距离其最近的波谷,从而计算出准确的峰峰值差距。
- 结果可视化:
程序生成 1000x700 像素的画布。第一子图展示原始含噪信号与平滑后信号的重叠效果;第二子图在平滑曲线上使用红色圆形标记波峰(并附带 P1, P2 等编号标签),使用绿色倒三角标记波谷。
关键算法与函数分析
- medfilt1:作为非线性滤波器,相比线性滤波能更好地保护信号边缘,专门针对离群异常点进行修正。
- smoothdata ('movmean'):通过滑动窗口求均值的方式,消除了由于噪声导致的信号局部抖动。
- findpeaks:核心算子。通过控制 MinPeakHeight 和 MinPeakDistance 解决了复杂波形中特征点密集或背景杂乱的问题。
- 信号反转技术:通过 -signal 代替直接查找局部极小值,保证了在同一套约束参数下波峰与波谷检测的逻辑对等。
- 统计特征封装:通过 mean 和 std 函数对提取出的动态特征阵列进行量化描述,为后续的分类或分析提供数据支撑。