如何在Java中生成高斯噪声?

时间:2013-11-16 08:25:16

标签: java

我正在寻找一个高斯噪声发生器,它接收2个参数:均值和方差,然后生成高斯噪声。

在搜索过程中,我发现了很多这样的图像生成器。但是,我想要的是通用生成器。我希望做的事情如下:

myGaussianNoiseGenerator = new GaussianNoiseGenerator(mean, variance);
mySignalWithNoise = mySignal + myGaussianNoiseGenerator.generate();

我怎么能这样做?

4 个答案:

答案 0 :(得分:12)

根据您的需要对Random.nextGaussian()的输出进行反规范化应该很简单:

java.util.Random r = new java.util.Random();
double noise = r.nextGaussian() * Math.sqrt(variance) + mean;

答案 1 :(得分:0)

你可以试试这个: 首先创建一个名为GaussianNoiseGenerator的新课程。

    public class GaussianNoiseGenerator {

         public final int mean;
         public final int variance;

         public GaussianNoiseGenerator(int mean, int variance) {
          this.mean = mean;
          this.variance = variance;

//do the math here, and return result
int result = this.mean * this.variance;
//I am not sure of the math, just an example for you

return result;
         }
}

然后您可以通过以下方式使用它:

GaussianNoiseGenerator myGaussianNoiseGenerator = new GaussianNoiseGenerator(56115, 455445);

答案 2 :(得分:0)

噪音应该平均为0,所以这样的事情应该有效:

import java.util.Random;
...
Random rand = new Random();
mySignalWithNoise = mySignal + rand.nextGaussian()*noiseStandardDeviation;

答案 3 :(得分:-1)

如果通过“信号”表示只是双倍值,那么答案就是

Random rnd = new Random();
double signal = (rnd.nextGaussian() - mean) / Math.sqrt(variance);

Random是标准类。

<强>证明

如果你将sigma和mu分组在x下方

指数之前的因子是无关紧要的,因为分布可以重新归一化。

enter image description here