Boa tarde pessoal, estou com um problema de conceito gostaria da ajuda de vocês se possível.
Estou construindo uma classe para plotar gráficos.
e na classe para efetuar o cálculo,
import org.jfree.data.xy.XYSeries;
import linearization.FileIO;
public abstract class Chart {
protected List<Integer> listIQ;
protected int[] iArray = new int[1024];
protected int[] qArray = new int[1024];
public Chart(String sfileName){
loadFile(sfileName);
}
public Chart(List list){
this.listIQ = list;
divArray(listIQ);
}
/**
* Carrega arquivo que contém os valores de I e Q
*
*/
private void loadFile(String sfileName){
try {
listIQ = FileIO.getIntegersFromFile(sfileName);
divArray(listIQ);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Função para alocar os valores de I no array I
* e alocar os valores de Q no array Q
*
*/
protected void divArray(List<Integer> list){
for (int i = 0; i < 1024; i++) {
//os valores de I estão nas primeiras 1024 linhas do arquivo
this.iArray[i] = list.get(i);
//os valores de Q estão nas 1024 linhas posteriores
this.qArray[i] = list.get(i+1025);
}
}
public abstract XYSeries plotABS();
public abstract XYSeries plotPHASE();
}
import Chart;
import math.complex.Complex;
import org.jfree.data.xy.XYSeries;
public class Plot_Chart extends Chart{
private Complex cx;
private final double NORM = 65535.0; //valor para normalizar 32bits
private XYSeries series=null;
public Plot_Chart(List list) {
super(list);
}
public Plot_Chart(String sfileName) {
super(sfileName);
}
/**
* Função que retorna um XYSerie para plotar gráfico de magnitude
* retorna array de 1024 valores calculados por
* 20*log(sqrt(re^2 + img^2))
* ou 20*log(abs(I,Q))
* @return XYSerie
*/
public XYSeries plotABS(){
double value;
series = new XYSeries("Absolut value");
for (int i = 0; i < 1024; i++) {
Complex cx = new Complex(iArray[i]/NORM,qArray[i]/NORM);
value = 20*Math.log(cx.abs());
series.add(i,value);
}
return series;
}
/**
* Função que retorna um XYSerie para plotar gráfico de fase
* retorna array de 1024 valores calculados por
* atan(img/re)*180/pi
* @return XYSerie
*/
public XYSeries plotPHASE() {
double value;
series = new XYSeries("Phase value");
for(int i=0;i<1024;i++){
cx = new Complex(iArray[i]/NORM,qArray[i]/NORM);
value = cx.phase()*180.0/Math.PI;
series.add(i,value);
}
return series;
}
}
Gostaria de deixar o plot generico por exemplo
public XYSeries plot(){
double value;
series = new XYSeries("Absolut value");
for (int i = 0; i < 1024; i++) {
Complex cx = new Complex(iArray[i]/NORM,qArray[i]/NORM);
//invoca classe para realizar cálculo
series.add(i,value);
}
return series;
}
No caso como eu devo proceder?
criar uma classe abstrata Calc com os metodos calcABS e calcPHASE
e depois chamar naquele trecho de código?
estou um pouco confuso.
grato
Caio Pereira