⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 receive.m

📁 8状态8PSK TCM系统(频带+噪声)
💻 M
字号:
function Code_in_bit=Receive(y);
%TCM信号的接受,采用viterbi算法
%下面程序是根据8状态编码网格图编写
%y=[-0.7071+0.7071i,0.7071-0.7071i,-0.0000-1.0000i,1.0000,-0.7071-0.7071i,0.7071+0.7071i];
figure(2)
hold on
grid on
title('发送信号(有噪声干扰)的星座图:')
Stars_plot(y);
hold off

seg=length(y)-2;
PM=0;			%路径存储器
MM=zeros(1,8);		%路径度量存储器

% d每列表示8个状态点与当前输入值的欧氏距离
for cycle1=1:(seg+2),
    for cycle2=1:8,
	d(cycle2,cycle1)=Eu_distance(y(cycle1),cycle2-1);
    end
end

step=1;
MM(1)=MM(1)+d(0+1,1);
MM(2)=MM(2)+d(3+1,1);
MM(3)=MM(3)+d(4+1,1);
MM(4)=MM(4)+d(7+1,1);
PM(4,2)=0;		%扩展PM维数
PM(1,:)=[0,0];
PM(2,:)=[0,1];
PM(3,:)=[0,2];
PM(4,:)=[0,3];

step=2;
TMM=MM;			%先将前一级的路径度量值保存在TMM中
TPM=PM;			%先将前一级的路径保存在TPM中
MM(1)=TMM(1)+d(0+1,2);
MM(2)=TMM(1)+d(3+1,2);
MM(3)=TMM(1)+d(4+1,2);
MM(4)=TMM(1)+d(7+1,2);
MM(5)=TMM(2)+d(0+1,2);
MM(6)=TMM(2)+d(3+1,2);
MM(7)=TMM(2)+d(4+1,2);
MM(8)=TMM(2)+d(7+1,2);
PM(8,3)=0;
PM(1,:)=[TPM(1,:),0];
PM(2,:)=[TPM(1,:),1];
PM(3,:)=[TPM(1,:),2];
PM(4,:)=[TPM(1,:),3];
PM(5,:)=[TPM(2,:),4];
PM(6,:)=[TPM(2,:),5];
PM(7,:)=[TPM(2,:),6];
PM(8,:)=[TPM(2,:),7];
if(MM(1)>TMM(3)+d(2+1,2)),
	MM(1)=TMM(3)+d(2+1,2);
	PM(1,:)=[TPM(3,:),0];	
end
if(MM(2)>TMM(3)+d(1+1,2)),
	MM(2)=TMM(3)+d(1+1,2);
	PM(2,:)=[TPM(3,:),1];
end
if(MM(3)>TMM(3)+d(6+1,2)),
	MM(3)=TMM(3)+d(6+1,2);
	PM(3,:)=[TPM(3,:),2];
end
if(MM(4)>TMM(3)+d(5+1,2)),
	MM(4)=TMM(3)+d(5+1,2);
	PM(4,:)=[TPM(3,:),3];
end    %%%%%%%%%%%
if(MM(5)>TMM(4)+d(2+1,2)),
    MM(5)=TMM(4)+d(2+1,2);
    PM(5,:)=[TPM(4,:),4];
end
if(MM(6)>TMM(4)+d(1+1,2)),
    MM(6)=TMM(4)+d(1+1,2);
    PM(6,:)=[TPM(4,:),5];
end
if(MM(7)>TMM(4)+d(6+1,2)),
    MM(7)=TMM(4)+d(6+1,2);
    PM(7,:)=[TPM(4,:),6];
end
if(MM(8)>TMM(4)+d(5+1,2)),
    MM(8)=TMM(4)+d(5+1,2);
    PM(8,:)=[TPM(4,:),7];
end
    
