реклама на сайте
подробности

 
 
> Декодер Витерби, Программная реализация на C под ARM
Grizzzly
сообщение Dec 26 2013, 16:02
Сообщение #1


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Необходимо реализовать декодер Витерби на C под ARM 7, код (133, 171), скорость 200 бит/с. Однако вопросы, скорее, теоретические.
Собираюсь копить в буфере несколько сотен символов, затем их декодировать, потом переходить к следующей порции. При переходе к новому блоку нужно сохранять предыдущее состояние декодера и метрики ребер или же начинать всё с нуля?
Во всех книгах и статьях декодирование начинается из нулевого состояния. Обязательно ли нужна начальная синхронизация декодера или можно обойтись без неё, сразу начав декодирование?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Grizzzly
сообщение Jan 23 2014, 17:45
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Реализовал вариант с traceback'ом, всё работает. Теперь задача стоит в уменьшении объема требуемой памяти. Хочу использовать другую модификацию алгоритма (с обметом путей через регистры), тогда можно будет обойтись без большого буфера и декодировать непрерывно по биту. Возник вопрос: если ли у кого-нибудь опыт по сравнению алгоритмов с traceback и с register exchange (реализация на микропроцессоре или DSP)? Какой алгоритм эффективнее с точки зрения быстродействия?
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Jan 23 2014, 21:03
Сообщение #3


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



С точки зрения быстродействия при программной реализации обмен будет быстрее, чем обратный проход:

На каждом шаге декодирования для каждого пути вам нужно будет сделать ACS и после поместить результат (метрику пути и обновленную историю пути) в другой массив. Одновременно с этим обновлять максимально правдоподобную путевую метрику и индекс массива, ей соответствующий.

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

Очень быстро.

Что касается объема памяти:

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

Если при кодировании не используется выкалывание, то длина памяти путей должна быть > 5*7 т.е. > 35. Если используется, то память путей глубже. Буду считать, что не используется.

Итого для программной реализации схемы с обменом вам нужно

uint64_t path_history[2][64];
uint16_t path_metric[2][64];

Вы можете оценить, как ухудшится корректирующая способность декодера (зависимость Pош на выходе декодера от входного SNR) если укоротить память путей до 32. Если для вас это приемлемо (думаю, что да), то ресурсы будут такими:

uint32_t path_history[2][64];
uint16_t path_metric[2][64];

Скорость в этом случае тоже возрастет для целевой платформы ARM, т.к. при работе с памятью путей операции (чтение, сдвиг и запись) выплолняются со словами с нативной разрядностью.

