Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Многоуровневый декодер
Форум разработчиков электроники ELECTRONIX.ru > Цифровая обработка сигналов - ЦОС (DSP) > Алгоритмы ЦОС (DSP)
Ivan55
Написал программу многоуровневого кодера декодера, построил графики для жестких мягких решений и вот что получил

Вот код:
CODE

clear all; close all; clc

%% Input parametrs
robustens_mode = 2; % Режим помехоустойчивости 1; 2; 3; 4;
spectrum_mode = 5; % Размещение спектра 4.5кГц - 0; 5кГц - 1; 9кГц - 2; 10кГц - 3; 18кГц - 4; 20кГц - 5;

level_protection = 0; % Уровень защиты для QAM16 - 0; QAM4 - 1;

QAM_Pmax = 2; % 4-QAM Pmax = 1; 16-QAM Pmax = 2;

%% Initialization parametrs

% Колличество ячеек
N_mux_list = [167, 190, 359, 405, 754, 846; ...
130, 150, 282, 322, 588, 662; ...
NaN, NaN, NaN, 288, NaN, 607; ...
NaN, NaN, NaN, 152, NaN, 332];

% Кодовые скорости канала
Rate = cell(2,2,1);
Rate{1,1} = [1 3];
Rate{1,2} = [2 3];
Rate{2,1} = [1 2];
Rate{2,2} = [NaN];

% Схема выкалывания канала
puncpat = cell(2,2,1);
puncpat{1,1} = [1 1 1 0 0 0];
puncpat{1,2} = [1 1 0 0 0 0 1 0 0 0 0 0];
puncpat{2,1} = [1 1 0 0 0 0];
puncpat{2,2} = [NaN];

% Перфорирование остаточных 36 бит
puncpat_Rp = cell(12,1);
puncpat_Rp{1,1} = [1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0];
puncpat_Rp{2,1} = [1 1 1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0];
puncpat_Rp{3,1} = [1 1 1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0];
puncpat_Rp{4,1} = [1 1 1 0 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 0 0 0 0];
puncpat_Rp{5,1} = [1 1 1 0 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 0 0 0 0];
puncpat_Rp{6,1} = [1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 0 0 0 0];
puncpat_Rp{7,1} = [1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0];
puncpat_Rp{8,1} = [1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 0 0 0];
puncpat_Rp{9,1} = [1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0];
puncpat_Rp{10,1} = [1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 0 0 0];
puncpat_Rp{11,1} = [1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 1 0 0];
puncpat_Rp{12,1} = [1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 0 0 0 1 1 1 1 0 0];

Rp = zeros(1,QAM_Pmax);
for k = 1:QAM_Pmax
Rp(k) = (2*N_mux_list(robustens_mode,spectrum_mode+1)-12) - Rate{level_protection+1,k}(2)...
*floor((2*N_mux_list(robustens_mode,spectrum_mode+1) - 12)./Rate{level_protection+1,k}(2)) + 1;
end

% Кодовая скорость материнского кода
mother_code = 1/6;

% Задание таблицы переходов
trellis = poly2trellis(7,[133, 171, 145, 133,171,145]);

Mbase = [2 4];
M=2.^Mbase(QAM_Pmax);

a = [1/sqrt(2), 1/sqrt(10)]; % Коэффициент нормализации QAM

% Модуляция QAM16 и QAM4
if QAM_Pmax == 1
SMQAM = [1+1*i, -1+1*i, -1-1*i, 1-1*i].*a(QAM_Pmax);

elseif QAM_Pmax == 2
SMQAM = [3+3*i, 3-1*i, 3+1*i, 3-3*i,...
-1+3*i, -1-1*i, -1+1*i, -1-3*i,...
1+3*i, 1-1*i, 1+1*i, 1-3*i,...
-3+3*i, -3-1*i, -3+1*i, -3-3*i].*a(QAM_Pmax);
end

% Расчет колличества бит
L_2 = 0;
for k = 1:QAM_Pmax
Mp_2(k) = Rate{level_protection+1,k}(1)*floor((2*N_mux_list(robustens_mode,spectrum_mode+1
)...
- 12)./Rate{level_protection+1,k}(2)); % Формула 77
end
L_2 = sum(Mp_2);

% Задаем схему выкалывания
punc = cell(QAM_Pmax,1);
for n = 1:QAM_Pmax
Num_puncpat = ((Mp_2(n)+ 6)/mother_code)./length(puncpat{level_protection+1,n});
m = [];
for k = 1:ceil(Num_puncpat)
m = [m ,puncpat{level_protection+1,n}];
end
punc{n,:} = [m(1:Num_puncpat*length(puncpat{level_protection+1,n}) - 36), puncpat_Rp{Rp(n),1}];
end

% QAM модулятор
H_QAM = modem.genqammod('Constellation', SMQAM, 'InputType', 'bit');

% Пременные
x_in = 2*N_mux_list(robustens_mode,spectrum_mode+1);
pBuff_out = zeros(x_in, 1);
decoded_out = [];
Input_Data_coder = [];
N_simbol = 1000;

