www.gusucode.com > ldpc译码算法,码长960,码率0.5,完全模拟fpga硬件实现语言,量化处理源码程序 > DecodeLDPC.m
function[msgdec,iter]=DecodeLDPC(lv) lcr1=zeros(1,280); lcr2=zeros(1,280); lcr3=zeros(1,280); lcr4=zeros(1,280); lcr5=zeros(1,280); lcr6=zeros(1,280); lcr7=zeros(1,280); lcr8=zeros(1,280); lcr9=zeros(1,280); lcr10=zeros(1,280); lcr11=zeros(1,280); lcr12=zeros(1,280); sign1=zeros(1,280); sign2=zeros(1,280); sign3=zeros(1,280); sign4=zeros(1,280); sign5=zeros(1,280); sign6=zeros(1,280); sign7=zeros(1,280); sign8=zeros(1,280); sign9=zeros(1,280); sign10=zeros(1,280); sign11=zeros(1,280); sign12=zeros(1,280); for k=1:30 dec=zeros(1,960); ssign=0; offset41=25; offset91=5; offset121=17; for i1=1:40 a1=40-offset41+i1; b1=40-offset91+i1; c1=40-offset121+i1; if(a1>40) addra41=i1-offset41; else addra41=a1; end if(b1>40) addra91=i1-offset91; else addra91=b1; end if(c1>40) addra121=i1-offset121; else addra121=c1; end [lqr1,lqr2,lqr3,sign]=thresh_hold1(lv(i1),lcr4(addra41),lcr9(addra91),lcr12(addra121)); lcr4(addra41)=lqr1; lcr9(addra91)=lqr2; lcr12(addra121)=lqr3; sign4(addra41)=sign; sign9(addra91)=sign; sign12(addra121)=sign; dec(i1)=sign; end offset11=39; offset21=11; offset81=4; for i1=1:40 a1=40-offset11+i1; b1=40-offset21+i1; c1=40-offset81+i1; if(a1>40) addra11=i1-offset11; else addra11=a1; end if(b1>40) addra21=i1-offset21; else addra21=b1; end if(c1>40) addra81=i1-offset81; else addra81=c1; end [lqr1,lqr2,lqr3,sign]=thresh_hold1(lv(i1+40),lcr1(addra11),lcr2(addra21),lcr8(addra81)); lcr1(addra11)=lqr1; lcr2(addra21)=lqr2; lcr8(addra81)=lqr3; sign1(addra11)=sign; sign2(addra21)=sign; sign8(addra81)=sign; dec(i1+40)=sign; end offset12=30; offset42=19; offset51=16; offset71=39; offset82=30; offset111=2; for i1=1:40 a=40-offset12+i1; b=40-offset42+i1; c=40-offset51+i1; d=40-offset71+i1; e=40-offset82+i1; f=40-offset111+i1; if(a>40) addra12=40+i1-offset12; else addra12=40+a; end if(b>40) addra42=40+i1-offset42; else addra42=40+b; end if(c>40) addra51=i1-offset51; else addra51=c; end if(d>40) addra71=i1-offset71; else addra71=d; end if(e>40) addra82=40+i1-offset82; else addra82=40+e; end if(f>40) addra111=i1-offset111; else addra111=f; end [lqr1,lqr2,lqr3,lqr4,lqr5,lqr6,sign]=thresh_hold2(lv(i1+80),lcr1(addra12),lcr4(addra42),lcr5(addra51),lcr7(addra71),lcr8(addra82),lcr11(addra111)); lcr1(addra12)=lqr1; lcr4(addra42)=lqr2; lcr5(addra51)=lqr3; lcr7(addra71)=lqr4; lcr8(addra82)=lqr5; lcr11(addra111)=lqr6; sign1(addra12)=sign; sign4(addra42)=sign; sign5(addra51)=sign; sign7(addra71)=sign; sign8(addra82)=sign; sign11(addra111)=sign; dec(i1+80)=sign; end offset31=10; offset72=22; offset112=27; for i1=1:40 a1=40-offset31+i1; b1=40-offset72+i1; c1=40-offset112+i1; if(a1>40) addra31=i1-offset31; else addra31=a1; end if(b1>40) addra72=40+i1-offset72; else addra72=40+b1; end if(c1>40) addra112=40+i1-offset112; else addra112=40+c1; end [lqr1,lqr2,lqr3,sign]=thresh_hold1(lv(i1+120),lcr3(addra31),lcr7(addra72),lcr11(addra112)); lcr3(addra31)=lqr1; lcr7(addra72)=lqr2; lcr11(addra112)=lqr3; sign3(addra31)=sign; sign7(addra72)=sign; sign11(addra112)=sign; dec(i1+120)=sign; end offset32=9; offset61=19; offset92=34; for i1=1:40 a1=40-offset32+i1; b1=40-offset61+i1; c1=40-offset92+i1; if(a1>40) addra1=40+i1-offset32; else addra1=40+a1; end if(b1>40) addra2=i1-offset61; else addra2=b1; end if(c1>40) addra3=40+i1-offset92; else addra3=40+c1; end [lqr1,lqr2,lqr3,sign]=thresh_hold1(lv(i1+160),lcr3(addra1),lcr6(addra2),lcr9(addra3)); lcr3(addra1)=lqr1; lcr6(addra2)=lqr2; lcr9(addra3)=lqr3; sign3(addra1)=sign; sign6(addra2)=sign; sign9(addra3)=sign; dec(i1+160)=sign; end offset22=9; offset33=33; offset62=16; offset93=10; offset101=39; offset122=27; for i1=1:40 a=40-offset22+i1; b=40-offset33+i1; c=40-offset62+i1; d=40-offset93+i1; e=40-offset101+i1; f=40-offset122+i1; if(a>40) addra1=40+i1-offset22; else addra1=40+a; end if(b>40) addra2=80+i1-offset33; else addra2=80+b; end if(c>40) addra3=40+i1-offset62; else addra3=40+c; end if(d>40) addra4=80+i1-offset93; else addra4=80+d; end if(e>40) addra5=i1-offset101; else addra5=e; end if(f>40) addra6=40+i1-offset122; else addra6=40+f; end [lqr1,lqr2,lqr3,lqr4,lqr5,lqr6,sign]=thresh_hold2(lv(i1+200),lcr2(addra1),lcr3(addra2),lcr6(addra3),lcr9(addra4),lcr10(addra5),lcr12(addra6)); lcr2(addra1)=lqr1; lcr3(addra2)=lqr2; lcr6(addra3)=lqr3; lcr9(addra4)=lqr4; lcr10(addra5)=lqr5; lcr12(addra6)=lqr6; sign2(addra1)=sign; sign3(addra2)=sign; sign6(addra3)=sign; sign9(addra4)=sign; sign10(addra5)=sign; sign12(addra6)=sign; dec(i1+200)=sign; end offset23=32; offset52=35; offset83=0; for i1=1:40 a1=40-offset23+i1; b1=40-offset52+i1; c1=40-offset83+i1; if(a1>40) addra1=80+i1-offset23; else addra1=80+a1; end if(b1>40) addra2=40+i1-offset52; else addra2=40+b1; end if(c1>40) addra3=80+i1-offset83; else addra3=80+c1; end [lqr1,lqr2,lqr3,sign]=thresh_hold1(lv(i1+240),lcr2(addra1),lcr5(addra2),lcr8(addra3)); lcr2(addra1)=lqr1; lcr5(addra2)=lqr2; lcr8(addra3)=lqr3; sign2(addra1)=sign; sign5(addra2)=sign; sign8(addra3)=sign; dec(i1+240)=sign; end offset24=3; offset34=13; offset63=34; offset94=17; offset102=24; offset123=17; for i1=1:40 a=40-offset24+i1; b=40-offset34+i1; c=40-offset63+i1; d=40-offset94+i1; e=40-offset102+i1; f=40-offset123+i1; if(a>40) addra1=120+i1-offset24; else addra1=120+a; end if(b>40) addra2=120+i1-offset34; else addra2=120+b; end if(c>40) addra3=80+i1-offset63; else addra3=80+c; end if(d>40) addra4=120+i1-offset94; else addra4=120+d; end if(e>40) addra5=40+i1-offset102; else addra5=40+e; end if(f>40) addra6=80+i1-offset123; else addra6=80+f; end [lqr1,lqr2,lqr3,lqr4,lqr5,lqr6,sign]=thresh_hold2(lv(i1+280),lcr2(addra1),lcr3(addra2),lcr6(addra3),lcr9(addra4),lcr10(addra5),lcr12(addra6)); lcr2(addra1)=lqr1; lcr3(addra2)=lqr2; lcr6(addra3)=lqr3; lcr9(addra4)=lqr4; lcr10(addra5)=lqr5; lcr12(addra6)=lqr6; sign2(addra1)=sign; sign3(addra2)=sign; sign6(addra3)=sign; sign9(addra4)=sign; sign10(addra5)=sign; sign12(addra6)=sign; dec(i1+280)=sign; end offset13=22; offset43=27; offset113=16; for i1=1:40 a1=40-offset13+i1; b1=40-offset43+i1; c1=40-offset113+i1; if(a1>40) addra1=80+i1-offset13; else addra1=80+a1; end if(b1>40) addra2=80+i1-offset43; else addra2=80+b1; end if(c1>40) addra3=80+i1-offset113; else addra3=80+c1; end [lqr1,lqr2,lqr3,sign]=thresh_hold1(lv(i1+320),lcr1(addra1),lcr4(addra2),lcr11(addra3)); lcr1(addra1)=lqr1; lcr4(addra2)=lqr2; lcr11(addra3)=lqr3; sign1(addra1)=sign; sign4(addra2)=sign; sign11(addra3)=sign; dec(i1+320)=sign; end offset14=34; offset44=10; offset53=17; offset73=5; offset84=19; offset114=20; for i1=1:40 a=40-offset14+i1; b=40-offset44+i1; c=40-offset53+i1; d=40-offset73+i1; e=40-offset84+i1; f=40-offset114+i1; if(a>40) addra1=120+i1-offset14; else addra1=120+a; end if(b>40) addra2=120+i1-offset44; else addra2=120+b; end if(c>40) addra3=80+i1-offset53; else addra3=80+c; end if(d>40) addra4=80+i1-offset73; else addra4=80+d; end if(e>40) addra5=120+i1-offset84; else addra5=120+e; end if(f>40) addra6=120+i1-offset114; else addra6=120+f; end [lqr1,lqr2,lqr3,lqr4,lqr5,lqr6,sign]=thresh_hold2(lv(i1+360),lcr1(addra1),lcr4(addra2),lcr5(addra3),lcr7(addra4),lcr8(addra5),lcr11(addra6)); lcr1(addra1)=lqr1; lcr4(addra2)=lqr2; lcr5(addra3)=lqr3; lcr7(addra4)=lqr4; lcr8(addra5)=lqr5; lcr11(addra6)=lqr6; sign1(addra1)=sign; sign4(addra2)=sign; sign5(addra3)=sign; sign7(addra4)=sign; sign8(addra5)=sign; sign11(addra6)=sign; dec(i1+360)=sign; end offset54=30; offset74=7; offset103=29; for i1=1:40 a1=40-offset54+i1; b1=40-offset74+i1; c1=40-offset103+i1; if(a1>40) addra1=120+i1-offset54; else addra1=120+a1; end if(b1>40) addra2=120+i1-offset74; else addra2=120+b1; end if(c1>40) addra3=80+i1-offset103; else addra3=80+c1; end [lqr1,lqr2,lqr3,sign]=thresh_hold1(lv(i1+400),lcr5(addra1),lcr7(addra2),lcr10(addra3)); lcr5(addra1)=lqr1; lcr7(addra2)=lqr2; lcr10(addra3)=lqr3; sign5(addra1)=sign; sign7(addra2)=sign; sign10(addra3)=sign; dec(i1+400)=sign; end offset25=5; offset35=0; offset64=32; offset95=21; offset104=30; offset124=10; for i1=1:40 a=40-offset25+i1; b=40-offset35+i1; c=40-offset64+i1; d=40-offset95+i1; e=40-offset104+i1; f=40-offset124+i1; if(a>40) addra1=160+i1-offset25; else addra1=160+a; end if(b>40) addra2=160+i1-offset35; else addra2=160+b; end if(c>40) addra3=120+i1-offset64; else addra3=120+c; end if(d>40) addra4=160+i1-offset95; else addra4=160+d; end if(e>40) addra5=120+i1-offset104; else addra5=120+e; end if(f>40) addra6=120+i1-offset124; else addra6=120+f; end [lqr1,lqr2,lqr3,lqr4,lqr5,lqr6,sign]=thresh_hold2(lv(i1+440),lcr2(addra1),lcr3(addra2),lcr6(addra3),lcr9(addra4),lcr10(addra5),lcr12(addra6)); lcr2(addra1)=lqr1; lcr3(addra2)=lqr2; lcr6(addra3)=lqr3; lcr9(addra4)=lqr4; lcr10(addra5)=lqr5; lcr12(addra6)=lqr6; sign2(addra1)=sign; sign3(addra2)=sign; sign6(addra3)=sign; sign9(addra4)=sign; sign10(addra5)=sign; sign12(addra6)=sign; dec(i1+440)=sign; end offset15=2; offset65=0; offset125=2; for i1=1:40 a1=40-offset15+i1; b1=40-offset65+i1; c1=40-offset125+i1; if(a1>40) addra1=160+i1-offset15; else addra1=160+a1; end if(b1>40) addra2=160+i1-offset65; else addra2=160+b1; end if(c1>40) addra3=160+i1-offset125; else addra3=160+c1; end [lqr1,lqr2,lqr3,sign]=thresh_hold1(lv(i1+480),lcr1(addra1),lcr6(addra2),lcr12(addra3)); lcr1(addra1)=lqr1; lcr6(addra2)=lqr2; lcr12(addra3)=lqr3; sign1(addra1)=sign; sign6(addra2)=sign; sign12(addra3)=sign; dec(i1+480)=sign; end for i1=1:40 addra1=520+i1; b=200+i1; c=200+i1; [lqr1,lqr2,sign]=thresh_hold3(lv(addra1),lcr1(b),lcr2(c)); lcr1(b)=lqr1; lcr2(c)=lqr2; sign1(b)=sign; sign2(c)=sign; dec(addra1)=sign; end for i1=1:40 addra1=560+i1; b=240+i1; c=200+i1; [lqr1,lqr2,sign]=thresh_hold3(lv(addra1),lcr2(b),lcr3(c)); lcr2(b)=lqr1; lcr3(c)=lqr2; sign2(b)=sign; sign3(c)=sign; dec(addra1)=sign; end for i1=1:40 addra1=600+i1; b=240+i1; c=160+i1; [lqr1,lqr2,sign]=thresh_hold3(lv(addra1),lcr3(b),lcr4(c)); lcr3(b)=lqr1; lcr4(c)=lqr2; sign3(b)=sign; sign4(c)=sign; dec(addra1)=sign; end for i1=1:40 addra1=640+i1; b=200+i1; c=160+i1; [lqr1,lqr2,sign]=thresh_hold3(lv(addra1),lcr4(b),lcr5(c)); lcr4(b)=lqr1; lcr5(c)=lqr2; sign4(b)=sign; sign5(c)=sign; dec(addra1)=sign; end for i1=1:40 addra1=680+i1; b=200+i1; c=200+i1; [lqr1,lqr2,sign]=thresh_hold3(lv(addra1),lcr5(b),lcr6(c)); lcr5(b)=lqr1; lcr6(c)=lqr2; sign5(b)=sign; sign6(c)=sign; dec(addra1)=sign; end for i1=1:40 addra1=720+i1; b=240+i1; c=160+i1; [lqr1,lqr2,sign]=thresh_hold3(lv(addra1),lcr6(b),lcr7(c)); lcr6(b)=lqr1; lcr7(c)=lqr2; sign6(b)=sign; sign7(c)=sign; dec(addra1)=sign; end for i1=1:40 addra1=760+i1; b=200+i1; c=160+i1; [lqr1,lqr2,sign]=thresh_hold3(lv(addra1),lcr7(b),lcr8(c)); lcr7(b)=lqr1; lcr8(c)=lqr2; sign7(b)=sign; sign8(c)=sign; dec(addra1)=sign; end for i1=1:40 addra1=800+i1; b=200+i1; c=200+i1; [lqr1,lqr2,sign]=thresh_hold3(lv(addra1),lcr8(b),lcr9(c)); lcr8(b)=lqr1; lcr9(c)=lqr2; sign8(b)=sign; sign9(c)=sign; dec(addra1)=sign; end for i1=1:40 addra1=840+i1; b=240+i1; c=160+i1; [lqr1,lqr2,sign]=thresh_hold3(lv(addra1),lcr9(b),lcr10(c)); lcr9(b)=lqr1; lcr10(c)=lqr2; sign9(b)=sign; sign10(c)=sign; dec(addra1)=sign; end for i1=1:40 addra1=880+i1; b=200+i1; c=160+i1; [lqr1,lqr2,sign]=thresh_hold3(lv(addra1),lcr10(b),lcr11(c)); lcr10(b)=lqr1; lcr11(c)=lqr2; sign10(b)=sign; sign11(c)=sign; dec(addra1)=sign; end for i1=1:40 addra1=920+i1; b=200+i1; c=200+i1; [lqr1,lqr2,sign]=thresh_hold3(lv(addra1),lcr11(b),lcr12(c)); lcr11(b)=lqr1; lcr12(c)=lqr2; sign11(b)=sign; sign12(c)=sign; dec(addra1)=sign; end [lcr1,ssign1]=check_update(sign1,lcr1,6); [lcr2,ssign2]=check_update(sign2,lcr2,7); [lcr3,ssign3]=check_update(sign3,lcr3,7); [lcr4,ssign4]=check_update(sign4,lcr4,6); [lcr5,ssign5]=check_update(sign5,lcr5,6); [lcr6,ssign6]=check_update(sign6,lcr6,7); [lcr7,ssign7]=check_update(sign7,lcr7,6); [lcr8,ssign8]=check_update(sign8,lcr8,6); [lcr9,ssign9]=check_update(sign9,lcr9,7); [lcr10,ssign10]=check_update(sign10,lcr10,6); [lcr11,ssign11]=check_update(sign11,lcr11,6); [lcr12,ssign12]=check_update(sign12,lcr12,6); ssign=ssign1+ssign2+ssign3+ssign4+ssign5+ssign6+ssign7+ssign8+ssign9+ssign10+ssign11+ssign12; iter=k; msgdec=dec; % if(ssign==0) % break; % end end