You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ce...@apache.org on 2012/02/11 07:24:15 UTC
svn commit: r1243009 - in /commons/proper/math/trunk/src:
main/java/org/apache/commons/math/transform/
test/java/org/apache/commons/math/transform/
Author: celestin
Date: Sat Feb 11 06:24:15 2012
New Revision: 1243009
URL: http://svn.apache.org/viewvc?rev=1243009&view=rev
Log:
- Changed enum FastFourierTransformer.DftNormalization to top-level enumeration (MATH-743).
- Moved part of the Javadoc of FastFourierTransformer to this new enum.
Added:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/DftNormalization.java (with props)
Modified:
commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastCosineTransformer.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastFourierTransformer.java
commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastSineTransformer.java
commons/proper/math/trunk/src/test/java/org/apache/commons/math/transform/FastFourierTransformerTest.java
Added: commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/DftNormalization.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/DftNormalization.java?rev=1243009&view=auto
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/DftNormalization.java (added)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/DftNormalization.java Sat Feb 11 06:24:15 2012
@@ -0,0 +1,61 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.commons.math.transform;
+
+/**
+ * This enumeration defines the various types of normalizations that can be
+ * applied to discrete Fourier transforms (DFT). The exact definition of these
+ * normalizations is detailed below.
+ *
+ * @see FastFourierTransformer
+ * @version $Id Revision$
+ * @since 3.0
+ */
+public enum DftNormalization {
+ /**
+ * <p>
+ * Should be passed to the constructor of e.g.
+ * {@link FastFourierTransformer} to use the <em>standard</em> normalization
+ * convention. This normalization convention is defined as follows
+ * <ul>
+ * <li>forward transform: y<sub>n</sub> = ∑<sub>k=0</sub><sup>N-1</sup>
+ * x<sub>k</sub> exp(-2πi n k / N),</li>
+ * <li>inverse transform: x<sub>k</sub> = N<sup>-1</sup>
+ * ∑<sub>n=0</sub><sup>N-1</sup> y<sub>n</sub> exp(2πi n k / N),</li>
+ * </ul>
+ * where N is the size of the data sample.
+ * </p>
+ */
+ STANDARD,
+
+ /**
+ * <p>
+ * Should be passed to the constructor of e.g.
+ * {@link FastFourierTransformer} to use the <em>unitary</em> normalization
+ * convention. This normalization convention is defined as follows
+ * <ul>
+ * <li>forward transform: y<sub>n</sub> = (1 / √N)
+ * ∑<sub>k=0</sub><sup>N-1</sup> x<sub>k</sub>
+ * exp(-2πi n k / N),</li>
+ * <li>inverse transform: x<sub>k</sub> = (1 / √N)
+ * ∑<sub>n=0</sub><sup>N-1</sup> y<sub>n</sub> exp(2πi n k / N),</li>
+ * </ul>
+ * which makes the transform unitary. N is the size of the data sample.
+ * </p>
+ */
+ UNITARY;
+}
Propchange: commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/DftNormalization.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/DftNormalization.java
------------------------------------------------------------------------------
svn:keywords = Id Revision
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastCosineTransformer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastCosineTransformer.java?rev=1243009&r1=1243008&r2=1243009&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastCosineTransformer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastCosineTransformer.java Sat Feb 11 06:24:15 2012
@@ -25,7 +25,6 @@ import org.apache.commons.math.exception
import org.apache.commons.math.exception.NonMonotonicSequenceException;
import org.apache.commons.math.exception.NotStrictlyPositiveException;
import org.apache.commons.math.exception.util.LocalizedFormats;
-import org.apache.commons.math.transform.FastFourierTransformer.DftNormalization;
import org.apache.commons.math.util.ArithmeticUtils;
import org.apache.commons.math.util.FastMath;
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastFourierTransformer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastFourierTransformer.java?rev=1243009&r1=1243008&r2=1243009&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastFourierTransformer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastFourierTransformer.java Sat Feb 11 06:24:15 2012
@@ -38,7 +38,8 @@ import org.apache.commons.math.util.Math
* </p>
* <p>
* There are several variants of the discrete Fourier transform, with various
- * normalization conventions, which are described below.
+ * normalization conventions, which are specified by the parameter
+ * {@link DftNormalization}.
* </p>
* <p>
* The current implementation of the discrete Fourier transform as a fast
@@ -49,56 +50,13 @@ import org.apache.commons.math.util.Math
* <i>On computing the discrete Fourier transform</i>, Mathematics of
* Computation, 32 (1978), 175 - 199.
* </p>
- * <h3><a id="standard">Standard DFT</a></h3>
- * <p>
- * The standard normalization convention is defined as follows
- * <ul>
- * <li>forward transform: y<sub>n</sub> = ∑<sub>k=0</sub><sup>N-1</sup>
- * x<sub>k</sub> exp(-2πi n k / N),</li>
- * <li>inverse transform: x<sub>k</sub> = N<sup>-1</sup>
- * ∑<sub>n=0</sub><sup>N-1</sup> y<sub>n</sub> exp(2πi n k / N),</li>
- * </ul>
- * where N is the size of the data sample.
- * </p>
- * <p>
- * {@link FastFourierTransformer}s following this convention are returned by the
- * factory method {@link #create()}.
- * </p>
- * <h3><a id="unitary">Unitary DFT</a></h3>
- * <p>
- * The unitary normalization convention is defined as follows
- * <ul>
- * <li>forward transform: y<sub>n</sub> = (1 / √N)
- * ∑<sub>k=0</sub><sup>N-1</sup> x<sub>k</sub> exp(-2πi n k / N),</li>
- * <li>inverse transform: x<sub>k</sub> = (1 / √N)
- * ∑<sub>n=0</sub><sup>N-1</sup> y<sub>n</sub> exp(2πi n k / N),</li>
- * </ul>
- * which makes the transform unitary. N is the size of the data sample.
- * </p>
- * <p>
- * {@link FastFourierTransformer}s following this convention are returned by the
- * factory method {@link #createUnitary()}.
- * </p>
*
+ * @see DftNormalization
* @version $Id$
* @since 1.2
*/
public class FastFourierTransformer implements Serializable {
- /**
- * The various types of normalizations that can be applied to discrete
- * Fourier transforms.
- *
- * @see FastFourierTransformer
- */
- public static enum DftNormalization {
- /** The normalization to be specified for standard DFT. */
- STANDARD,
-
- /** The normalization to be specified for unitary DFT. */
- UNITARY;
- }
-
/** Serializable version identifier. */
static final long serialVersionUID = 20120210L;
Modified: commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastSineTransformer.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastSineTransformer.java?rev=1243009&r1=1243008&r2=1243009&view=diff
==============================================================================
--- commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastSineTransformer.java (original)
+++ commons/proper/math/trunk/src/main/java/org/apache/commons/math/transform/FastSineTransformer.java Sat Feb 11 06:24:15 2012
@@ -25,7 +25,6 @@ import org.apache.commons.math.exception
import org.apache.commons.math.exception.NonMonotonicSequenceException;
import org.apache.commons.math.exception.NotStrictlyPositiveException;
import org.apache.commons.math.exception.util.LocalizedFormats;
-import org.apache.commons.math.transform.FastFourierTransformer.DftNormalization;
import org.apache.commons.math.util.ArithmeticUtils;
import org.apache.commons.math.util.FastMath;
Modified: commons/proper/math/trunk/src/test/java/org/apache/commons/math/transform/FastFourierTransformerTest.java
URL: http://svn.apache.org/viewvc/commons/proper/math/trunk/src/test/java/org/apache/commons/math/transform/FastFourierTransformerTest.java?rev=1243009&r1=1243008&r2=1243009&view=diff
==============================================================================
--- commons/proper/math/trunk/src/test/java/org/apache/commons/math/transform/FastFourierTransformerTest.java (original)
+++ commons/proper/math/trunk/src/test/java/org/apache/commons/math/transform/FastFourierTransformerTest.java Sat Feb 11 06:24:15 2012
@@ -26,7 +26,6 @@ import org.apache.commons.math.complex.C
import org.apache.commons.math.exception.MathIllegalArgumentException;
import org.apache.commons.math.exception.NotStrictlyPositiveException;
import org.apache.commons.math.exception.NumberIsTooLargeException;
-import org.apache.commons.math.transform.FastFourierTransformer.DftNormalization;
import org.apache.commons.math.util.FastMath;
import org.junit.Assert;
import org.junit.Test;
@@ -51,8 +50,8 @@ public final class FastFourierTransforme
public void testTransformComplexSizeNotAPowerOfTwo() {
final int n = 127;
final Complex[] x = createComplexData(n);
- final FastFourierTransformer.DftNormalization[] norm;
- norm = FastFourierTransformer.DftNormalization.values();
+ final DftNormalization[] norm;
+ norm = DftNormalization.values();
final TransformType[] type;
type = TransformType.values();
for (int i = 0; i < norm.length; i++) {
@@ -74,8 +73,8 @@ public final class FastFourierTransforme
public void testTransformRealSizeNotAPowerOfTwo() {
final int n = 127;
final double[] x = createRealData(n);
- final FastFourierTransformer.DftNormalization[] norm;
- norm = FastFourierTransformer.DftNormalization.values();
+ final DftNormalization[] norm;
+ norm = DftNormalization.values();
final TransformType[] type;
type = TransformType.values();
for (int i = 0; i < norm.length; i++) {
@@ -97,8 +96,8 @@ public final class FastFourierTransforme
public void testTransformFunctionSizeNotAPowerOfTwo() {
final int n = 127;
final UnivariateFunction f = new Sin();
- final FastFourierTransformer.DftNormalization[] norm;
- norm = FastFourierTransformer.DftNormalization.values();
+ final DftNormalization[] norm;
+ norm = DftNormalization.values();
final TransformType[] type;
type = TransformType.values();
for (int i = 0; i < norm.length; i++) {
@@ -120,8 +119,8 @@ public final class FastFourierTransforme
public void testTransformFunctionNotStrictlyPositiveNumberOfSamples() {
final int n = -128;
final UnivariateFunction f = new Sin();
- final FastFourierTransformer.DftNormalization[] norm;
- norm = FastFourierTransformer.DftNormalization.values();
+ final DftNormalization[] norm;
+ norm = DftNormalization.values();
final TransformType[] type;
type = TransformType.values();
for (int i = 0; i < norm.length; i++) {
@@ -144,8 +143,8 @@ public final class FastFourierTransforme
public void testTransformFunctionInvalidBounds() {
final int n = 128;
final UnivariateFunction f = new Sin();
- final FastFourierTransformer.DftNormalization[] norm;
- norm = FastFourierTransformer.DftNormalization.values();
+ final DftNormalization[] norm;
+ norm = DftNormalization.values();
final TransformType[] type;
type = TransformType.values();
for (int i = 0; i < norm.length; i++) {
@@ -216,7 +215,7 @@ public final class FastFourierTransforme
}
private static void doTestTransformComplex(final int n, final double tol,
- final FastFourierTransformer.DftNormalization normalization,
+ final DftNormalization normalization,
final TransformType type) {
final FastFourierTransformer fft;
fft = new FastFourierTransformer(normalization);
@@ -225,14 +224,14 @@ public final class FastFourierTransforme
final double s;
if (type==TransformType.FORWARD) {
expected = dft(x, -1);
- if (normalization == FastFourierTransformer.DftNormalization.STANDARD){
+ if (normalization == DftNormalization.STANDARD){
s = 1.0;
} else {
s = 1.0 / FastMath.sqrt(n);
}
} else {
expected = dft(x, 1);
- if (normalization == FastFourierTransformer.DftNormalization.STANDARD) {
+ if (normalization == DftNormalization.STANDARD) {
s = 1.0 / n;
} else {
s = 1.0 / FastMath.sqrt(n);
@@ -252,7 +251,7 @@ public final class FastFourierTransforme
}
private static void doTestTransformReal(final int n, final double tol,
- final FastFourierTransformer.DftNormalization normalization,
+ final DftNormalization normalization,
final TransformType type) {
final FastFourierTransformer fft;
fft = new FastFourierTransformer(normalization);
@@ -265,14 +264,14 @@ public final class FastFourierTransforme
final double s;
if (type == TransformType.FORWARD) {
expected = dft(xc, -1);
- if (normalization == FastFourierTransformer.DftNormalization.STANDARD) {
+ if (normalization == DftNormalization.STANDARD) {
s = 1.0;
} else {
s = 1.0 / FastMath.sqrt(n);
}
} else {
expected = dft(xc, 1);
- if (normalization == FastFourierTransformer.DftNormalization.STANDARD) {
+ if (normalization == DftNormalization.STANDARD) {
s = 1.0 / n;
} else {
s = 1.0 / FastMath.sqrt(n);
@@ -293,7 +292,7 @@ public final class FastFourierTransforme
private static void doTestTransformFunction(final UnivariateFunction f,
final double min, final double max, int n, final double tol,
- final FastFourierTransformer.DftNormalization normalization,
+ final DftNormalization normalization,
final TransformType type) {
final FastFourierTransformer fft;
fft = new FastFourierTransformer(normalization);
@@ -306,14 +305,14 @@ public final class FastFourierTransforme
final double s;
if (type == TransformType.FORWARD) {
expected = dft(x, -1);
- if (normalization == FastFourierTransformer.DftNormalization.STANDARD) {
+ if (normalization == DftNormalization.STANDARD) {
s = 1.0;
} else {
s = 1.0 / FastMath.sqrt(n);
}
} else {
expected = dft(x, 1);
- if (normalization == FastFourierTransformer.DftNormalization.STANDARD) {
+ if (normalization == DftNormalization.STANDARD) {
s = 1.0 / n;
} else {
s = 1.0 / FastMath.sqrt(n);
@@ -337,8 +336,8 @@ public final class FastFourierTransforme
@Test
public void testTransformComplex() {
- final FastFourierTransformer.DftNormalization[] norm;
- norm = FastFourierTransformer.DftNormalization.values();
+ final DftNormalization[] norm;
+ norm = DftNormalization.values();
final TransformType[] type;
type = TransformType.values();
for (int i = 0; i < norm.length; i++) {
@@ -356,8 +355,8 @@ public final class FastFourierTransforme
@Test
public void testStandardTransformReal() {
- final FastFourierTransformer.DftNormalization[] norm;
- norm = FastFourierTransformer.DftNormalization.values();
+ final DftNormalization[] norm;
+ norm = DftNormalization.values();
final TransformType[] type;
type = TransformType.values();
for (int i = 0; i < norm.length; i++) {
@@ -378,8 +377,8 @@ public final class FastFourierTransforme
final UnivariateFunction f = new Sinc();
final double min = -FastMath.PI;
final double max = FastMath.PI;
- final FastFourierTransformer.DftNormalization[] norm;
- norm = FastFourierTransformer.DftNormalization.values();
+ final DftNormalization[] norm;
+ norm = DftNormalization.values();
final TransformType[] type;
type = TransformType.values();
for (int i = 0; i < norm.length; i++) {