|
|
  |
Детектирование сигналов (корреляция, коды Баркера и т.п.) |
|
|
|
May 30 2007, 06:07
|
Группа: Новичок
Сообщений: 7
Регистрация: 22-12-05
Пользователь №: 12 550

|
Мужики! Помогите чайнику, посоветуйте алгоритм или принцип. Нужно решить две подобных задачи
------------------------------------------------------- Задача первая: На одной линии сидят несколько передатчиков (к примеру 10 шт.), в линию каждый постоянно шумит своим кодом.В один момент времени (давольно длительный ) не все передатчики могут быть включены.
Надо: Придумать / предложить алгоритм обработки сигнала приемником, чтоб он четко знал какие из передатчиков сейчас включены... обратной связи у приемника с передатчиками нет.
------------------------------------------------------- Задача вторая (схожая): На один фото приемник кратковременно светят несколько лазеров (к примеру 10 шт.), сигнал одного может попасть в фотоприемник в момент когда другие не светят (тут всй просто - лазер передает свой код), а иногда сигналы нескольких попадают почти одновременно.
Надо: Придумать / предложить алгоритм обработки сигнала приемником, чтоб он из принятого шума узнал коды каких лазеров одновременно (возможно с малым сдвигом) полученны в какой-то промежуток времени.
--------------------------------------------------------
Думал использовать коды Баркера и смотреть автокорреляцию, в таком виде четко фиксирую сигнал одного передатчика, а как быть приемнику если несколько передатчиков свои коды Баркера наложат друг на друга?
Сообщение отредактировал Zike - May 30 2007, 06:08
|
|
|
|
|
May 30 2007, 07:22
|
Группа: Новичок
Сообщений: 7
Регистрация: 22-12-05
Пользователь №: 12 550

|
что-то не могу найти реализацию "кодовое разделение каналов" на микроконтроллере, простите уж чайника
рассказываю всё по порядку: собрал фотоприемник с простой фильтрацией низких и высоких частот... его выход подключил к микроконтроллеру и програмно с частотой в три раза превышающую частоту передатчика опрашиваю ножку на наличие 1 или 0, далее если все 3 импулься 1 то в буфер попадает 1, если все три 0 то в буфер - 0, итого получаю буфер из 0 и 1, теперь смещением по 1 биту проверяю соответствие 11 битному коду Баркера, получаю пик из 11 совпадений и далее при 10 смещений получаю слабые колебания (+1, -1), т.е. явно видно что код Баркера верен. Теперь в входной сигнал намешивается второй код Баркера от другого передатчика, и при анализе буфера при еденичной посылке кода не могу его точно определить. Куда мне копать, проблема в входном преобразовании сигнала в 1 и 0 или всё же расширить граници совпадения/несовпадения кода Баркера (т.е. на пик приходится не 11 совпадений а скажем 8 а при смешении идет раздница совпадений / несовпадений не +1, -1 а скажем +3, -3).
|
|
|
|
|
Sep 23 2011, 12:44
|

Местный
  
Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470

