资源简介
本资源是对于数字喷泉码在高斯信道下的编码和几种主要的解码方式的matlab仿真。
代码片段和文件信息
K=5;
N=7;
SNR=8;
c = 0.03;
delta = 0.2; %译码失败的概率
msg = randsrc(1K[0 1]);
%%
%度分布
f1(1) = 1/K;
d = (2:K);
f1(2:K) = 1./(d.*(d-1));%理想
S = c*log(K/delta)*sqrt(K);
tau = zeros(1K);
if round(K/S)<=K
d=1:(round(K/S)-1);
tau(d)=S./(K.*d);
d=round(K/S);
tau(d) = S/K*log(S/delta);
else
d=1:K;
tau(d)=S./(K.*d);
end
Z=sum(tau+f1);
f2 =(f1+tau)/Z; %鲁棒
G=zeros(KN);
coded=zeros(1N);
d = randsrc(1N[1:K;f2]);
%%
%编码
for i=1:N
select=randperm(Kd(i));
G(selecti)=1;
coded(i)=mod(sum(G(:i).*msg‘)2);
end
% disp(msg);
disp(G);
disp(coded);
%%
% %传输
% msgtr=2*coded-1;
% Sigman2 = 1/10^(SNR/10);
% n = randn(1N)/sqrt(2)*sqrt(Sigman2);
% coded=n+msgtr;
% coded(coded>0)=1;
% coded(coded<=0)=0;
%%
%BP
flgEndLoop = 0;
i=1:N;
remsg = zeros(1K);
degree(i)=sum(G(:i));
degreeone=find(degree==1);
while ~isempty(degreeone)
locate=zeros(1length(degreeone));%度为一对应的初始码元
for j=1:length(degreeone)
if find(G(:degreeone(j)))~=0
locate(j)=find(G(:degreeone(j))==1);
remsg(locate(j))=coded(degreeone(j));%找到度为1的编码并译出来
match=find(G(locate(j):)==1);%找到相连的边
coded(match)=xor(coded(match)coded(degreeone(j)));%更新信息,异或
G(locate(j):)=0;%拆除相连边
else
end
end
degree(i)=sum(G(:i));%再次译码
degreeone=find(degree==1);
end
% v=sum(xor(msgremsg));
disp(msg);
disp(remsg);
% disp(v);
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1527 2018-01-13 14:06 BP_test_R.m
文件 3587 2018-01-11 16:27 GE_test_R.m
文件 1910 2018-01-13 19:41 OFG_test_R.m
----------- --------- ---------- ----- ----
7024 3
评论
共有 条评论