%% Программа кодера декодера
tblen = 35;
quant = 3;
AmplQuant = 0.4;
delta = 2*AmplQuant/(2^quant-2);
for EbNo = 1:20
for l = 1:N_simbol
%% Формирование последовательности бит
Input_Data=randi([0 1],L_2,1);
Input_Data_coder = [Input_Data_coder; Input_Data];

%% Сверточный кодер
init_state = 0;
if QAM_Pmax == 2
[In_Data_1] = convenc([Input_Data(Mp_2(1)+1:Mp_2(1)+Mp_2(2)); [0 0 0 0 0 0]'],trellis,punc{2, 1}, init_state);
[In_Data_0] = convenc([Input_Data(1:Mp_2(1)); [0 0 0 0 0 0]'],trellis,punc{1, 1}, init_state);
else
[In_Data_0] = convenc([Input_Data(1:Mp_2(1)); [0 0 0 0 0 0]'],trellis,punc{1, 1}, init_state);
end

%% Мультиплексор
if QAM_Pmax == 2
pBuff_out = [In_Data_0; In_Data_1];
else
pBuff_out = In_Data_0;
end

% Отображение на созвездие QAM
Mod_qam=modulate(H_QAM,pBuff_out);

%% Канал передачи AWGN
k=log2(M);
Qam_rx=awgn(Mod_qam,EbNo+10*log10(k*1/2),'measured','dB');

%% Расчет ОСШ канала
EsNo = EbNo*k/2;
SNR = sum(real(Qam_rx).^2 + imag(Qam_rx).^2)/(EsNo*M);

%% Обратное отображение на созвездие QAM
HD_QAM = modem.genqamdemod('Constellation', SMQAM, 'OutputType', 'bit','DecisionType', 'approximate llr','NoiseVariance', SNR);
Demod_QAM=demodulate(HD_QAM,Qam_rx);

%% Демультиплексор
if QAM_Pmax == 2
In_Data_0 = Demod_QAM(1:x_in);
In_Data_1 = Demod_QAM(x_in+1:2*x_in);
else
In_Data_0 = Demod_QAM(1:x_in);
end

%% Декодирование
if QAM_Pmax == 2
[x,qcode_1] = quantiz(In_Data_1(:, 1),(-AmplQuant:delta:AmplQuant), (2^quant-1:-1:0));
[x,qcode_0] = quantiz(In_Data_0(:, 1),(-AmplQuant:delta:AmplQuant), (2^quant-1:-1:0));
[decoded_1] = vitdec(qcode_1,trellis,tblen,'trunc','soft', quant, punc{2, 1});
[decoded_0] = vitdec(qcode_0,trellis,tblen,'trunc','soft', quant, punc{1, 1});
else
[x,qcode_0] = quantiz(In_Data_0(:, 1),(-AmplQuant:delta:AmplQuant), (2^quant-1:-1:0));
[decoded_0] = vitdec(qcode_0,trellis,tblen,'trunc','soft', quant, punc{1, 1});
end

%% Мультиплексор
if QAM_Pmax == 2
decoded = [decoded_0(1:Mp_2(1)), decoded_1(1:Mp_2(2))];
else
decoded = decoded_0(1:Mp_2(1));
end

decoded_out = [decoded_out, decoded];
end
%% Подсчет количества ошибок
[num,BER]=biterr(Input_Data_coder(1:end),decoded_out(1:end)');
BERcod(EbNo) = BER;
fprintf('ОСШ: %f BER: %f \n', EbNo, BER);
Input_Data_coder = [];
decoded_out = [];
end

semilogy(BERcod);
grid on;


Вот графики:
Нажмите для просмотра прикрепленного файла

Почему выигрышь жестких решений получился такой маленький, где косяк?
des00
Цитата(Ivan55 @ Feb 12 2013, 23:30) *
Почему выигрышь жестких решений получился такой маленький, где косяк?

наверное все же мягких решений %)

И с чего вы решили что маленький ? выигрыш 2дБ, все как теория гуторит %)

ЗЫ. спасибо за рефернсный код, мне скоро в железе подобное делать %)
Ivan55
Цитата(des00 @ Feb 13 2013, 09:01) *
наверное все же мягких решений %)

И с чего вы решили что маленький ? выигрыш 2дБ, все как теория гуторит %)

ЗЫ. спасибо за рефернсный код, мне скоро в железе подобное делать %)


красный график жесткие решения синий без кодирования и где же там выигрыш?

То что выигрыш мягких на 2 дБ по сравнению с жесткими это так и получилось) против ниче не имею

А за код не за чтоwink.gif это лишь малая часть) обращайтесь если что)



У кого какие мысли, давайте обсуждать!
des00
Цитата(Ivan55 @ Feb 13 2013, 01:41) *
красный график жесткие решения синий без кодирования и где же там выигрыш?


а, вы про это. Код не смотрел, но
1. Вы младший бит в КАМ16 кодировали?
2. Созвездие по грею ставили?
3. Кривые лучше всего до 10^-7 глянуть
Ivan55
Цитата(des00 @ Feb 13 2013, 10:48) *
а, вы про это. Код не смотрел, но
1. Вы младший бит в КАМ16 кодировали?
2. Созвездие по грею ставили?
3. Кривые лучше всего до 10^-7 глянуть


