Перейти к содержанию
    

Детектирование сигналов (корреляция, коды Баркера и т.п.)

Мужики! Помогите чайнику, посоветуйте алгоритм или принцип.

Нужно решить две подобных задачи

 

-------------------------------------------------------

Задача первая:

На одной линии сидят несколько передатчиков (к примеру 10 шт.), в линию каждый постоянно шумит своим кодом.В один момент времени (давольно длительный ) не все передатчики могут быть включены.

 

Надо:

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

 

-------------------------------------------------------

Задача вторая (схожая):

На один фото приемник кратковременно светят несколько лазеров (к примеру 10 шт.), сигнал одного может попасть в фотоприемник в момент когда другие не светят (тут всй просто - лазер передает свой код), а иногда сигналы нескольких попадают почти одновременно.

 

Надо:

Придумать / предложить алгоритм обработки сигнала приемником, чтоб он из принятого шума узнал коды каких лазеров одновременно (возможно с малым сдвигом) полученны в какой-то промежуток времени.

 

--------------------------------------------------------

 

Думал использовать коды Баркера и смотреть автокорреляцию, в таком виде четко фиксирую сигнал одного передатчика, а как быть приемнику если несколько передатчиков свои коды Баркера наложат друг на друга?

Изменено пользователем Zike

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Задача первая:

На одной линии сидят несколько передатчиков (к примеру 10 шт.), в линию каждый постоянно шумит своим кодом.В один момент времени (давольно длительный ) не все передатчики могут быть включены.

 

Надо:

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

 

ключевое слово - CDMA

(более подробно расписано у Прокиса или Скляра )

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ну или по-русски - кодовое разделение каналов. Коды Баркера и корреляция - верное направление

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

что-то не могу найти реализацию "кодовое разделение каналов" на микроконтроллере, простите уж чайника

 

рассказываю всё по порядку: собрал фотоприемник с простой фильтрацией низких и высоких частот...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяюсь к мнению Doka. Разделение каналов можно получить используя базис ортогональных функций Адамара-Уолша (64 функции) + методы расширения спектра, как это сделано в системе мобильной связи CDMA IS-95.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просветите пожалуйста, как на практике в деталях (в железе) работает корреляция. С теорией я знаком - умножая корреляционную функцию на сигнал мы получаем максимум в точке их совпадения. И вот я в очередной раз изобретая велосипед (радиомодем) на дешевой рассыпухе (мега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. Верно рассуждаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяюсь к мнению Doka. Разделение каналов можно получить используя базис ортогональных функций Адамара-Уолша (64 функции) + методы расширения спектра, как это сделано в системе мобильной связи CDMA IS-95.

 

Небольшие 5 копеек в дополнение.

Есть кодовые последовательности с хорошей АКФ, а есть с хорошей ВКФ. Если надо уметь разделять множество сигналов, то необходимо использовать последовательности с хорошими ВКФ. Баркер обладает хорошей АКФ, а вот Адамара-Уолша славятся хорошей ВКФ (а АКФ у них так себе). Кстати, Адамара-Уолша могут быть размерностью и не только 64, 64 это то что по факту используется в CDMA IS-95.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1. В каком виде анализируется поток данных - в аналоговом (с выхода смесителя подаем на АЦП), или в цифровом (после смесителя стоит скажем триггер Шмидта, а с его выхода уже двоичный сигнал поступает на DSP) ?

2. Сколько семплов приходится на один битик Баркеровской последовательности?

3. Наверное DSP всетаки делают честную свертку - умножают и складывают. Умножают и складывают. ?

4. Какой уровень погрешности допускают нормальные корреляторы? Если есть возможность делать С семплов на бит, а сама последовательность Баркера N-битная, то максимум коррелятора равен N*C. При достаточно большом С можно вводить погрешности равные или больше N. Верно рассуждаю?

А на эти вопросы может ктонибудь ответить? Я не думаю что они слижком дурацкие и описаны в любой литературе, потомучто там теория...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я коррелирую на ДСП, но я там ищу последовательность битов в переданном фазово-модулированном сигнале. По сути в ДСП реализовано то, что у вас в радиомодуле. Потому работаю не с битами, а с большим количеством отсчетов. Раскажу как у меня, и как бы на вашем месте делал.

 

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 бит данных?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

megadocent, спасибо за развернутый ответ!

Не вижу смысла на каждый семпл пытаться определить 1 или 0 и коррелировать. Вам надо точно синхронизироваться (вот тут корреляция и нужна). А потом уже каждый xx отсчетов сравнивать с последовательностью, задав, что если количество совпавших семплов <xx/2 у вас 0, а если больше, у вас 1. Или у вас данные не пакетами/непрерывно, а переодически может быть 1 бит данных?

В том-то и дело, что длинными пакетами до 255 байт данных + служебная информация. Толи кварцы так врут, толи эффекты в радиоэфире такие случаются, толи погрешность интервалов семплирования у меня набегает - но в реальных условиях если синхронизироваться только по старту длинного пакета, то к концу синхра теряется. Поэтому надо периодически корректировать номер семпла.

 

Меня Баркер привлек своей АКФ и тем что применение псевдослучайных последовательностей позволяет искусственно увеличить чуствительность приемника. Т.е. выделять сигнал при меньшем SNR. Но, как видится теперь, это лучше всего работает при анализе аналогового сигнала с приемника. А у меня данные с радиомодуля выходят в двоичном виде. 0 и 1.

 

Буду применять манчестер и оверсемплинг - это классика в моей ситуации. Если кому понадобится - погуглите "Oversampling and data decision". Мне этот труд был известен и ранее, но хотелось попробовать Баркера. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У меня основная проблема в том, что на один бит ПСП я делаю всего 2 семпла. А у вас получается 512/16 = 32 семпла. Ощутите разницу, как говорится. Если я буду на AVR делать столько семплов даже для 7-битного ПСП, то максимальная скорость передачи полезных данных будет в районе 10bps @ 16MIPS. А мне нужно минимум 1200 поиметь.

 

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

 

Поэтому отложу я их освоение до лучших времен. -_-

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

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

×
×
  • Создать...