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

- 基于前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
相关产品推荐
相关产品推荐

