You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求适用于噪声信号的实时可靠精准峰值检测算法

霍尔传感器峰值检测优化方案求助

我正在开展一个项目,需通过RPi Pico,基于Arduino IDE及Arduino-Pico库,对霍尔传感器采集的信号进行实时精准的峰值检测。当前信号噪声较大,部分峰值形态受损,现有的两种基于highThreshold的检测方法效果不佳,寻求可靠精准的算法建议。

采集到的信号

  • 原始霍尔传感器信号:原始霍尔传感器信号
  • 基于前4个值的平均信号(数据与上一信号不同):前4值平均霍尔传感器信号

已尝试的两种检测方法

方法一:阈值触发的最大值捕捉

设置highThreshold,当信号值超过阈值时,寻找当前区域的最大值,但该方法在峰值受损区域失效:

HighThresCoeff = 0.85
// 生成highThreshold的代码
vals[i]=curVal;
i++;
if(i==arrSize){
  low=getLow(vals);
  high=getHigh(vals);
  highThreshold=((high-low)*HighThresCoeff+low);
  i=0;
}
// 峰值检测逻辑
if (curVal > highThreshold) {
  activated = true;
  if(curVal > lastHigh){
    lastHigh = curVal;
    lastHighTime = micros();
  }
} else if (activated == true) {
  lastHigh = 0;
  activated = false;
  t2 = t1;
  t1 = lastHighTime;
  // 峰值时间处理代码
}

方法二:阈值跨越中点取峰值时间

同样基于highThreshold,取信号跨越阈值的时间中点作为峰值时间,虽效果有所提升,但噪声仍导致数据不理想:

HighThresCoeff = 0.85
// 生成highThreshold的代码
vals[i]=curVal;
i++;
if(i==arrSize){
  low=getLow(vals);
  high=getHigh(vals);
  highThreshold=((high-low)*HighThresCoeff+low);
  i=0;
}
// 峰值检测逻辑
if (curVal > highThreshold) {
  tss = micros();
  activated = true;
} else if (activated == true) {
  activated = false;
  tse = micros();
  t2 = t1;
  t1 = tss + ((tse - tss) / 2);
  // 后续时间处理代码
}

附加信息

  • 延迟要求:延迟小于峰峰值时间的1/3,且可预测或恒定即可接受。
  • 示例数据:有配套的示例数据可供参考

内容的提问来源于stack exchange,提问作者Atores

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 19:50:21