<?xml version="1.0"?>

<!--
   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.
  -->

<document url="transform.html">

  <properties>
    <title>The Commons Math User Guide - Transforms</title>
  </properties>

  <body>
    <section name="10 Transforms">
      <p>
         Function transforms (direct and inverse) for signal analysis.
         <ul>
           <li><a href="../commons-math4-transform/apidocs/org/apache/commons/math4/transform/FastFourierTransform.html">
            FastFourierTransform</a> (produces <code>Complex</code> results)</li>
           <li><a href="../commons-math4-transform/apidocs/org/apache/commons/math4/transform/FastCosineTransform.html">
            FastCosineTransform</a> (produces real results)</li>
           <li><a href="../commons-math4-transform/apidocs/org/apache/commons/math4/transform/FastSineTransform.html">
            FastSineTransform</a> (produces real results)</li>
           <li><a href="../commons-math4-transform/apidocs/org/apache/commons/math4/transform/FastHadamardTransform.html">
            FastHadamardTransform</a> (produces real results)</li>
         </ul>
      </p>
     </section>
  </body>
</document>
