Форум программистов, компьютерный форум, киберфорум
Цифровая обработка сигналов
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/39: Рейтинг темы: голосов - 39, средняя оценка - 4.95
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
1

БПФ бинарного сигнала, поиск частоты и фазы

23.07.2017, 23:50. Показов 7632. Ответов 51
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вляпался по неосторожности в ЦОС, совсем не мою область.

Есть светодиод. Он мигает с частотой около 200 Гц. Есть бинарный вектор. семплированный с частотой 1 мкс. Вектор бинарный, т.е. 0,1, амплитуды нет. Есть довольно много нестационарного шума.
Задача: найти фазу сигнала за минимальное количество семплов. Частота известна.
Сразу на ум пришло преобразование Фурье, но я не знаю как его применять в такой ситуации. Что подскажете?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
23.07.2017, 23:50
Ответы с готовыми решениями:

Изменение фазы сигнала с использоваением БПФ
Доброго времени суток. Укажите, пожалуста, на ошибку... Нужно повернуть фазу аудиофайла с помощью...

БПФ. Как найти фазы гармоник
-- Добрый день! Мучаю вибрацию на stm32f373 (М4 с FPU) под Кокосом. Есть входной сигнал вибрации...

БПФ, поиск максимума спектральной плотности, поиск экстремума (максимума) в отсчетах БПФ
Всем добра! В математике я нуб, нужна помощь в решение задачи в Matlab!!! Дано: 1) Частота...

Различие частоты сигнала и частоты его АКФ
Здравствуйте. Я думал, что если взять обычный синусоидальный сигнал, найти его АКФ, то частота не...

51
0 / 0 / 0
Регистрация: 31.01.2013
Сообщений: 1,625
24.07.2017, 00:05 2
В семпле находишь фронт, спад и еще один фронт, делишь период пополам, смотришь, где относительно середины спад, делишь разницу пополам и отнимаешь это от фронта - это и будет точка нуля фазы.
0
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
24.07.2017, 00:54 3
В сигнале много шума. Надо по статистике отличать включение светодиода от паразитного сигнала.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
24.07.2017, 01:08 4
сигнал переменожить с косинусом заданной частоты, просуммировать,
сигнал переменожить с синусом заданной частоты, просуммировать,
арктангенс отношения этих двух сумм - искомая фаза.

но раз известно что сигнал прямоугольный то и множить лучше не на синус/косинус, а на меиндры со сдвинутой на 90гр фазой.

сигнал бы сюда прикрепили чтобы было понятно о каком шуме идёт речь.
0
0 / 0 / 0
Регистрация: 31.01.2013
Сообщений: 1,625
24.07.2017, 01:42 5
Отфильтровать программно, найти пересечение нуля, вычесть константу - время задержки фильтра.
0
0 / 0 / 0
Регистрация: 26.01.2009
Сообщений: 3
24.07.2017, 09:33 6
https://btog.blinkenlight.net/experymen ... detection/ - в его случае частота известна (1 Гц), неизвестна длительность единицы (либо 100, либо 200 мс), примерно каждая 60-я единичка отсутствует. Работает при шуме 98%.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 382
24.07.2017, 09:44 7
Фильтр Калмана неплохо так фильтрует шумы. В инете есть примеры реализации на Си или Си++
0
0 / 0 / 0
Регистрация: 10.06.2015
Сообщений: 1,304
24.07.2017, 12:55 8
Цитата Сообщение от _pv
сигнал переменожить с косинусом заданной частоты, просуммировать, сигнал переменожить с синусом заданной частоты, просуммировать, арктангенс отношения этих двух сумм - искомая фаза.
но раз известно что сигнал прямоугольный то и множить лучше не на синус/косинус, а на меиндры со сдвинутой на 90гр фазой.
Причём после первичной синхронизации дальнейший поиск фазы делать только во "временнЫх окнах возможной смены фазы".
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
24.07.2017, 13:48 9
так умножению на синус/косинус же пофиг, оно просто фазу даст,
это же не корелляционная функция, которую надо для нескольких значений фазы посчитать чтобы найти на ней максимум, там да, если известно где примерно искать можно считать только вокруг максимума.
0
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
07.08.2017, 22:00 10
Большое спасибо всем за советы, но увы, они все чуть выше моего уровня.
Я пока не могу понять как перевести двумерную однобитную информацию в непрерывный сигнал к которому применимы алгоритмы ЦОС.

