如何在MATLAB

时间:2018-12-10 13:36:21

标签: matlab dynamic-programming

我有一个关于如何在MATLAB中使用二进制位作为索引的问题,例如,如果我使用4根天线来传输数据,则在每个瞬间,一两个天线都处于活动状态以传输数据。我如何使用天线索引来传输该符号,下面是一个示例:

%Suppose I'm using for antennas to transmit that data. 
Nt = 4;          % Number of antennas
Symbole = 1+j;    % The symbol to transmit in binary after modulation

Ant_index = 11;  % The antenna index which will be used to transmit data. (here number 3 will be used)
x_trans =zeros(Nt,1); % Initialization of antennas 
x_trans(Ant_index) = Symbole;     %Use the antenna to transmit the data 

我的问题是在最后一步,x_trans(Ant_index) = Symbole;我想使用二进制位作为索引,这意味着,我要使用两个来代替二进制位Ant_index = 11(这意味着十进制为3)用作发送相同符号的天线的比特。例如,如果我有比特0101,这意味着我将使用天线编号1和3来发送符号,与上述示例Ant_index = 0011相同。这意味着将使用第一和第二天线发送符号。

编辑:

第二部分,如果生成的天线索引生成位是随机生成的,那该怎么办?并且我们要避免使用Ant_index = 000;换句话说,我们需要将Ant_index作为十进制值,然后对十进制为0的000进行映射,应激活天线1,001 = 1 --->天线2应该被激活。 010 = 2 --->天线3有效,011 = 3 --->天线4有效。 100 = 4 --->天线1和2有效,101 = 5->天线1和3有效,依此类推。

2 个答案:

答案 0 :(得分:0)

您做ant_index = [0,0,1,1]用于在天线1和2上发送符号。然后做x_trans(ant_index == 1)=符号。希望有帮助。

答案 1 :(得分:0)

根据输入的所需格式,您可以使用十进制2到二进制转换功能之一:

  • de2bi =>返回 01的数组,代表二进制数。
  • dec2bin => 返回二进制数字的字符串表示形式。

转化

我建议使用de2bi,因为数组将更易于转换为索引。例如: 激活天线1和2(十进制{3 == {11):

>> de2bi(3) % index antenna 1 and 2 (`3` decimal == `11` in binary):
ans =
     1     1
>> de2bi(10) % index antenna 2 and 4 (`10` decimal == `1010` in binary):
ans =
     0     1     0     1

请注意,默认情况下de2bi小端位顺序返回二进制表示形式(数组中的第一个元素代表最低位)。这与我们的视觉惯例有点相反,有一个参数可以将其反转,但是对于您而言,它已经正是我们想要的。这样可以避免我们从右到左读取数组或将其反转。


索引: 您说您有4根天线,但是在此示例中,我将其扩大一点。假设您需要控制7根天线。这意味着我始终必须拥有包含7个元素的索引数组。没问题,de2bi允许您指定输出位数。同样,要激活天线2和4(共7个):

>> Nt=7;
>> Ant_index = de2bi(10,Nt)
Ant_index =
     0     1     0     1     0     0     0

您可以直接使用索引来传输数据

x_trans(Ant_index) = Symbole;

输入格式:

如果您知道基本的二进制表(取决于天线的数量),那就很好了。如果您希望能够使用二进制表示形式而不是直接十进制数字来指定有源天线,则可以使用反向转换功能,更具体地说,bin2dec 最后一个示例向您展示它们如何协同工作:

>> stringAntIndex = '1010'
stringAntIndex =
1010

decimalAntIndex = bin2dec(stringAntIndex)
decimalAntIndex =
    10

>> Ant_index = de2bi(decimalAntIndex,7)
Ant_index =
     0     1     0     1     0     0     0

您当然可以简化为:

>> stringAntIndex = '1010' ;
>> Ant_index = de2bi(bin2dec(stringAntIndex),Nt)
Ant_index =
     0     1     0     1     0     0     0

编辑:好,我将更新后的问题的答案放在此处,但请注意,您编辑后的问题与原始问题完全不同。您现在要问的与将位转换为索引无关,这只是您必须事先定义的直接映射(因为它不遵循任何计算逻辑)。 基本上,将活动天线的索引存储在单元阵列中,然后选择与您随机生成的索引对应的单元(您必须添加1,因为MATLAB在1而不是0处开始数组索引像许多其他语言一样。 所以:

% Map the antenna to be active depending on decimal input
Antenna2Activate = {
    [1] ;   % antenna 1 active
    [2] ;   % antenna 2 active
    [3] ;   % ...
    [4] ;   % ...
    [1 2] ; % antenna 1 & 2 active
    [1 3] ; % antenna 1 & 3 active
    [1 4] ; % ...
    [2 3]   % antenna 2 & 3 active
    };

% Then to activate the proper antenna given a decimal input [decimalInput]:
Ant_index = Antenna2Activate{ decimalInput+1 } ;
x_trans(Ant_index) = Symbole;

要确保它以您想要的方式工作,可以运行以下代码:

decinput = 0:7 ;
for k=1:numel(Antenna2Activate)
    Ant_index = Antenna2Activate{ decinput(k)+1 } ;
    fprintf('Decimal input= %d \t Binary= %3s \t Ant_index: ',decinput(k),dec2bin(decinput(k),3))
    disp(Ant_index)
end

哪种产量:

Decimal input= 0     Binary= 000     Ant_index:      1
Decimal input= 1     Binary= 001     Ant_index:      2
Decimal input= 2     Binary= 010     Ant_index:      3
Decimal input= 3     Binary= 011     Ant_index:      4
Decimal input= 4     Binary= 100     Ant_index:      1     2
Decimal input= 5     Binary= 101     Ant_index:      1     3
Decimal input= 6     Binary= 110     Ant_index:      1     4
Decimal input= 7     Binary= 111     Ant_index:      2     3