Maratz 0 1 марта, 2016 Опубликовано 1 марта, 2016 · Жалоба Здравствуйте, пытаюсь использовать следующий декодер 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 - длина окна. Неясно, как правильно использовать эту функцию - чем отличаются мягкие решения от ллр в рамках этой функции - то есть, что подавать в качестве первых двух аргументов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andyp 9 1 марта, 2016 Опубликовано 1 марта, 2016 · Жалоба Здравствуйте, пытаюсь использовать следующий декодер 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maratz 0 1 марта, 2016 Опубликовано 1 марта, 2016 (изменено) · Жалоба Два аргумента видимо для использования в итеративных декодерах составных кодов. 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 Изменено 1 марта, 2016 пользователем maratz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andyp 9 1 марта, 2016 Опубликовано 1 марта, 2016 · Жалоба Похоже на то, но вот матлабовская модель - исходное сообщение не сходится с полученным с декодера даже при высоком ОСШ Так работает 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 лучше реальный сигнал пихать, а не комплексный. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maratz 0 1 марта, 2016 Опубликовано 1 марта, 2016 · Жалоба Спасибо, буду разбираться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Grizzly 0 1 марта, 2016 Опубликовано 1 марта, 2016 · Жалоба И да, в awgn для bpsk лучше реальный сигнал пихать, а не комплексный. Но не забыть при этом учесть 3 дБ (добавив их к SNR). Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maratz 0 2 марта, 2016 Опубликовано 2 марта, 2016 (изменено) · Жалоба Автор пишет: "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 Изменено 2 марта, 2016 пользователем maratz Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andyp 9 2 марта, 2016 Опубликовано 2 марта, 2016 · Жалоба Автор пишет: "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 на мой взгляд не нужно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maratz 0 2 марта, 2016 Опубликовано 2 марта, 2016 · Жалоба Очевидно, что enc.inp - это двоичный счётчик от 0 до enc.inp. Удивляет, что за 13 лет и 16 версий этот баг не устранили :\ Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andyp 9 2 марта, 2016 Опубликовано 2 марта, 2016 · Жалоба Очевидно, что enc.inp - это двоичный счётчик от 0 до enc.inp. Удивляет, что за 13 лет и 16 версий этот баг не устранили :\ Ну вообще эта функция, trellis2enc, зачем-то два раза вызывается - один раз в sovadec, а затем в функциях для каждого типа решетки. Такой уж код. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться