JWS C Library
C language utility library
matblock_fft.h
Go to the documentation of this file.
00001 /*
00002  * This work is licensed under a Creative Commons 
00003  * Attribution-Noncommercial-Share Alike 3.0 United States License.
00004  * 
00005  *    http://creativecommons.org/licenses/by-nc-sa/3.0/us/
00006  * 
00007  * You are free:
00008  * 
00009  *    to Share - to copy, distribute, display, and perform the work
00010  *    to Remix - to make derivative works
00011  * 
00012  * Under the following conditions:
00013  * 
00014  *    Attribution. You must attribute the work in the manner specified by the
00015  *    author or licensor (but not in any way that suggests that they endorse you
00016  *    or your use of the work).
00017  * 
00018  *    Noncommercial. You may not use this work for commercial purposes.
00019  * 
00020  *    Share Alike. If you alter, transform, or build upon this work, you may
00021  *    distribute the resulting work only under the same or similar license to
00022  *    this one.
00023  * 
00024  * For any reuse or distribution, you must make clear to others the license
00025  * terms of this work. The best way to do this is by including this header.
00026  * 
00027  * Any of the above conditions can be waived if you get permission from the
00028  * copyright holder.
00029  * 
00030  * Apart from the remix rights granted under this license, nothing in this
00031  * license impairs or restricts the author's moral rights.
00032  */
00033 
00034 
00050 #ifndef MATBLOCK_FFT_H
00051 #define MATBLOCK_FFT_H
00052 
00053 
00054 #include <jwsc/config.h>
00055 
00056 #include <stdlib.h>
00057 
00058 #include "jwsc/matblock/matblock.h"
00059 
00060 
00061 #ifdef __cplusplus
00062 namespace jwsc {
00063 extern "C" {
00064 #endif
00065 
00066 
00078 #ifdef JWSC_HAVE_FFTW3F
00079 void real_to_complex_matblock_dft_f
00080 (
00081     Matblock_cf**     m_out,
00082     const Matblock_f* m_in
00083 );
00084 #endif
00085 
00090 #ifdef JWSC_HAVE_FFTW3
00091 void real_to_complex_matblock_dft_d
00092 (
00093     Matblock_cd**     m_out,
00094     const Matblock_d* m_in
00095 );
00096 #endif
00097 
00115 #ifdef JWSC_HAVE_FFTW3F
00116 void real_to_complex_matblock_dft_scratch_f
00117 (
00118     Matblock_cf**     m_out,
00119     const Matblock_f* m_in,
00120     Matblock_f**      s
00121 );
00122 #endif
00123 
00128 #ifdef JWSC_HAVE_FFTW3
00129 void real_to_complex_matblock_dft_scratch_d
00130 (
00131     Matblock_cd**     m_out,
00132     const Matblock_d* m_in,
00133     Matblock_d**      s
00134 );
00135 #endif
00136 
00153 #ifdef JWSC_HAVE_FFTW3F
00154 void complex_to_real_matblock_dft_f
00155 (
00156     Matblock_f**       m_out,
00157     const Matblock_cf* m_in,
00158     uint8_t            ncols_even
00159 );
00160 #endif
00161 
00166 #ifdef JWSC_HAVE_FFTW3
00167 void complex_to_real_matblock_dft_d
00168 (
00169     Matblock_d**       m_out,
00170     const Matblock_cd* m_in,
00171     uint8_t            ncols_even
00172 );
00173 #endif
00174 
00192 #ifdef JWSC_HAVE_FFTW3F
00193 void complex_to_real_matblock_dft_scratch_f
00194 (
00195     Matblock_f**       m_out,
00196     const Matblock_cf* m_in,
00197     uint8_t            ncols_even,
00198     Matblock_cf**      s
00199 );
00200 #endif
00201 
00206 #ifdef JWSC_HAVE_FFTW3
00207 void complex_to_real_matblock_dft_scratch_d
00208 (
00209     Matblock_d**       m_out,
00210     const Matblock_cd* m_in,
00211     uint8_t            ncols_even,
00212     Matblock_cd**      s
00213 );
00214 #endif
00215 
00229 void expand_symmetric_matblock_dft_f
00230 (
00231     Matblock_cf**      m_out, 
00232     const Matblock_cf* m_in, 
00233     uint8_t          ncols_even
00234 );
00235 
00237 void expand_symmetric_matblock_dft_d
00238 (
00239     Matblock_cd**      m_out, 
00240     const Matblock_cd* m_in, 
00241     uint8_t          ncols_even
00242 );
00243 
00257 void shrink_symmetric_matblock_dft_f
00258 (
00259     Matblock_cf**      m_out, 
00260     const Matblock_cf* m_in
00261 );
00262 
00266 void shrink_symmetric_matblock_dft_d
00267 (
00268     Matblock_cd**      m_out, 
00269     const Matblock_cd* m_in
00270 );
00271 
00288 void scale_matblock_dft_f(Matblock_f** m_out, const Matblock_f* m_in);
00289 
00294 void scale_matblock_dft_d(Matblock_d** m_out, const Matblock_d* m_in);
00295 
00312 void shift_matblock_f
00313 (
00314     Matblock_f**       m_out,
00315     const Matblock_f*  m_in
00316 );
00317 
00322 void shift_matblock_d
00323 (
00324     Matblock_d**       m_out,
00325     const Matblock_d*  m_in
00326 );
00327 
00332 void shift_matblock_cf
00333 (
00334     Matblock_cf**       m_out,
00335     const Matblock_cf*  m_in
00336 );
00337 
00342 void shift_matblock_cd
00343 (
00344     Matblock_cd**       m_out,
00345     const Matblock_cd*  m_in
00346 );
00347 
00364 void unshift_matblock_f
00365 (
00366     Matblock_f**       m_out,
00367     const Matblock_f*  m_in
00368 );
00369 
00374 void unshift_matblock_d
00375 (
00376     Matblock_d**       m_out,
00377     const Matblock_d*  m_in
00378 );
00379 
00384 void unshift_matblock_cf
00385 (
00386     Matblock_cf**       m_out,
00387     const Matblock_cf*  m_in
00388 );
00389 
00394 void unshift_matblock_cd
00395 (
00396     Matblock_cd**       m_out,
00397     const Matblock_cd*  m_in
00398 );
00399 
00403 #ifdef __cplusplus
00404 }
00405 }
00406 #endif
00407 
00408 
00409 #endif