【发布时间】:2014-06-11 13:32:38
【问题描述】:
目前,我正在制作一个程序来生成具有给定丢失率的丢失位。
假设我的输入位数 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;
}
【问题讨论】:
-
如果你真的需要
that bit loss are independent,那么你需要随机数的均匀分布。每个轨道实际丢失的比特数将趋于接近正态分布。 -
@quamrana:真的。我们可以对随机数使用均匀分布,对吧?所以我的代码更新了。你能帮我检查一下吗?
-
是的,您的代码现在对随机数使用均匀分布。您仍然需要解决上面代码中的其他问题 - 您应该真正提交实际编译的代码!
-
@quamrana:谢谢。我正在运行程序来检查输出是否接近高斯分布。让我们等待
标签: c++ visual-studio-2010 signal-processing