Degson: клеммы, корпуса, источники питания

IEEE 802.11 Viterbi decoding with C

Новичок
 
Регистрация: 05.02.2012
Сообщений: 3
Репутация: 10
 
05.02.2012 22:43 #1
Здравствуйте!

Так уж случилось что через год мне придётся защищать дипломную работу, тема работы - "Wireless Simulator"

За основу взят документ: http://standards.ieee.org/getieee802...02.11-2007.pdf

Сейчас я закончил стадию кодирования, сделал всё точь-в-точь как описано в параграфе 17.3.5.5 Convolutional encoder

[size=]The DATA field, composed of SERVICE, PSDU, tail, and pad parts, shall be coded with a convolutional
encoder of coding rate R = 1/2, 2/3, or 3/4, corresponding to the desired data rate. The convolutional encoder
shall use the industry-standard generator polynomials, g0 = 1338 and g1 = 1718, of rate R = 1/2, as shown in
Figure 17-8. The bit denoted as “A” shall be output from the encoder before the bit denoted as “B.” Higher
rates are derived from it by employing “puncturing.” Puncturing is a procedure for omitting some of the
encoded bits in the transmitter (thus reducing the number of transmitted bits and increasing the coding rate)
and inserting a dummy “zero” metric into the convolutional decoder on the receive side in place of the
omitted bits. The puncturing patterns are illustrated in Figure 17-9. Decoding by the Viterbi algorithm is
recommended.[/size]




На вход кодирующей функции поступает такая последовательность:
10101010101010101010101010101010101010101010101010 1010101010101010101010101010101010101010101010

[syntax lang="c"]W8 * WSDecodeBits(W8 *bitSeq)
{
W8 *buf;

W8 reg[] = "1111111";
W8 g1[] = "1011011";
W8 g2[] = "1111001";
W16 i, j = 0;
W16 curBit;
W16 res;

buf = (W8*)malloc(WS_RAW_MSG_SIZE * 2);

if ( NULL == buf )
{
WSFailureReport_m(OUT_OF_MEMORY);
}

for (i=0; i<WS_RAW_MSG_SIZE; i++)
{
curBit = bitSeq[i]-'0';

(void)WSbitDisplase(curBit, (char**)reg);
(void)WSxor(reg, g1, &res);

if (res)
{
buf[j++] = (char)'1';
}
else
{
buf[j++] = (char)'0';
}

(void)WSxor(reg, g2, &res);

if (res)
{
buf[j++] = '1';
}
else
{
buf[j++] = '0';
}
}

buf[WS_RAW_MSG_SIZE * 2] = '\0';

return buf;
}[/syntax]


В итоге на выходе мы имеем:
11001011011111001100110011001100110011001100110011 00110011001100110011001100110011001100110011001100 11001100110011001100110011001100110011001100110011 001100110011001100110011001100110011001100


Всё вроде бы хорошо, и замечательно. Было.... пока я не захотел реализовать декодер(Витерби - судя по документации)

Перерыл кучу сайтов, кучу форумов, самый адекватный код видел на сайте http://www.eccpage.com/ Но после пары дней безуспешных попыток к декодированию пришёл к выводу что он байт-ориентированный.. У меня же лимитируется процесс передачи бит. Задачка как мне до сих пор кажется вполне решаемая и не сложная. Но вот охота послушать ваши мнения. Как стоит написать код для декодирования, если такой уже существует пожалуйста делитесь, если есть какая-либо литература по этому вопросу(кроме Скляра) делитесь тоже. Интересует именно программная реализация, как работает в теории ясно.









Дополнение:

Функция: WSbitDisplase
[syntax lang="c"]W16 WSbitDisplase(W16 b, W8 **reg)
{
int i;

for(i=6;i>0;i--)
{
*((char*)reg+i) = *((char*)reg+i-1);
}

*((char*)reg) = (char)b + 48;

return 0;
}[/syntax]


Функция: WSxor
[syntax lang="c"]int WSxor(char *a, char *mask, int *res)
{
int i, tmp;
tmp = 0;
for(i=0;i<7;i++)
{
if (*(mask+i) == (char)'1')
{
tmp += *(a+i) - '0';
}
}

if ( !(tmp%2) )
{
*res = 0;
}
else
{
*res = 1;
}

return 0;
}[/syntax]
Оценка
В многообразии литиевых батареек и аккумуляторов нет какого-то универсального или идеального варианта. Выбирая тот или иной вариант для питания устройства, разработчику приходится оперировать множеством параметров, используя наиболее оптимальное их сочетание для каждого приложения. Разберем параметры для различных приложений.
Новичок
 
Аватар для First
 
Регистрация: 22.03.2006
Сообщений: 31
Записей в дневнике: 1
Репутация: 18
8 13
0 7
 
08.02.2012 21:00 #2
Посмотрите в книге Морелос-Сарагоса Р. "Искусство помехоустройчивого кодирования", она есть на русском, по-моему там неплохо написано об этом декодере. На сайте http://the-art-of-ecc.com/ этой книги есть много программ кодеров-декодеров, вроде и Витерби есть.

А о чем ваш диплом если не секрет?
Оценка
Новичок
 
Регистрация: 09.02.2011
Сообщений: 4
Репутация: 10
 
10.02.2012 10:35 #3

Viterbi decoding with C

Если вопрос еще актуален, предлагаю взглянуть на реализацию кодека в GNU Radio: viterbi. Может будут интересными ссылки на открытые проекты GNU Radio wireless и отечественный проект Wimax-scanner.
Удачи.
Оценка
Новичок
 
Регистрация: 05.02.2012
Сообщений: 3
Репутация: 10
 
21.02.2012 23:04 #4
Огромное спасибо за ответы!

Мой диплом представляет собой симулятор для анализа потерь, snr, многолучёвости, и тп. Ничего особо сложного, фактически просто проверка основных результатов (уже полученных).

Сейчас попробовал кодер/декодер с GNU Radio, дело в том что это реальная, рабочая вещь, кодирует - декодирует реальную информацию..

А мне же нужно кодировать - декодировать всего-то 300 - 500 бит.

У меня задача - показать наглядно, на примерах из нулей и единиц. Вот я и изобретаю(как сейчас уже начинаю понимать) велосипед...
Оценка
Новичок
 
Регистрация: 09.02.2011
Сообщений: 4
Репутация: 10
 
22.02.2012 12:56 #5

GSMSP

Понятно.
Могу предложить декодер Витерби из проекта GSM Scanner Project (GSMSP), предельно подробно выполненный в MatLab в виде m-файла. Декодер предназначен для декодирования L2-сообщений GSM (456 битов сверточного кода со скоростью 1/2). Если будет интерес, могу предоставить ссылку (или hackchina.com в помощь ).
Оценка
Новичок
 
Регистрация: 05.02.2012
Сообщений: 3
Репутация: 10
 
26.02.2012 15:52 #6
Привет, да! Поделись пожалуйста m-файлом, возможно его удастся транслировать в СИ
Оценка
Новичок
 
Регистрация: 09.02.2011
Сообщений: 4
Репутация: 10
 
28.02.2012 09:57 #7

GSMSP

Удачи!
Вложения
Тип файла: zip channel_dec_sacch.zip (2.2 Кб, 0 просмотров)
Оценка
Ответ
Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход
Электронные компоненты. Бесплатная доставка по России
Часовой пояс GMT +3, время: 10:05.
Обратная связь РадиоЛоцман Вверх