分割随机数据的Matlab代码

Matlab code to split a random data

在Matlab中,如何将一个随机数据拆分成两个矩阵,例如:X(i)是一个随机向量,其中i=1:100,每个数据符号由四位组成,其中x( 1)和x(2)是MSB(Most Significant Bits),x(3)和x(4)是LSB(Least Significant Bits)。我想拆分它们以获得新矩阵 y1(对于 MSB)和 y2(对于 LSB)。

编辑 这是一些示例代码,但由于某种原因它似乎不起作用,

M=16;
N=10;
c=randi([0 M-1],1,N); 
xx=dec2bin(c); 
for k = 1:N-1
    for j= 1:4
        y1(k)=xx(k);
        y1(k+1)=xx(k+1);
        y2(k+2)= xx(k+2);
        y2(k+3)= xx(k+3);
    end
end

你写的代码好像有问题。我认为有些问题是基于对matlab的误解。我将在这里写一些问题的简短列表:

1)matlab中没有字符串class。取而代之的是 char 数组。此外,Matlab 不使用与 Java 或 c++ 相同的方式使用指针或引用。这意味着您不能像那里那样拥有带有 char 数组的向量。这也意味着 y1y2 必须是一个 matlab 单元格或矩阵来存储数据。

2) 如果 c 是一个向量,那么 xx 将是一个矩阵, size(xx) == [length(c),dec2bin(max(x))] 也就是说,每串二进制值是一行,每一行恰好是足够大以适应最大的字符串,例如

a = [13,257];
b = dec2bin(a);

其中 b 是 2x9 矩阵,因为 b 至少需要九位。所以你的问题。我将矢量化解决方案并使用 dec2bin 中的额外参数将位数锁定为 4。试试这个,

function [msBit, lsBit] = test()
M=16;
N=10;
if M>16
    error('M must not be greater than 4 bits');
end
c=randi([0 M-1],1,N); 
xx = dec2bin(c,4);
disp xx
disp(xx)
disp ' '

% Take the 2 most significant bits from every row
msBit = xx(:,1:2);
% Take the 2 least significant bits from every row
lsBit = xx(:,3:4);

disp msb
disp(msBit);
disp ' '
disp lsb
disp(lsBit);

当然也可以使用int8,那么我们需要使用bitwise operaton functions。这比较困难,结果当然是一个 int。所以 1100 将由 12 表示。这似乎不是你想要的,所以我不会在这里做。

希望它有效,祝你好运!