|
Просветите пожалуйста, как на практике в деталях (в железе) работает корреляция. С теорией я знаком - умножая корреляционную функцию на сигнал мы получаем максимум в точке их совпадения. И вот я в очередной раз изобретая велосипед (радиомодем) на дешевой рассыпухе (мега16 + DP1203) пытаюсь выжать максимум скорости и надежности. Да, я знаю что в DP1203 есть неплохой BitSyncronizer и даже встроенный тормозной Баркер, но мне их мало и я пришел именно в этот раздел ЦОС с вопросами по ЦОС.
Так вот. Я беру 7-битную поледовательность Баркера (чирп): 1110010. Приемник опрашивает ногу в два раза чаще чем передатчик выставляет биты чирпа. В приемнике есть два сдвиговых регистра, в них данные со входа поступают по очереди. Это сделано с тем расчетом, что например четные семплы могут попасть на область фронта, тогда нечетные гарантированно "смотрят" на "полочку". Или наоборот - четные на полочку, нечетные - на фронт. Или оба на "полочку" - тогда оба регистра дадут максимум корреляции в соответствующий момент. Результат корреляции просчитан и записан в табличку, т.е. для 7-битной последовательности это массив из 128 байт, каждый элемент которого представляет количество совпадений бинарного представления номера ячейки с последовательностью Баркера.
Когда этот коррелятор выдает 0 - значит принят закодированный 0, если выдает 7 - принята 1. Принятый бит задвигается в буфер данных, таймер таймаутов сбрасывается. Если таймер таймаутов достигает максимума, то записывается бит в буфер стираний. Затем при повторной посылке пакета буфер стираний используется для копирования гарантированно принятых битов данных. Таким образом даже в довольно зашумленном окружении за несколько попыток можно восстановить пакет данных.
Я попробовал изменить верхний и нижний пределы коррелятора на 1 и 6, т.е. 0 или 1 - принят "0", 6 или 7 - принята "1". Т.е. разрешил случаться одной ошибке в последовательности Баркера. Тогда коррелятор стал довольно часто выхватывать ложные комбинации из шума и даже иногда "проскальзывать" внутри посылки. Но тогда нет смысла в корелляторе - можно было тупо сравнивать регистры с кодом Баркера. Думаю что если даже взять 11-битную последовательность, то с одной ошибкой она возможно еще будет работать, а с двумя - уже нет.
Тогда я и задумался о том, как же работают корреляторы в нормальных DSP. 1. В каком виде анализируется поток данных - в аналоговом (с выхода смесителя подаем на АЦП), или в цифровом (после смесителя стоит скажем триггер Шмидта, а с его выхода уже двоичный сигнал поступает на DSP) ? 2. Сколько семплов приходится на один битик Баркеровской последовательности? 3. Наверное DSP всетаки делают честную свертку - умножают и складывают. Умножают и складывают. ? 4. Какой уровень погрешности допускают нормальные корреляторы? Если есть возможность делать С семплов на бит, а сама последовательность Баркера N-битная, то максимум коррелятора равен N*C. При достаточно большом С можно вводить погрешности равные или больше N. Верно рассуждаю?
|
|
|
|
|
Sep 23 2011, 18:54
|
Частый гость
 
Группа: Участник
Сообщений: 141
Регистрация: 25-10-07
Пользователь №: 31 729

|
Цитата(Serg76 @ May 30 2007, 20:13)  Присоединяюсь к мнению Doka. Разделение каналов можно получить используя базис ортогональных функций Адамара-Уолша (64 функции) + методы расширения спектра, как это сделано в системе мобильной связи CDMA IS-95. Небольшие 5 копеек в дополнение. Есть кодовые последовательности с хорошей АКФ, а есть с хорошей ВКФ. Если надо уметь разделять множество сигналов, то необходимо использовать последовательности с хорошими ВКФ. Баркер обладает хорошей АКФ, а вот Адамара-Уолша славятся хорошей ВКФ (а АКФ у них так себе). Кстати, Адамара-Уолша могут быть размерностью и не только 64, 64 это то что по факту используется в CDMA IS-95.
|
|
|
|
|
Sep 26 2011, 06:12
|

Участник

Группа: Участник
Сообщений: 36
Регистрация: 20-11-09
Из: Пермь
Пользователь №: 53 747

