Пик детектор в реальном времени

Захват, обработка и генерирование сигнала
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Пик детектор в реальном времени

Сообщение Kvanto »

Имеется пульсовая волна, массив Pulse. Частота дискретизации - 1000 Гц. Так вот такой сигнал поступает у меня в виде массив в реальном времени.
Требуется вычислить пики этого сигнала - один "горб" - один пик. А потом вычислить расстояние по Х между этими пиками, здесь кое-что наработал.
Вопросы:
1. У пик-детекторов имеется параметр threshold. Во многих экземплах он задается курсором по горизонтальной оси. Причем на Graphe. А у меня
сигнал течет по Chart, где курсор создать нельзя. Но если к чарту создать дополнительный Graph, то на нем в свою очередь будет отображаться
только один горб сигнала. В контрол забивать значение границы тоже не очень удобно. Как можно наглядно решить эту проблему?
2. Как пометить отыскиваемые пики на том же charte? Ведь на него нельзя же сразу завести несколько плотов.
3. В прилагаемом примере параметр width что конкретно характеризует никак не могу понять? Понятно что ширину на которой ищутся пики, но какой
она должна быть в контексте числа точек сигнала?
Снимок.JPG
Peak_pulset_wave.vi
Пик-детектор с массивом пульсовой волны
(743.68 КБ) 246 скачиваний
Peak_kvanto.vi
Совмещение на Waveform Chart плотов сигнала и пиков
(129.5 КБ) 182 скачивания
Input_manuel_peaks.vi
Построение курсора с помощью Scrollbar
(34.08 КБ) 182 скачивания
HR_detection.vi
Вычисление значений пульса
(310.91 КБ) 214 скачиваний
Последний раз редактировалось Kvanto 18 янв 2013, 15:16, всего редактировалось 1 раз.
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Пик детектор в реальном времени

Сообщение Jakob Brontfeyn »

математика:
пик определяется по первой производной она равна нулю,
(или реально ищется точка перехода через 0)
пик это, или впадина определяется по второй производной
соответственно она < или > нуля.
Поэтому необходимо как минимум 3 точки в "околопиковой"
области.
Для сильнозашумленных сигналов испольсование алгоритма
пик-детектора вообще проблематично, я применяю просто поиск
максимума и минимума в массиве.
цитата:
2. Как пометить отыскиваемые пики на том же charte? Ведь на него нельзя же сразу завести несколько плотов.
цитата:
сигнал течет по Chart, где курсор создать нельзя
Это заблуждение, можно
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Пик детектор в реальном времени

Сообщение Kvanto »

Jakob Brontfeyn писал(а): Для сильнозашумленных сигналов испольсование алгоритма
пик-детектора вообще проблематично, я применяю просто поиск
максимума и минимума в массиве.
Да мой сигнал вообще не зашумлен практически. Он достаточно гладкий. Максимум и минимум...
думаю эти функции работы с массивами придется немного подгонять под вход след. функции, которая высчитывает
расстояние между пиками. А вот всякого рода Peak Detection.vi более под это адаптированы.
Jakob Brontfeyn писал(а): Это заблуждение, можно
подскажите как

P.S. C шириной я вроде разобрался. Только вот не могу расстояние между пиками вычислить в примере. Массив нулями заполняется.
HR_detection.vi
(310.91 КБ) 181 скачивание
Вложения
Снимок1.JPG
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Пик детектор в реальном времени

Сообщение Jakob Brontfeyn »

вот, я тут немного дополнил пример пик-детектора,
посмотрите, может что то можно будет применить
Вложения
Peak_kvanto.vi
(129.5 КБ) 242 скачивания
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Пик детектор в реальном времени

Сообщение Jakob Brontfeyn »

еще один, совсем простой пример визуализации пиков
входной сигнал изменяется вручную слайдером
Вложения
Input_manuel_peaks.vi
(34.08 КБ) 219 скачиваний
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Пик детектор в реальном времени

Сообщение Kvanto »