1. Кодируется все
2. Созвездие если вы посмотрите не по Грею
3. До 10^-7 что вам даст? если наклон кривой уже итак виден, а 10^-5 вполне достаточно
des00
Цитата(Ivan55 @ Feb 13 2013, 01:54) *
1. Кодируется все
2. Созвездие если вы посмотрите не по Грею
3. До 10^-7 что вам даст? если наклон кривой уже итак виден, а 10^-5 вполне достаточно


Блин с QPSK перепутал %( Но для КАМ16 схожие выкладки :
1. ИМХО для скорости 1/2 самое то в паре старший бит передавать как есть, а младший кодировать.
2. Если не по грею то символьная ошибка может привести больше чем к одиночной битовой ошибке. Ну это все при ошибке до соседа.
3. Обычно для систем связи нормируется SNR при 10е-6. А графики кодированного и некодированного во всех книгах имеют точки пересечения когда кодер только мешает чем помогает %)

Надо будет ваши сорцы внимательнее посмотреть
Ivan55
Цитата(des00 @ Feb 13 2013, 11:01) *
Блин с QPSK перепутал %( Но для КАМ16 схожие выкладки :
1. ИМХО для скорости 1/2 самое то в паре старший бит передавать как есть, а младший кодировать.
2. Если не по грею то символьная ошибка может привести больше чем к одиночной битовой ошибке. Ну это все при ошибке до соседа.
3. Обычно для систем связи нормируется SNR при 10е-6. А графики кодированного и некодированного во всех книгах имеют точки пересечения когда кодер только мешает чем помогает %)

Надо будет ваши сорцы внимательнее посмотреть


1. Про какое кодирование вы говорите?
2. Это все проверенно, работает чуть хуже Грея
3. Как нормируют и для чего? А про графики это понятно, так как кодирование избыточное и та энергия которая приходилась на не кодированный бит размазывается на кодированный, тем самым и получается что при низком ОСШ кривая выше а при увелечение идет пересечение и выигрыш, но все таки выигрыш при кодировании 1/2 должен быть хоть пара дБ на жестких решениях
ilya79
У вас что-то не так и с мягкими решениями. При QAM-16 и R=1/2 спектральная эффективность 2 бит/Гц т.е. соответсвует некодированной QPSK. Некодированная QPSK дает Pб=10^-5 при 9.6 дБ, выша система требует более 10 дБ. Посмотрите тут http://www.mathworks.com/help/comm/example...dulation-1.html может поможет.
Ivan55
Цитата(ilya79 @ Feb 13 2013, 11:50) *
У вас что-то не так и с мягкими решениями. При QAM-16 и R=1/2 спектральная эффективность 2 бит/Гц т.е. соответсвует некодированной QPSK. Некодированная QPSK дает Pб=10^-5 при 9.6 дБ, выша система требует более 10 дБ. Посмотрите тут http://www.mathworks.com/help/comm/example...dulation-1.html может поможет.


Спосибо Юлия) я тоже вижу что чтото не так, но там и жесткие не так)) Что в вашем понимании спектральная эффективность? вы бы хоть полосу сигнала тогда указали

А сылку на модель я уже видел, для одного уровня кодирования оно так и у меня получаетсяwink.gif но я делаю многоуровневое кодирование, где каждый уровень кодируется своей скоростью, в данном случае у меня первый уровень rate1 = 1/2 второй уровень rate2 = 2/3, потом эти потоки обыединяются то есть Rate_all = (rate1+rate2)/2 = 1/2

Кто нить вообще занимался многоуровневым кодированием???
ilya79
Не очень понятно где вы нашли Юлию ("Спосибо Юлия" ), но если по сути то:
1. спектральная эффективность -в моем понимании такая же как у всех (можно почитать у Прокиса или Скляра). Потенциально достижимая для QAM-16 4 бит/Гц (на реальных фильтрах конечно поменьше).
2. Rate_all = (rate1+rate2)/2 -может проблема в этой формуле? (0.5+0,667)/2=0,583 Если вы работаете с Multilevel Codes то суммарная скорость у вас 1+1+1/2+2/3=3.16 бит/символ (Гц). Или Rate_all=3,16/4,0=0,79. Или у вас нет потоков без кодирования?
3. Отображение кодированных потоков в сигнальные точки соответсвует оптимальным скоростям для данных точек (J. Huber and U. Wachsmann Capacities of equivalent channels in multilevel coding schemes)?
Ivan55
Цитата(ilya79 @ Feb 13 2013, 13:45) *
Не очень понятно где вы нашли Юлию ("Спосибо Юлия" )...


Извиняюсь я английский букф плохо понимать))

Цитата(ilya79 @ Feb 13 2013, 13:45) *
1. спектральная эффективность -в моем понимании такая же как у всех (можно почитать у Прокиса или Скляра). Потенциально достижимая для QAM-16 4 бит/Гц (на реальных фильтрах конечно поменьше).


Спектральная эффективность — отношение скорости передачи данных к используемой полосе пропускания радиоканала. Всегда думал что это и есть определение спектральной эффективности

