为什么随机丢失符号不能很好地工作

时间:2014-06-06 10:00:22

标签: c++ visual-studio-2010 signal-processing channel

我尝试从给定的比特流中进行随机丢失。假设我有一个比特流

10 01 10 11 00

现在我将创建一个代码来实现随机丢失。具有两个输入的功能是原始比特流和百分比损失。输出功能是输出比特流

int* bitloss(int* orbit,int size_orbit,float loss_percent)
{
srand(time(NULL));
int* out_bitstream=(int*)malloc(sizeof(int)*size_orbit);
double randval ;
for(int i=0;i<size_orbit,i++)
{
    randval = (double)rand()/(double)RAND_MAX;
    if(randval<loss_percent) 
         out_bitstream[i]=-1;
     else out_bitstream[i]=orbit[i];

}
return out_bitstream;
}

如果随机低于loss_percent.I调用-1位是丢失位,则此代码将原始位的值更改为-1。所以假设loss_percent等于20%。这意味着我将从10个原始位丢失2个数据包。但是当我这样做的时候。我表明有时候我会丢失0位,有时会丢失4位,有时会丢失2位。它不稳定。如何编辑我的代码以稳定损失。例如,我想损失20%。所以-1位的数量是2.非常感谢

2 个答案:

答案 0 :(得分:4)

假设每个比特丢失的概率p,并且该比特丢失是独立的(例如,在突发中比特丢失更可能发生的一些衰落信道中可能不是这种情况), N位中丢失的位数跟binomial distribution之后。

因此,对于10位和20%的丢失率,您将得到以下分布: B(10,0.2)

同样,对于1000位且相同的损失率为20%,您将得到以下分布: B(1000,0.2)

请注意,随着总位数变大,二项分布接近高斯分布,平均Np和方差Np(1-p)。 具体而言,对于N=1000p=0.2重叠的情况,高斯分布在二项分布上给出: enter image description here

正如你所看到的,这是一个很好的近似值。

答案 1 :(得分:1)

这是随机数的问题:它们是随机的。如果它总是丢弃2个数据包,则不会是随机的。

如果你想总是从10中丢失2个数据包,那么就随机选择这些数据包。有点像...

int firstLoss, secondloss;
firstLoss = rand() % 10;

do {
  secondloss = rand() % 10;
} while (secondLoss == firstLoss);

我们需要while循环(或类似的'tweak')来避免两次选择相同的数据包......