平滑信号/检测数据流中的颠簸

信息处理 过滤器 噪音
2022-01-12 10:34:13

(编辑:这个问题来自Extracting Binary Magnetic-Strip Card Data from raw WAV

这是我的信号(顶线)和应用的基本 IIR 滤波器(底线)

在此处输入图像描述

(编辑:我的任务是将信号分解为二进制 0(频率 F)和二进制 1(频率 2F)——这就是它被称为 F2F 的原因。所以我需要以保证没有假峰值的方式处理它。虽然屏幕截图使它看起来微不足道,存在获得双峰的潜在问题,以及在真实峰之间的波谷中获得误报的问题。)

我的问题是,有哪些方法可以平滑这个信号?IIR 是我最好的选择吗?

我可以看到至少三种可能性:

  • IIR y[n] = 0.9*y[n-1] + 0.1*x[n] 其中 y[x] =0 当 x < 0

  • 移动/加窗平均——在周围放置一个面积为 1.0 的贝尔曲线,每边 w=10 个样本并积分 bellSmooth(x) = integral[xw,x+w] { bell(k).samp(k) }dk

  • 确定预期频率和 FFT / 移除高阶 bin / 反向 FFT

我可能已经回答了我自己的问题,但这可能是不完整的,我确定我使用了错误的术语。我也无法真正预测利弊。最后一种方法吸引力较小,因为它需要了解基本信号频率。但是第二种方法也是如此;我需要选择合适的窗口长度。

还有其他方法吗?

1个回答

平均的影响

使用移动平均滤波器将消除信号中的不规则性。噪声变为 E/N,其中 N 是移动平均滤波器的长度。使用 MA 的副作用是信号峰值变得更宽和更浅。

此外,信号的频率成分也会发生变化。时域中的移动平均滤波器与通过 sinc 函数对频域信号进行卷积是一样的,一切都被弄脏了。

峰值检测算法 峰值检测是 9/10 工程问题中的常见问题。(不是真的,但 TON 取决于他们)

通常这是这样做的:

中值阈值

1) Look for all peaks in your signal. (i.e., a point that is larger than the two
   adjacent points
2) take this list of points and for each one of them compute:
   med_threshold = median(Peak,Width) + constantThresholmedian   where median is the
   median value of the data centered at "Peak" with Width being the number of 
   points to look at.
       a) The Width(usually written as Lambda in literature) and constantThreshold
          (usually written as C) are determined by trial and error and using the ROC
          curve (Acronym below)
3) if the peak's magnitude is above this threshold accept it as a true peak. 
   Else: Discard it, its a false peak
4) Generate a Receiver Operating Characteristic Curve(ROC) to how well the algorithm
   is performing.

这是一个例子:

suppose we have the signal X = [ 0 0 0 0 1 3 **9** 2 1 1 **2** 1 1 ] 
1) 9 and 2 are both potential peaks 
2) Lets use a window of 5 and  a threshold =2
so at 9 we have [1 3 9 1 2] -> [1 1 2 3 9]  so Median(9,5) = 2
9 > 2 +2, therefor its a peak
Lets take a look at 2: [ 1 1 2 1 1] -> [1 1 1 1 2 ] Median(2,5) = 1
2 < 1+2, therefor it is NOT a peak. 

确定频率

既然您已经有效地找到了峰值的时间定位,请尝试找到它们的频率:

1) Use the locations of the peaks to generate a pulse train
      a) this means create sum(Dirac_delta[t-L(n)]) where L(n) is the nth time that 
      you've localized through median thresholding
2) Apply FFT Algorithm
3) Look for largest peak. 

交替频率估计

1) Think of this like a beat in a piece of music (I learned about thresholding by
   researching Onset Detection.
2) Compute the average time distance between detected peaks.
3) now call your results BPM or PPM (pulses per minute) 

其他研究途径

虽然您可能对峰值信号感​​到满意,但有些算法适用于完全不同的问题,称为起始检测。

起始检测是音乐信息检索研究中的一个重要领域。它用于确定何时播放音符。

开始的音乐样本

如果您将磁带磁头信号视为高度采样的信号,您可以应用本文中可以找到的许多算法:

http://www.elec.qmul.ac.uk/people/juan/Documents/Bello-TSAP-2005.pdf