gpt4 book ai didi

c++ - 如何使随机损失位服从高斯分布

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:22:22 25 4
gpt4 key购买 nike

目前,我正在制作一个程序来生成具有给定丢失率的丢失位。

假设我有位数输入 N=1000,其中 N 位中丢失的位数遵循 binomial distribution .假设每个比特丢失的概率 p=20%,并且比特丢失是独立的。因此,对于 1000 位和 20% 的丢失率,您将得到以下高斯分布:reference均值为 Np,方差为 Np(1-p)。我们可以通过使用蒙特卡洛模拟来实现它。据我所知,我在 here 得到.

我不知道如何在 C/C++ 中实现该方案。您能否向我建议如何使用输入生成位错误是总位和概率错误。这是我在 C/C++ 中的尝试,但它看起来不像理论:

int* bitloss(int* orbit,int size_orbit,int loss_percent) {

int* out_bitstream=(int*)malloc(sizeof(int)*size_orbit);
int randval ;
std::random_device rd;
std::mt19937 generator(rd());
generator.seed( rd() );
std::uniform_int_distribution<> distribution(0, 100);

for(int i=0;i<size_orbit,i++) {
rand_loss = distribution(generator);
if(randval<((int)lossbitprob*100))
out_bitstream[i]=-1;
else out_bitstream[i]=orbit[i];
}

return out_bitstream;
}

最佳答案

如果样本数量(size_orbit)足够大,earlier post的代码:

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];
}

应该(没有变化)收敛到规定的理论结果。也就是说,如果您要使用以下方法计算直方图:

int histogram[size_orbit+1] = {0};
for (int j=0; j<number_of_experiments; j++)
{
int count = 0;
for (int i=0; i<size_orbit; i++)
{
if (out_bitstream[i] == -1)
count++;
}
histogram[count]++;
}

那么每个实验中比特丢失总数的相对发生率应该收敛于均值为Np,方差为Np(1-p)的高斯分布。或者换句话说,每个实验中的损失位数可能看起来“好像”是由以下过程生成的:

double mean        = size_orbit * loss_percent; // Np
double variance = size_orbit * loss_percent * (1.0 - loss_percent); // Np(1-p)
double sigmarandom = sqrt(std::max(0.0, variance));
std::normal_distribution<double> distribution(mean,sigmarandom);
int lossbitcount = round(distribution(generator));

关于c++ - 如何使随机损失位服从高斯分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24164295/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com