Определить частоты компонентов и рассчитать интегралы для кривых - PullRequest
2 голосов
/ 16 февраля 2012

У меня 1200 выборок данных по амплитуде за 5-минутный период с 4-5 "всплесками" данных. Они могут быть рядом друг с другом, поэтому могут появиться «плечи». Данные могут быть несколько шумными.

enter image description here

Мне нужно:

  • Программно определить время, когда происходят эти пики, и
  • Окончательно определите интеграл кривых, чтобы найти площадь под каждым дискретным пиком, , игнорируя амплитуду от соседних соседей .

Последнее требование заставляет меня думать, что мне нужно получить функцию для каждого компонента и использовать эту функцию для вычисления площади под ней.

Это проблема дискретного вейвлет-преобразования? Преобразование Фурье? Кратковременное преобразование Фурье? Что-то другое? Есть ли библиотека Java, чтобы помочь с этим?

Я ищу способ определения 5 уравнений, которые при сложении дают исходную кривую данных. Вероятно, что-то вроде этих гауссовых кривых (о которых я только что сказал)

Gaussian Curve

Ответы [ 3 ]

1 голос
/ 17 февраля 2012

Если у вас есть какая-то теоретическая модель для ваших пиков (скажем, гауссовская и т. Д.), То вы можете выполнить регрессионную подборку для каждого пика, используя некоторое количество точек вокруг каждого, а затем посмотреть интеграл этой модели, учитываяВаши производные параметры.

0 голосов
/ 16 февраля 2012

Если я правильно понимаю ваш вопрос, это не имеет никакого отношения к вейвлет-преобразованиям или преобразованиям Фурье.

Чтобы найти пики, вы просто циклически просматриваете каждую выборку данных по порядку и сравниваете соседние значения.Всякий раз, когда у вас есть уменьшение после увеличения, у вас есть пик.На практике вам потребуется применить некоторую фильтрацию, чтобы предотвратить обнаружение ложных пиков из-за шума.Простой средний фильтр, возможно, несколько проходов должен решить вашу проблему, если ваш шум не слишком сильный.Вы могли бы выполнить фильтрацию с помощью преобразования Фурье, но я уверен, что в этом нет необходимости.

Чтобы вычислить площадь, вы можете просто обработать каждую пару выборок как столбец.Каждый столбец будет иметь одинаковую ширину (потому что ваши выборки равноудалены во времени), высоту, скажем, среднее из двух выборок, и область ширины * высоты.Тогда вы просто суммируете площади всех столбцов.Существуют и другие способы получения большей точности, например, работа с параллелограммами вместо прямоугольных столбцов.

0 голосов
/ 16 февраля 2012

чтобы найти пики, вы можете попробовать что-то вроде этого ...

  • получить три точки вашего образца
  • , сравнивая последнее значение со следующим, которое вы можете найти, гдеПики возникают
  • , когда текущее значение больше, чем последнее, и следующий у вас будет пик

Вот как сделать в Matlab!

Какправильно определить локальные максимумы и окна кривых в полусложных сценариях?

Если вы получили пик сейчас, вы можете смонтировать выражение Parabola для оси y, Общая форма параболы:

y = ax ^ 2 + bx + c

Тогда, если Пик кривой наступает в точке, например: y = 3, у вас есть одна парабола =:

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

После этого вам необходимо найти, где кривая оси x является началом и где она заканчивается

Делая это, вы готовы применить Интегральную область!

enter image description here

b = Найти верхнюю точку по оси x

a = Найти нижнюю точку по оси X

И, наконец, у вас есть область

...