如何确定范围为1的向量索引

时间:2014-10-16 10:27:22

标签: matlab

我有一个问题是在matlab中确定向量索引的方法。让我们看看我的问题。我有一个6位,包括2个部分:红色部分和蓝色部分。红色部分的大小为| S1 |蓝色部分是| S2 |(例如:| S1 | = 2且| S2 | = 4)。从0到 l 的原始位(6位)的索引。现在,我将红色部分翻转两次,蓝色部分翻转1次,使索引从0到j的下面的位。红色部分的大小为RF1 * | S1 |蓝色部分是RF2 * | S2 |。 (例如:RF1 = 2且RF2 = 1)。给定下面位(从0到j)的索引,我们可以通过图中的公式确定它们在原始位中的索引l。

例如,如果所选信息符号的索引是例如5,我们将其映射到5 mod 4 + 2 = 3(红色箭头) enter image description here 但是,问题的索引是从0.你知道,matlab中向量的索引将从1开始。所以我将其改为如下图所示。我的问题是,如果使用第二个方案(索引来自1)通过matlab代码给出索引j,如何找到索引l。我做到了,但看起来很复杂

enter image description here

对于索引从1开始,我们可以看到我想将索引j = 6映射到l = 4 这是表格示例 enter image description here

这是我的代码

function l=find_index(j,S1,S2,RF1,RF2)
    if j<(RF1*S1-1)
        l=mod(j,S1);
        if l==0
            l=S1;
        end
    else 
        l=mod(j,RF2*S2)+S1 ;
        if l==0
            l=S2;
        end
    end
 end

2 个答案:

答案 0 :(得分:1)

也许这个?

function l=find_index(j,S1,S2,RF1,RF2)
    if j<=(RF1*S1)
        l=mod(j-1,S1)+1;
    else 
        l=mod(j-RF1*S1-1,S2)+S1+1;
    end
 end

答案 1 :(得分:1)

首先S2总是积极的,不是吗?这意味着l=mod(d,RF2*S2)+S2永远不能等于零,因此不必进行检查。其次,你可以转换第一个mod来包括支票,如下所示:l=mod(d-1,S1)+1;所以把它全部放在一起:

if j<(RF1*S1-1)
    l=mod(j-1,S1)+1;
else 
    l=mod(j,RF2*S2)+S2;
end

这可能是没有重新检查你的逻辑(我无法遵循)的正确答案。但是,如果由于某种原因你真的想要一个班轮:

l= (j<(RF1*S1-1))*(mod(j-1,S1)+1) + (j>=(RF1*S1-1))*(mod(j,RF2*S2)+S2);