Package polyofdm.chart

Source Code of polyofdm.chart.ChartGenerator

package polyofdm.chart;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.data.xy.DefaultTableXYDataset;
import org.jfree.data.xy.XYSeries;

import Jama.Matrix;

public class ChartGenerator {
 


  public static JFreeChart createChartReal(Matrix matrix, boolean sin, String titlePart1, String titlePart2)
  {
    DefaultTableXYDataset dataset = calculateChartDatasetRealraum(matrix, sin);
   
    JFreeChart chart = ChartFactory.createXYLineChart(
        titlePart1 + ", time domain " + (sin ? "(sin)":"(cos)") + ", " + titlePart2, // title
        "time t", // x-axis label
        "amplitude f(t)", // y-axis label
        dataset, // data
        PlotOrientation.VERTICAL,
        true, // create legend?
        true, // generate tooltips?
        false // generate URLs?
        );
    return chart;
 
  }

  public static JFreeChart createChartMaxAmp(Matrix matrix, String titlePart1, String titlePart2)
  {
    DefaultTableXYDataset dataset = calculateChartDatasetMaxAmp(matrix);
    JFreeChart chart = ChartFactory.createXYLineChart(
        titlePart1 + ", time domain (norm), " + titlePart2, // title
        "time t", // x-axis label
        "amplitude f(t)", // y-axis label
        dataset, // data
        PlotOrientation.VERTICAL,
        true, // create legend?
        true, // generate tooltips?
        false // generate URLs?
        );
    return chart;
  }

  public static JFreeChart createChartSpektrum(Matrix matrix, boolean nah, boolean onlyAll, String titlePart1, String titlePart2)
  {
    StringBuilder sb = new StringBuilder();
    sb.append(titlePart1);
    sb.append(", spectrum");
    if (onlyAll)
      sb.append("-envelope");
    if (nah)
      sb.append(" (near), ");
    else
      sb.append(" (far), ");
    sb.append(titlePart2);
   
    DefaultTableXYDataset dataSet = calculateChartDatasetSpektrum(matrix, nah, onlyAll);
    JFreeChart chart = ChartFactory.createXYLineChart(
        sb.toString(), // title
        "frequency f (normalized)", // x-axis label
        "power spectrum (dB)", // y-axis label
        dataSet, // data
        PlotOrientation.VERTICAL,
        true, // create legend?
        true, // generate tooltips?
        false // generate URLs?
        );
    return chart;
  }

  private static DefaultTableXYDataset calculateChartDatasetSpektrum(
      Matrix matrix, boolean nah, boolean onlyAll)
  {
   
    int carriers = matrix.getColumnDimension();   
   
    double translation = (carriers-1) / 2d;
   
    int stepspertab = 10;
    int stepsToOneSide;
    double minDezibel;
    if (nah){
      stepsToOneSide = carriers * stepspertab;
      minDezibel = -70;
    } else {
      stepsToOneSide = carriers * stepspertab *2;
      minDezibel = -100;
    }
   
    double maxPower = 0;
    for (int i = -stepsToOneSide; i < stepsToOneSide; i++) {
      double time2 = i / (double)stepspertab;
      double time = time2 * StrictMath.PI;
      double power = 0;
      for (int basisVector = 0; basisVector < matrix.getRowDimension(); basisVector++) {
        double sum = 0;
        for (int carrier = 0; carrier < carriers; carrier++) {
          double ck = matrix.get(basisVector, carrier);
          double timesinc = time + (-carrier + translation) * StrictMath.PI;
          double sinc = sinc(timesinc);
          double value = ck * sinc;
          sum += value;
        }
        power += sum*sum;
      }
      if (power > maxPower)
        maxPower = power;
    }
 
    DefaultTableXYDataset xyData = new DefaultTableXYDataset();
   
    if (!onlyAll){
      for (int basisVector = 0; basisVector < matrix.getRowDimension(); basisVector++) {
 
        XYSeries xySeries = new XYSeries("Func " + basisVector, true, false);
 
        for (int i = -stepsToOneSide; i < stepsToOneSide; i++) {
          double time2 = i / (double)stepspertab;
          double time = time2 * StrictMath.PI;
 
          double sum = 0;
          for (int carrier = 0; carrier < carriers; carrier++) {
            double ck = matrix.get(basisVector, carrier);
            double timesinc = time + (-carrier + translation) * StrictMath.PI;
            double sinc = sinc(timesinc);
            double value = ck * sinc;
            sum += value;
          }
          double power = sum*sum;
          xySeries.add(time2, Math.max(minDezibel, 10*Math.log10(power/maxPower)));
        }
        xyData.addSeries(xySeries);
      }
    }
 
    XYSeries xySeriesSum = new XYSeries("Sum ", true, false);
    for (int i = -stepsToOneSide; i < stepsToOneSide; i++) {
      double time2 = i / (double)stepspertab;
      double time = time2 * StrictMath.PI;
      double power = 0;
      for (int basisVector = 0; basisVector < matrix.getRowDimension(); basisVector++) {
        double sum = 0;
        for (int carrier = 0; carrier < carriers; carrier++) {
          double ck = matrix.get(basisVector, carrier);
          double timesinc = time + (-carrier + translation) * StrictMath.PI;
          double sinc = sinc(timesinc);
          double value = ck * sinc;
          sum += value;
        }
        power += sum*sum;
      }
      xySeriesSum.add(time2, Math.max(minDezibel, 10*Math.log10(power/maxPower)));
    }
    xyData.addSeries(xySeriesSum);
 
    return xyData;
  }

