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

 
 
> Перфорирование при сверточном кодировании, 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
 
Start new topic
Ответов
Muscat
сообщение Jul 13 2010, 22:04
Сообщение #2


Местный
***

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



Serg76, Ох, именно такой ответ я и хотел получить, спасибо!

Не совсем понятно, что именно я делаю неправильно.
Информацию я взял из мануала Texas Instruments по одному их DSP, где описывалось как реализовать на нем декодер Витерби. В частности там используется система, когда 100 - сильная единица, 111 - неуверенная единица, 000-неуверенный ноль, 001 - уверенный ноль. Вот там пропущенные биты рекомендовалось либо заменять на некое состояние Null, но в дальнейшем проект будет реализовываться на ПЛИС и вводить третье состояние не хотелось бы, если только обозначать его как ZZZ.
Либо поочередно вставлять вместо пропусков 111 и 000 - слабые нули и единицы, что я собственно и реализовал и что дало мне такой проигрышь.

Правильно ли я понял вашу рекомендацию, что нужно делать так
Используем мягкие решения, сигнал ранжируется 0.1.2...7. Если принят сигнал Х-6 (один выколотый и "скорее всего единица"), а сравнивается с переходом 0-7, то для второго бита просто считаем ошибку равную 1, а для первого бита сразу берем ее максимальной равной 7.
Но не очень понятен смысл такого алгоритма, так как по сути мы прибавляем 7 ко всем метрикам и на выбор ветви это никак не повляет. То есть действие аналогичное тому, что мы просто не учитываем этот бит при вычислении метрик переходов. Разве не так?

Цитата
Puncturing is a method to reduce the coding rate by deleting symbols from the encoded data. The
decoder detects which symbols were deleted and replaces them, a process called depuncturing.
While this has the effect of introducing errors, the magnitude of the errors is reduced by the use of
soft-decision data and null symbols, which are halfway between a positive and negative value.
These null symbols add very little bias to the accumulated metrics. In some coding schemes, no
null value exists, requiring the depuncturing to use alternatively the smallest positive and negative
values.(7) Using the coding scheme in Table 1, the punctured symbols are replaced by 000, then
111, etc. As expected, the performance of punctured codes is not equal to that of their
nonpunctured counterparts, but the increased coding rate is worth the decreased performance.


Texas Instruments (TI)
Application Report
SPRA071A - January 2002
Viterbi Decoding Techniques for the TMS320C54x
DSP Generation
Henry Hendrix Member, Group Technical Staff


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



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 00:31
Рейтинг@Mail.ru


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