Дело в том что у меня не видеокамера а датчик немного другого принципа. Динные идут не покадрово а попиксельно в формате: Х,У пикселя, полярность (включился или выключился) и абсолютная временная отметка (т.е. от общего нуля, а не дельта). Время считается с дискретностью в 1 мкс.

Прикрепил файлы с данными в CSV здесь https://ufile.io/q8tb9 . Если просуммировать первые 2000 событый, получится такое вот изображение:
<Изображение удалено>
Здесь видно 4 ярких точки - мигающие маркеры, и сетку которая просто визуальный мусор.

Экспериментально установлено что к сожалению частота немного плавает, даже не сама частота а скорость засечки диода камерой. В зависимости от угла зрения она может быть короче или длиннее.

Буду очень благодарен за детальные разъяснения, т.к. форма задачи отличается от хотя бы слегка привычной задачи "вот вектор значений, профильтруйте его". Если у кого-то есть рабочее решение, можем обсудить оплату.
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
07.08.2017, 22:15 11
Цитата Сообщение от soumt_imobti
...Задача: найти фазу сигнала за минимальное количество семплов. Частота известна.
Сразу на ум пришло преобразование Фурье, но я не знаю как его применять в такой ситуации. Что подскажете?
Фурье позволяет оценить спектральные составляющие сигнала, но как к ним привязаны фазовые? К примеру у вас 2 (3 и т.д.) сигнала одной частоты, но с разными фазовыми сдвигами. БПФ увидит только один спектр, нужен другой алгоритм.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
07.08.2017, 22:22 12
soumt_imobti, а что надо получить в итоге? Координаты 4 точек и фазу для них? Или вы можете заранее задать координаты светодиодов на картинке, и нужно для этих координат выдать результат?

По тупому: фактически у вас задача сводится к той самой "вот вектор значений, ..." - просто вектор значений задан в _каждой_ точке. 180*240 одинаковых задач =). Но на практике всё это оптимизируется. Самое простое - задать координаты светодиодов и посчитать только в них, но это не самое устойчивое решение. Несколько более устойчивое - посчитать для каждого диода сумму значений пикселей в его окрестности (делается быстро: идём по данным, если координаты попали в область диода - в соответствии со значением увеличиваем/уменьшаем сумму для него).
0
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
07.08.2017, 23:49 13
Цитата Сообщение от oomomstir
soumt_imobti, а что надо получить в итоге? Координаты 4 точек и фазу для них? Или вы можете заранее задать координаты светодиодов на картинке, и нужно для этих координат выдать результат?
Нет, изначальные координаты неизвестны, к тому же возможна ситуация когда камера видит не все маркеры. Известна частота и макс. количество маркеров на сцене.
Надо за минимальное время найти координаты диодов, при условии что они могут довольно быстро двигаться (скажем 5 пикс за мс). Нахождение фазы сильно облегчает задачу постоянного трекинга.
Делать бпф или какую-то фильтрацию попиксельно смысла нет потому что маркеры могут перемещаться и скореллировать один пиксель не получится. Я начал думать о частотном анализе именно под углом минимизации числа вычислений, сейчас задача решается очень громоздко и неэлегантно.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
07.08.2017, 23:53 14
файл с временем в нормальном формате сделайте.
там к концу знаков после запятой не хватает
0
0 / 0 / 0
Регистрация: 31.01.2013
Сообщений: 1,625
07.08.2017, 23:59 15
Цитата Сообщение от omokost
Фурье позволяет оценить спектральные составляющие сигнала, но как к ним привязаны фазовые? К примеру у вас 2 (3 и т.д.) сигнала одной частоты, но с разными фазовыми сдвигами. БПФ увидит только один спектр, нужен другой алгоритм.
Здрасьте приехали. На выходе БПФ два массива, вещественный и мнимый. Через арктангенс в одно вычисление находится фаза относительно нулевого отсчета.
0
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
08.08.2017, 00:32 16
Цитата Сообщение от _pv
файл с временем в нормальном формате сделайте.
там к концу знаков после запятой не хватает
Странно, импортнул в матлаб и вроде как нормально. Вот новый файл https://ufile.io/wwq9k
Последняя метка 2009200 (т.е запись идет 2 секунды). Могу мат-файл выложить если надо.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
08.08.2017, 00:49 17
проблема в том что предпоследняя тоже 2009200.
после 99999 формат числа становится 1.000е5 и идёт округление до десятков, и потом и до сотен.
0
0 / 0 / 0
Регистрация: 06.12.2016
Сообщений: 1,864
08.08.2017, 01:33 18
Вообще отлично. Значит, фаза сама по себе не нужна, просто облегчает поиск?
А мигают все диоды в такт? Тогда никакого "поиска фазы за кратчайшее время", можно просто тихонько подстраиваться по мере работы основного алгоритма.

