/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package statistics.simulators;
import java.util.Random;
import weka.core.Instances;
import weka.filters.NormalizeCase;
/**
*
* @author ajb
*/
public class SimulatePowerSpectrum extends DataSimulator {
//Models
int minWaves=1;
int maxWaves=5;
public SimulatePowerSpectrum(double[][] paras){
super(paras);
for(int i=0;i<nosClasses;i++)
models.add(new SinusoidalModel(paras[i]));
}
public static Instances generateFFTDataSet(int minParas, int maxParas, int seriesLength, int[] nosCases, boolean normalize){
double[][] paras=new double[nosCases.length][];
//Generate random parameters for the first FFT
Random rand= new Random();
SinusoidalModel[] sm=new SinusoidalModel[nosCases.length];
int modelSize=minParas+rand.nextInt(maxParas-minParas);
paras[0]=new double[3*modelSize];
for(int j=0;j<paras.length;j++)
paras[0][j]=rand.nextDouble();
for(int i=1;i<sm.length;i++){
paras[i]=new double[3*modelSize];
for(int j=0;j<paras.length;j++){
paras[i][j]=paras[0][j];
//Perturb it 10%
paras[i][j]+=-0.1+0.2*rand.nextDouble();
if(paras[i][j]<0 || paras[i][j]>1)
paras[i][j]=paras[0][j];
}
}
for(int i=0;i<sm.length;i++){
sm[i]=new SinusoidalModel(paras[i]);
sm[i].setFixedOffset(false);
}
// for(int i=0;i<paras.length;i++)
// paras[i]=generateStationaryParameters(minParas,maxParas);
DataSimulator ds = new DataSimulator(sm);
Instances d=ds.generateDataSet(seriesLength,nosCases);
if(normalize){
try{
NormalizeCase norm=new NormalizeCase();
norm.setNormType(NormalizeCase.NormType.STD_NORMAL);
d=norm.process(d);
}catch(Exception e){
System.out.println("Exception e"+e);
e.printStackTrace();
System.exit(0);
}
}
return d;
}
@Override
public double[] generate(int length, int modelNos) {
throw new UnsupportedOperationException("Not supported yet.");
}
}