LT_BP_performance

clc;clear;
m = 500;
K = 500;
overhead = [550 600 700 800];
i_ii =10000;
for iii = 1:4
    n = overhead(iii);
    for i_i = 1:i_ii
        if mod(i_i,100)==0
            i_i
        end
        c = 0.04;
        o = 0.5;
        x = ones(1,m);
        x_1 = rand(1,m)<0.5 ;           %信源碼字
        Pgenerate = rand(1,n);          %隨機生成n個數
        degree = [1:K];
        %********************************************
        %         for d = 1:K
        %             index_d = 2:K;
        %             if find(d==index_d)
        %                 PP = 1/d/(d-1);
        %             elseif d==1
        %                 PP = 1/K;
        %             end
        %             P(d) = PP;
        %         end
        %         P;
        %*********************************************
        S = c*sqrt(K)*log(K/o);
        Z = 0;
        for d = 1:K
            index_d = 2:K;
            if find(d==index_d)
                PP = 1/d/(d-1);
            elseif d==1
                PP = 1/K;
            end
            P_P(d) = PP;
            d_index = 1:round(K/S)-1;
            if (find(d==d_index))
                tt = S/K/d;
            elseif d==round(K/S)
                tt = S/K*log(S/o);
            else
                tt = 0;
            end
            t(d) = tt;
            Z = Z + P_P(d)+t(d);
        end
        P_P;
        t;
        Z;
        for d = 1:K
            P(d) = (P_P(d)+t(d))/Z;
        end
        P;
        sum = 0;
        for i = 1:K
            sum = sum + P(i);
            sum_1(i) = sum;
        end
        sum_1;
        for j = 1:length(Pgenerate)
            for i = 1:length(sum_1)
                if Pgenerate(j)<sum_1(i)
                    label(j) = i;
                    break;
                end
            end
        end
        label;
        for j = 1:n
            a = zeros(1,m);
            vector = randperm(m,label(j));
            for i = 1:length(vector)
                a(vector(i)) = 1;
            end
            G(1:m,j) = a;
        end
        G;
        y = mod(x_1*G,2);
        while(1)
            %***********判斷準備開始1*****************
            for i = 1:n
                front_judge(i) = length(find(G(:,i)==1));
            end
            %***********判斷準備結束1*****************
            count = zeros(1,n);
            for j = 1:n
                index_1 = find(G(:,j)==1);
                if length(index_1)==1     %條件滿足
                    count(j) = index_1;
                    x(index_1) = y(j);
                    G(index_1,j) = 0;
                end
            end
            t = 1;
            countt = zeros(1,length(find(count~=0)));
            for j = 1:n
                if count(j)~=0
                    countt(t) = count(j);
                    t = t + 1;
                end
            end
            countt;
            for i = 1:length(countt)         %橫坐標count
                for j = 1:n
                    if G(countt(i),j) == 1
                        y(j) = xor(x(countt(i)),y(j));
                        G(countt(i),j) = 0;
                    end
                end
            end
            %***********判斷準備開始2*****************
            for i = 1:n
                last_judge(i) = length(find(G(:,i)==1));
            end
            %***********判斷準備結束2*****************
            if last_judge==front_judge
                break;
            end
        end
        x_2 = x;
        check = 0;
        for i = 1:length(x_1)
            if x_1(i)~=x_2(i)
                check = check + 1;
            end
        end
        check_1(i_i) = check/length(x_1);
    end
    check_2(iii,1:i_ii) = check_1(1:i_ii);
end
for i = 1:4
    berr = 0;
    for j = 1:i_ii
        berr = berr + check_2(i,j);
    end
    ber(i) = berr/i_ii;    
end
ber
for i = 1:4
    ferr = 0;
    for j = 1:i_ii
        if check_2(j)~=0
            ferr = ferr+1;
        end
    end
    fer(i) = ferr/i_ii;
end
fer







%         while(1)
%             %***********判斷準備開始1*****************
%             for i = 1:n
%                 front_judge(i) = length(find(G(:,i)==1));
%             end
%             %***********判斷準備結束1*****************
%             %             for j = 1:n
%             %                 index_y = find(G(:,j)==1);
%             %                 if length(index_y)==1 %度1
%             %                     x(index_y) = y(j);%賦值
%             %                     G(index_y,j) = 0; %刪邊
%             %                     for jj = 1:n
%             %                         if G(index_y,jj)==1
%             %                             y(jj) = xor(x(index_y),y(jj));
%             %                             G(index_y,jj)=0;
%             %                         end
%             %                     end
%             %                 end
%             %             end
%             jj = 1;
%             for j = 1:n
%                 index_1 = find(G(:,j)==1);
%                 if length(index_1)==1     %條件滿足
%                     count(jj) = index_1;
%                     jj = jj + 1;
%                     x(index_1) = y(j);
%                     G(index_1,j) = 0;
%                 end
%             end
%             G;
%             count; %對於心願節點來説是1,3
%             for i = 1:length(count)         %橫坐標count
%                 index_2 = find(G(i,:)==1);  %縱坐標index_2
%                 for j = 1:length(index_2)
%                     y(index_2(j)) = xor(count(i),index_2(j));
%                     G(count(i),index_2(j)) = 0;
%                 end
%             end
%             %***********判斷準備開始2*****************
%             for i = 1:n
%                 last_judge(i) = length(find(G(:,i)==1));
%             end
%             %***********判斷準備結束2*****************
%             if last_judge==front_judge
%                 break;
%             end
%         end


%*********************************************
% degree = [1:K];
% for i = 1:K-1
%     for j = i:K
%         if P(i)>P(j)
%             t = P(i);
%             P(i) = P(j);
%             P(j) = t;
%             tt = degree(i);
%             degree(i) = degree(j);
%             degree(j) = tt;
%         end
%     end
% end
% P1 =[  P]              %從小到達排序
% degree01 = degree ;  %對應度值
 
% for j = 1:length(Pgenerate)
%     for i = 1:length(P1)
%         if Pgenerate(j)<=P1(i)
%             label(j) = degree01(i);
%             break;
%         else
%             label(j) = degree01(length(P1));
%             break;
%         end
%     end
% end
% label;
%
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python中的`__lt__`方法是一个富比较方法,用于定义对象的小于(less than)操作。富比较方法是一组特殊的方法,用于定义对象之间的比较操作,包括小于、大于、等于等。`__lt__`方法在对象之间进行小于操作时被调用。 通过实现`__lt__`方法,我们可以自定义对象之间的小于比较操作的行为。当使用小于运算符`&lt;`对两个对象进行比较时,如果其中一个对象的`__lt__`方法被实现,Python会调用该方法来执行比较操作。 详细的`__lt__`方法的说明可以在Python官方文档中找到,链接如下:。 例如,我们可以定义一个自定义的类`Person`,并在其中实现`__lt__`方法来定义按照年龄大小进行比较的方式: ```python class Person: def __init__(self, name, age): self.name = name self.age = age def __lt__(self, other): return self.age &lt; other.age person1 = Person("Alice", 25) person2 = Person("Bob", 30) print(person1 &lt; person2) # 输出 True,因为 person1 的年龄小于 person2 ``` 在上面的例子中,我们定义了一个`Person`类,并实现了`__lt__`方法来比较两个`Person`对象之间的年龄大小。根据`__lt__`方法的实现,我们可以使用小于运算符`&lt;`来比较两个`Person`对象的年龄大小。 注意,除了`__lt__`方法,还有其他富比较方法如`__gt__`、`__eq__`等,分别用于定义大于(greater than)和等于(equal to)操作。 请注意,上述代码仅作为示例,实际的`__lt__`方法的实现可能会根据具体的需求有所不同。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值