传统编码技术对比汉明码,RS,卷积码三种编码技术的对比
Posted fpga&matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了传统编码技术对比汉明码,RS,卷积码三种编码技术的对比相关的知识,希望对你有一定的参考价值。
1.软件版本
matlab2013b
2.核心程序
clc;
clear;
close all;
warning off;
%% 参数初始化
sel = 0;
if sel == 1;
trel = poly2trellis(7,[171 133]);%多项式
tblen = 9; %回溯深度
else
trel = poly2trellis(3,[6 7]);%多项式
tblen = 9; %回溯深度
end
Step = 10;%仿真时间间隔
Simu_Len = 10000; %仿真的时间长度
Simu_time = 1000;
Pf = 1e-3 : (10e-3-1e-3)/Step : 10e-3-(10e-3-1e-3)/Step; %信道差错概率
Simu_speed = 3*10^10/Step : 3*10^Step/10 : 3*10^10;
msg = (double(rand(1,Simu_Len)>0.5))';
%% 主体代码
for i = 1:length(Pf)
Err = zeros(1,Simu_time);
for j = 1:Simu_time
i
j
%编码
Msg_Enc = convenc(msg,trel);
Msg_Enc2 = Msg_Enc;
%将数据通过信道
idx = round(length(Msg_Enc)*Pf(i));
idx2 = round(length(Msg_Enc)*rand(1,idx));
idx2(find(idx2 == 0)) = 1;
for ii = 1:length(idx2)
if Msg_Enc(idx2(ii)) == 1
Msg_Enc2(idx2(ii)) = 0;
else
Msg_Enc2(idx2(ii)) = 1;
end
end
%译码
Msg_Dec = vitdec(Msg_Enc2,trel,tblen,'cont','hard');
%计算误码率
[n2,r2] = biterr(Msg_Dec(tblen+1:end),msg(1:end-tblen));
Err(j) = n2;
end
Err2(i) = sum(Err)/(Simu_time*Simu_Len);
end
%% 曲线仿真
figure;
plot(Pf,Err2,'b-*');
xlabel('channel error rate');
ylabel('BER');
%% 3D图
figure;
[X,Y] = meshgrid(Simu_speed,Pf);
Error = [Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' ];
mesh(X,Y,Error);
xlabel('信道差错概率');
ylabel('仿真速度');
zlabel('误码率');
if sel == 1;
save JJ7.mat X Y Error Pf Err2
else
save JJ5_4.mat X Y Error Pf Err2
end
clc;
clear;
close all;
warning off;
%% 参数初始化
sel = 0;
if sel == 1;
k = 5; %15
n = 7; %31
else
k = 15; %15
n = 31; %31
end
Step = 10;%仿真时间间隔
Simu_Len = 1000*k; %仿真的时间长度
Simu_time = 500;
Pf = 1e-3 : (10e-3-1e-3)/Step : 10e-3-(10e-3-1e-3)/Step; %信道差错概率
Simu_speed = 3*10^10/Step : 3*10^Step/10 : 3*10^10;
msg = (double(rand(1,Simu_Len)>0.5))';
Rs_Encoder = fec.rsenc(n,k);
Rs_Decoder = fec.rsdec(Rs_Encoder);
%% 主体代码
for i = 1:length(Pf)
Err = zeros(1,Simu_time);
for j = 1:Simu_time
i
j
%编码
Msg_Enc = encode(Rs_Encoder,msg);
Msg_Enc2 = Msg_Enc;
%将数据通过信道
idx = round(length(Msg_Enc)*Pf(i));
idx2 = round(length(Msg_Enc)*rand(1,idx));
idx2(find(idx2 == 0)) = 1;
Msg_Enc2(idx2) = floor(rand(1,1)*Msg_Enc(idx2));%设置出错值
%译码
[Msg_Dec,cnumerr,ccode] = decode(Rs_Decoder,Msg_Enc2);
%计算误码率
Err(j) = biterr(Msg_Dec,msg);
end
Err2(i) = sum(Err)/(Simu_time*Simu_Len);
end
%% 曲线仿真
figure;
plot(Pf,Err2,'b-*');
xlabel('channel error rate');
ylabel('BER');
%% 3D图
figure;
[X,Y] = meshgrid(Simu_speed,Pf);
Error = [Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' ];
mesh(X,Y,Error);
xlabel('信道差错概率');
ylabel('仿真速度');
zlabel('误码率');
if sel == 1;
save RS5_7.mat X Y Error Pf Err2
else
save RS15_31.mat X Y Error Pf Err2
end
clc;
clear;
close all;
warning off;
%% 参数初始化
sel = 0;
if sel == 1;
k = 4; %15
n = 7; %31
else
k = 11; %15
n = 15; %31
end
Step = 10;%仿真时间间隔
Simu_Len = 100*k; %仿真的时间长度
Simu_time = 500;
Pf = 1e-3 : (10e-3-1e-3)/Step : 10e-3-(10e-3-1e-3)/Step; %信道差错概率
Simu_speed = 3*10^10/Step : 3*10^Step/10 : 3*10^10;
% msg = (double(rand(1,Simu_Len)>0.5))';
msg = randint(Simu_Len,1,[0,2^k-1]);
%% 主体代码
for i = 1:length(Pf)
Err = zeros(1,Simu_time);
for j = 1:Simu_time
i
j
%编码
Msg_Enc = encode(msg,n,k,'hamming/decimal');
Msg_Enc2 = Msg_Enc;
%将数据通过信道
idx = round(length(Msg_Enc)*Pf(i));
idx2 = round(length(Msg_Enc)*rand(1,idx));
idx2(find(idx2 == 0)) = 1;
Msg_Enc2(idx2) = floor(rand(1,1)*Msg_Enc(idx2));%设置出错值
%译码
Msg_Dec = decode(Msg_Enc2,n,k,'hamming/decimal');
%计算误码率
Err(j) = biterr(Msg_Dec,msg);
end
Err2(i) = sum(Err)/(Simu_time*Simu_Len);
end
%% 曲线仿真
figure;
plot(Pf,Err2,'b-*');
xlabel('channel error rate');
ylabel('BER');
%% 3D图
figure;
[X,Y] = meshgrid(Simu_speed,Pf);
Error = [Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' Err2' ];
mesh(X,Y,Error);
xlabel('信道差错概率');
ylabel('仿真速度');
zlabel('误码率');
if sel == 1;
save hmm5_7.mat X Y Error Pf Err2
else
save hmm15_31.mat X Y Error Pf Err2
end
3.仿真分析
汉明编码:
仿真结果如下所示:
汉明编码的误码率和信道误码率呈线性变化,上图中蓝色部分是由于仿真点数少,所以其误码率略有抖动,当仿真点数时间长的时候,其仿真波形可线性变化。
RS编码:
仿真结果如下所示:
由于RS编码的特点就是针对突发错误,所以在RS编码的时候,对于性能较好的RS3115编码效果较好,其误码率曲线的值为0,而RS75,其纠错能力较差,所以上面的仿真结果中红色部分仿真结果为零。
卷积编码:
仿真结果如下所示:
由于卷积编码的性能并不是针对突发中断,所以卷积编码在效果较好的情况下,仍然存在一定的误码率。
5.参考文献
[1]陈卉卉. 卫星光通信信道编码技术研究[D]. 哈尔滨工业大学, 2009.A14-09
以上是关于传统编码技术对比汉明码,RS,卷积码三种编码技术的对比的主要内容,如果未能解决你的问题,请参考以下文章