【问题标题】:How to modify two bits in a codeword?如何修改码字中的两位?
【发布时间】:2017-07-02 23:18:45
【问题描述】:

原则: 我有一个代码字 u,我想更改 u 的 4 位中的所有 2 位。

例子:如果u = [1 1 0 0],我想获取:

u1 = [0 0 0 0] ; u2 = [0 1 1 0] ; u3 = [0 1 0 1];
u4 = [1 0 1 0] ; u5 = [1 0 0 1] ; u6 = [1 1 1 1];

程序:

u = rand(1,4)>0.5
for i = 1:size(u,2)
    if u(:,1)==0 && u(:,2)==0
       u1 = [1 1 u(:,3) u(:,4)];
    elseif u(:,1)==1 && u(:,2)==0
       u1 = [0 1 u(:,3) u(:,4)];
    elseif u(:,1)==0 && u(:,2)==1
       u1 = [1 0 u(:,3) u(:,4)];
    elseif u(:,1)==1 && u(:,2)==1
       u1 = [0 0 u(:,3) u(:,4)];
    end

    if u(:,1)==0 && u(:,3)==0
       u2 = [1 u(:,2) 1 u(:,4)];
    elseif u(:,1)==1 && u(:,3)==0
       u2 = [0 u(:,2) 1 u(:,4)];
    elseif u(:,1)==0 && u(:,3)==1
       u2 = [1 u(:,2) 0 u(:,4)];
    elseif u(:,1)==1 && u(:,3)==1
       u2 = [0 u(:,2) 0 u(:,4)];
    end

    if u(:,1)==0 && u(:,4)==0
       u3 = [1 u(:,2) u(:,3) 1];
    elseif u(:,1)==1 && u(:,4)==0
       u3 = [0 u(:,2) u(:,3) 1];
    elseif u(:,1)==0 && u(:,4)==1
       u3 = [1 u(:,2) u(:,3) 0];
    elseif u(:,1)==1 && u(:,4)==1
       u3 = [0 u(:,2) u(:,3) 0];
    end

    if u(:,2)==0 && u(:,3)==0
       u4 = [u(:,1) 1 1 u(:,4)];
    elseif u(:,2)==1 && u(:,3)==0
       u4 = [u(:,1) 0 1 u(:,4)];
    elseif u(:,2)==0 && u(:,4)==1
       u4 = [u(:,1) 1 0 u(:,4)];
    elseif u(:,2)==1 && u(:,3)==1
       u4 = [u(:,1) 0 0 u(:,4)];
    end

    if u(:,2)==0 && u(:,4)==0
        u5 = [u(:,1) 1 u(:,3) 1];
    elseif u(:,2)==1 && u(:,4)==0
        u5 = [u(:,1) 0 u(:,3) 1];
    elseif u(:,2)==0 && u(:,4)==1
        u5 = [u(:,1) 1 u(:,3) 0];
    elseif u(:,2)==1 && u(:,4)==1
        u5 = [u(:,1) 0 u(:,3) 0];
    end

    if u(:,3)==0 && u(:,4)==0
       u6 =[u(:,1) u(:,2) 1 1];
    elseif u(:,3)==1 && u(:,4)==0
       u6 =[u(:,1) u(:,2) 0 1];
    elseif u(:,3)==0 && u(:,4)==1
       u6 =[u(:,1) u(:,2) 1 0];
    elseif u(:,3)==1 && u(:,4)==1
       u6 =[u(:,1) u(:,2) 0 0];
    end
 end 

我需要将我的程序推广到 u 的所有长度并使其更短,因为如果 u 的长度很大,则很难以这种方式进行。

有人可以帮助我概括我的程序并使其更短吗?

谢谢!

【问题讨论】:

    标签: matlab vector


    【解决方案1】:

    一个简单的解决方案可能是:

      u = [1 1 0 0];
      us = []; % all possible u
      k = 2;
      n = length(u);
      C = nchoosek(1:n,k);
      notC = ~u(C); % flip value of the specified elements of u
      for i = 1:size(notC,1)
          uTemp = u;
          uTemp(C(i,:)) = ~u(C(i,:));
          us = [us; uTemp];
      end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-23
      • 1970-01-01
      • 1970-01-01
      • 2019-02-02
      • 1970-01-01
      • 1970-01-01
      • 2023-03-05
      • 2020-11-20
      相关资源
      最近更新 更多