分割随机数据的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 数组的向量。这也意味着 y1
和 y2
必须是一个 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
表示。这似乎不是你想要的,所以我不会在这里做。
希望它有效,祝你好运!
在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 数组的向量。这也意味着 y1
和 y2
必须是一个 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
表示。这似乎不是你想要的,所以我不会在这里做。
希望它有效,祝你好运!