首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在MATLAB中将二进制位转换为索引?

如何在MATLAB中将二进制位转换为索引?
EN

Stack Overflow用户
提问于 2018-12-10 13:36:20
回答 2查看 291关注 0票数 1

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

代码语言:javascript
运行
复制
%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作为十进制值,然后对000进行映射,在小数点0中,天线1被激活,001 = 1 ->天线2被激活。010 = 2 ->天线3激活,011 = 3 ->天线4激活.100 = 4 -->天线1和2激活,101 = 5 -->天线1和3激活,等等。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-11 10:54:55

根据所需的输入格式,可以使用2小数点到二进制转换函数中的一种:

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

转换

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

代码语言:javascript
运行
复制
>> 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返回二进制表示形式的小endian位排序(数组中的第一个元素表示最低位)。这与我们的视觉约定有点相反,有一个参数可以逆转,但就您的目的而言,它已经完全符合我们的要求了。它使我们不必从右到左读取数组或将其反转。

索引:,你说你有4个天线,但在这个例子中,我会把它放大一点。假设你需要控制7个天线。这意味着我总是必须有一组索引,包含7个元素。没问题,de2bi允许您指定输出数字的数量。因此,再次激活天线2和4(七个天线中的一个):

代码语言:javascript
运行
复制
>> Nt=7;
>> Ant_index = de2bi(10,Nt)
Ant_index =
     0     1     0     1     0     0     0

这样,您就可以直接使用索引来传输数据:

代码语言:javascript
运行
复制
x_trans(Ant_index) = Symbole;

输入格式:

这就是如果你知道你的基本二进制表,直到你的天线数目。如果您希望能够使用二进制表示来指定活动天线,而不是直接使用十进制数,则可以使用反向转换函数,更具体地说,使用bin2dec (最后一个示例)向您展示它们是如何一起工作的:

代码语言:javascript
运行
复制
>> stringAntIndex = '1010'
stringAntIndex =
1010

decimalAntIndex = bin2dec(stringAntIndex)
decimalAntIndex =
    10

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

当然,您可以简化为:

代码语言:javascript
运行
复制
>> stringAntIndex = '1010' ;
>> Ant_index = de2bi(bin2dec(stringAntIndex),Nt)
Ant_index =
     0     1     0     1     0     0     0

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

代码语言:javascript
运行
复制
% 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;

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

代码语言:javascript
运行
复制
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

产生的结果:

代码语言:javascript
运行
复制
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
票数 0
EN

Stack Overflow用户

发布于 2018-12-11 03:23:14

在天线1和2上执行ant_index = 0,0,1,1发送符号,然后执行x_trans(ant_index == 1) =符号。希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53716551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档