|
|
  |
Алгоритм Витерби с мягким выходом (MATLAB) |
|
|
|
Mar 1 2016, 09:55
|
Участник

Группа: Участник
Сообщений: 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 - длина окна. Неясно, как правильно использовать эту функцию - чем отличаются мягкие решения от ллр в рамках этой функции - то есть, что подавать в качестве первых двух аргументов?
|
|
|
|
|
Mar 1 2016, 10:15
|
Местный
  
Группа: Участник
Сообщений: 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.
|
|
|
|
|
Mar 1 2016, 10:48
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Mar 1 2016, 11:47
|
Местный
  
Группа: Участник
Сообщений: 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 лучше реальный сигнал пихать, а не комплексный.
|
|
|
|
|
Mar 1 2016, 11:51
|
Участник

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

|
Спасибо, буду разбираться.
|
|
|
|
|
Mar 2 2016, 06:43
|
Участник

Группа: Участник
Сообщений: 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
|
|
|
|
|
Mar 2 2016, 13:57
|
Местный
  
Группа: Участник
Сообщений: 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 на мой взгляд не нужно.
|
|
|
|
|
Mar 2 2016, 14:36
|
Участник

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

|
Очевидно, что enc.inp - это двоичный счётчик от 0 до enc.inp. Удивляет, что за 13 лет и 16 версий этот баг не устранили :\
|
|
|
|
|
Mar 2 2016, 15:09
|
Местный
  
Группа: Участник
Сообщений: 453
Регистрация: 23-07-08
Пользователь №: 39 163

|
Цитата(maratz @ Mar 2 2016, 17:36)  Очевидно, что enc.inp - это двоичный счётчик от 0 до enc.inp. Удивляет, что за 13 лет и 16 версий этот баг не устранили :\ Ну вообще эта функция, trellis2enc, зачем-то два раза вызывается - один раз в sovadec, а затем в функциях для каждого типа решетки. Такой уж код.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|