Jakob Brontfeyn писал(а):вот, я тут немного дополнил пример пик-детектора,
посмотрите, может что то можно будет применить
Да, Яков, хорошая идея со скроллом. Подцепил данный алгоритм к своему сигналу, но к сожалению,
детектор отлавливает то три, два пика на одном горбу, а то вообще не может поймать. От чего это может зависеть?
Пробовал варьировать параметром PD width но без результатно, от границы threshold это тоже на мой взгляд не зависит, ее изменял.
Теперь до понедельника откладываю.
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Пик детектор в реальном времени

Сообщение Jakob Brontfeyn »

еще один симулированный пример на базе sinh
Вложения
sinh_peaks.vi
(45.59 КБ) 210 скачиваний
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Пик детектор в реальном времени

Сообщение Kvanto »

И все-таки загадкой остается почему некоторые пики отыскиваются, некоторые нет, а на некоторых участках сразу несколько пиков.
Пробовал все предложенные Яковом алгоритмы. Может это как-то связано с частотой дискретизации сигнала? Например, если пиковых
точек слишком много, он будет некорректно их отлавливать...это моё предположение.
Вложения
Снимок2.JPG
Снимок3.JPG
Аватара пользователя
Jakob Brontfeyn

Activity Gold Silver Black
expert
expert
Сообщения: 1729
Зарегистрирован: 28 фев 2008, 11:01
Награды: 6
Благодарил (а): 1 раз
Контактная информация:

Re: Пик детектор в реальном времени

Сообщение Jakob Brontfeyn »

что то тут не так, то что пиков два в одной картинке,
так это и глазом видно,что там 2 пика это правильно и алгоритм работает,
а вот то что совсем не определяется не понимаю, как то неправильно сигнал подается.
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Пик детектор в реальном времени

Сообщение Kvanto »

Вообще занимался этим целый день, но какой-никакой а результат получился. Я пришел к выводу что те детекторы,
которые отлавливают в моем случае несколько пиков на одном "горбу" мне не подходят, ввиду того что меня
интересует именно время между двумя горбами.
Воспользовался функцией "Online Multiscale peak Detection".
В базовом наборе ее нет, она идет вместе со всеми вейвлет функциями. Внутрь нее лучше не заглядывать, потом
ночь будете плохо спать), но она мне подошла тем что на одном горбу она выделяет именно один пик. И к тому же
к ней, как показано в примере пристегивается целый :vi: Extract Heart Rate. Его я не смог корректировать и взял таким
какой есть.
В итоге моя программа и девайс сейчас позволяет с помощью датчика на основе оптопары,который одевается на палец, завести этот сигнал на одну из
плат сбора данных NI. И получить лабораторный пульсометр. С собой его не потаскаешь конечно...но сидя на стуле пульс запишет.
Pulse&GSR.rar
(262.86 КБ) 228 скачиваний
Вложения
11.JPG
IORIK
adviser
adviser
Сообщения: 240
Зарегистрирован: 14 дек 2010, 20:46
Версия LabVIEW: 7.0; 8.2

Re: Пик детектор в реальном времени

Сообщение IORIK »

Kvanto, а давайте посмотрим на сигнал, взятый из программы "Peak_pulset_wave.vi" из вкладки "EKG" и сравним с данными из программы Jakob Brontfeyn "Peak Kvanto".
fig1.jpg
Честно говоря, данные Якова более похожи на кардиограмму чем ваши.
В ваших данных, верхний рис., зависимость имеет ступенчатый вид и данные в массиве имеют всего 3 знака после запятой. А максимум и минимум зависимости - 0,02-0,03 по модулю. Т.е. вы имеете 50-60 уровней по амплитуде и чтобы добиться от стандартной функции "Peak Detector" корректной работы нужно параметр width брать достаточно большим.
Возможно, малая точность измеренных данных связана с характеристиками АЦП. Однако, на мой взгляд, дело может быть не в этом.
Начало своих изысканий вы привели в этой теме http://www.labviewportal.eu/viewtopic.php?f=81&t=4630, в которых вы использовали фильтр.
Мне кажется, что убирая фильтрами низкочастотную составляющую, вы сильно трансформировали сигнал и зарезали его по амплитуде. И делать после этого поиски максимумов - очень сомнительно.