Подробнее:
Морелос-Сарагоса Р. Искусство помехоустойчивого кодирования. Методы, алгоритмы, применение / пер. с англ. В. Б. Афанасьева. — М.: Техносфера, 2006. — 320 с. — (Мир связи). — 2000 экз. — ISBN 5-94836-035-0
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Jan 24 2014, 15:51
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Спасибо большое за столь исчерпывающий ответ. Я как раз по книге Морелоса-Сарагосы и реализовывал, скачав пример с его сайта (http://the-art-of-ecc.com/5_Convolutional/index.html). Лишнее убрал, что-то оптимизировал. Про прочтении книги меня смутила фраза про слишком большие затраты на чтение и запись путей, что существенно уменьшает быстродействие. Видимо, это относится к реализации на ПЛИС.
Я использовал для хранения путей двумерные массивы размером 64*5 типа CHAR. В 5 байт запаковывал 40 бит, что чуть больше рекомендуемой длины. Примимаемые сигналы - спутниковые навигационные, поэтому может быть достаточно низкое отношение C/Ш. Из-за этого не взял 32 бита. В общем в понедельник в MATLAB промоделирую такую ситуацию, возможно, что не сильно снизится помехоустойчивость. 64 бита брать не хотелось опять из-за всё той же экономии памяти. В системе несколько десятков структур декодеров.
С нормализацией надо будет аккуратно разобраться. Дело в том, что на вход декодера поступают 16-битные значения. Это из-за того, что такая разрядность приходит из коррелятора. Были попытки перейти на 8-битное или 4-битное представление данных, путем усечения младших разрядов. Не вышло. С/Ш сигнала может быть в очень широком диапазоне, поэтому нужно постоянно его измерять, чтобы понять, на сколько бит можно произвести усечение.
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Jan 24 2014, 16:08
Сообщение #5


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Ваши затраты памяти я оставлю без комментариев, если позволите.

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

Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Jan 24 2014, 16:36
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Цитата(Fat Robot @ Jan 24 2014, 20:08) *
При рассмотрении входа декодера речь идет о логарифме отношения правдоподобия, который может быть весьма скромным по кол-ву разрядов.

Про то, что достаточно всего трех бит, при которых будет проигрыш всего 0.2 дБ по сравнению с неквантованными данными? Это знаю. Приведу две ситуации. В первой сигнал занимает все 16 разрядов, во второй только 7. В этих ситуациях нужно >> на разное число бит. Поэтому нужно постоянно знать энергетику. Коррелятор аппаратной, он всегда выдает данные в 16-битном представлении, тут уже ничего не изменить.

А что с памятью не так? Вы имеете ввиду, что выигрыш от 40 бит по сравнению с 60 будет совсем незначительный?
Go to the top of the page
 
+Quote Post
Fat Robot
сообщение Jan 24 2014, 16:47
Сообщение #7


ʕʘ̅͜ʘ̅ʔ
*****

Группа: Свой
Сообщений: 1 008
Регистрация: 3-05-05
Пользователь №: 4 691



Про память: я не пытался понять ваших выкладок.

Про "выигрыш от 40 бит по сравнению с 60": вы не должны его заметить, если у вас нет выкалывания.

По поводу сдвигов "на разное число бит": Разбирайтесь, что такое LLR. Морелос - отправная точка.

Цитата(Grizzzly @ Jan 24 2014, 17:36) *
Про то, что достаточно всего трех бит, при которых будет проигрыш всего 0.2 дБ по сравнению с неквантованными данными? Это знаю. Приведу две ситуации. В первой сигнал занимает все 16 разрядов, во второй только 7. В этих ситуациях нужно >> на разное число бит. Поэтому нужно постоянно знать энергетику. Коррелятор аппаратной, он всегда выдает данные в 16-битном представлении, тут уже ничего не изменить.

А что с памятью не так? Вы имеете ввиду, что выигрыш от 40 бит по сравнению с 60 будет совсем незначительный?
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Jan 24 2014, 17:40
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 565
Регистрация: 22-02-13
Пользователь №: 75 748



Цитата(Fat Robot @ Jan 24 2014, 20:47) *
По поводу сдвигов "на разное число бит": Разбирайтесь, что такое LLR. Морелос - отправная точка.

Спасибо. Буду разбираться.

Прочитал. Может, я как-то некорректно выразился. Из коррелятора на декодер приходят 16-битные знаковые символы (short).
Ситуация №1 (слабый сигнал): 0x005B (фактически занято 7 разрядов, положительное число).
Ситуация №2 (сильный сигнал): 0xFF3A (заняты все разряды, отрицательное число).
Я хочу преобразовать для декодирования их к 3-битному представлению. В первом случае я могу сдвинуть вправо на 4 разряда. Во втором случае при сдвиге на 4 разряда и применении маски 0x3 я получу разряды из середины числа вместо старших, к тому же потеряю знак. То есть нельзя заранее знать, какое нужно сделать усечение. Я это имел ввиду.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Grizzzly   Декодер Витерби   Dec 26 2013, 16:02
- - andyp   Цитата(Grizzzly @ Dec 26 2013, 20:02) Нео...   Dec 26 2013, 16:21
|- - Grizzzly   Спасибо Вам большое. Да, поток непрерывный. Цитата...   Dec 26 2013, 16:50
- - thermit   ЦитатаGrizzzly: А почему из состояния с максимальн...   Dec 26 2013, 17:57
|- - andyp   Цитата(thermit @ Dec 26 2013, 21:57) Смот...   Dec 26 2013, 18:12
|- - Grizzzly   Цитата(andyp @ Dec 26 2013, 22:12) +1. Та...   Dec 26 2013, 18:58
|- - Fat Robot   В теории вам нужно бы иметь оценку отношения сигна...   Jan 24 2014, 18:46
|- - Grizzzly   Угу, думал про поддиапазоны SNR, но решил не замор...   Jan 25 2014, 07:06
- - Grizzzly   И тогда уж, наверное, последний вопрос. Вернее, пр...   Jan 25 2014, 12:59
- - Fat Robot   Конечно, с точки зрения оптимизации вычислительных...   Jan 25 2014, 16:04
- - Grizzzly   Спасибо, уже смотрю.   Jan 25 2014, 16:31


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 9th August 2025 - 13:57
Рейтинг@Mail.ru


Страница сгенерированна за 0.01434 секунд с 7
ELECTRONIX ©2004-2016