|
Перфорирование при сверточном кодировании, 5 дБ, какая потеря! |
|
|
|
Jul 13 2010, 02:34
|

Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
 |
Ответов
(1 - 9)
|
Jul 13 2010, 04:36
|

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

|
Проверьте правильно ли вы считаете сигнал/шум для ваших графиков.
ncode = awgn(code,i,'measured',244); % Add noise.
Взято из Матлабовской справки. Так правильно?
Увеличив последовательность до 100к посмотрел на результаты, в целом числа похожи, если у чистого кодера 10^-4 дается при 6дБ, то при выкалывании требуется 10 дБ, у меня проигрыш 4 дБ, по таблице 3. Сравнимые величины Так все же, правильно ли я моделирую и декодирую это самое перфорирование?
Сообщение отредактировал Muscat - Jul 13 2010, 04:39
--------------------
Because it's there
|
|
|
|
|
Jul 13 2010, 05:04
|

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

|
Из первого же графика ясно видно что нет, у меня BER достигается при 10-12 дБ. Как правильно сымитировать АБГШ в канале функциями Матлаба, так как прямое мнение функции AWGN явно отличается по эффекту от этого самого AWGN на реальный сигнал? Вот график созданный в BerTool, тут все практически в точности согласно теорри (3.4 против 3.2)
Сообщение отредактировал Muscat - Jul 13 2010, 05:06
Эскизы прикрепленных изображений
--------------------
Because it's there
|
|
|
|
|
Jul 13 2010, 22:04
|

Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Jul 14 2010, 03:38
|

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

|
Разобрался с моделью, представленной в Симулинке. Покрутил, понравилось. Построил вот такие вот графики. Clear - это BER при скорости 1/2, без перфорации, сверху 3 графика с перфорацией, но разных бит. И вот тут вопрос. Красный график соответствует матрице перфорирования, которая уже реализована и работает. Мне было сказано, что такая матрица перфорирования была взята из стандартного кода. Однако в Матлабе, к примеру, в качестве стандартного было другое перфорирование - зеленый пунктир. Заинтересовавшись этим эффектом я попробовал еще развести биты выкалывания, получился еще более красивый график - голубой снизу. Разница 0.7дБ. Не бог весть что, но тоже неплохо. Какие еще факторы влияют на выбор матрицы перфорирования? Сложность реализации? Способность исправлять пакетные ошибки?
Эскизы прикрепленных изображений
--------------------
Because it's there
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|