Phu Luc
Phu Luc
Phu Luc
/ So lan lap/
lan_lap = input(' Hay chon so lan lap cua moi khung: default 5 ');
if isempty(lan_lap)
lan_lap = 5;
end
ket_thuc = input(' Hay chon so khung bi loi de ket thuc chuong trinh:default3 ');
if isempty(ket_thuc)
ket_thuc = 3;
end
EbN0db = input(' Hay chon ti le nang luong tren moi bit Eb/N0 don vi dB:default
[3.0] ');
if isempty(EbN0db)
EbN0db = [3.0];
end
fprintf('\n\n---------------------------------------------------------------------------------\n');
if Ttgiaima == 0
fprintf(' ================================ GIAI MA Log-MAP
============================= \n');
else
fprintf(' ================================ GIAI MA SOVA
================================ \n');
end
fprintf(' Kich thuoc khung = %6d\n',L_f);
fprintf(' Ma tran sinh: \n');
for i = 1:n
for j = 1:K
fprintf( '%6d', g(i,j));
end
fprintf('\n');
end
if kt_xoa==0
fprintf(' Dung ky thuat xoa, code rate = 1/2 \n');
else
fprintf(' Khong dung ky thuat xoa, code rate = 1/3 \n');
end
fprintf(' So lan lap = %6d\n', lan_lap);
fprintf(' Khung loi ket thuc = %6d\n', ket_thuc);
fprintf(' Eb / N0 (dB) = ');
for i = 1:length(EbN0db)
fprintf('%10.2f',EbN0db(i));
end
fprintf('\n--------------------------------------------------------------------------------\n\n');
if Mk0>Mk1
path_metric(state,t+1)=Mk0;
Mdiff(state,t+1) = Mk0 - Mk1;
prev_bit(state, t+1) = 0;
else
path_metric(state,t+1)=Mk1;
Mdiff(state,t+1) = Mk1 - Mk0;
prev_bit(state,t+1) = 1;
end
end
end
if ind_dec == 1
mlstate(L_f+1) = 1;
else
mlstate(L_f+1) = find( path_metric(:,L_f+1)==max(path_metric(:,L_f+1)) );
end
for t=L_f:-1:1
est(t) = prev_bit(mlstate(t+1),t+1);
mlstate(t) = last_state(mlstate(t+1), est(t)+1);
end
for t=1:L_f
llr = Infty;
for i=0:delta
if t+i<L_f+1
bit = 1-est(t+i);
temp_state = last_state(mlstate(t+i+1), bit+1);
for j=i-1:-1:0
bit = prev_bit(temp_state,t+j+1);
temp_state = last_state(temp_state, bit+1);
end
if bit~=est(t)
llr = min( llr,Mdiff(mlstate(t+i+1), t+i+1) );
end
end
end
L_all(t) = (2*est(t) - 1) * llr;
end
3.Đưa kết quả bằng hình
figure;
subplot(121);
plot([3.5560e-003 2.1283e-005 6.8106e-006 5.1079e-006 5.1079e-
006 ]);
hold on;
subplot(122);
plot([7.3322e-001 1.0195e-002 4.2481e-003 2.5489e-003 2.5489e-003]);
if(sum(exp(gamma+Alpha(k-1,:)))<1e-300)
Alpha(k,state2)=-Infty;
else
Alpha(k,state2) = log( sum( exp( gamma+Alpha(k-1,:) ) ) );
end
end
tempmax(k) = max(Alpha(k,:));
Alpha(k,:) = Alpha(k,:) - tempmax(k);
end
for k = L_f-1:-1:1
for state1 = 1:ns
gamma = -Infty*ones(1,ns);
gamma(next_state(state1,1))=(-rec_s(2*k+1)+rec_s(2*k+2)*next_out(state1,2))....
-log(1+exp(L_a(k+1)));
gamma(next_state(state1,2)) = (rec_s(2*k+1)+rec_s(2*k+2)*next_out(state1,4))....
+L_a(k+1)-log(1+exp(L_a(k+1)));
if(sum(exp(gamma+Beta(k+1,:)))<1e-300)
Beta(k,state1)=-Infty;
else
Beta(k,state1) = log(sum(exp(gamma+Beta(k+1,:))));
end
end
Beta(k,:) = Beta(k,:) - tempmax(k+1);
end
for k = 1:L_f
for state2 = 1:ns
gamma0 = (-rec_s(2*k-1)+rec_s(2*k)*last_out(state2,2))....
-log(1+exp(L_a(k)));
gamma1 = (rec_s(2*k-1)+rec_s(2*k)*last_out(state2,4))...
+L_a(k)-log(1+exp(L_a(k)));
temp0(state2)=exp(gamma0 + Alpha(k,last_state(state2,1)) +
Beta(k,state2));
temp1(state2)= exp(gamma1 + Alpha(k,last_state(state2,2)) +
Beta(k,state2));
end
L_all(k) = log(sum(temp1)) - log(sum(temp0));
end
5 Bộ mã hoá
function en_output = bo_ma_hoa( x, g, alpha, kt_xoa )
[n,K] = size(g);
m = K - 1;
L_info = length(x);
L_f = L_info + m;
input = x;
output1 = rsc_ma_hoa(g,input,1);
y(1,:) = output1(1:2:2*L_f);
y(2,:) = output1(2:2:2*L_f);
for i = 1:L_f
input1(1,i) = y(1,alpha(i));
end
output2 = rsc_ma_hoa(g, input1(1,1:L_f), -1 );
y(3,:) = output2(2:2:2*L_f);
if kt_xoa > 0
for i = 1:L_f
for j = 1:3
en_output(1,3*(i-1)+j) = y(j,i);
end
end
else
for i=1:L_f
en_output(1,n*(i-1)+1) = y(1,i);
if rem(i,2)
en_output(1,n*i) = y(2,i);
else
en_output(1,n*i) = y(3,i);
end
end
end
en_output = 2 * en_output - ones(size(en_output));
6 .Số nguyên
function nhi_phan = nhi_phan( so_nguyen, m )
%chuyen vec to nguyen sang ma tran nhi phan
for j = 1:length( so_nguyen)
for i = m:-1:1
state(j,m-i+1) = fix( so_nguyen(j)/ (2^(i-1)) );
so_nguyen(j) = so_nguyen(j) - state(j,m-i+1)*2^(i-1);
end
end
nhi_phan = state;