如何统计满足指定阈值条件的峰值数量(Excel/MATLAB实现)
步行采集信号高于阈值4的峰值统计方案

需求为统计波形中所有幅值高于4的峰值总数,对应有效脚步计数,以下是不同工具的可落地操作步骤:
Excel 实现方法
- 先将按采样顺序排列的信号幅值数据导入Excel,假设幅值数据存放在A列,A1为表头,数据从A2单元格开始依次排列
- 新增B列作为峰值标记列,在B2单元格输入公式
=IF(AND(A2>4,A2>A1,A2>A3),1,0),选中B2下拉填充整列。公式逻辑:同时满足「当前点数值大于4」「当前点比前一个采样点数值大」「当前点比后一个采样点数值大」三个条件,即判定为符合要求的有效峰值,标记为1,其余点标记为0 - 在任意空白单元格输入求和公式
=SUM(B:B),计算结果就是高于4的峰值总个数。
若采样率较高,单个峰值会覆盖多个连续采样点,可将公式中前后点的对比范围扩大到前后2-3个点,避免同一个峰值被重复计数;如果信号有小幅噪声波动,可以给判断条件增加最小差值要求,比如改成
AND(A2>4,A2>A1+0.2,A2>A3+0.2),过滤噪声导致的伪峰。
MATLAB 实现方法
- 先将采集到的一维信号数组导入MATLAB工作区,假设信号变量名为
walk_signal - 直接调用MATLAB内置的峰值查找函数编写脚本,代码如下:
% 提取信号中所有峰值的幅值和对应位置 [peak_amplitude, peak_location] = findpeaks(walk_signal); % 筛选幅值大于4的峰值并统计总数 valid_peak_num = sum(peak_amplitude > 4); % 可选:绘图标记有效峰值做人工核验 plot(walk_signal, 'b') hold on plot(peak_location(peak_amplitude>4), peak_amplitude(peak_amplitude>4), 'ro', 'MarkerSize',8) hold off
- 运行脚本后,工作区中
valid_peak_num的变量值就是需要的统计结果,图中红色圆圈标记的就是所有符合要求的峰值,可直接目视核对是否存在误判漏判。
若信号噪声较多,可在
findpeaks中添加MinPeakProminence参数设置峰值最小突出度,比如写为findpeaks(walk_signal, 'MinPeakProminence', 0.5),即可过滤掉小幅噪声导致的假峰值,参数值可根据实际信号的噪声大小灵活调整。
Python 开源免费实现方法
不需要付费软件,用开源的Python科学计算库即可完成统计:
- 先在命令行执行
pip install numpy scipy matplotlib安装所需依赖 - 编写处理脚本,逻辑和MATLAB一致:
import numpy as np from scipy.signal import find_peaks import matplotlib.pyplot as plt # 读取自己的信号数据,替换成对应文件路径即可,csv格式加delimiter=','参数 walk_signal = np.loadtxt("你的信号数据文件路径") # 直接查找高度大于4的峰值 valid_peaks, peak_properties = find_peaks(walk_signal, height=4) peak_count = len(valid_peaks) print(f"幅值高于4的峰值总个数为:{peak_count}") # 可选:绘图核验结果 plt.plot(walk_signal) plt.plot(valid_peaks, walk_signal[valid_peaks], "ro") plt.show()
- 运行脚本后控制台会直接打印统计结果,弹出的图像会用红点标记所有有效峰值,方便核验。
内容的提问来源于stack exchange,提问作者Đức Khánh
相关产品推荐
相关产品推荐

