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

 
 
 
Reply to this topicStart new topic
> Алгоритм Витерби с мягким выходом (MATLAB)
maratz
сообщение Mar 1 2016, 09:55
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 4-02-16
Пользователь №: 90 332



Здравствуйте, пытаюсь использовать следующий декодер http://www.mathworks.com/matlabcentral/fil...terbi-algorithm.

Декларация функции - output = sovadec( msg, llr, trl, win ),
где (цитирую автора) - "where MSG is the soft input (codeword), LLR is a priori information per bit about the bits (log likelihood ratios)". trl - описание решетки, win - длина окна.

Неясно, как правильно использовать эту функцию - чем отличаются мягкие решения от ллр в рамках этой функции - то есть, что подавать в качестве первых двух аргументов?
Go to the top of the page
 
+Quote Post
andyp
сообщение Mar 1 2016, 10:15
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(maratz @ Mar 1 2016, 12:55) *
Здравствуйте, пытаюсь использовать следующий декодер http://www.mathworks.com/matlabcentral/fil...terbi-algorithm.

Декларация функции - output = sovadec( msg, llr, trl, win ),
где (цитирую автора) - "where MSG is the soft input (codeword), LLR is a priori information per bit about the bits (log likelihood ratios)". trl - описание решетки, win - длина окна.

Неясно, как правильно использовать эту функцию - чем отличаются мягкие решения от ллр в рамках этой функции - то есть, что подавать в качестве первых двух аргументов?


Два аргумента видимо для использования в итеративных декодерах составных кодов.

msg - мягкие решения с выхода демодулятора
llr - информация, полученная от другого декодера об информационных битах. Для первой итерации 0.
Go to the top of the page
 
+Quote Post
maratz
сообщение Mar 1 2016, 10:48
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 4-02-16
Пользователь №: 90 332



Цитата(andyp @ Mar 1 2016, 14:15) *
Два аргумента видимо для использования в итеративных декодерах составных кодов.

msg - мягкие решения с выхода демодулятора
llr - информация, полученная от другого декодера об информационных битах. Для первой итерации 0.


Похоже на то, но вот матлабовская модель - исходное сообщение не сходится с полученным с декодера даже при высоком ОСШ

clear all; clc;
SNRdB = 5; % ОСШ
seq = randint(1, 10) % случайная последовательность
enctrel = poly2trellis(3, [7 5]); %формирование решетки
conv_seq = convenc(seq, enctrel); %сверточное кодирование

modObj = modem.pskmod('M', 2, 'InputType', 'Bit'); %конструктор модема
modulatedsig = modulate(modObj, conv_seq); % модуляция
receivedsig = awgn(modulatedsig, SNRdB, 0); % моделирование канала с АБГШ
sigma = sqrt(10^(-SNRdB/10)); % ско
demodObj = modem.pskdemod(modObj,'DecisionType','llr','NoiseVariance',sigma^2); % конструктор демодулятора

msg = demodulate(demodObj, receivedsig); % получение ллр с дема
llr = zeros(1, length(seq)); % имитация второго декодера

dec_out = sovadec(msg, llr, enctrel, 10); % декодирование SOVA

Сообщение отредактировал maratz - Mar 1 2016, 10:58
Go to the top of the page
 
+Quote Post
andyp
сообщение Mar 1 2016, 11:47
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(maratz @ Mar 1 2016, 13:48) *
Похоже на то, но вот матлабовская модель - исходное сообщение не сходится с полученным с декодера даже при высоком ОСШ


Так работает

Код
clear all; clc;
SNRdB = 5; % ОСШ
seq = randint(1, 20) % случайная последовательность
enctrel = poly2trellis(3, [7 5]); %формирование решетки
conv_seq = convenc(seq, enctrel); %сверточное кодирование

modObj = modem.pskmod('M', 2, 'InputType', 'Bit'); %конструктор модема
modulatedsig = -modulate(modObj, conv_seq); % модуляция
receivedsig = awgn(real(modulatedsig), SNRdB, 0); % моделирование канала с АБГШ
sigma = sqrt(10^(-SNRdB/10)); % ско
demodObj = modem.pskdemod(modObj,'DecisionType','llr','NoiseVariance',sigma^2); % конструктор демодулятора

msg = demodulate(demodObj, receivedsig); % получение ллр с дема
llr = zeros(1, length(seq)); % имитация второго декодера