Цитата(ilya79 @ Feb 13 2013, 13:45) *
2. Rate_all = (rate1+rate2)/2 -может проблема в этой формуле? (0.5+0,667)/2=0,583 Если вы работаете с Multilevel Codes то суммарная скорость у вас 1+1+1/2+2/3=3.16 бит/символ (Гц). Или Rate_all=3,16/4,0=0,79. Или у вас нет потоков без кодирования?


1+1+1/2+2/3=3.16 бит/символ откуда взято 1+1??? Rate_all=3,16/4,0=0,79 каким это образом кодавая скорость стала связана с модуляцией???

Цитата(ilya79 @ Feb 13 2013, 13:45) *
3. Отображение кодированных потоков в сигнальные точки соответсвует оптимальным скоростям для данных точек (J. Huber and U. Wachsmann Capacities of equivalent channels in multilevel coding schemes)?


Можно подробней? я думал что отображение всегда идет в соответсвии с таблицей модуляции где определенной группе бит соответствует точка на комплексной плоскости
ilya79
Посмотрел ваш код, похоже у вас кодируються все точки созвездия без учета разной степени защищенности бит в точках созвездия. Возможно если вы сделаете как написал des00 (1. ИМХО для скорости 1/2 самое то в паре старший бит передавать как есть, а младший кодировать. )
или как делают тут (tait.e-technik.uni-ulm.de/~baum/research/ofdm_workshop00.ps) ваша конструкция заведеться.


"1+1+1/2+2/3=3.16 бит/символ откуда взято 1+1???" - Пока не посмотрел ваш код думал что у вас есть некодированые потоки бит (2 потока кодируються , 2 потока передаються без кодирования).
"Rate_all=3,16/4,0=0,79 каким это образом кодавая скорость стала связана с модуляцией???" -в данном случае это скорость бит/символ модуляции 3,16-инф. бит 4.0-общее число бит в символе модуляции.
"Спектральная эффективность — отношение скорости передачи данных к используемой полосе пропускания радиоканала. Всегда думал что это и есть определение спектральной эффективности" - так оно и есть, потенциально возможно передавать 4 бит в полосе 1 Гц в сек при использовании QAM-16. (http://en.wikipedia.org/wiki/Spectral_efficiency Example 3)
Ivan55
Цитата(ilya79 @ Feb 13 2013, 18:03) *
"1+1+1/2+2/3=3.16 бит/символ откуда взято 1+1???" - Пока не посмотрел ваш код думал что у вас есть некодированые потоки бит (2 потока кодируються , 2 потока передаються без кодирования).


По моему все потоки кодируются, там нет не кодированных
Ivan55
Кажется понял что надо сделать, но че то не могу понять как эт написать, вобщем поток с первого кодера у1 поток со второго у2
надо потоки объединить так чтобы х = (у1(1), у1(2), у2(1), у2(2), у1(3), у1(4), у2(3), у2(4), и т.д.)
ilya79
Правильно ли я понял что вы не используете multistage decoder (декодирование составных кодов с мягкими решениями с последующей передачей их другим декодерам) см рис 5 в (tait.e-technik.uni-ulm.de/~baum/research/ofdm_workshop00.ps)?
Если да то большого выигрыша от такой схемы наверное не будет.
Ivan55
Цитата(ilya79 @ Feb 13 2013, 20:23) *
Правильно ли я понял что вы не используете multistage decoder (декодирование составных кодов с мягкими решениями с последующей передачей их другим декодерам) см рис 5 в (tait.e-technik.uni-ulm.de/~baum/research/ofdm_workshop00.ps)?
Если да то большого выигрыша от такой схемы наверное не будет.


В коде программы все написано, суть программы верна, есть маленькие косяки, но я их исправил) Всем спасибо за помощь, я разобрался) Выигрыш получил такой какой и хотел увидеть))
Ivan55
Всем привет! Стал сравнивать декодер с рекомендациями ITU-R 1615. И возник вопрос, они там приводят S/N-отношение сигнал шум для BER = 10^-4.
В программе я в awgn-канал вставлял следующий параметр EbNo+10*log10(k*codeRate). И не могу понять что в ITU-R принимают за S/N? EbNo или EbNo+10*log10(k*codeRate). Если брать EbNo+10*log10(k*codeRate) то 10^-4 у меня получается на 18 дБ для QAM-64, а они приводят параметр в 14,1 дБ. При этом я использую мягкое декодирование LLR 3 битным квантователем
Serg76
Цитата(Ivan55 @ Aug 12 2013, 13:41) *
Всем привет! Стал сравнивать декодер с рекомендациями ITU-R 1615. И возник вопрос, они там приводят S/N-отношение сигнал шум для BER = 10^-4.
В программе я в awgn-канал вставлял следующий параметр EbNo+10*log10(k*codeRate). И не могу понять что в ITU-R принимают за S/N? EbNo или EbNo+10*log10(k*codeRate). Если брать EbNo+10*log10(k*codeRate) то 10^-4 у меня получается на 18 дБ для QAM-64, а они приводят параметр в 14,1 дБ. При этом я использую мягкое декодирование LLR 3 битным квантователем

по видимому, S/N - это отношение энергии символа к спектральной плотности мощности шума, т.е. Es/No. от него еще нужно перейти к Eb/No учитивая спектральную эффективность модуляции, т.е. Eb/No = Es/No - 10*lg(M), где M - количество бит на символ. это без учета кодирования. кроме того, рекомендация описывает ВЧ диапазон, а он строго говоря далек от СВЧ диапазона, который в первом приближении можно счиать каналом с AWGN. может ваша модель рассчитана для этого канала? а может там приведены характеристики для жесткой схемы декодирования? поищите даташиты на фирменные декодеры, например, Qualcomm, Comtech или др., там приводятся наиболее полные характеристики с учетом различных факторов.
Ivan55
Цитата(Serg76 @ Aug 12 2013, 15:27) *
по видимому, S/N - это отношение энергии символа к спектральной плотности мощности шума, т.е. Es/No. от него еще нужно перейти к Eb/No учитивая спектральную эффективность модуляции, т.е. Eb/No = Es/No - 10*lg(M), где M - количество бит на символ. это без учета кодирования.


Спасибо! Значит если они там приводят 14,1 дБ для QAM-64 то EbNo = 14,1 - 10lg(M*CodeRate), т.е. еще меньше) а у меня 10^-4 достигается при EbNo = 13 дБ
Цитата(Serg76 @ Aug 12 2013, 15:27) *
кроме того, рекомендация описывает ВЧ диапазон, а он строго говоря далек от СВЧ диапазона, который в первом приближении можно счиать каналом с AWGN. может ваша модель рассчитана для этого канала? а может там приведены характеристики для жесткой схемы декодирования? поищите даташиты на фирменные декодеры, например, Qualcomm, Comtech или др., там приводятся наиболее полные характеристики с учетом различных факторов.

Там приводят характеристики кодера в AWGN канале, то есть без замираний и рассинхронизации, но те параметры которые там приведены кажутся завышенными для QAM-64 10^-4 достигается гдето при EbNo = 17 дБ, я поставил декодер Витерби с мягкими решениями со скоростью 0.6 получил 4 дБ выигрыш, но для данных параметров в ITU-R они приводят 14 дБ и это Es/No а не Eb/No, не понимаю как они получили такие цифры
Serg76
нашел характеристику у AHA для 64КАМ, для некодированной передачи (без потерь демодулятора) BER - 10е-4 достигается при Eb/No = 16,5 дБ. отнимите от этого значения ваш ЭВК 4 дБ и получим 12,5 дБ. как для сверточного кода с кодовым ограничением К=7 и скоростью 0.6, то вроде нормально. А какой код приведен в рекомендации, я не нашел упоминания, может не Витерби, а TPC, например?

а зачем Вам вообще касаться вопросов модуляции, насколько я понимаю демодулятор Вы не проектируете. отбросьте вопросы модуляции и исследуйте характеристики только декодера. а характеристик BER для декодеров Витерби в сети полно.
Ivan55
Цитата(Serg76 @ Aug 13 2013, 11:49) *
нашел характеристику у AHA для 64КАМ, для некодированной передачи (без потерь демодулятора) BER - 10е-4 достигается при Eb/No = 16,5 дБ. отнимите от этого значения ваш ЭВК 4 дБ и получим 12,5 дБ. как для сверточного кода с кодовым ограничением К=7 и скоростью 0.6, то вроде нормально.

У меня гдето так и получается)
Цитата(Serg76 @ Aug 13 2013, 11:49) *
А какой код приведен в рекомендации, я не нашел упоминания, может не Витерби, а TPC, например?

по поводу этого не знаю, я декодировал сверточный код декодером Витерби, да и не думаю что в стандарте DRM кто то применяет ТРС
Цитата(Serg76 @ Aug 13 2013, 11:49) *
а зачем Вам вообще касаться вопросов модуляции, насколько я понимаю демодулятор Вы не проектируете. отбросьте вопросы модуляции и исследуйте характеристики только декодера. а характеристик BER для декодеров Витерби в сети полно.

Мы все проектируем) а демодулятор был нужен чтобы оценить эффективность декодера и сравнить с рекомендациями и стандартом, но возникла проблема, что все вроде правильно делаю, все по теории а цифры в рекомендациях очень отличаются. Есть подозрение, что в ITU-R они приводят в качестве S/N как раз Eb/No
Serg76
Цитата(Ivan55 @ Aug 13 2013, 12:29) *
Мы все проектируем) а демодулятор был нужен чтобы оценить эффективность декодера и сравнить с рекомендациями и стандартом

ну чтобы оценить корректирующую способность декодера, демодулятор не нужен ). он нужен при оценке помехоустойчивости всего приемного тракта.

Цитата(Ivan55 @ Aug 13 2013, 12:29) *
по поводу этого не знаю, я декодировал сверточный код декодером Витерби, да и не думаю что в стандарте DRM кто то применяет ТРС

так дело не пойдет, нужно иметь представление что с чем сравнивать, а то получается гадание на кофейной гуще. а как они получают на сверточных кодах такие скорости кодирования: 0.71, 0.78 и др? это что за перфорация такая или присутствуют еще какие-нибудь добавки в виде фрамера?

Цитата(Ivan55 @ Aug 13 2013, 12:29) *
Есть подозрение, что в ITU-R они приводят в качестве S/N как раз Eb/No

ну вообще-то говоря, величины совершенно разные, а так не знаю. посмотрите еще другие стандарты.
Ivan55
Цитата(Serg76 @ Aug 13 2013, 13:44) *
ну чтобы оценить корректирующую способность декодера, демодулятор не нужен ). он нужен при оценке помехоустойчивости всего приемного тракта.

да не нужен, но в рекомендациях приводят BER = 10^-4, для QAM-64, при скорости кодирования 0,6 должен достигаться на 15 дБ. Поэтому и ставлю кодер модулятор, канал с учетом этих параметров, прогоняю модулированные данные через канал, демодулирую, декодирую, сравниваю. Если прикинуть по bertool в матлабе относительно EbNo то данные я получаю верные, то есть такая связка рабочая
Цитата(Serg76 @ Aug 13 2013, 13:44) *
так дело не пойдет, нужно иметь представление что с чем сравнивать, а то получается гадание на кофейной гуще. а как они получают на сверточных кодах такие скорости кодирования: 0.71, 0.78 и др? это что за перфорация такая или присутствуют еще какие-нибудь добавки в виде фрамера?

Да это сверточный кодер с жутким выкалыванием) посмотрите стандарт DRM версия помоему 3.1.1
Цитата(Serg76 @ Aug 13 2013, 13:44) *
ну вообще-то говоря, величины совершенно разные, а так не знаю. посмотрите еще другие стандарты.

посмотреть то можно, но это будет не интересно тем людям которым я буду что то доказывать) есть стандарт DRM, в нем описаны все параметры в соответсвии с которыми надо делать, в нем есть ссылка на ITU-R где для канала AWGN они приводят параметры которые должны получаться) но у меня чет не получается)) соответственно мои данные не аргументированы)
Serg76
Цитата(Ivan55 @ Aug 13 2013, 12:54) *
посмотреть то можно, но это будет не интересно тем людям которым я буду что то доказывать) есть стандарт DRM, в нем описаны все параметры в соответсвии с которыми надо делать, в нем есть ссылка на ITU-R где для канала AWGN они приводят параметры которые должны получаться) но у меня чет не получается)) соответственно мои данные не аргументированы)

ок, понятно. там по-ходу еще перемежение присутствует, его тоже надо учитывать. а так-то в алгоритме Витерби и ломаться нечему, он или работает или нет ))). может попробовать для увеличения корректирующей способности использовать MAP - алгоритм, но это правда потребует бОльших вычислительных затрат.
Ivan55
Цитата(Serg76 @ Aug 13 2013, 14:07) *
ок, понятно. там по-ходу еще перемежение присутствует, его тоже надо учитывать

да перемежение я делал) но оно не влияет когда канал Гауссов, оно эффективно при замираниях, когда пакеты ошибок надо размазать по всей длинне символа, а в awgn они ложаться случайно, т.е. равномерно, смысл перемешивать) когда они итак размазаны
Ivan55
А кто знает как правильно границы квантования метрик LLR выбрать, ведь они зависят от ОСШ и амплитуда их плавает?
petrov
Цитата(Ivan55 @ Aug 14 2013, 13:08) *
А кто знает как правильно границы квантования метрик LLR выбрать, ведь они зависят от ОСШ и амплитуда их плавает?


Очевидно по формуле LLR поделить на дисперсию шума, а потом уже квантовать.
Ivan55
Цитата(petrov @ Aug 14 2013, 13:41) *
Очевидно по формуле LLR поделить на дисперсию шума, а потом уже квантовать.

Дак в формуле LLR она итак поделена на дисперсию) может наоборот умножить?
petrov
Цитата(Ivan55 @ Aug 14 2013, 13:53) *
Дак в формуле LLR она итак поделена на дисперсию) может наоборот умножить?


Так в чём проблема? Если у вас LLR правильно посчитано, квантуйте и всё, так и должно быть, чем зашумлённей символ, тем меньше доверия к нему.
Ivan55
Цитата(petrov @ Aug 14 2013, 14:00) *
Так в чём проблема? Если у вас LLR правильно посчитано, квантуйте и всё, так и должно быть, чем зашумлённей символ, тем меньше доверия к нему.

Да, отлично)) именно так) но амлитуду квантования можно взять 0.00000001 а можно и 50, как с этим быть?) неужто наугад)
petrov
Цитата(Ivan55 @ Aug 14 2013, 14:08) *
Да, отлично)) именно так) но амлитуду квантования можно взять 0.00000001 а можно и 50, как с этим быть?) неужто наугад)


А как вы тогда до этого места добрались, ведь для того чтобы LLR для QAM посчитать нужно с порогами сравнивать, т. е. кое-какие решения принимать, поэтому символы должны пройти через АРУ, эквалайзер, ничего плавать не должно?
Serg76
Цитата(petrov @ Aug 14 2013, 13:17) *
А как вы тогда до этого места добрались, ведь для того чтобы LLR для QAM посчитать нужно с порогами сравнивать, т. е. кое-какие решения принимать, поэтому символы должны пройти через АРУ, эквалайзер, ничего плавать не должно?

