我有一个关于如何在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作为十进制值,然后对000进行映射,在小数点0中,天线1被激活,001 = 1 ->天线2被激活。010 = 2 ->天线3激活,011 = 3 ->天线4激活.100 = 4 -->天线1和2激活,101 = 5 -->天线1和3激活,等等。
发布于 2018-12-11 10:54:55
根据所需的输入格式,可以使用2小数点到二进制转换函数中的一种:
转换
我建议使用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返回二进制表示形式的小endian位排序(数组中的第一个元素表示最低位)。这与我们的视觉约定有点相反,有一个参数可以逆转,但就您的目的而言,它已经完全符合我们的要求了。它使我们不必从右到左读取数组或将其反转。
索引:,你说你有4个天线,但在这个例子中,我会把它放大一点。假设你需要控制7个天线。这意味着我总是必须有一组索引,包含7个元素。没问题,de2bi允许您指定输出数字的数量。因此,再次激活天线2和4(七个天线中的一个):
>> 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编辑:,Ok,我把你更新的问题的答案放在这里来完成它,但是请注意,你编辑的问题与你原来的问题完全不同。您现在所要求的与将位转换为索引无关,它只是一个直接的映射,您必须先定义它(因为它不遵循任何计算逻辑)。基本上,将您的活动天线索引存储在一个单元阵列中,并选择与您随机生成的索引对应的单元格(您必须添加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发布于 2018-12-11 03:23:14
在天线1和2上执行ant_index = 0,0,1,1发送符号,然后执行x_trans(ant_index == 1) =符号。希望这能有所帮助。
https://stackoverflow.com/questions/53716551
复制相似问题