📄 lcs.m
字号:
for SNR=6
SNR
maxiter=50;
[m,n]=size(H);
%dv=3; %vertical degree
rate=500/n;
sigma= sqrt(1/(2*rate*10^(SNR/10)));
ggg=0;
for xxx=1
xxx
input=rand(1,100*150)>0.5;
[m,n]=size(input);
b=zeros(1,n/2);
for i=1:n/2
a=num2str(input(2*i-1:i*2)');
b(i)=bin2dec(a');
end;
a11=zeros(1,150*50);
a21=zeros(1,150*50);
for u=1:150
[a1,a2]=sttc_encode_QPSK_8state_2transmit(input(((u-1)*100+1):((u-1)*100+100)));
a11(((u-1)*50+1):((u-1)*50+50))=a1;
a21(((u-1)*50+1):((u-1)*50+50))=a2;
end;
a12=zeros(1,150*100);
b1=zeros(1,150*100);
b1=dec2bin(a11);
a22=zeros(1,150*100);
b2=zeros(1,150*100);
b2=dec2bin(a21);
for i=1:150*50
a12(((i-1)*2+1):((i-1)*2+2))=b1(i,:);
a22(((i-1)*2+1):((i-1)*2+2))=b2(i,:);
end;
out1=zeros(1,30*1000);
out2=zeros(1,30*1000);
for i=1:30
out1(((i-1)*1000+1):((i-1)*1000+1000))=ldpc_linetime_encode_3(a12(((i-1)*500+1):((i-1)*500+500))-48,H,inv_phi1,g); % encode
out2(((i-1)*1000+1):((i-1)*1000+1000))=ldpc_linetime_encode_3(a22(((i-1)*500+1):((i-1)*500+500))-48,H,inv_phi1,g);
end;
[Dem1,Dem2]=twoto22(out1,out2,SNR);
symbol1=zeros(1,1000*30);
for l=1:500*30
symbol1(2*l-1)=real(-Dem1(l))/sqrt(2);
symbol1(2*l)=imag(-Dem1(l))/sqrt(2);
end;
symbol2=zeros(1,1000*30);
for l=1:500*30
symbol2(2*l-1)=real(-Dem2(l))/sqrt(2);
symbol2(2*l)=imag(-Dem2(l))/sqrt(2);
end;
symbol3=zeros(1,1000*60);
symbol3=[symbol1 symbol2];
f1=1./(1+exp(-2*symbol3/sigma^2)); % likelihood counting probability
f1 = (f1(:))'; % make it a row vector
f0=1-f1;
f=zeros(2,1000*60);
f(1,:)=f0;
f(2,:)=f1;
x_hat=zeros(1,60*500);
for j=1:60
[z_hat,success,t]=decode(f(:,((j-1)*1000+1):((j-1)*1000+1000)),H,maxiter);
x_hat(((j-1)*500+1):((j-1)*500+500))=z_hat(1:500);
end;
a13=zeros(1,150*100);
a23=zeros(1,150*100);
a13=x_hat(1:150*100);
a23=x_hat(15001:30000);
a14=zeros(1,150*50);
a24=zeros(1,150*50);
for i=1:150*50
a=num2str(a13(2*i-1:i*2)');
aa=num2str(a23(2*i-1:i*2)');
a14(i)=bin2dec(a');
a24(i)=bin2dec(aa');
end;
fin_out=zeros(1,150*50);
for i=1:150
dataout=decode3_QPSK_8state_2r(a14(((i-1)*50+1):((i-1)*50+50)),a24(((i-1)*50+1):((i-1)*50+50)));
fin_out(((i-1)*50+1):((i-1)*50+50))=transform_to_input(dataout);
end;
for u=1:150
for f=1:50
if fin_out(f+(u-1)*50)~=b(f+(u-1)*50)
ggg=ggg+1;
f
break;
end;
end;
end;
end;
err33(SNR-5)=ggg/(150*xxx);
end;
%snr=[4 4.5 5 5.5 6 6.5 6.7 6.8]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -