org.apache.commons.math.transform
public class FastHadamardTransformer extends java.lang.Object implements RealTransformer
In addition to transformation of real vectors, the Hadamard transform can transform integer vectors into integer vectors. However, this integer transform cannot be inverted directly. Due to a scaling factor it may lead to rational results. As an example, the inverse transform of integer vector (0, 1, 0, 1) is rational vector (1/2, -1/2, 0, 0).
Constructor and Description |
---|
FastHadamardTransformer() |
Modifier and Type | Method and Description |
---|---|
protected double[] |
fht(double[] x)
The FHT (Fast Hadamard Transformation) which uses only subtraction and addition.
|
protected int[] |
fht(int[] x)
The FHT (Fast Hadamard Transformation) which uses only subtraction and addition.
|
double[] |
inversetransform(double[] f)
Inversely transform the given real data set.
|
double[] |
inversetransform(UnivariateRealFunction f,
double min,
double max,
int n)
Inversely transform the given real function, sampled on the given interval.
|
double[] |
transform(double[] f)
Transform the given real data set.
|
int[] |
transform(int[] f)
Transform the given real data set.
|
double[] |
transform(UnivariateRealFunction f,
double min,
double max,
int n)
Transform the given real function, sampled on the given interval.
|
public double[] transform(double[] f) throws java.lang.IllegalArgumentException
transform
in interface RealTransformer
f
- the real data array to be transformed (signal)java.lang.IllegalArgumentException
- if any parameters are invalidpublic double[] transform(UnivariateRealFunction f, double min, double max, int n) throws FunctionEvaluationException, java.lang.IllegalArgumentException
transform
in interface RealTransformer
f
- the function to be sampled and transformedmin
- the lower bound for the intervalmax
- the upper bound for the intervaln
- the number of sample pointsFunctionEvaluationException
- if function cannot be evaluated at some pointjava.lang.IllegalArgumentException
- if any parameters are invalidpublic double[] inversetransform(double[] f) throws java.lang.IllegalArgumentException
inversetransform
in interface RealTransformer
f
- the real data array to be inversely transformed (spectrum)java.lang.IllegalArgumentException
- if any parameters are invalidpublic double[] inversetransform(UnivariateRealFunction f, double min, double max, int n) throws FunctionEvaluationException, java.lang.IllegalArgumentException
inversetransform
in interface RealTransformer
f
- the function to be sampled and inversely transformedmin
- the lower bound for the intervalmax
- the upper bound for the intervaln
- the number of sample pointsFunctionEvaluationException
- if function cannot be evaluated at some pointjava.lang.IllegalArgumentException
- if any parameters are invalidpublic int[] transform(int[] f) throws java.lang.IllegalArgumentException
The integer transform cannot be inverted directly, due to a scaling factor it may lead to double results.
f
- the integer data array to be transformed (signal)java.lang.IllegalArgumentException
- if any parameters are invalidprotected double[] fht(double[] x) throws java.lang.IllegalArgumentException
+----+----------+---------+----------+
| x | a | b | y |
+----+----------+---------+----------+
| x0 | a0=x0+x1 | b0=a0+a1 | y0=b0+b1 |
+----+----------+---------+----------+
| x1 | a1=x2+x3 | b0=a2+a3 | y0=b2+b3 |
+----+----------+---------+----------+
| x2 | a2=x4+x5 | b0=a4+a5 | y0=b4+b5 |
+----+----------+---------+----------+
| x3 | a3=x6+x7 | b0=a6+a7 | y0=b6+b7 |
+----+----------+---------+----------+
| x4 | a0=x0-x1 | b0=a0-a1 | y0=b0-b1 |
+----+----------+---------+----------+
| x5 | a1=x2-x3 | b0=a2-a3 | y0=b2-b3 |
+----+----------+---------+----------+
| x6 | a2=x4-x5 | b0=a4-a5 | y0=b4-b5 |
+----+----------+---------+----------+
| x7 | a3=x6-x7 | b0=a6-a7 | y0=b6-b7 |
+----+----------+---------+----------+
How it works
+--------+---+---+---+-----+---+ | 0 | 1 | 2 | 3 | ... |n+1| +------+--------+---+---+---+-----+---+ |0 | x0 | /\ | |1 | x1 | || | |2 | x2 | <= Dtop => | |... | ... | || | |N/2-1 | xN/2-1 | \/ | +------+--------+---+---+---+-----+---+ |N/2 | xN/2 | /\ | |N/2+1 | xN/2+1 | || | |N/2+2 | xN/2+2 | <= Dbottom => | which is in the last column of the matrix |... | ... | || | |N | xN/2 | \/ | +------+--------+---+---+---+-----+---+
x
- input vectorjava.lang.IllegalArgumentException
- if input array is not a power of 2protected int[] fht(int[] x) throws java.lang.IllegalArgumentException
x
- input vectorjava.lang.IllegalArgumentException
- if input array is not a power of 2Copyright (c) 2003-2016 Apache Software Foundation