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

 
 
> Перфорирование при сверточном кодировании, 5 дБ, какая потеря!
Muscat
сообщение Jul 13 2010, 02:34
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 277
Регистрация: 8-04-09
Из: Москва
Пользователь №: 47 382



Возник вопрос по реализации перфорации в сверточном декодере.
Кодер классический (7,[171 133]) со скоростью 1/2 путем перфорации ускоряется до 3/4, что согласно теории должно давать незначительный проигрыш по BER.

Теория - битовый поток делится на блоки по 6, из которых удаляется 2 бита 4 и 5. Оставшиеся 4 передаются.
На приемной стороне выполняется операция деперфорации, пропущенные биты заменяются на состояние NULL (все равно реализовывать не будем),
либо на слабую единицу/слабый ноль. У меня идет замена на слабый нуль - 3. (0.1.2.3)
Операция перфорации выполняется вот так
Код
       ncode_2(4:6:2*D)=0.5;
        ncode_2(5:6:2*D)=0.5;


Как видно из графиков отставание такой кривой от кривой без перфорации достигает почти 4 дБ, что уже ни в какие ворота.
Если заменять не тройками, чередование 3 и 4, (оч. слабый ноль-оч. слабая единица), как рекомендуются в одном из мануалов TI
Код
        qcode_2(4:12:2*D)=3;
        qcode_2(10:12:2*D)=4;
        qcode_2(5:12:2*D)=4;
        qcode_2(11:12:2*D)=3;

То отсавание становится еще больше, доходя до 5 дБ.
Каково нормальное значение проигрыша по BER в случае использования перфорации?
Ведь во всем мире ипользуют перфорацию, и вряд ли стали бы это делать, если бы она давала такой проигрыш.

Если поставить SNR=100, ну то есть исключить все ошибки кроме перфорации, то вся последовательность декодируется правильно и без ошибок.
Да, я использовал встроенные функции Матлаба, вместо своего декодера, так как они работают в 100 раз быстрее. Но результаты дают практически такие же (мой пока проигрывает 0.5 дБ, но это я потом еще отдельно буду выяснять).

Полный код m файла ниже
Код
clear all;
SNR_MAX=11;
BER_NO_PERF(1:SNR_MAX)=0;
BER_PERF(1:SNR_MAX)=0;
D=10000;
msg = randint(D,1,2,139); % Random data
t = poly2trellis(7,[171 133]); % Define trellis.
code = convenc(msg,t); % Encode the data.


for i=1:SNR_MAX
        ncode = awgn(code,i,'measured',244); % Add noise.
    
        ncode_1=ncode;
        qcode = quantiz(ncode_1,[0.001,.1,.3,.5,.7,.9,.999]);
        tblen = 48;
        delay = tblen; % Traceback length
        decoded = vitdec(qcode,t,tblen,'cont','soft',3); % Decode.
        % Compute bit error rate.
        [number,ratio] = biterr(decoded(delay+1:end),msg(1:end-delay));
        BER_NO_PERF(i)=ratio;
    
        ncode_2=ncode;
%         ncode_2(4:6:2*D)=0.5;
%         ncode_2(5:6:2*D)=0.5;
        qcode_2= quantiz(ncode_2,[0.001,.1,.3,.5,.7,.9,.999]);
        
        qcode_2(4:12:2*D)=3;
        qcode_2(10:12:2*D)=4;
        qcode_2(5:12:2*D)=4;
        qcode_2(11:12:2*D)=3;
        
        tblen = 48;
        delay = tblen; % Traceback length
        decoded = vitdec(qcode_2,t,tblen,'cont','soft',3); % Decode.
        % Compute bit error rate.
        [number,ratio] = biterr(decoded(delay+1:end),msg(1:end-delay));
        BER_PERF(i)=ratio;
   end

semilogy(1:SNR_MAX,BER_NO_PERF)
hold on;
semilogy(1:SNR_MAX,BER_PERF)
hold off;
grid on


Сообщение отредактировал Muscat - Jul 13 2010, 02:37
Эскизы прикрепленных изображений
Прикрепленное изображение
 


--------------------
Because it's there
Go to the top of the page
 
+Quote Post



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

 


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


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