Основная идея: забываем пока про попытки использовать частоту, ищем локальные максимумы по картинке, осреднённой за какое-то время. Время либо короткое (тогда маркеры будут появляться-пропадать), либо 1 кадр (1/200 секунды, раз 200 Гц мерцание). Тут есть тонкости в плане поиска - грубо говоря, что если нашли один маркер - прямо рядом с ним искать не надо; шустрое решение для этого - разбить изображение на квадратики, найти максимум (и его координаты) в каждом, а потом выбрать из найденных максимумов.
Следующий шаг: хотим использовать 200 Гц для повышения избирательности. Простейшее решение: если пиксел горит - через 1/400 секунды его окрестности "ослеплены", так мы придушим ложные максимумы. Можно пойти и дальше (например, сделать фильтр, который будет выделять именно частоту 200 Гц), но надо помнить, что чем дальше назад по времени - тем большую окрестность надо принимать во внимание.

Простое решение, экономящее время: "снэпшоты" из прошлого хранятся в низком разрешении.
Например, накапливаем кадр осреднением за 1/800 секунды, а для "памяти прошлого" уменьшаем его в 4 или 8 раз и потом разок блюрим простейшим фильтром по 4 соседям. Для поиска максимумов - вычитаем из текущего кадра тот, что был 2 кадра (1/400 с) назад. Или просто храним прошлые кадры в том же разрешении, заблюривая их осреднением по квадрату.

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

P.S. А если для экономии вначале ловить мерцание 200 Гц и синхронизироваться по нему - то можно просто брать для этого среднюю яркость по кадру (количество засвеченных пикселей) Y(t), это уберёт координаты. Тогда можно обсчитывать отдельно "светлые" и "тёмные" полукадры (по 1/400 для высокого и низкого значения Y(t) соответственно).
0
0 / 0 / 0
Регистрация: 23.01.2010
Сообщений: 2,550
08.08.2017, 09:13 19
Еще один товарищ поленился описать всю задачу. Банить бы таких))
0
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
08.08.2017, 15:08 20
Пользуясь случаем, посылаю лучи поноса программистам функции csvwrite в Матлабе. Как клоп на белой блузке, обычно матлаб очень высокого качества, за что я его и люблю.

https://ufile.io/kjf6p - только таймстампы в цсв, исправленные (проверил экселем).
https://ufile.io/5jji8 - мат-файл с переменными.

Часты множественные события с одинаковым таймстампом, это норма.
Как сенсор видит маркер: маркер вспыхивает - получаем серию событий полярностью 1 (увеличение освещения), потом событый нет, потом маркер гаснет и получаем серию событий полярностью 0(уменьшение освещения), и снова событий нет. Т.е. что-то типа edge detection. В реале при меняющемся освещении и 50Гц бликах от ламп эти края и их длительность довольно размыты.
Сейчас сделано похоже на идею oomomstir: делим кадр на перекрывающиеся на 50% регионы и считаем статистику по регионам, потом смотрим на корелляции.
0
08.08.2017, 15:08
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.08.2017, 15:08
Помогаю со студенческими работами здесь

Сохранение фазы синусоиды при резком изменении частоты
Здравствуйте! Для реализации проекта нужно решить задачу. Наверное это просто но в силу...

БПФ. Cоответствие частоты после преобразования
Здравствуйте, помогите пожалуйста разобраться. Я сделал быстрое преобразование фурье над массивом...

Оценка фазы сигнала
помогите оценить фазу сигнала S(t)=S0cos(ω0τз + (2Δωτзt)/T_мн + φ) Вот какие то наработки, но...

Детектирование фазы сигнала
Всем привет! Учусь работать в Matlab и решил сделать фазовый детектор, пока для простых сигналов. ...

Извлечение сигнала заданной частоты из более сложного сигнала
Нужен совет. Предположим, у меня есть некий сложный сигнал. Я знаю, что в него входит синусоида,...

Извлечение сигнала заданной частоты из более сложного сигнала
Нужен совет. Предположим, у меня есть некий сложный сигнал. Я знаю, что в него входит синусоида,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru