В процессе реализации декодера Витерби (7, 133 171) столкнулся со следующей проблемой.
Не могу разобраться с алгоритмом перфорирования. Как его реализовывать?
Вариант 1, взят из мануала Texac Instruments к одному из ДСП
Заменять выкалываемые биты слабыми нулями и единицами.
Код
data_dec(4:6:2*l)=3;
data_dec(5:6:2*l)=4;
Далее декодирование как обычно, получается такая вот кривая (под Rate 1 подразумевается 1/2, чистый поток).

нижний зеленый график - без перфорации, согласуется с ожидаемым. Загиб синего связан с ограничением на число прогонов.
Вариант второй, когда мы не учитываем в принципе выколотые биты. Это я так понял делается так.
Исходные пары бит на входе декодера
1 3 5
2 4 6
Но 4 и 5 были "выколоты", значит в первой паре для вычисления метрики перехода используем оба бита, во втором случае не рассматриваем 2 бит, в третей паре - 1 бит.
Можно сформировать следующий вектор
021021021...
Код
if Perf==1
data_dec(4:6:2*l)=3;
data_dec(5:6:2*l)=4;
puncture_vector(1:3:l)=0;
puncture_vector(2:3:l)=2;
puncture_vector(3:3:l)=1;
И добавить этот вектор в качестве входного аргумента для функции вычисления метрик.
Код
function [BM] = BranchMetric_punc(X,hard_soft,punct)
if hard_soft==1
One=7;
else One=1;
end
if punct==0
BM(1)=X(1)+X(2);
BM(2)=X(1)+(One-X(2));
BM(3)=(One-X(1))+X(2);
BM(4)=(One-X(1))+(One-X(2));
elseif punct==1
BM(1)=X(2);
BM(2)=One-X(2);
BM(3)=X(2);
BM(4)=One-X(2);
elseif punct==2
BM(1)=X(1);
BM(2)=X(1);
BM(3)=(One-X(1));
BM(4)=(One-X(1));
end
end

Результат чуть лучше.
Те же результаты я увидел в дипломной работе одного китайского студента. Однако "теория" в виде книги "Кодирование с исправлением ошибок в ЦСПИ" Дж.Кларка и Дж.Кейна говорит мне, что я ничего не понимаю в кодерах и дает следующие кривые.

Нижняя правая группа графиков как раз мой случай, кривая 7.
У них для перфорированного кода при 5 децибелах- Pбитовое на уровне 10^-5, при 4= 10^-4.
Проигрыш по сравнению с кодером без перфорирования (верний правый) составляет что то около 1 дБ.Что я делаю не так?
Есть предположение, что проблема в том, что я работаю с отношением Сигнал-Шум, а в учебнике кривые для Ебита-Ншума.
Если так, то вопрос по поводу того, как привести все к единому стандарту, а то у функции awgn много не ясных для меня параметров.
sigpower - зачем нам указание мощи сигнала в дебиваттах, если мы работаем с относительным значением сигнал шум?
'measured' - взвешенный к чему? К средней мощности сигнала?
Короче говоря, какие параметры нужно установить для моделирования передачи BPSK через AWGN с заданным Eбита/N0?
Я делаю это сначала заменяя нули на -1, а затем подаю полученный вектор в качестве аргумента для функции awgn. потом квантую.
Подскажите, что не так?