你好,我有10位的随机序列x = 0100100011
我想创建另一个序列y,但概率0.2与x不同,这实际上意味着当我有10位时,我大概期望10位中的2位与我的初始序列不同。如何在matlab上实现呢?
谢谢。
假设
您可以执行以下操作:
x = [0 1 0 0 1 0 0 0 1 1];
p = 0.2; % probability of bit flip
y = xor(x, rand(size(x))<p);
[平均,x
和y
将在比特的小数p
中有所不同。
rand(size(x))<p
创建一个与x
大小相同的序列,其中每个元素 包含概率为1
的p
,否则为0
。每个1
表示应更改x
中的相应值。这是通过xor(x, ...)
完成的。
虽然在问题中,我们希望大约 10位中的2位与初始序列不同,但在下面的答案中[[确切 10位中的2位与初始序列不同:] >x = [0 1 0 0 1 0 0 0 1 1];
n = 10;
p = 2;
pos = randperm(n, p);
x(pos) = ~x(pos);