• 大小: 9KB
    文件类型: .m
    金币: 2
    下载: 1 次
    发布日期: 2021-05-26
  • 语言: Matlab
  • 标签:

资源简介

是关于(8,4,4)汉明扩展码的程序,已经调通。算法复杂度适中,亲测可用!!!

资源截图

代码片段和文件信息

%(844)扩展码硬判决+软判决+spa
clc
clear
Eb_N0dB=0:1:10;
Eb_N0=10.^(0.1*Eb_N0dB);
Es_N0=(1/2).*Eb_N0;%将Eb_N0转化为Es_N0
trip=5000;
zero_matrix=[0 0 0 0];
information=zeros(164);
n=8;k=4;
G=[1 0 0 0 1 0 1 1;0 1 0 0 1 1 1 0;0 0 1 0 0 1 1 1; 0 0 0 1 1 1 0 1];
H=[1 1 0 1 1 0 0 0;0 1 1 1 0 1 0 0;1 1 1 0 0 0 1 0;1 0 1 1 0 0 0 1];
%产生所有可能信息位和所有可能码字
for i=1:16
    information(i:)=de2bi(i-14‘left-msb‘);
end
codebook=rem(information*G2);
%产生信息位+编码+调制+硬判决+软判决
%msg1是一个M*k个随机产生的信息位
msg1=randint(trip*k1);
%将msg1变成矩阵的形式,每行含有k个信息位
msg2=vec2mat(msg1k);  
%对信息序列进行编码
code2=rem(msg2*G2);
%对信息序列进行BPSK调制
bp_code2=2*code2-1;
%加入高斯白噪声,并采用硬判决译码
for i=1:1:length(Eb_N0dB);
    noise_aver=0;noise_sigma=sqrt(1/(2* Es_N0(i)));
    noise2=normrnd(noise_avernoise_sigmasize(bp_code2));
    noise_code2=bp_code2+noise2;
     for j=1:trip
         for k=1:n
        if noise_code2(jk)>0de_code2(jk)=1;
        else  de_code2(jk)=0;
        end 
         end
     end
         for j=1:trip
        error=[0 0 0 0 0 0 0 0];
        if(de_code2(j:)*(H‘)==zero_matrix)tr_code(j:)=de_code2(j:);
        else
            S=rem((de_code2(j:)*(H‘))2);%caculate the 校正子
            S_DE=bi2de(S);
            H_de=bi2de(H‘);
            index1=find(H_de==S_DE);
            if(index1)%计算错误图样
                error(index1)=1;
            end
                tr_code(j:)=rem(de_code2(j:)+error2);%,
        end
    end
    for a=1:1:trip;
        for b=1:4;
            tr_info(ab)=tr_code(ab);
        end
    end
    [number(i)ratio(i)]=biterr(tr_infomsg2);
end
semilogy(Eb_N0dBratio‘b-‘);
hold on;
grid on;
%软判决译码,采用最大似然译码准则译码;
for i=1:1:length(Eb_N0dB);
    noise_aver=0;noise_sigma=sqrt(1/(2* Es_N0(i)));
    noise2=normrnd(noise_avernoise_sigmasize(bp_code2));
    noise_code2=bp_code2+noise2;
    %对接收到的软序列,进行最大似然译码(等效于最小距离译码);
    for j=1:1:trip
        w=noise_code2(j:)‘;
        product=codebook*w;
        index2=find(product==max(product));
        tr_code(j:)=codebook(index2:);
    end
    for a=1:1:trip
        for b=1:4
            tr_info2(ab)=tr_code(ab);
        end
    end
    [number(i)ratio(i)]=biterr(tr_info2msg2);
end
semilogy(Eb_N0dBratio‘k-o‘);
hold on;
%和积算法(SPA),迭代30次
m=4;
for i=1:1:length(Eb_N0dB);
    noise_aver=0;noise_sigma=sqrt(1/(2* Es_N0(i)));sigma2=noise_sigma*noise_sigma;
    noise2=normrnd(noise_avernoise_sigmasize(bp_code2));
    noise_code2=bp_code2+noise2;
    %转换成接收序列的先验概率信息,p_zero()为每一位取0的概率;
    for j=1:1:trip;
        for l=1:1:n;
            p_zero(jl)=1/(1+exp(2*noise_code2(jl)/sigma2));
            p_one(jl)=1/(1+exp(-2*noise_code2(jl)/sigma2));
        end
    end
    %以7个信息位为一个单位,分别对M*7个码组依次进行迭代译码;
    for j=1:1:trip;%共M行7位的信息组
        Imax=1;%最大迭代次数初始化;
        for a=1:1:m;
            for b=1:1:n;%第一次迭代,变量节点到校验节点传递的信息
                if H(ab)==0q_zero(ab)=0;q_one(ab)=0;%初始化;
                else q_zero(ab)=p_zero(jb);q_one

评论

共有 条评论

相关资源