|
Я коррелирую на ДСП, но я там ищу последовательность битов в переданном фазово-модулированном сигнале. По сути в ДСП реализовано то, что у вас в радиомодуле. Потому работаю не с битами, а с большим количеством отсчетов. Раскажу как у меня, и как бы на вашем месте делал. Цитата 1. В каком виде анализируется поток данных - в аналоговом (с выхода смесителя подаем на АЦП), или в цифровом (после смесителя стоит скажем триггер Шмидта, а с его выхода уже двоичный сигнал поступает на DSP) ? У меня цепочка сигнала такова - аналоговый вход -> аналоговый фильтр (передаем в зашумленной полосе, дабы отсеять шум за пределами нашей полосы) -> АЦП -> ДСП. Весь анализ в ДСП. И ДСП анализирует и коррелирует не биты двоичного сигнала, а семплы. У вас приходят сразу биты, так что у вас должно быть Радиомодуль->Атмега. Цитата 2. Сколько семплов приходится на один битик Баркеровской последовательности? Зависит от вашей частоты дискретизации и скорости передачи данных. Частоты дискретизации зависит от скорости несущей. У меня на 1 бит 24 отсчета. Но у меня не биты с радиомодуля, а аналоговый сигнал оцифрованный. Из того, что я понял, у вас сразу идут биты. Минимально достаточно 1 семпл на бит (при условии что тактовые приемника и передатчика идеальны). Больше семплов - точнее синхронизация. Я бы опрашивал раза в 2-4 чаще, если мощности хватает. Идут у вас 100 бит/с - я бы опрашивал ногу с частотой 200-400раз в секунду. Так легче синхронизироваться. Цитата 3. Наверное DSP всетаки делают честную свертку - умножают и складывают. Умножают и складывают. ? Да. Если в лоб - каждый отсчет сигнала на образец. Если не в лоб - можно применять БПФ. Цитата 4. Какой уровень погрешности допускают нормальные корреляторы? Если есть возможность делать С семплов на бит, а сама последовательность Баркера N-битная, то максимум коррелятора равен N*C. При достаточно большом С можно вводить погрешности равные или больше N. Верно рассуждаю? Корреляторы обычно делают так, чтобы они не зависели от чего-либо. И на выходе получаем float число от -1 до 1. С другой стороны у вас сигнал без амплитуды, так что имеет смысл говорить в абсолютных числах. Но, имхо, о погрешности мало смысла говорить. Тут скорее не погрешность, а граница срабатывания, которую мы сами задаем. Не вижу смысла на каждый семпл пытаться определить 1 или 0 и коррелировать. Вам надо точно синхронизироваться (вот тут корреляция и нужна). А потом уже каждый xx отсчетов сравнивать с последовательностью, задав, что если количество совпавших семплов <xx/2 у вас 0, а если больше, у вас 1. Или у вас данные не пакетами/непрерывно, а переодически может быть 1 бит данных?
|
|
|
|
|
Sep 26 2011, 06:54
|

Местный
  
Группа: Свой
Сообщений: 268
Регистрация: 4-11-05
Пользователь №: 10 470

|
megadocent, спасибо за развернутый ответ! Цитата Не вижу смысла на каждый семпл пытаться определить 1 или 0 и коррелировать. Вам надо точно синхронизироваться (вот тут корреляция и нужна). А потом уже каждый xx отсчетов сравнивать с последовательностью, задав, что если количество совпавших семплов <xx/2 у вас 0, а если больше, у вас 1. Или у вас данные не пакетами/непрерывно, а переодически может быть 1 бит данных? В том-то и дело, что длинными пакетами до 255 байт данных + служебная информация. Толи кварцы так врут, толи эффекты в радиоэфире такие случаются, толи погрешность интервалов семплирования у меня набегает - но в реальных условиях если синхронизироваться только по старту длинного пакета, то к концу синхра теряется. Поэтому надо периодически корректировать номер семпла. Меня Баркер привлек своей АКФ и тем что применение псевдослучайных последовательностей позволяет искусственно увеличить чуствительность приемника. Т.е. выделять сигнал при меньшем SNR. Но, как видится теперь, это лучше всего работает при анализе аналогового сигнала с приемника. А у меня данные с радиомодуля выходят в двоичном виде. 0 и 1. Буду применять манчестер и оверсемплинг - это классика в моей ситуации. Если кому понадобится - погуглите "Oversampling and data decision". Мне этот труд был известен и ранее, но хотелось попробовать Баркера.
|
|
|
|
|
Sep 26 2011, 07:56
|