dec_out = sovadec(msg, llr, enctrel, 10); % декодирование SOVA

dec_out>0


С маппингом при модуляции и/или со знаками мягких решений демодулятора что-то не то было. И да, в awgn для bpsk лучше реальный сигнал пихать, а не комплексный.
Go to the top of the page
 
+Quote Post
maratz
сообщение Mar 1 2016, 11:51
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 4-02-16
Пользователь №: 90 332



Спасибо, буду разбираться.
Go to the top of the page
 
+Quote Post
Grizzzly
сообщение Mar 1 2016, 11:53
Сообщение #6


Знающий
****

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



Цитата(andyp @ Mar 1 2016, 14:47) *
И да, в awgn для bpsk лучше реальный сигнал пихать, а не комплексный.

Но не забыть при этом учесть 3 дБ (добавив их к SNR).
Go to the top of the page
 
+Quote Post
maratz
сообщение Mar 2 2016, 06:43
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 4-02-16
Пользователь №: 90 332



Автор пишет:
"The output of the function is the vector containing the soft estimates of the originally encoded information.
...
The output of the decoding algorithm is of the following form: out = sign(inp) * log( P(inp=1|out) ) / log( P(inp=-1|out) )".

Что за интересная форма выходных данных? На упомянутые мягкие решения это не очень похоже.

---
И вот еще один момент - данная реализация алгоритма не позволяет работать со структурами, где число входных бит больше 3.

50. enc.ksym = trl.numInputSymbols; % number of possible input combinations
...
62. enc.inp = de2bi( oct2dec( [0:enc.ksym-1] ), enc.k, 'left-msb' ); % all possible binary inputs

При попытке подсунуть ему структуру poly2trellis([3 3 3 3 ], [7 5; 3 5; 7 3; 7 7]) работать отказывается

Error in ==> sovadec>trellis2enc at 62
enc.inp = de2bi( oct2dec( [0:enc.ksym-1] ), enc.k, 'left-msb' ); % all possible binary inputs



Сообщение отредактировал maratz - Mar 2 2016, 07:24
Go to the top of the page
 
+Quote Post
andyp
сообщение Mar 2 2016, 13:57
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(maratz @ Mar 2 2016, 09:43) *
Автор пишет:
"The output of the function is the vector containing the soft estimates of the originally encoded information.
...
The output of the decoding algorithm is of the following form: out = sign(inp) * log( P(inp=1|out) ) / log( P(inp=-1|out) )".

Что за интересная форма выходных данных? На упомянутые мягкие решения это не очень похоже.


Скорее всего попутали разность и отношение логарифмов.

Цитата
---
И вот еще один момент - данная реализация алгоритма не позволяет работать со структурами, где число входных бит больше 3.

50. enc.ksym = trl.numInputSymbols; % number of possible input combinations
...
62. enc.inp = de2bi( oct2dec( [0:enc.ksym-1] ), enc.k, 'left-msb' ); % all possible binary inputs

При попытке подсунуть ему структуру poly2trellis([3 3 3 3 ], [7 5; 3 5; 7 3; 7 7]) работать отказывается

Error in ==> sovadec>trellis2enc at 62
enc.inp = de2bi( oct2dec( [0:enc.ksym-1] ), enc.k, 'left-msb' ); % all possible binary inputs



Глубоко не копал, но oct2dec на мой взгляд не нужно.
Go to the top of the page
 
+Quote Post
maratz
сообщение Mar 2 2016, 14:36
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 47
Регистрация: 4-02-16
Пользователь №: 90 332



Очевидно, что enc.inp - это двоичный счётчик от 0 до enc.inp. Удивляет, что за 13 лет и 16 версий этот баг не устранили :\
Go to the top of the page
 
+Quote Post
andyp
сообщение Mar 2 2016, 15:09
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163



Цитата(maratz @ Mar 2 2016, 17:36) *
Очевидно, что enc.inp - это двоичный счётчик от 0 до enc.inp. Удивляет, что за 13 лет и 16 версий этот баг не устранили :\



Ну вообще эта функция, trellis2enc, зачем-то два раза вызывается - один раз в sovadec, а затем в функциях для каждого типа решетки. Такой уж код.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 18th July 2025 - 09:14
Рейтинг@Mail.ru


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