我正在寻找一个高斯噪声发生器,它接收2个参数:均值和方差,然后生成高斯噪声。
在搜索过程中,我发现了很多这样的图像生成器。但是,我想要的是通用生成器。我希望做的事情如下:
myGaussianNoiseGenerator = new GaussianNoiseGenerator(mean, variance);
mySignalWithNoise = mySignal + myGaussianNoiseGenerator.generate();
我怎么能这样做?
答案 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下方
指数之前的因子是无关紧要的,因为分布可以重新归一化。