Участник

Группа: Участник
Сообщений: 36
Регистрация: 20-11-09
Из: Пермь
Пользователь №: 53 747

|
Цитата(Waso @ Sep 26 2011, 12:54)  megadocent, спасибо за развернутый ответ! В том-то и дело, что длинными пакетами до 255 байт данных + служебная информация. Толи кварцы так врут, толи эффекты в радиоэфире такие случаются, толи погрешность интервалов семплирования у меня набегает - но в реальных условиях если синхронизироваться только по старту длинного пакета, то к концу синхра теряется. Поэтому надо периодически корректировать номер семпла. Меня Баркер привлек своей АКФ и тем что применение псевдослучайных последовательностей позволяет искусственно увеличить чуствительность приемника. Т.е. выделять сигнал при меньшем SNR. Но, как видится теперь, это лучше всего работает при анализе аналогового сигнала с приемника. А у меня данные с радиомодуля выходят в двоичном виде. 0 и 1. Буду применять манчестер и оверсемплинг - это классика в моей ситуации. Если кому понадобится - погуглите "Oversampling and data decision". Мне этот труд был известен и ранее, но хотелось попробовать Баркера.  Пожалуйста.  1) Тактирование кварцом? Ну тогда хз. Не должно убегать сильно за пару сотен байт. Хотя... Вы опрашиваете ножку? Сами? И посылаете дергая из программы ножку? Тогда ничего удивительного. А если у вас прерывание важное пришло? Одна Атмега потупила, не послала байт, послала с опозданием, вторая протупила, пропустила бит и пошла опрашивать со сдвигом. Тут очень внимательно надо 7 раз перепроверить, что принимаете вы точно с той же частотой, что и передаете. 2) Пробовали на листе бумаги (excel тоже удобно) 2 колонки написать. Что приняли и что пришло? Попробуйте. Очень полезно. а) Если у вас именно систематически (и довольно редко) уезжает - увидите на скольких битах вы уезжаете. Проверяйте кварцы. 001100110011001100110011 001100100110010011001001 каждый 7 бит теряется. От кварца, конечно, должно не так ехать... А 1 бит в кучу-кучу-кучу бит... Но тем не менее. б) Если у вас уезжает случайно, не систематически, тогда я грешу на то, что опрашиваете/посылаете не равномерно. 001100110011001100110011 001100100110110011001100 Потерян 8 и 14 биты. в) Случайные битовые ошибки - тогда и правда шум. 001100110011001100110011 001010110001001110110101 3) Синхро надо не только зацепить, но и корректировать. Это как бы само собой. У меня на бит данных 16 бит ПСП. В бите данных 512 отсчетов. Выгоднее раз в 512 отсчетов проверить 2 соседних, и посмотреть, не уезжаю ли я, чем каждый отсчет гадать что у нас, 1 или 0. 4) ПСП рулит. =) Должна сильно устойчивость к помехам подняться. В разы, по сравнению с сигналом без ПСП. И это не зависит от того, как вы биты получаете. Я вот анализируя сигнал тоже, по сути, выделяю биты, а уже потом биты сравниваю с образцами ПСП. Просто я делаю это за 1 проход и чуть точнее, анализируя сигнал. 5) Сдается мне, у вас не в канале дело. Где-то ошибка. Иначе применение баркера дало бы довольно ощутимые результаты по сравнению с его отсутствием. Я бы посоветовал: а) Выписать передаваемый сигнал (поток битов), принимаемый сигнал, сравнить. б) Проверить что у вас частота, с которой вы выплевываете биты точно равна частоте, с которой опрашиваете.
Сообщение отредактировал megadocent - Sep 26 2011, 07:58
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|