項目一:LDPC在碼刪除信道下譯碼

    clc;clear;
    for loop = 1:1000
        load PEGH_3_6_1024.mat
        [m,n] = size(H);
        %    H_simple = zhu_rank(H);                    %H化为行最简阵
        %***********************高斯消元开始****************************************
        a = H;
        for j = 1:m
            for i = j:m-1
                for k = i+1:m
                    if a(i,j)==0 && a(k,j)==1
                        a([i,k],:)=a([k,i],:);
                    end
                end
            end
            for i = j+1:m
                if a(i,j)==1 &&a(j,j)==1
                    a(i,:)=xor(a(i,:),a(j,:));
                end
            end
        end
        %F_F=a
        %*********************调整顺序*****************
        %********统计******
        for i = 1:m
            for j = i:n     %最大值只能统计到n,不能统计到m+n,m为单位矩阵
                if a(i,j)==1
                    order(i) = j;
                    break;
                else
                    order(i) = m+1;%全零视为越界
                end
            end
        end
        order_1 = order;%读取顺序      %未整理前每行第一个不为0数字所在位置组成的向量
        %*********第一次排序*****
        for i = 1:m-1     %i,j是冒泡前后排序,不是行列排序
            for j = i+1:m
                if order_1(i)>order_1(j)
                    t = a(i,:);
                    a(i,:) = a(j,:);
                    a(j,:) = t;
                    t = order_1(i);
                    order_1(i) = order_1(j);
                    order_1(j) = t;
                end
            end
        end
        order_2 = order_1;
        %调整顺序   % 整理后没行第一个不为0数字所在位置组成的向量
        a_begin = a;       %整理后的排序
        %***************第一次行最简化简*******************************
        for j = m:-1:1              %列元素排序,和上面行元素排序不同,不可替换
            for i = j:-1:1          %****确定位置***
                if a(i,j)~=0
                    countt(j) = i;  %找到每一列最后一个非零元素所在的位置
                    break;          %找到每一列从下至上第一个非零元素后,跳出本轮循环
                else
                    countt(j) = m+1;
                end
            end
        end
        countt;
        for j = m:-1:1
            for i = countt(j)-1:-1:1  %全零列不影响
                if a(i,j)~=0
                    a(i,:) = xor(a(i,:),a(countt(j),:));
                end
            end
        end
        a_simple = a;
        %********************************************************
        
        %********第二次统计&排序*******
        for i = 1:m
            for j = i:n     %最大值只能统计到n,不能统计到m+n,m为单位矩阵
                if a(i,j)==1
                    count = j;
                    break;
                else
                    count = m+1;
                end
            end
            order(i)= count;
        end
        order_3 = order;  %读取顺序,便于行变换
        for i = 1:m-1    %i,j是冒泡前后排序,不是行列排序
            for j = i+1:m
                if order_3(i)>order_3(j)
                    tt = a(i,:);
                    a(i,:) = a(j,:);
                    a(j,:) = tt;
                    t = order_3(i);
                    order_3(i) = order_3(j);
                    order_3(j) = t;
                end
            end
        end
        order_4 &#
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值