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

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

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

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

Есть светодиод. Он мигает с частотой около 200 Гц. Есть бинарный вектор. семплированный с частотой 1 мкс. Вектор бинарный, т.е. 0,1, амплитуды нет. Есть довольно много нестационарного шума.
Задача: найти фазу сигнала за минимальное количество семплов. Частота известна.
Сразу на ум пришло преобразование Фурье, но я не знаю как его применять в такой ситуации. Что подскажете?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.07.2017, 23:50
Ответы с готовыми решениями:

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

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

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

51
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
12.08.2017, 23:26
Студворк — интернет-сервис помощи студентам
так интересен же наверное не чистый отфильтрованный синус сам по себе, а его амлитуда. тем более что диоды скорее всего не синусом, а меиндром питаются.
на картинке норма интеграла Фурье в 50мс окне, которое по 12.5мс сдвигается.
полоса получается 20Гц, если меньше, то разные диоды начинают друг дружке уже мешать у них частота на 20Гц и отличается.
на вход подавал данные из smallp.csv c соответствующей меткой времени.
Герцель даст абсолютно тот же результат просто без вычисления тригонометрии.
только Герцелю сетка по времени равномерная нужна, соответственно данным надо передискретизацию делать. что тоже не сильно сложно и в пару умножений на отсчёт делается.
0
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
12.08.2017, 23:58
А как эту норму интеграла Фурье посчитать? У меня в универе ЦОС не было, я понятия более-менее выучил но как из одного получить второе - увы. Комплексные числа тоже понимаю поверхностно :(.

Вот беру я 50 мс окно. У меня есть вектор таймстампов smallt, из него и smallp я делаю гистограмму histT. Теперь я могу применить к гистограмме алг. Гёрцеля и получить нигнитуду сигнала для искомой частоты. Могу так же посчитать спектр БПФ и получить преобразование Фурье для каждой точки. Каковы дальнейшие мои шаги? Что на что умножить, поделить?
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
13.08.2017, 01:53
Герцелю нужна равномерная сетка по времени.

Фурье:
перемножить с косинусом, проинтегрировать == Re
перемножить с синусом, проинтегрировать == Im
Norm = Sqrt[Re^2+Im^2]

код математики, если поможет:
Code
1
2
3
4
5
6
7
8
9
10
data = Import["d:\\downtood\\smallstream.mat"][[;; , ;; , 1]];
sx = Max[data[[3, ;;]]] + 1;  (*240*)
sy = Max[data[[4, ;;]]] + 1;  (*180*)
pic = Table[{0, 0}, {sy}, {sx}];
 
//найти диапазон i который соответствует окну по времени и цикл i по окну:
pic[[data[[4,i]] + 1, data[[3,i]] + 1]] += {(2*data[[1, i]] - 1)*Cos[2.0*Pi*freq*data[[2,i]]], (2*data[[1,i]] - 1)*Sin[2.0*Pi*freq*data[[2,i]]]};
 
pic = Map[Norm, pic, {2}];
pic /= Max[Flatten[pic]];
0
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
13.08.2017, 02:30
Спасибо большое! С кодом гораздо понятнее.
Сначала я знак эвента умножаю на косинус...как задается частота freq? Через период т.е 1e6/200 или как-то иначе? Надо ведь знать частоту дискретизации ведь.
У меня получается два вектора: один с синусом второй с косинусом.
Потом я считаю норму вектора.
pic = Map[Norm, pic, {2}]; - маппинг функция по второму измерению вектора pic, да?
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
13.08.2017, 02:52
да через период, только 200/1e6
в каждом пикселе получается вектор из двух значений, интеграла (там +=) с синусом и с косинусом, вместо этого комплексного значения берётся его амплитуда
0
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
13.08.2017, 15:16
Ура! Получилось. Бесконечно вам признателен. Правда все еще есть шероховатости.

У меня родилась концепция двигающегося окна: когда мы добавляем i-тый эвент {(2*data[[1, i]] - 1)*Cos[2.0*Pi*freq*data[[2,i]]], (2*data[[1,i]] - 1)*Sin[2.0*Pi*freq*data[[2,i]]]};
мы можем сразу отнять i-WymdowLength эвент. И каждые несколько мс просто находить норму вектора. Это сработает?

Я правильно понял что все равно я не смогу быстрее отслеживать маркеры чем минимальная частота мигания? Тогда можно децимировать частоту замера с 1е6 на несколько порядков простым усреднением Х значений. Это поможет уменьшить загрузку проца. Не потеряю ли я какие-то данные?

По гёрцелю. Нетрудно перескалить данные в "псевдокадры" каждые 0.1 мс например. Но как именно потом применить гёрцель к такому вектору? Гёрцеля уже ручками написал, он мне нравится своей итеративностью.
0
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
13.08.2017, 19:59
Дополнительный вопрос, кроме Гёрцеля:

Какие методики можно попробовать чтобы уменьшить время, необходимое на распознание и увеличить стойкость против шума? Сейчас буду пробовать делить кадр на перекрывающиеся на 50% регионы и считать отдельно по каждому региону. Должно усилить сигнал\шум внутри отдельно взятого региона. Как oomomstir советовал.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
13.08.2017, 22:50
если у гугла спросить про sliding dft, он много чего интересного расскажет.

можно ещё про что-то вроде фапч подумать, но который не только за частоту хватается, но и за положение на картинке.
считать разность предсказанной картинки и реальной на 3х соседних частотах * 9 положений вокруг предыдущего и соответственно подстраивать частоту и положение.

а разве есть проблемы с вычислительной сложностью четырёх Герцелей на 1МГц?
0
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
14.08.2017, 16:26
Цитата Сообщение от _pv
считать разность предсказанной картинки и реальной на 3х соседних частотах * 9 положений вокруг предыдущего и соответственно подстраивать частоту и положение.

а разве есть проблемы с вычислительной сложностью четырёх Герцелей на 1МГц?
Спасибо, буду про слайдинг дфт читать. Проблем со сложностью никаких нет, я просто спрашивал может есть какой-то другой супер-способ, но тяжелый по вычислениях.

Сейчас алгоритм ограниченно адаптивный - после нахождения маркеров в последующие циклы выполняется просто обновление координат маркера поиском пика в некоем радиусе вокруг последней известной позиции маркера и обновление фазы поиском пика во временной гистограмме вокруг ожидаемого времени вспышки. Если вспышки не было, радиус и временной диапазон увеличиваются а уверенность падает. Когда уверенность в маркере упадёт ниже критического значения, производится поиск маркера с нуля.

Поэтому меня так интересует именно поиск с нуля - постепенные апдейты худо-бедно работают. Что пока не продумано это как быстро определять наличие маркера вообще. Сейчас если один из маркеров пропадает, то благодаря адаптивному алг-му он еще некоторое время "угасает", потом запускается поиск но это съедает несколько циклов (циклов частоты маркера, а не проца), и для самых медленных маркеров получается что время послесвечения доходит до 1\20 секунды что отстойно даже по сравнению со средней пром. камерой.
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
14.08.2017, 21:28
ну так "тебе ж говорят музыкасенсор - говно, а ты споришь" (с)
если частоты отличаются на 20Гц, и с/ш не особо больше единицы, то тут природу никак не обмануть, 1/20 секунды надо понаблюдать чтобы частоты отличить.
раз сенсор умеет до 1МГц - задирайте частоту маркеров, чтобы с камерами соревноваться.
на низкой частоте обычный сенсор будет работать куда лучше.
0
0 / 0 / 0
Регистрация: 21.08.2011
Сообщений: 1,057
15.08.2017, 02:09
Цитата Сообщение от _pv
ну так "тебе ж говорят музыкасенсор - говно, а ты споришь" (с)
Так я ж не спорю :). Вообще взялся по очень большой нужде за этот гуж, хотя и совсем не дюж.

Сенсор, собака, прошеный. Теоретиццки - да реакция за 1е-6 секунды. Практиццки он так быстро среагирует только на ядерный взрыв. Если вспышка проходит в изначально темной "непрогретой" области то пиксель может ее пропустить . Лучше всего реагирует на изменения в хорошо освещенной области или там где они только что были. Решение пока что - взять по два диода, один постоянно вкл а второй мигающий. Но что-то мне говорит что не слишком поможет.

Экспериментально сегодня установил что гарантированно видит до 5 кГц, возможно больше но диодик у меня под рукой совсем дохлый и светит еле-еле.

Повторим тесты с 1-2 кГц диодами, должно помочь.

Ну а децимацию-то делать? Поможет ли или нет? Теоретически если вместо усреднения по Х отсчетам сделать суммирование по ним же то амплитуда сигнала должна возрасти ведь?
0
0 / 0 / 0
Регистрация: 06.06.2011
Сообщений: 2,514
15.08.2017, 10:20
это да, чувствительность у сенсора не очень, потому что если он на каждый фотон реагировать начнёт ну или хотя бы на сотню фотонов, как обычные камеры, потоки данных станут на много порядков больше.
ну и при увеличении частоты яркость тоже поднять придётся хотя бы в корень из частоты раз.

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

сумма от среднего ничем не отличается, только постоянным коэффициентом. как для сигнала так и для шума.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.08.2017, 10:20

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
52
Ответ Создать тему
Новые блоги и статьи
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
Установка MinGW GCC 16.2 и CMake
8Observer8 10.08.2026
VK Видео: https:/ / vkvideo. ru/ video-240781534_456239017 YouTube: eY5-5PyI9NM Текстовая версия
Неделя из жизни имитационной модели склада: мои кривые руки растут, откуда надо
anaschu 10.08.2026
Неделя из жизни имитационной модели склада: как я почти написал неправильную логику и что с этим делать Работаю сейчас над учебно-рабочим проектом: строю в AnyLogic имитационную модель процессов. . .
Калькулятор для расчета родства
russiannick 07.08.2026
1. Задача: Создать калькулятор для расчета родства. Родственных связей существует 8 ступеней, такие как: p - отец P - мать q - муж Q - жена b - брат B - сестра s - сын S - дочь
Мир по моей воле
kumehtar 07.08.2026
Когда-то кажется, что всё просто. Ты весь такой светлый. Причиняешь добро. Борешься за справедливость в этом тёмном мире. Потом начинаешь замечать одну неприятную вещь. Почти каждый хороший. . .
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru