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

 
 
> Многоуровневый декодер, декодер Витерби
Ivan55
сообщение Feb 13 2013, 05:30
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 212
Регистрация: 17-01-12
Пользователь №: 69 640



Написал программу многоуровневого кодера декодера, построил графики для жестких мягких решений и вот что получил

Вот код:
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;


Вот графики:
Прикрепленное изображение


Почему выигрышь жестких решений получился такой маленький, где косяк?

Сообщение отредактировал Ivan55 - Feb 13 2013, 15:23
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- Ivan55   Многоуровневый декодер   Feb 13 2013, 05:30
- - des00   Цитата(Ivan55 @ Feb 12 2013, 23:30) Почем...   Feb 13 2013, 06:01
|- - Ivan55   Цитата(des00 @ Feb 13 2013, 09:01) наверн...   Feb 13 2013, 07:41
|- - des00   Цитата(Ivan55 @ Feb 13 2013, 01:41) красн...   Feb 13 2013, 07:48
|- - Ivan55   Цитата(des00 @ Feb 13 2013, 10:48) а, вы ...   Feb 13 2013, 07:54
|- - des00   Цитата(Ivan55 @ Feb 13 2013, 01:54) 1. Ко...   Feb 13 2013, 08:01
|- - Ivan55   Цитата(des00 @ Feb 13 2013, 11:01) Блин с...   Feb 13 2013, 08:13
- - ilya79   У вас что-то не так и с мягкими решениями. При QAM...   Feb 13 2013, 08:50
|- - Ivan55   Цитата(ilya79 @ Feb 13 2013, 11:50) У вас...   Feb 13 2013, 10:09
- - ilya79   Не очень понятно где вы нашли Юлию ("Спосибо ...   Feb 13 2013, 10:45
|- - Ivan55   Цитата(ilya79 @ Feb 13 2013, 13:45) Не оч...   Feb 13 2013, 14:30
|- - ilya79   Посмотрел ваш код, похоже у вас кодируються все то...   Feb 13 2013, 15:03
|- - Ivan55   Цитата(ilya79 @ Feb 13 2013, 18:03) ...   Feb 13 2013, 15:11
|- - Ivan55   Кажется понял что надо сделать, но че то не могу п...   Feb 13 2013, 16:38
- - ilya79   Правильно ли я понял что вы не используете multist...   Feb 13 2013, 17:23
|- - Ivan55   Цитата(ilya79 @ Feb 13 2013, 20:23) Прави...   Feb 14 2013, 05:20
- - Ivan55   Всем привет! Стал сравнивать декодер с рекомен...   Aug 12 2013, 10:41
|- - Serg76   Цитата(Ivan55 @ Aug 12 2013, 13:41) Всем ...   Aug 12 2013, 12:27
|- - Ivan55   Цитата(Serg76 @ Aug 12 2013, 15:27) по ви...   Aug 12 2013, 17:13
- - Serg76   нашел характеристику у AHA для 64КАМ, для некодиро...   Aug 13 2013, 08:49
|- - Ivan55   Цитата(Serg76 @ Aug 13 2013, 11:49) нашел...   Aug 13 2013, 09:29
|- - Serg76   Цитата(Ivan55 @ Aug 13 2013, 12:29) Мы вс...   Aug 13 2013, 09:44
|- - Ivan55   Цитата(Serg76 @ Aug 13 2013, 13:44) ну чт...   Aug 13 2013, 09:54
|- - Serg76   Цитата(Ivan55 @ Aug 13 2013, 12:54) посмо...   Aug 13 2013, 10:07
|- - Ivan55   Цитата(Serg76 @ Aug 13 2013, 14:07) ок, п...   Aug 13 2013, 10:11
|- - Ivan55   А кто знает как правильно границы квантования метр...   Aug 14 2013, 09:08
|- - petrov   Цитата(Ivan55 @ Aug 14 2013, 13:08) А кто...   Aug 14 2013, 09:41
||- - Ivan55   Цитата(petrov @ Aug 14 2013, 13:41) Очеви...   Aug 14 2013, 09:53
||- - petrov   Цитата(Ivan55 @ Aug 14 2013, 13:53) Дак в...   Aug 14 2013, 10:00
||- - Ivan55   Цитата(petrov @ Aug 14 2013, 14:00) Так в...   Aug 14 2013, 10:08
||- - petrov   Цитата(Ivan55 @ Aug 14 2013, 14:08) Да, о...   Aug 14 2013, 10:17
||- - Serg76   Цитата(petrov @ Aug 14 2013, 13:17) А как...   Aug 14 2013, 11:51
||- - Ivan55   Цитата(Serg76 @ Aug 14 2013, 15:51) мы с ...   Aug 14 2013, 12:03
||- - petrov   Цитата(Serg76 @ Aug 14 2013, 15:51) прежд...   Aug 14 2013, 13:14
||- - Ivan55   Цитата(petrov @ Aug 14 2013, 16:14) Это и...   Aug 14 2013, 17:00
||- - petrov   Цитата(Ivan55 @ Aug 14 2013, 21:00) Возмо...   Aug 14 2013, 21:12
||- - Ivan55   Цитата(petrov @ Aug 15 2013, 00:12) Берёт...   Aug 15 2013, 04:32
||- - petrov   Цитата(Ivan55 @ Aug 15 2013, 08:32) т.е. ...   Aug 15 2013, 06:43
||- - Ivan55   Цитата(petrov @ Aug 15 2013, 10:43) Вот и...   Aug 15 2013, 07:05
||- - petrov   Цитата(Ivan55 @ Aug 15 2013, 11:05) ... ...   Aug 15 2013, 07:32
|||- - Ivan55   Цитата(petrov @ Aug 15 2013, 11:32) В мод...   Aug 15 2013, 08:29
||- - Serg76   Цитата(Ivan55 @ Aug 15 2013, 10:05) Декод...   Aug 15 2013, 15:32
||- - Ivan55   Здравствуйте! Вот что получилось, хотелось бы ...   Aug 19 2013, 04:25
|- - Serg76   Цитата(Ivan55 @ Aug 14 2013, 12:08) А кто...   Aug 14 2013, 12:10
- - Serg76   Цитатат.е. 3х битный квантователь? в книгах пишут ...   Aug 15 2013, 12:06
- - Serg76   я думаю, что это не предел, можно попытаться еще ч...   Aug 19 2013, 11:46


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

 


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


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