📄 ldpc_demo.m
字号:
clear all;
clc;
%%%%%%%%%%%%define dimension of the parity check matrix%%%%%%%%
rows=150;
cols=300;
h=gen_ldpc(rows,cols);%generates a 100 x 200 H matrix( the IG parity
%check matrix)
[newh,rearranged_cols]=rearrange_cols(h);
% newh holds the rearranged version of H and rearranged_cols holds
%the rearrangement order of columns
%%%%%%%%%%%%Get A and B matrices %%%%%%%%%%%%%%%%
for i=1:rows
for j=1:rows
A(i,j)=newh(i,j);
end
end
for i=1:rows
for j=rows+1:cols
B(i,j-rows)=newh(i,j);
end
end
%%%%%%%%%%%%%%message bits%%%%%%%%%%%%%%%%%%%%%
cycle=1;
nerr=0;
%generate message bits randomly
%for j=1:10%simulate 1000 flame
s=zeros(1,(cols-rows));
for i=1:cols-rows
s(i)=round(rand);
end
s=s';
% make it a row vector
%%%%%%% or load s from file %%%%type "help load" at matlab prompt for details
%%%%%%%%%%%%%%get check bits( Eqn.5)%%%%%%%%%%%%%%%%
d=mul_GF2(inv_GF2(A),B);
c=mul_GF2(d,s);
%%%%%%%%%%%%%%%%%form u'%%%%%%%%%%%%%
u1=c;
for i=rows+1:cols
u1(i)=s(i-rows);
end
%%%%%%%%%%%%%%% reorder u?to get the CW u %%%%%%%%%%%%%%%%%%%
u=reorder_bits(u1,rearranged_cols);
No=1.9;
% assume the codeword c, the parity check matrix H and No are already loaded into the MATLAB memory
tx_waveform=bpsk(u,1); %amp= 1
rx_waveform=awgn(tx_waveform,No);
scale(1:length(u))=1; %No fading.
vhat=decode_ldpc(rx_waveform,No,1,h,scale) %since amp=1;
% assume we have the rearranged_cols array output by the rearrange_cols( ) function already loaded into MATLAB memory
uhat = extract_mesg(vhat,rearranged_cols);
uhat'
%%%%%%%%%%%%%%% u is the codeword to be transmitted %%%%%%%%%%%%%%%%%%%
%%nerr=0;
errmax=mod((s+uhat'),2);
for i=1:rows
if(errmax(i)==1)
nerr=nerr+1;
end
end
%end
ber=nerr/((cols-rows)*cycle);
ber
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -