0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
|
|
1 | |
БПФ бинарного сигнала, поиск частоты и фазы23.07.2017, 23:50. Показов 7632. Ответов 51
Метки нет (Все метки)
Вляпался по неосторожности в ЦОС, совсем не мою область.
Есть светодиод. Он мигает с частотой около 200 Гц. Есть бинарный вектор. семплированный с частотой 1 мкс. Вектор бинарный, т.е. 0,1, амплитуды нет. Есть довольно много нестационарного шума. Задача: найти фазу сигнала за минимальное количество семплов. Частота известна. Сразу на ум пришло преобразование Фурье, но я не знаю как его применять в такой ситуации. Что подскажете?
0
|
23.07.2017, 23:50 | |
Ответы с готовыми решениями:
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
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
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
Надо за минимальное время найти координаты диодов, при условии что они могут довольно быстро двигаться (скажем 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
0
|
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
|
|
08.08.2017, 00:32 | 16 |
Сообщение от _pv
Последняя метка 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 | |
08.08.2017, 15:08 | |
Помогаю со студенческими работами здесь
20
Сохранение фазы синусоиды при резком изменении частоты БПФ. Cоответствие частоты после преобразования Оценка фазы сигнала Детектирование фазы сигнала Извлечение сигнала заданной частоты из более сложного сигнала Извлечение сигнала заданной частоты из более сложного сигнала Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |