Ivan55 0 13 февраля, 2013 Опубликовано 13 февраля, 2013 (изменено) · Жалоба Написал программу многоуровневого кодера декодера, построил графики для жестких мягких решений и вот что получил Вот код: 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; Вот графики: Почему выигрышь жестких решений получился такой маленький, где косяк? Изменено 13 февраля, 2013 пользователем Ivan55 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 февраля, 2013 Опубликовано 13 февраля, 2013 · Жалоба Почему выигрышь жестких решений получился такой маленький, где косяк? наверное все же мягких решений %) И с чего вы решили что маленький ? выигрыш 2дБ, все как теория гуторит %) ЗЫ. спасибо за рефернсный код, мне скоро в железе подобное делать %) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 13 февраля, 2013 Опубликовано 13 февраля, 2013 (изменено) · Жалоба наверное все же мягких решений %) И с чего вы решили что маленький ? выигрыш 2дБ, все как теория гуторит %) ЗЫ. спасибо за рефернсный код, мне скоро в железе подобное делать %) красный график жесткие решения синий без кодирования и где же там выигрыш? То что выигрыш мягких на 2 дБ по сравнению с жесткими это так и получилось) против ниче не имею А за код не за что;) это лишь малая часть) обращайтесь если что) У кого какие мысли, давайте обсуждать! Изменено 13 февраля, 2013 пользователем Ivan55 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 февраля, 2013 Опубликовано 13 февраля, 2013 · Жалоба красный график жесткие решения синий без кодирования и где же там выигрыш? а, вы про это. Код не смотрел, но 1. Вы младший бит в КАМ16 кодировали? 2. Созвездие по грею ставили? 3. Кривые лучше всего до 10^-7 глянуть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 13 февраля, 2013 Опубликовано 13 февраля, 2013 · Жалоба а, вы про это. Код не смотрел, но 1. Вы младший бит в КАМ16 кодировали? 2. Созвездие по грею ставили? 3. Кривые лучше всего до 10^-7 глянуть 1. Кодируется все 2. Созвездие если вы посмотрите не по Грею 3. До 10^-7 что вам даст? если наклон кривой уже итак виден, а 10^-5 вполне достаточно Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 13 февраля, 2013 Опубликовано 13 февраля, 2013 · Жалоба 1. Кодируется все 2. Созвездие если вы посмотрите не по Грею 3. До 10^-7 что вам даст? если наклон кривой уже итак виден, а 10^-5 вполне достаточно Блин с QPSK перепутал %( Но для КАМ16 схожие выкладки : 1. ИМХО для скорости 1/2 самое то в паре старший бит передавать как есть, а младший кодировать. 2. Если не по грею то символьная ошибка может привести больше чем к одиночной битовой ошибке. Ну это все при ошибке до соседа. 3. Обычно для систем связи нормируется SNR при 10е-6. А графики кодированного и некодированного во всех книгах имеют точки пересечения когда кодер только мешает чем помогает %) Надо будет ваши сорцы внимательнее посмотреть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 13 февраля, 2013 Опубликовано 13 февраля, 2013 · Жалоба Блин с QPSK перепутал %( Но для КАМ16 схожие выкладки : 1. ИМХО для скорости 1/2 самое то в паре старший бит передавать как есть, а младший кодировать. 2. Если не по грею то символьная ошибка может привести больше чем к одиночной битовой ошибке. Ну это все при ошибке до соседа. 3. Обычно для систем связи нормируется SNR при 10е-6. А графики кодированного и некодированного во всех книгах имеют точки пересечения когда кодер только мешает чем помогает %) Надо будет ваши сорцы внимательнее посмотреть 1. Про какое кодирование вы говорите? 2. Это все проверенно, работает чуть хуже Грея 3. Как нормируют и для чего? А про графики это понятно, так как кодирование избыточное и та энергия которая приходилась на не кодированный бит размазывается на кодированный, тем самым и получается что при низком ОСШ кривая выше а при увелечение идет пересечение и выигрыш, но все таки выигрыш при кодировании 1/2 должен быть хоть пара дБ на жестких решениях Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilya79 0 13 февраля, 2013 Опубликовано 13 февраля, 2013 · Жалоба У вас что-то не так и с мягкими решениями. При 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 0 13 февраля, 2013 Опубликовано 13 февраля, 2013 · Жалоба У вас что-то не так и с мягкими решениями. При QAM-16 и R=1/2 спектральная эффективность 2 бит/Гц т.е. соответсвует некодированной QPSK. Некодированная QPSK дает Pб=10^-5 при 9.6 дБ, выша система требует более 10 дБ. Посмотрите тут http://www.mathworks.com/help/comm/example...dulation-1.html может поможет. Спосибо Юлия) я тоже вижу что чтото не так, но там и жесткие не так)) Что в вашем понимании спектральная эффективность? вы бы хоть полосу сигнала тогда указали А сылку на модель я уже видел, для одного уровня кодирования оно так и у меня получается;) но я делаю многоуровневое кодирование, где каждый уровень кодируется своей скоростью, в данном случае у меня первый уровень rate1 = 1/2 второй уровень rate2 = 2/3, потом эти потоки обыединяются то есть Rate_all = (rate1+rate2)/2 = 1/2 Кто нить вообще занимался многоуровневым кодированием??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilya79 0 13 февраля, 2013 Опубликовано 13 февраля, 2013 · Жалоба Не очень понятно где вы нашли Юлию ("Спосибо Юлия" ), но если по сути то: 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 0 13 февраля, 2013 Опубликовано 13 февраля, 2013 · Жалоба Не очень понятно где вы нашли Юлию ("Спосибо Юлия" )... Извиняюсь я английский букф плохо понимать)) 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. Или у вас нет потоков без кодирования? 1+1+1/2+2/3=3.16 бит/символ откуда взято 1+1??? Rate_all=3,16/4,0=0,79 каким это образом кодавая скорость стала связана с модуляцией??? 3. Отображение кодированных потоков в сигнальные точки соответсвует оптимальным скоростям для данных точек (J. Huber and U. Wachsmann Capacities of equivalent channels in multilevel coding schemes)? Можно подробней? я думал что отображение всегда идет в соответсвии с таблицей модуляции где определенной группе бит соответствует точка на комплексной плоскости Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilya79 0 13 февраля, 2013 Опубликовано 13 февраля, 2013 · Жалоба Посмотрел ваш код, похоже у вас кодируються все точки созвездия без учета разной степени защищенности бит в точках созвездия. Возможно если вы сделаете как написал 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 0 13 февраля, 2013 Опубликовано 13 февраля, 2013 · Жалоба "1+1+1/2+2/3=3.16 бит/символ откуда взято 1+1???" - Пока не посмотрел ваш код думал что у вас есть некодированые потоки бит (2 потока кодируються , 2 потока передаються без кодирования). По моему все потоки кодируются, там нет не кодированных Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Ivan55 0 13 февраля, 2013 Опубликовано 13 февраля, 2013 (изменено) · Жалоба Кажется понял что надо сделать, но че то не могу понять как эт написать, вобщем поток с первого кодера у1 поток со второго у2 надо потоки объединить так чтобы х = (у1(1), у1(2), у2(1), у2(2), у1(3), у1(4), у2(3), у2(4), и т.д.) Изменено 13 февраля, 2013 пользователем Ivan55 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
ilya79 0 13 февраля, 2013 Опубликовано 13 февраля, 2013 · Жалоба Правильно ли я понял что вы не используете multistage decoder (декодирование составных кодов с мягкими решениями с последующей передачей их другим декодерам) см рис 5 в (tait.e-technik.uni-ulm.de/~baum/research/ofdm_workshop00.ps)? Если да то большого выигрыша от такой схемы наверное не будет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться