2

我在 5 分钟内有 1200 个幅度数据样本,数据中有 4-5 个“尖峰”。这些可以彼此靠近,因此可以出现“肩膀”。数据也可能有些嘈杂。

在此处输入图像描述

我需要:

  • 以编程方式确定这些峰值出现的时间,以及
  • 最终确定曲线的积分以找到每个离散峰值下的面积,忽略附近邻居的幅度

后一个要求让我觉得我需要为每个组件派生一个函数,并使用该函数来计算下面的面积。

这是离散小波变换问题吗?傅里叶变换?短时傅里叶变换?还有什么?是否有 Java 库可以帮助解决这个问题?

我正在寻找一种方法来确定 5 个方程,当它们加在一起时,会产生原始数据曲线。可能类似于这些高斯曲线(我只是目测)

高斯曲线

4

3 回答 3

1

如果您有某种峰的理论模型(例如高斯等),那么您可以使用每个峰周围的一些点对每个峰进行回归拟合,然后根据您的派生参数查找该模型的积分.

于 2012-02-17T19:33:14.267 回答
0

to find the peaks you can try something like this...

  • get the three points of your sample
  • comparing the last value with the next you can find where the peaks occur
  • when the current value is greater than the last and next you will have a peak

Here is how make in matlab !

How to detect local maxima and curve windows correctly in semi complex scenarios?

if you get the peak now you can mount the Parabola expression for y-axis, General form of a parabola:

y = ax^2+ bx + c

Then if the Peak of the curve occur at point eg: y = 3 do you have one parabola =:

f(x) = y = -3x^2 + 6x

After that you are required to find where the curve of the x-axis is the beginning and where it ends

Making this you are ready to apply Integral Area!

enter image description here

b = Upper point find in x-axis

a = Lower point find in x-axis

And then finally you have the area

于 2012-02-16T15:56:51.187 回答
0

如果我正确理解您的问题,这与小波或傅立叶变换无关。

要找到峰值,您只需按顺序遍历每个数据样本并比较相邻值。每当您在增加后减少时,您就会有一个高峰。在实践中,您将需要应用一些过滤来防止检测到由于噪声而导致的错误峰值。如果你的噪音不是太强,一个简单的平均滤波器,也许多次通过应该可以解决你的问题。您可以使用傅立叶变换进行过滤,但我很确定它不需要。

要计算面积,您可以将每个样本对视为一列。每列将具有相等的宽度(因为您的样本在时间上是等距的),高度为两个样本的平均值,以及宽度*高度的面积。然后你只需总结所有列的面积。还有其他方法可以获得更好的精度,例如使用平行四边形而不是矩形柱。

于 2012-02-16T16:06:25.630 回答