Теперь посмотрим на ваш последний результат. По рисунку видно, что найденные точки максимумов расположены несколько левее от самого экстремума. Причем это отклонение непостоянно по величине. Этим вы дополнительно вносите погрешность в определение значения пульса.
Но если вас удовлетворяет точность плюс-минус удар сердца - вы получили решение.
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Пик детектор в реальном времени

Сообщение Kvanto »

IORIK писал(а): Честно говоря, данные Якова более похожи на кардиограмму чем ваши.
естественно, у меня же пульсовая волна, а Яков привел ЭКГ. ЭКГ обусловленно электрическими потенциалами сердца,
а пульсовая волна получается просветкой оптопарой кровеносных сосудов.
IORIK писал(а): В ваших данных, верхний рис., зависимость имеет ступенчатый вид и данные в массиве имеют всего 3 знака после запятой. А максимум и минимум зависимости - 0,02-0,03 по модулю. Т.е. вы имеете 50-60 уровней по амплитуде и чтобы добиться от стандартной функции "Peak Detector" корректной работы нужно параметр width брать достаточно большим.
Возможно, малая точность измеренных данных связана с характеристиками АЦП.
кстати да. АЦП у меня 16 битное. Вх. диапазон варьируется с максимумом 10 В. Получается разрешение 0,0002 В. Как раз где-то то, что у меня имеется.
IORIK писал(а): Однако, на мой взгляд, дело может быть не в этом.
Мне кажется, что убирая фильтрами низкочастотную составляющую, вы сильно трансформировали сигнал и зарезали его по амплитуде. И делать после этого поиски максимумов - очень сомнительно.
в похожей теме я советовался по поводу построения детектора как раз для ЭКГ сигнала. Там я преобразовал сигнал. Брал от него производную, фильтровал и возводил в квадрат.
С этим же сигнал такого пока сделать не смог. А вообще a качестве фильтров я мог обойтись одним ФВЧ, без ФНЧ, но и при этом пики отыскиваются с погрешностью.
Kvanto

Activity Bronze Автор
VIP
VIP
Сообщения: 414
Зарегистрирован: 26 янв 2011, 17:56
Награды: 3
Версия LabVIEW: 10.0

Re: Пик детектор в реальном времени

Сообщение Kvanto »

Кажется ясно, в чем соль. На этом рисунке пики отлавлиются практически как надо,
1.JPG
лишь в одном месте
он отлавил два пика на горбе, параметр Width=4. А вот на следующем рисунке параметр width=50 и получается
что как-будто пики неправильно определяются.
2.JPG
Но если приглядеться, то можно заметить задержку в определении пика
на один такт.
Получается пик то определился точно, а вот на Chart он попал уже не в свое время.
Решение проблемы я нашел в установке низкого значения width в пределах 10. А вот для
того, чтобы не отыскивалось по несколько пиков я сгладил сигнал с помощью Smoothing,
и взял количество точек побольше в райне 30. Сигнал получился гладеньким и без "пупырышек".
3.JPG
vladislaw789
beginner
beginner
Сообщения: 17
Зарегистрирован: 03 май 2013, 14:59
Версия LabVIEW: 8.6
Контактная информация:

Re: Пик детектор в реальном времени

Сообщение vladislaw789 »

Здравствуйте, мне необходимо посчитать периоды оцифрованного аналогово сигнала, возникли следующие проблемы: оцифрованный сигнал имеет различные скачки в виде каких то шумов, что затрудняет подсчет пиков, и сигнал постоянно плывет. Как можно убрать эти помехи на сигнале(произвести сглаживание)? И как синхронизовать оцифрованный сигнал, и влияет ли на подсчет максимумов сигнала, то что сигнал постоянно плывет? Программа, в которой я работаю выглядит следующим образом: http://hdd.tomsk.ru/desk/grljmzni#
Andry
user
user
Сообщения: 96
Зарегистрирован: 14 июн 2013, 12:50
Версия LabVIEW: 2012
Контактная информация:

Re: Пик детектор в реальном времени

Сообщение Andry »

Всем доброго времени суток!При просмотре выложенных выше VI, возникает проблема,система не находит нужного Subvi "Peak detector PtByPt.vi".У меня версия прибора 2012,может такого Subvi нет в комплекте,где его можно взять,установить?Заранее спасибо.
Ответить
  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Обработка сигнала»