  private static DefaultTableXYDataset calculateChartDatasetMaxAmp(Matrix matrix) {
    int n = matrix.getColumnDimension();
    double translate = (n - 1) / 2d;
    int steps = 200;
   
    DefaultTableXYDataset xyData = new DefaultTableXYDataset();
    for (int basisVector = 0; basisVector < matrix.getRowDimension(); basisVector++) {
 
      XYSeries xySeries1 = new XYSeries("Ampl. " + basisVector, true, false);
 
      for (int i = -steps; i <= steps; i++)
      {
        double omega = i * StrictMath.PI / steps;
 
        double sumCos = 0;
        double sumSin = 0;
       
        for (int carrier = 0; carrier < n; carrier++) {
          double ck = matrix.get(basisVector, carrier);
                             
          sumSin += ck * StrictMath.sin((carrier-translate) * omega);           
          sumCos += ck * StrictMath.cos((carrier-translate) * omega)
        }
       
       
        xySeries1.add(omega, StrictMath.sqrt(sumSin*sumSin+ sumCos*sumCos));
      }
      xyData.addSeries(xySeries1);
    }
    return xyData;
  }

  private static DefaultTableXYDataset calculateChartDatasetRealraum(Matrix matrix, boolean sin) {
    int n = matrix.getColumnDimension();
    double translate = (n - 1) / 2d;
    int steps = 200;
   
    DefaultTableXYDataset xyData = new DefaultTableXYDataset();
    for (int basisVector = 0; basisVector < matrix.getRowDimension(); basisVector++) {
 
      XYSeries xySeries1 = new XYSeries("Ampl. " + basisVector, true, false);
 
      for (int i = -steps; i <= steps; i++)
      {
        double omega = i * StrictMath.PI / steps;
 
        double sum = 0;
       
        for (int carrier = 0; carrier < n; carrier++) {
          double ck = matrix.get(basisVector, carrier);
                             
          if (sin)
            sum += ck * StrictMath.sin((carrier-translate) * omega);           
          else
            sum += ck * StrictMath.cos((carrier-translate) * omega)
        }
       
       
        xySeries1.add(omega, sum);
      }
      xyData.addSeries(xySeries1);
    }
    return xyData;
  }

  public static JFreeChart createChartFourier(Matrix matrix, String titlePart1, String titlePart2)
  {
    DefaultTableXYDataset dataset = calculateChartDatasetFourierraum(matrix);   
    JFreeChart chart = ChartFactory.createXYLineChart(
        titlePart1 + ", frequency domain, " + titlePart2, // title
        "frequency f (normalized)", // x-axis label
        "F~", // y-axis label
        dataset, // data
        PlotOrientation.VERTICAL,
        true, // create legend?
        true, // generate tooltips?
        false // generate URLs?
        );
    return chart;
 
  }

  private static DefaultTableXYDataset calculateChartDatasetFourierraum(
      Matrix matrix)
  {
   
    int stuetzstellen = matrix.getColumnDimension();   
   
    double translate = (stuetzstellen-1) / 2d;
   
    int stepspertab = 10;
    int stepsToOneSide = stuetzstellen * stepspertab;
    DefaultTableXYDataset xyData = new DefaultTableXYDataset();
   
    for (int basisVector = 0; basisVector < matrix.getRowDimension(); basisVector++) {
 
      XYSeries xySeries = new XYSeries("Func " + basisVector, true, false);
 
      for (int i = -stepsToOneSide; i < stepsToOneSide; i++) {
        double time2 = i / (double)stepspertab;
        double time = time2 * StrictMath.PI;
 
        double sum = 0;
        for (int carrier = 0; carrier < stuetzstellen; carrier++) {
          double ck = matrix.get(basisVector, carrier);
          double timesinc = time + (-carrier + translate) * StrictMath.PI;
          double sinc = sinc(timesinc);
          double value = ck * sinc;
          sum += value;
        }
        xySeries.add(time2, sum);
      }
      xyData.addSeries(xySeries);
    }
    return xyData;
  }

  private static double sinc(double time) {
    if (time != 0)
      return StrictMath.sin(time) / time;
    else
      return 1;
  }


}
TOP

Related Classes of polyofdm.chart.ChartGenerator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.