%[2,1,2]递归卷积码,维特比译码
clear;
%---------------------码序列---------------------------
m = [randint(1,10000,[0,1]),zeros(1,2)];
%------------------------------------------------------
A=1;sigma=0.32;
%---------------------编码-----------------------------
C = convolution_212_DG(m);
C = (C == 1) - ( C == 0); %双极性码,0对应-1
C2 = A*C + randn(1,length(C))*sigma; %加噪
C2 = (C2 >= 0) - (C2 <0);
error_1=sum(C2~=C);
%------------------------------------------------------
%--------------------维特比译码-------------------------
for i = 1:length(m)+1 %初始化
for j = 1:4
state{i,j}.st_last_num = 0;
state{i,j}.dis = 0;
end
end
for i = 2:length(m)+1
temp = [C2((i-1)*2-1),C2((i-1)*2)];
for j=1:4
switch j
case 1
dis_1 = abs(sum([-1 -1] ~= temp)) + state{i-1,1}.dis;
dis_2 = abs(sum([1 1] ~= temp)) + state{i-1,2}.dis;
if dis_1 < dis_2
state{i,j}.st_last_num = 0;
state{i,j}.dis = dis_1;
else
state{i,j}.st_last_num = 1;
state{i,j}.dis = dis_2;
end
case 2
dis_1 = abs(sum([1 -1] ~= temp)) + state{i-1,3}.dis;
dis_2 = abs(sum([-1 1] ~= temp)) + state{i-1,4}.dis;
if dis_1 < dis_2
state{i,j}.st_last_num = 2;
state{i,j}.dis = dis_1;
else
state{i,j}.st_last_num = 3;
state{i,j}.dis = dis_2;
end
case 3
dis_1 = abs(sum([-1 -1] ~= temp)) + state{i-1,2}.dis;
dis_2 = abs(sum([1 1] ~= temp)) + state{i-1,1}.dis;
if dis_1 < dis_2
state{i,j}.st_last_num = 1;
state{i,j}.dis = dis_1;
else
state{i,j}.st_last_num = 0;
state{i,j}.dis = dis_2;
end
case 4
dis_1 = abs(sum([1 -1] ~= temp)) + state{i-1,4}.dis;
dis_2 = abs(sum([-1 1] ~= temp)) + state{i-1,3}.dis;
if dis_1 < dis_2
state{i,j}.st_last_num = 3;
state{i,j}.dis = dis_1;
else
state{i,j}.st_last_num = 2;
state{i,j}.dis = dis_2;
end
end
end
end
ord = zeros(1,length(m)+1); %状态变化
j=1;
for i=length(m)+1:-1:2
ord(i-1) = state{i,j}.st_last_num;
j = state{i,j}.st_last_num + 1;
end
for i= 2:length(m)+1 %译码
if ord(i-1)==0 && ord(i)==0
M(i-1)=0;
end
if ord(i-1)==0 && ord(i)==2
M(i-1)=1;
end
if ord(i-1)==1 && ord(i)==2
M(i-1)=0;
end
if ord(i-1)==1 && ord(i)==0
M(i-1)=1;
end
if ord(i-1)==2 && ord(i)==1
M(i-1)=1;
end
if ord(i-1)==2 && ord(i)==3
M(i-1)=0;
end
if ord(i-1)==3 && ord(i)==3
M(i-1)=1;
end
if ord(i-1)==3 && ord(i)==1
M(i-1)=0;
end
end
error = sum(M~=m); %误码率
卷积码译码
需积分: 50 176 浏览量
2018-12-17
11:00:09
上传
评论 2
收藏 1KB ZIP 举报
满船清梦
- 粉丝: 2
- 资源: 22
评论0