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

如何在含噪信号中检测峰值或估算峰值数量?

含噪信号峰值检测与数量粗略估算需求

已知条件:

  • 我有一系列含噪信号,示例数据对应的信号存在5个峰值
  • 每10个样本内最多1个峰值,峰值通常每20至40个样本出现1次

已尝试方法及问题

方法1:多项式拟合+scipy.signal.find_peaks

该方法有一定效果,但需要为每个信号序列选择不同的样条节点数,而节点数和峰值数量直接相关,陷入逻辑循环——我目前只需要粗略估算峰值数量。

方法2:分块处理

尝试通过分块判断窗口是否足够容纳完整峰值,代码如下:

window = 10     # 可能包含完整峰值的最小区间
parts = np.array_split(data, len(data)//window)  # 将数据集分块
lengths = []
d = np.nan
for i in parts:
    d = abs(i.max() - i.min())
    lengths.append(d)  # 记录每个块内极值差
av = sum(lengths)/len(lengths)
for i in lengths:
    if i < some_tolerance_fraction*av:
        window = window+1  # 增大窗口用于下一次检查
        break

思路:如果分块不够大,无法包含完整峰值,块内极值差会小于实际峰值高度;当窗口足够大时,各块极值差应相近,均值接近实际峰值高度。

但该方法完全无效,逻辑存在问题:根据tolerance参数的不同,窗口要么持续增大,要么完全不调整。

示例信号数组

import numpy as np
data = np.array([254256., 254390., 251546., 250561., 250603., 250128., 251000.,
   252612., 253552., 253776., 252843., 251800., 250808., 250569.,
   249804., 247755., 247685., 247111., 242320., 242580., 243462.,
   240383., 239689., 240730., 239508., 239604., 238544., 240174.,
   240806., 240218., 239956., 241325., 241343., 241532., 240696.,
   242064., 241830., 237569., 237392., 236353., 234819., 234430.,
   233890., 233215., 233745., 232159., 231778., 230307., 228754.,
   225823., 225139., 223737., 222078., 221188., 220669., 221944.,
   223928., 224996., 223405., 223018., 224966., 226590., 226166.,
   226012., 226192., 224900., 224439., 223179., 222375., 221509.,
   220734., 219686., 218656., 217792., 215934., 214829., 213673.,
   212837., 211604., 210748., 210216., 209974., 209659., 209707.,
   210131., 210663., 212113., 213078., 214476., 215087., 216220.,
   216831., 217286., 217373., 217030., 216491., 215642., 214249.,
   213273., 212148., 210846., 209570., 208202., 207165., 206677.,
   205703., 203837., 202620., 201530., 198812., 197654., 196506.,
   194163., 193736., 193945., 193785., 193417., 193044., 193768.,
   194690., 195739., 198592., 199237., 199932., 200142., 199859.,
   199593., 199337., 198403., 197500., 195988., 195114., 194278.,
   193837., 193861.])

寻求有效方法,实现含噪信号中的峰值检测或粗略估算峰值数量。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 22:15:28