нет, имеется ввиду, что расчет LLR для многопозиционных модуляций сильно зависит от дисперсии и оценка для некоторых бит в символе может иметь сильный разброс, то о чем говорит Иван, мы с ним уже это обсуждали в какой-то ветке. там же я выкладывал доку от AHA, в которой приведен расчет LLR для КАМ созвездий. прежде, чем запускать блок расчета LLR, I/Q составляющие на выходе решающего устройства демодулятора должны быть приведены к эталонным значениям сигнально-кодовой конструкции, только так, иначе правильного расчета не получите.
Ivan55
Цитата(Serg76 @ Aug 14 2013, 15:51) *
мы с ним уже это обсуждали в какой-то ветке. там же я выкладывал доку от AHA, в которой приведен расчет LLR для КАМ созвездий. прежде, чем запускать блок расчета LLR, I/Q составляющие на выходе решающего устройства демодулятора должны быть приведены к эталонным значениям сигнально-кодовой конструкции, только так, иначе правильного расчета не получите.

как я понял из того что там написано, так это просто нормировка на постоянный коэффициент "приведены к эталонным значениям сигнально-кодовой конструкции", но LLR то как плавало так и будет, или я из того документа что то не правильно понял?
Serg76
Цитата(Ivan55 @ Aug 14 2013, 12:08) *
А кто знает как правильно границы квантования метрик LLR выбрать, ведь они зависят от ОСШ и амплитуда их плавает?

можно вместо полного алгоритма расчета LLR использовать его аппроксимации, например, MAX-LOG и тогда весь расчет можно построить уже для квантованных I/Q составляющих и составить соответствующую табличку, размер которой будет ограничиваться только размерностью модуляции и разрядностью квадратур.

Цитата(Ivan55 @ Aug 14 2013, 15:03) *
как я понял из того что там написано, так это просто нормировка на постоянный коэффициент "приведены к эталонным значениям сигнально-кодовой конструкции", но LLR то как плавало так и будет, или я из того документа что то не правильно понял?

правильно нормировка, а значит ваши максимальные величины не должны вылазить за границы допустимого диапазона
petrov
Цитата(Serg76 @ Aug 14 2013, 15:51) *
прежде, чем запускать блок расчета LLR, I/Q составляющие на выходе решающего устройства демодулятора должны быть приведены к эталонным значениям сигнально-кодовой конструкции, только так, иначе правильного расчета не получите.


Это и имел ввиду, после этого не должно возникать вопросов по квантованию, если он LLR посчитал, то в чём проблема то?
Ivan55
Цитата(petrov @ Aug 14 2013, 16:14) *
Это и имел ввиду, после этого не должно возникать вопросов по квантованию, если он LLR посчитал, то в чём проблема то?

Возможно) просто не знаю какой диапазон взять для квантователя, как он расчитывается? брать просто максимальное значение метрики, при ОСШ например 1 дБ и в таком диапазоне квантовать, или как... чет туплю
petrov
Цитата(Ivan55 @ Aug 14 2013, 21:00) *
Возможно) просто не знаю какой диапазон взять для квантователя, как он расчитывается? брать просто максимальное значение метрики, при ОСШ например 1 дБ и в таком диапазоне квантовать, или как... чет туплю


Всё понял о чём речь, вопрос правильный. Нет смысла учитывать большой диапазон метрик. Берёте для кода BER для AWGN, определяетесь с количеством уровней квантователя, чтобы потерями можно было пренебречь, определяетесь с минимальным Eb/N0 при котором достигается необходимый BER. Квантовать с более мелким шагом LLR более шумных символов бесполезно, грубо говоря там только шум. Вверх для менее шумных символов в лучшем случае на 1 бит уровней квантователя добавить есть смысл, всё что выше просто ограничиваем. В районе этих границ можно немного пооптимизировать квантователь на модельке.
Ivan55
Цитата(petrov @ Aug 15 2013, 00:12) *
Берёте для кода BER для AWGN, определяетесь с количеством уровней квантователя, чтобы потерями можно было пренебречь

т.е. 3х битный квантователь? в книгах пишут что дальнейшее увеличение не дает существенного результата
Цитата(petrov @ Aug 15 2013, 00:12) *
определяетесь с минимальным Eb/N0 при котором достигается необходимый BER.

необходимый BER = 10^-4, а вот Eb/No = S/N - 10*lg(M*R), где скорость кода R = 0.6, кол-во бит в созвездие M = log2(64) = 6, а S/N в ITU-R равен 15.4, соответственно необходимое Eb/No ~= 9.7 дБ. Т.е. для данного Eb/No посмотреть их уровень, и для такого уровня задать квантователь 3х битный?
petrov
Цитата(Ivan55 @ Aug 15 2013, 08:32) *
т.е. 3х битный квантователь? в книгах пишут что дальнейшее увеличение не дает существенного результата


Вот и проверьте правильно ли в книгах пишут, может там немного другой случай имеют ввиду.


Цитата(Ivan55 @ Aug 15 2013, 08:32) *
необходимый BER = 10^-4, а вот Eb/No = S/N - 10*lg(M*R), где скорость кода R = 0.6, кол-во бит в созвездие M = log2(64) = 6, а S/N в ITU-R равен 15.4, соответственно необходимое Eb/No ~= 9.7 дБ. Т.е. для данного Eb/No посмотреть их уровень, и для такого уровня задать квантователь 3х битный?


Т. е. для не AWGN канала в расчёте LLR мы учитываем шум символа, очевидно что может так получиться что в какой то момент искажений не будет, и допустим при Eb/No ~= 9.7 дБ мы должны получить BER = 10^-4, таким образом метрики должны быть проквантованы не грубее чем для случая AWGN.
Ivan55
Цитата(petrov @ Aug 15 2013, 10:43) *
Вот и проверьте правильно ли в книгах пишут, может там немного другой случай имеют ввиду.

Да, это я тоже проверяю
Цитата(petrov @ Aug 15 2013, 10:43) *
Т. е. для не AWGN канала в расчёте LLR мы учитываем шум символа, очевидно что может так получиться что в какой то момент искажений не будет, и допустим при Eb/No ~= 9.7 дБ мы должны получить BER = 10^-4, таким образом метрики должны быть проквантованы не грубее чем для случая AWGN.

Уже по всякому попробовал, но 10^-4 для таких параметров у меня достигается при ОСШ = 17 дБ, меньше никак... А в ITU-R 1615 приводят 15.3 дБ.
Не пойму в чем может быть косяк. Декодер собрал по стандарту, LLR вроде тоже правильно, думал может уровень квантования не правильно задаю, но я его уже по всякому покрутил самый лучший результат дал 17 дБ. Если посмотреть на QAM-64 без кодирования, то у него 10^-4 достигается гдето на 24 дБ, соответсвенно выигрышь я получаю приблизительно 7 дБ. Может декодер 3/5 давать выигрышь больше? то есть 24 дБ - 15.3 дБ = 8.7 дБ, это возможно получить?
petrov
Цитата(Ivan55 @ Aug 15 2013, 11:05) *
...


В модели можно ничего не квантовать, так что ошибки в этом месте вы можете легко исключить, а что там на самом деле кто его знает, начиная от неправильного подсчёта С/Ш и заканчивая ошибками в алгоритме декодирования.
Ivan55
Цитата(petrov @ Aug 15 2013, 11:32) *
В модели можно ничего не квантовать, так что ошибки в этом месте вы можете легко исключить, а что там на самом деле кто его знает, начиная от неправильного подсчёта С/Ш и заканчивая ошибками в алгоритме декодирования.

Кажется догнал, в ITU-R они приводят данные параметры без собственных шумов приемника, и если посмотреть в другую таблицу, то там реальный S/N = 4.5 + x, где х = 15.3, а 4.5 это собственные шумы приемного тракта) Соответственно ОСШ = 19.8 дБ, то есть мне его брать?) если конечно я правильно понял то что они там написали

Цитата(Serg76 @ Aug 13 2013, 12:49) *
а зачем Вам вообще касаться вопросов модуляции, насколько я понимаю демодулятор Вы не проектируете. отбросьте вопросы модуляции и исследуйте характеристики только декодера. а характеристик BER для декодеров Витерби в сети полно.

есть ссылка?
Serg76
Цитата
т.е. 3х битный квантователь? в книгах пишут что дальнейшее увеличение не дает существенного результата

потери при 8-ми уровневом квантовании примерно 0.2 дБ по сравнению с бесконечным квантованием. думайте, можете ли Вы пренебречь такими потерями?

Цитата
есть ссылка?

есть http://www.google.com.ua/#bav=on.2,or.r_qf...formance+images

и еще пара доков, что были под рукой
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
Serg76
Цитата(Ivan55 @ Aug 15 2013, 10:05) *
Декодер собрал по стандарту, LLR вроде тоже правильно, думал может уровень квантования не правильно задаю

решайте проблемы по мере поступления, проверьте сначала декодер, хотя бы на BPSK или QPSK. если с ядром декодера все нормально, то переходите к блоку расчета LLR и сравните потом эту связку с промышленными модемами на высоких модуляциях, большой разницы не должно быть, алгоритм Витерби или работает или нет, там ломаться нечему. сделать равномерный квантователь входных I/Q составляющих тоже не должно вызывать проблем.
Цитата(Ivan55 @ Aug 15 2013, 10:05) *
Может декодер 3/5 давать выигрышь больше? то есть 24 дБ - 15.3 дБ = 8.7 дБ, это возможно получить?

для сверточного кода с кодовым ограничением К = 7 с декодированием по Витерби не получится. даже 1/2 не дает такого ЭВК.
Ivan55
Здравствуйте! Вот что получилось, хотелось бы узнать чье нибудь мнение
Нажмите для просмотра прикрепленного файла
Serg76
я думаю, что это не предел, можно попытаться еще что-то выжать. TPC со скоростью 0.8 дает 6,5 дБ ЭВК при Pb = 1е-4 для 64КАМ, а у вас сверточный код со скоростью 0.6 и ЭВК 5 дБ. наверное, надо дополнительно исследовать работу блока расчета LLR.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.