📄 noisegen.java
字号:
package util;
import umontreal.iro.lecuyer.probdist.NormalDist;
import umontreal.iro.lecuyer.randvar.NormalGen;
import umontreal.iro.lecuyer.randvarmulti.MultiNormalGen;
import umontreal.iro.lecuyer.rng.LFSR113;
import umontreal.iro.lecuyer.rng.RandomStream;
public class NoiseGen
{
//噪声的均值
protected double[] mean;
//协方差
protected double[][]cov;
//维数
protected int dem;
//多元正态分布产生器
protected MultiNormalGen multiNormalGen;
//如果各维是相互独立的,则协方差矩阵是一个对角矩阵
public NoiseGen(double[] mean,double[] der)
{
this.mean=mean;
dem=mean.length;
cov=new double[dem][dem];
for(int i=0;i<dem;i++)
{
for(int j=0;j<dem;j++)
{
if(i==j)
cov[i][j]=der[i];
else
cov[i][j]=0;
}
}
}
public NoiseGen(double[] mean,double[][] cov)
{
this.mean=mean;
this.cov=cov;
}
//定义多元正态分布产生器
public void GenNorDistributiion()
{
RandomStream rs=new LFSR113();
NormalDist noralDist=new NormalDist();
NormalGen normalGen=new NormalGen(rs,noralDist);
multiNormalGen=new MultiNormalGen(normalGen,mean,cov);
}
public double[] getNoise()
{
double[] noise=new double[dem];
multiNormalGen.nextPoint(noise);
return noise;
}
public void printMultiNorm()
{
double[] nextValue=new double[dem];
multiNormalGen.nextPoint(nextValue);
for(int i=0;i<nextValue.length;i++)
{
System.out.print(nextValue[i]+" ");
}
System.out.println();
}
public static void main(String[] args)
{
int dem=4;
double[] mean=new double[dem];
double[][] cov=new double[dem][dem];
for(int i=0;i<dem;i++)
{
mean[i]=0;
}
for(int i=0;i<dem;i++)
{
for(int j=0;j<dem;j++)
{
if(i==j)
cov[i][j]=1.0;
else
cov[i][j]=0;
}
}
NoiseGen noiseGen=new NoiseGen(mean,cov);
noiseGen.GenNorDistributiion();
for(int i=0;i<100;i++)
{
noiseGen.printMultiNorm();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -