确定一组数据的"抖动程度" - Python

13

我正在开发一款软件,需要实现一组数据的波动性。以下是我可以获得的输入样本,并合并每个垂直像素条的亮度图:

alt text

可以很容易地看出左边缘非常起伏(即具有大量极小值/极大值),我想生成图像的一组关键点。我已经对数据应用了高斯平滑函数约10次,但开始时它似乎已经非常起伏。

有什么好的想法吗?

下面是我的原始代码,但是它没有产生非常好的结果(对于波动):

def local_maximum(list, center, delta):
  maximum = [0, 0]

  for i in range(delta):
    if list[center + i] > maximum[1]: maximum = [center + i, list[center + i]]
    if list[center - i] > maximum[1]: maximum = [center - i, list[center - i]]

  return maximum

def count_maxima(list, start, end, delta, threshold = 10):
      count = 0

  for i in range(start + delta, end - delta):
    if abs(list[i] - local_maximum(list, i, delta)[1]) < threshold: count += 1

  return count

def wiggliness(list, start, end, delta, threshold = 10):
  return float(abs(start - end) * delta) / float(count_maxima(list, start, end, delta, threshold))

10
请问您能否提供“wiggliness”的准确定义链接? - Adam Matan
你要描述的统计量是频率特征还是幅度特征? - SingleNegationElimination
1
如果您询问的是表征“wiggliness”的方式,而不是以编程方式实现该表征的方法,则可以在http://stats.stackexchange.com/上获得更多帮助。 - Katriel
1
不要只是一遍又一遍地使用平滑函数,我会将其通过某种著名的低通滤波器,例如Butterworth 滤波器。这将使以后的调整工作容易得多。 - detly
你想用这些数据做什么?出于好奇和为了在提供建议时帮助人们,可以解释一下。 - Redwood
显示剩余2条评论
2个回答

5
请看一下低通/高通/陷波/带通滤波器,傅里叶变换或小波。基本思想是有很多不同的方法来确定量化在不同时间段内的信号的频率内容。
如果我们能弄清楚什么是“摆动”,那会很有帮助。我会说最左边的边缘是“摆动”的,因为它具有更多的高频内容,你可以通过使用傅里叶变换来可视化它。
如果你对这个红色信号进行高通滤波,你将得到仅包含高频内容的信号,然后你可以测量振幅并进行阈值处理以确定“摆动”。但我想“摆动”需要更多的形式化支持。

谢谢!我会看一下的。我还在努力弄清楚所有这些术语的含义 ;) - Blender

1
对于像这样的事情,NumPy 使事情变得更加容易,因为它提供了有用的函数来操纵向量数据,例如将标量添加到每个元素中,计算平均值等。
例如,您可以尝试使用原始数据-波动1或第一差分-波动2的零交叉率(取决于波动应该是什么,如果要忽略全局趋势,您应该使用差异数据)。 对于 x,您将从原始数据中获取感兴趣的片段或窗口,得到一种本地摆动的度量方式。 如果使用原始数据,在去除偏差后,您可能还想将所有小于某个阈值的值设置为 0,以忽略低幅度的波动。
import numpy as np

def wiggliness1(x):
    #remove bias:
    x=x-np.average(x)
    #calculate zero crossing rate:
    np.sum(np.abs(np.sign(np.diff(x))))


def wiggliness(x):
    #calculate zero crossing rate of the first difference:
    return np.sum(np.abs(np.sign(np.diff(np.sign(np.diff(x))))))

谢谢,我从没想过那个。我想我会使用它,因为我的平滑算法会移除一些关键点... - Blender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接