for step=3:seg,
    TMM=MM;		%先将前一级的路径度量值保存在TMM中
    TPM=PM;		%先将前一级的路径保存在TPM中
    MM(1)=TMM(1)+d(0+1,step);
    MM(2)=TMM(1)+d(3+1,step);
    MM(3)=TMM(1)+d(4+1,step);
    MM(4)=TMM(1)+d(7+1,step);
    MM(5)=TMM(2)+d(0+1,step);
    MM(6)=TMM(2)+d(3+1,step);
    MM(7)=TMM(2)+d(4+1,step);
    MM(8)=TMM(2)+d(7+1,step);
    PM(8,step+1)=0;
    PM(1,:)=[TPM(1,:),0];
    PM(2,:)=[TPM(1,:),1];
    PM(3,:)=[TPM(1,:),2];
    PM(4,:)=[TPM(1,:),3];
    PM(5,:)=[TPM(2,:),4];
    PM(6,:)=[TPM(2,:),5];
    PM(7,:)=[TPM(2,:),6];
    PM(8,:)=[TPM(2,:),7];
    %%%state 0
    if(MM(1)>TMM(3)+d(2+1,step)),
        MM(1)=TMM(3)+d(2+1,step);
        PM(1,:)=[TPM(3,:),0];
    end
    if(MM(1)>TMM(5)+d(4+1,step)),
        MM(1)=TMM(5)+d(4+1,step);
        PM(1,:)=[TPM(5,:),0];
    end
    if(MM(1)>TMM(7)+d(6+1,step)),
        MM(1)=TMM(7)+d(6+1,step);
        PM(1,:)=[TPM(7,:),0];
    end
    %%%state 1
    if(MM(2)>TMM(3)+d(1+1,step)),
        MM(2)=TMM(3)+d(1+1,step);
        PM(2,:)=[TPM(3,:),1];
    end
    if(MM(2)>TMM(5)+d(7+1,step)),
        MM(2)=TMM(5)+d(7+1,step);
        PM(2,:)=[TPM(5,:),1];
    end
    if(MM(2)>TMM(7)+d(5+1,step)),
        MM(2)=TMM(7)+d(5+1,step);
        PM(2,:)=[TPM(7,:),1];
    end
    %%%state 2
    if(MM(3)>TMM(3)+d(6+1,step)),
        MM(3)=TMM(3)+d(6+1,step);
        PM(3,:)=[TPM(3,:),2];
    end
    if(MM(3)>TMM(5)+d(0+1,step)),
        MM(3)=TMM(5)+d(0+1,step);
        PM(3,:)=[TPM(5,:),2];
    end
    if(MM(3)>TMM(7)+d(2+1,step)),
        MM(3)=TMM(7)+d(2+1,step);
        PM(3,:)=[TPM(7,:),2];
    end
    %%%state 3
    if(MM(4)>TMM(3)+d(5+1,step)),
        MM(4)=TMM(3)+d(5+1,step);
        PM(4,:)=[TPM(3,:),3];
    end
    if(MM(4)>TMM(5)+d(3+1,step)),
        MM(4)=TMM(5)+d(3+1,step);
        PM(4,:)=[TPM(5,:),3];
    end
    if(MM(4)>TMM(7)+d(1+1,step)),
        MM(4)=TMM(7)+d(1+1,step);
        PM(4,:)=[TPM(7,:),3];
    end
    %%%state 4
    if(MM(5)>TMM(4)+d(2+1,step)),
        MM(5)=TMM(4)+d(2+1,step);
        PM(5,:)=[TPM(4,:),4];
    end
    if(MM(5)>TMM(6)+d(4+1,step)),
        MM(5)=TMM(6)+d(4+1,step);
        PM(5,:)=[TPM(6,:),4];
    end
    if(MM(5)>TMM(8)+d(6+1,step)),
        MM(5)=TMM(8)+d(6+1,step);
        PM(5,:)=[TPM(8,:),4];
    end
    %%%state 5
    if(MM(6)>TMM(4)+d(1+1,step)),
        MM(6)=TMM(4)+d(1+1,step);
        PM(6,:)=[TPM(4,:),5];
    end
    if(MM(6)>TMM(6)+d(7+1,step)),
        MM(6)=TMM(6)+d(7+1,step);
        PM(6,:)=[TPM(6,:),5];
    end
    if(MM(6)>TMM(8)+d(5+1,step)),
        MM(6)=TMM(8)+d(5+1,step);
        PM(6,:)=[TPM(8,:),5];
    end
    %%%state 6
    if(MM(7)>TMM(4)+d(6+1,step)),
        MM(7)=TMM(4)+d(6+1,step);
        PM(7,:)=[TPM(4,:),6];
    end
    if(MM(7)>TMM(6)+d(0+1,step)),
        MM(7)=TMM(6)+d(0+1,step);
        PM(7,:)=[TPM(6,:),6];
    end
    if(MM(7)>TMM(8)+d(2+1,step)),
        MM(7)=TMM(8)+d(2+1,step);
        PM(7,:)=[TPM(8,:),6];
    end
    %%%state 7
    if(MM(8)>TMM(4)+d(5+1,step)),
        MM(8)=TMM(4)+d(5+1,step);
        PM(8,:)=[TPM(4,:),7];
    end
    if(MM(8)>TMM(6)+d(3+1,step)),
        MM(8)=TMM(6)+d(3+1,step);
        PM(8,:)=[TPM(6,:),7];
    end
    if(MM(8)>TMM(8)+d(1+1,step)),
        MM(8)=TMM(8)+d(1+1,step);
        PM(8,:)=[TPM(8,:),7];
    end
end

step=seg+1;
TMM=MM;			%先将前一级的路径度量值保存在TMM中
TPM=PM;			%先将前一级的路径保存在TPM中
PM(8,step+1)=0;
%%%state 0
MM(1)=TMM(1)+d(0+1,step);
PM(1,:)=[TPM(1,:),0];
if(MM(1)>TMM(3)+d(2+1,step)),
    MM(1)=TMM(3)+d(2+1,step);
    PM(1,:)=[TPM(3,:),0];
end
if(MM(1)>TMM(5)+d(4+1,step)),
    MM(1)=TMM(5)+d(4+1,step);
    PM(1,:)=[TPM(5,:),0];
end
if(MM(1)>TMM(7)+d(6+1,step)),
    MM(1)=TMM(7)+d(6+1,step);
    PM(1,:)=[TPM(7,:),0];
end
%%%state 4
MM(5)=TMM(2)+d(0+1,step);
PM(5,:)=[TPM(2,:),4];
if(MM(5)>TMM(4)+d(2+1,step)),
    MM(5)=TMM(4)+d(2+1,step);
    PM(5,:)=[TPM(4,:),4];
end
if(MM(5)>TMM(6)+d(4+1,step)),
    MM(5)=TMM(6)+d(4+1,step);
    PM(5,:)=[TPM(6,:),4];
end
if(MM(5)>TMM(8)+d(6+1,step)),
    MM(5)=TMM(8)+d(6+1,step);
    PM(5,:)=[TPM(8,:),4];
end

step=seg+2;
TMM=MM;			%先将前一级的路径度量值保存在TMM中
TPM=PM;			%先将前一级的路径保存在TPM中
PM(8,step+1)=0;
%%%state 0
MM(1)=TMM(1)+d(0+1,step);
PM(1,:)=[TPM(1,:),0];
if(MM(1)>TMM(5)+d(4+1,step)),
    MM(1)=TMM(5)+d(4+1,step);
    PM(1,:)=[TPM(5,:),0];
end

Suvival_path=PM(1,:);	%PM第一行值即为幸存路径
Code_in_bit=Decoder(Suvival_path);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -