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

Баркер плюс AVR

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

 

Дело такое - я в очередной раз изобретая велосипед (радиомодем) на дешевой рассыпухе (мега16 + DP1203) пытаюсь выжать максимум скорости и надежности. Да, я знаю что в DP1203 есть неплохой BitSyncronizer и даже встроенный тормозной Баркер, но мне их мало. Потомучто мне нужно уметь определять "стирания" (когда очередной бит не был обнаружен вовремя из-за помехи) для того чтобы потом восстанавливать пакет по кусочкам.

 

Как я сделал - беру 7-битную поледовательность Баркера (чирп): 1110010. Приемник опрашивает ногу в два раза чаще чем передатчик выставляет биты чирпа. В приемнике есть два сдвиговых регистра, в них данные со входа поступают по очереди. Это сделано с тем расчетом, что например четные семплы могут попасть на область фронта, тогда нечетные гарантированно "смотрят" на "полочку". Коэффициенты корреляции просчитаны и записаны в табличку, т.е. для 7-битной последовательности это массив из 128 байт, каждый элемент которого представляет количество совпадений бинарного представления номера ячейки с последовательностью Баркера. По каждому прерыванию таймера я достаю из этой таблички результат корреляции простейшим образом result = corr_table[shiftreg].

 

Когда этот коррелятор выдает 0 - значит принят закодированный 0, если выдает 7 - принята 1. Принятый бит задвигается в буфер данных, таймер таймаутов сбрасывается. Если таймер таймаутов достигает максимума, то записывается бит в буфер стираний. Затем при повторной посылке пакета буфер стираний используется для копирования гарантированно принятых битов данных. Таким образом даже в довольно зашумленном окружении за несколько попыток можно восстановить пакет данных.

 

Я попробовал изменить верхний и нижний пределы коррелятора на 1 и 6, т.е. 0 или 1 - принят "0", 6 или 7 - принята "1". Т.е. разрешил случаться одной ошибке в последовательности Баркера. Тогда коррелятор стал довольно часто выхватывать ложные комбинации из шума и даже иногда "проскальзывать" внутри посылки. Но тогда нет смысла в корелляторе - можно было тупо сравнивать регистры с кодом Баркера. Думаю что если даже взять 11-битную последовательность, то с одной ошибкой она возможно еще будет работать, а с двумя - уже нет. Тогда в свою очередь нет смысла и в свойствах Баркера. Можно брать Манчерстер и делать оверсемплинг с тем-же результатом. Получается Баркер имеет смысл только в случае использования честной корреляции на мощных DSP.

 

Мучает мысль что я гдето сильно перемудрил. Кто делал кодеки Баркера на АВР - подскажите где я не прав? Спасибо.

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


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

Я попробовал изменить верхний и нижний пределы коррелятора на 1 и 6, т.е. 0 или 1 - принят "0", 6 или 7 - принята "1". Т.е. разрешил случаться одной ошибке в последовательности Баркера. Тогда коррелятор стал довольно часто выхватывать ложные комбинации из шума и даже иногда "проскальзывать" внутри посылки. Но тогда нет смысла в корелляторе - можно было тупо сравнивать регистры с кодом Баркера. Думаю что если даже взять 11-битную последовательность, то с одной ошибкой она возможно еще будет работать, а с двумя - уже нет. Тогда в свою очередь нет смысла и в свойствах Баркера. Можно брать Манчерстер и делать оверсемплинг с тем-же результатом. Получается Баркер имеет смысл только в случае использования честной корреляции на мощных DSP.

 

Мучает мысль что я гдето сильно перемудрил. Кто делал кодеки Баркера на АВР - подскажите где я не прав? Спасибо.

 

Делал на Атмега48. Наблюдал тот же эффект.

 

Дошёл аж до 15 битного Баркера ($F350). В моём случае - убирание постоянной составляющей 16тым битом - уже вносит шум.

Кроме того, я заметил, что код Баркера хорошо работает, только если стоит среди шума типа $ААF350АА или $55F35055.

Последовательности $F350F350 или $F3500САF дают меньшую реакцию.

 

В итоге я сначала повесил Баркера поверх Манчестера. А затем отказался от Баркера в блоке данных.

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

 

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

 

Вообщем, возможно от Баркера толк и есть, но только не с пороговым обнаружением. :(

 

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


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

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

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

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

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

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

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

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

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