Class FastCosineTransformer

java.lang.Object
org.apache.commons.math.transform.FastCosineTransformer
All Implemented Interfaces:
RealTransformer

public class FastCosineTransformer extends Object implements RealTransformer
Implements the Fast Cosine Transform for transformation of one-dimensional data sets. For reference, see Fast Fourier Transforms, ISBN 0849371635, chapter 3.

FCT is its own inverse, up to a multiplier depending on conventions. The equations are listed in the comments of the corresponding methods.

Different from FFT and FST, FCT requires the length of data set to be power of 2 plus one. Users should especially pay attention to the function transformation on how this affects the sampling.

As of version 2.0 this no longer implements Serializable

Since:
1.2
Version:
$Revision:670469 $ $Date:2008-06-23 10:01:38 +0200 (lun., 23 juin 2008) $
  • Constructor Details

    • FastCosineTransformer

      public FastCosineTransformer()
      Construct a default transformer.
  • Method Details

    • transform

      public double[] transform(double[] f) throws IllegalArgumentException
      Transform the given real data set.

      The formula is Fn = (1/2) [f0 + (-1)n fN] + ∑k=1N-1 fk cos(π nk/N)

      Specified by:
      transform in interface RealTransformer
      Parameters:
      f - the real data array to be transformed
      Returns:
      the real transformed array
      Throws:
      IllegalArgumentException - if any parameters are invalid
    • transform

      public double[] transform(UnivariateRealFunction f, double min, double max, int n) throws FunctionEvaluationException, IllegalArgumentException
      Transform the given real function, sampled on the given interval.

      The formula is Fn = (1/2) [f0 + (-1)n fN] + ∑k=1N-1 fk cos(π nk/N)

      Specified by:
      transform in interface RealTransformer
      Parameters:
      f - the function to be sampled and transformed
      min - the lower bound for the interval
      max - the upper bound for the interval
      n - the number of sample points
      Returns:
      the real transformed array
      Throws:
      FunctionEvaluationException - if function cannot be evaluated at some point
      IllegalArgumentException - if any parameters are invalid
    • transform2

      public double[] transform2(double[] f) throws IllegalArgumentException
      Transform the given real data set.

      The formula is Fn = √(1/2N) [f0 + (-1)n fN] + √(2/N) ∑k=1N-1 fk cos(π nk/N)

      Parameters:
      f - the real data array to be transformed
      Returns:
      the real transformed array
      Throws:
      IllegalArgumentException - if any parameters are invalid
    • transform2

      public double[] transform2(UnivariateRealFunction f, double min, double max, int n) throws FunctionEvaluationException, IllegalArgumentException
      Transform the given real function, sampled on the given interval.

      The formula is Fn = √(1/2N) [f0 + (-1)n fN] + √(2/N) ∑k=1N-1 fk cos(π nk/N)

      Parameters:
      f - the function to be sampled and transformed
      min - the lower bound for the interval
      max - the upper bound for the interval
      n - the number of sample points
      Returns:
      the real transformed array
      Throws:
      FunctionEvaluationException - if function cannot be evaluated at some point
      IllegalArgumentException - if any parameters are invalid
    • inversetransform

      public double[] inversetransform(double[] f) throws IllegalArgumentException
      Inversely transform the given real data set.

      The formula is fk = (1/N) [F0 + (-1)k FN] + (2/N) ∑n=1N-1 Fn cos(π nk/N)

      Specified by:
      inversetransform in interface RealTransformer
      Parameters:
      f - the real data array to be inversely transformed
      Returns:
      the real inversely transformed array
      Throws:
      IllegalArgumentException - if any parameters are invalid
    • inversetransform

      public double[] inversetransform(UnivariateRealFunction f, double min, double max, int n) throws FunctionEvaluationException, IllegalArgumentException
      Inversely transform the given real function, sampled on the given interval.

      The formula is fk = (1/N) [F0 + (-1)k FN] + (2/N) ∑n=1N-1 Fn cos(π nk/N)

      Specified by:
      inversetransform in interface RealTransformer
      Parameters:
      f - the function to be sampled and inversely transformed
      min - the lower bound for the interval
      max - the upper bound for the interval
      n - the number of sample points
      Returns:
      the real inversely transformed array
      Throws:
      FunctionEvaluationException - if function cannot be evaluated at some point
      IllegalArgumentException - if any parameters are invalid
    • inversetransform2

      public double[] inversetransform2(double[] f) throws IllegalArgumentException
      Inversely transform the given real data set.

      The formula is fk = √(1/2N) [F0 + (-1)k FN] + √(2/N) ∑n=1N-1 Fn cos(π nk/N)

      Parameters:
      f - the real data array to be inversely transformed
      Returns:
      the real inversely transformed array
      Throws:
      IllegalArgumentException - if any parameters are invalid
    • inversetransform2

      public double[] inversetransform2(UnivariateRealFunction f, double min, double max, int n) throws FunctionEvaluationException, IllegalArgumentException
      Inversely transform the given real function, sampled on the given interval.

      The formula is fk = √(1/2N) [F0 + (-1)k FN] + √(2/N) ∑n=1N-1 Fn cos(π nk/N)

      Parameters:
      f - the function to be sampled and inversely transformed
      min - the lower bound for the interval
      max - the upper bound for the interval
      n - the number of sample points
      Returns:
      the real inversely transformed array
      Throws:
      FunctionEvaluationException - if function cannot be evaluated at some point
      IllegalArgumentException - if any parameters are invalid
    • fct

      protected double[] fct(double[] f) throws IllegalArgumentException
      Perform the FCT algorithm (including inverse).
      Parameters:
      f - the real data array to be transformed
      Returns:
      the real transformed array
      Throws:
      IllegalArgumentException - if any parameters are invalid