Zike 0 30 мая, 2007 Опубликовано 30 мая, 2007 (изменено) · Жалоба Мужики! Помогите чайнику, посоветуйте алгоритм или принцип. Нужно решить две подобных задачи ------------------------------------------------------- Задача первая: На одной линии сидят несколько передатчиков (к примеру 10 шт.), в линию каждый постоянно шумит своим кодом.В один момент времени (давольно длительный ) не все передатчики могут быть включены. Надо: Придумать / предложить алгоритм обработки сигнала приемником, чтоб он четко знал какие из передатчиков сейчас включены... обратной связи у приемника с передатчиками нет. ------------------------------------------------------- Задача вторая (схожая): На один фото приемник кратковременно светят несколько лазеров (к примеру 10 шт.), сигнал одного может попасть в фотоприемник в момент когда другие не светят (тут всй просто - лазер передает свой код), а иногда сигналы нескольких попадают почти одновременно. Надо: Придумать / предложить алгоритм обработки сигнала приемником, чтоб он из принятого шума узнал коды каких лазеров одновременно (возможно с малым сдвигом) полученны в какой-то промежуток времени. -------------------------------------------------------- Думал использовать коды Баркера и смотреть автокорреляцию, в таком виде четко фиксирую сигнал одного передатчика, а как быть приемнику если несколько передатчиков свои коды Баркера наложат друг на друга? Изменено 30 мая, 2007 пользователем Zike Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Doka 4 30 мая, 2007 Опубликовано 30 мая, 2007 · Жалоба Задача первая: На одной линии сидят несколько передатчиков (к примеру 10 шт.), в линию каждый постоянно шумит своим кодом.В один момент времени (давольно длительный ) не все передатчики могут быть включены. Надо: Придумать / предложить алгоритм обработки сигнала приемником, чтоб он четко знал какие из передатчиков сейчас включены... обратной связи у приемника с передатчиками нет. ключевое слово - CDMA (более подробно расписано у Прокиса или Скляра ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jorikdima 0 30 мая, 2007 Опубликовано 30 мая, 2007 · Жалоба ну или по-русски - кодовое разделение каналов. Коды Баркера и корреляция - верное направление Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Zike 0 30 мая, 2007 Опубликовано 30 мая, 2007 · Жалоба что-то не могу найти реализацию "кодовое разделение каналов" на микроконтроллере, простите уж чайника рассказываю всё по порядку: собрал фотоприемник с простой фильтрацией низких и высоких частот... его выход подключил к микроконтроллеру и програмно с частотой в три раза превышающую частоту передатчика опрашиваю ножку на наличие 1 или 0, далее если все 3 импулься 1 то в буфер попадает 1, если все три 0 то в буфер - 0, итого получаю буфер из 0 и 1, теперь смещением по 1 биту проверяю соответствие 11 битному коду Баркера, получаю пик из 11 совпадений и далее при 10 смещений получаю слабые колебания (+1, -1), т.е. явно видно что код Баркера верен. Теперь в входной сигнал намешивается второй код Баркера от другого передатчика, и при анализе буфера при еденичной посылке кода не могу его точно определить. Куда мне копать, проблема в входном преобразовании сигнала в 1 и 0 или всё же расширить граници совпадения/несовпадения кода Баркера (т.е. на пик приходится не 11 совпадений а скажем 8 а при смешении идет раздница совпадений / несовпадений не +1, -1 а скажем +3, -3). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Serg76 0 30 мая, 2007 Опубликовано 30 мая, 2007 · Жалоба Присоединяюсь к мнению Doka. Разделение каналов можно получить используя базис ортогональных функций Адамара-Уолша (64 функции) + методы расширения спектра, как это сделано в системе мобильной связи CDMA IS-95. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Waso 1 23 сентября, 2011 Опубликовано 23 сентября, 2011 · Жалоба Просветите пожалуйста, как на практике в деталях (в железе) работает корреляция. С теорией я знаком - умножая корреляционную функцию на сигнал мы получаем максимум в точке их совпадения. И вот я в очередной раз изобретая велосипед (радиомодем) на дешевой рассыпухе (мега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. Верно рассуждаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Waso 1 23 сентября, 2011 Опубликовано 23 сентября, 2011 · Жалоба ой. 2 раза улетело... Господа администраторы, удалите это сообщение, пожалуйста. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex65111 0 23 сентября, 2011 Опубликовано 23 сентября, 2011 · Жалоба Присоединяюсь к мнению Doka. Разделение каналов можно получить используя базис ортогональных функций Адамара-Уолша (64 функции) + методы расширения спектра, как это сделано в системе мобильной связи CDMA IS-95. Небольшие 5 копеек в дополнение. Есть кодовые последовательности с хорошей АКФ, а есть с хорошей ВКФ. Если надо уметь разделять множество сигналов, то необходимо использовать последовательности с хорошими ВКФ. Баркер обладает хорошей АКФ, а вот Адамара-Уолша славятся хорошей ВКФ (а АКФ у них так себе). Кстати, Адамара-Уолша могут быть размерностью и не только 64, 64 это то что по факту используется в CDMA IS-95. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Waso 1 26 сентября, 2011 Опубликовано 26 сентября, 2011 · Жалоба 1. В каком виде анализируется поток данных - в аналоговом (с выхода смесителя подаем на АЦП), или в цифровом (после смесителя стоит скажем триггер Шмидта, а с его выхода уже двоичный сигнал поступает на DSP) ? 2. Сколько семплов приходится на один битик Баркеровской последовательности? 3. Наверное DSP всетаки делают честную свертку - умножают и складывают. Умножают и складывают. ? 4. Какой уровень погрешности допускают нормальные корреляторы? Если есть возможность делать С семплов на бит, а сама последовательность Баркера N-битная, то максимум коррелятора равен N*C. При достаточно большом С можно вводить погрешности равные или больше N. Верно рассуждаю? А на эти вопросы может ктонибудь ответить? Я не думаю что они слижком дурацкие и описаны в любой литературе, потомучто там теория... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megadocent 0 26 сентября, 2011 Опубликовано 26 сентября, 2011 · Жалоба Я коррелирую на ДСП, но я там ищу последовательность битов в переданном фазово-модулированном сигнале. По сути в ДСП реализовано то, что у вас в радиомодуле. Потому работаю не с битами, а с большим количеством отсчетов. Раскажу как у меня, и как бы на вашем месте делал. 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 бит данных? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Waso 1 26 сентября, 2011 Опубликовано 26 сентября, 2011 · Жалоба megadocent, спасибо за развернутый ответ! Не вижу смысла на каждый семпл пытаться определить 1 или 0 и коррелировать. Вам надо точно синхронизироваться (вот тут корреляция и нужна). А потом уже каждый xx отсчетов сравнивать с последовательностью, задав, что если количество совпавших семплов <xx/2 у вас 0, а если больше, у вас 1. Или у вас данные не пакетами/непрерывно, а переодически может быть 1 бит данных? В том-то и дело, что длинными пакетами до 255 байт данных + служебная информация. Толи кварцы так врут, толи эффекты в радиоэфире такие случаются, толи погрешность интервалов семплирования у меня набегает - но в реальных условиях если синхронизироваться только по старту длинного пакета, то к концу синхра теряется. Поэтому надо периодически корректировать номер семпла. Меня Баркер привлек своей АКФ и тем что применение псевдослучайных последовательностей позволяет искусственно увеличить чуствительность приемника. Т.е. выделять сигнал при меньшем SNR. Но, как видится теперь, это лучше всего работает при анализе аналогового сигнала с приемника. А у меня данные с радиомодуля выходят в двоичном виде. 0 и 1. Буду применять манчестер и оверсемплинг - это классика в моей ситуации. Если кому понадобится - погуглите "Oversampling and data decision". Мне этот труд был известен и ранее, но хотелось попробовать Баркера. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
megadocent 0 26 сентября, 2011 Опубликовано 26 сентября, 2011 (изменено) · Жалоба 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) Сдается мне, у вас не в канале дело. Где-то ошибка. Иначе применение баркера дало бы довольно ощутимые результаты по сравнению с его отсутствием. Я бы посоветовал: а) Выписать передаваемый сигнал (поток битов), принимаемый сигнал, сравнить. б) Проверить что у вас частота, с которой вы выплевываете биты точно равна частоте, с которой опрашиваете. Изменено 26 сентября, 2011 пользователем megadocent Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Waso 1 26 сентября, 2011 Опубликовано 26 сентября, 2011 · Жалоба У меня основная проблема в том, что на один бит ПСП я делаю всего 2 семпла. А у вас получается 512/16 = 32 семпла. Ощутите разницу, как говорится. Если я буду на AVR делать столько семплов даже для 7-битного ПСП, то максимальная скорость передачи полезных данных будет в районе 10bps @ 16MIPS. А мне нужно минимум 1200 поиметь. Вторая проблема - дискретизация. Если сигнал слабый, то на выходе смесителя осциллографом можно разглядеть посылку, но она имеет малую амплитуду и зашумлена. Коррелятор бы ее выдернул из шума. А простой пороговый преобразователь превращает ее в шум. Получается нет никакого толка от кореллятора и ПСП. Поэтому отложу я их освоение до лучших времен. -_- Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться