root/doc/html/group__fft.html @ 354

Revision 353, 13.4 kB (checked in by smidl, 16 years ago)

doc

Line 
1<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
2<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
3<title>mixpp: Fast Fourier Transform (FFT)</title>
4<link href="tabs.css" rel="stylesheet" type="text/css">
5<link href="doxygen.css" rel="stylesheet" type="text/css">
6</head><body>
7<!-- Generated by Doxygen 1.5.8 -->
8<script type="text/javascript">
9<!--
10function changeDisplayState (e){
11  var num=this.id.replace(/[^[0-9]/g,'');
12  var button=this.firstChild;
13  var sectionDiv=document.getElementById('dynsection'+num);
14  if (sectionDiv.style.display=='none'||sectionDiv.style.display==''){
15    sectionDiv.style.display='block';
16    button.src='open.gif';
17  }else{
18    sectionDiv.style.display='none';
19    button.src='closed.gif';
20  }
21}
22function initDynSections(){
23  var divs=document.getElementsByTagName('div');
24  var sectionCounter=1;
25  for(var i=0;i<divs.length-1;i++){
26    if(divs[i].className=='dynheader'&&divs[i+1].className=='dynsection'){
27      var header=divs[i];
28      var section=divs[i+1];
29      var button=header.firstChild;
30      if (button!='IMG'){
31        divs[i].insertBefore(document.createTextNode(' '),divs[i].firstChild);
32        button=document.createElement('img');
33        divs[i].insertBefore(button,divs[i].firstChild);
34      }
35      header.style.cursor='pointer';
36      header.onclick=changeDisplayState;
37      header.id='dynheader'+sectionCounter;
38      button.src='closed.gif';
39      section.id='dynsection'+sectionCounter;
40      section.style.display='none';
41      section.style.marginLeft='14px';
42      sectionCounter++;
43    }
44  }
45}
46window.onload = initDynSections;
47-->
48</script>
49<div class="navigation" id="top">
50  <div class="tabs">
51    <ul>
52      <li><a href="main.html"><span>Main&nbsp;Page</span></a></li>
53      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
54      <li><a href="modules.html"><span>Modules</span></a></li>
55      <li><a href="annotated.html"><span>Classes</span></a></li>
56      <li><a href="files.html"><span>Files</span></a></li>
57    </ul>
58  </div>
59</div>
60<div class="contents">
61<h1>Fast Fourier Transform (FFT)<br>
62<small>
63[<a class="el" href="group__transforms.html">Transforms</a>]</small>
64</h1>One dimensional fast fourier transform. 
65<a href="#_details">More...</a>
66<p>
67<table border="0" cellpadding="0" cellspacing="0">
68<tr><td></td></tr>
69<tr><td colspan="2"><br><h2>Functions</h2></td></tr>
70<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g09570749435a31f49e31f905ed39e0f1"></a><!-- doxytag: member="fft::fft" ref="g09570749435a31f49e31f905ed39e0f1" args="(const cvec &amp;in, cvec &amp;out)" -->
71void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fft.html#g09570749435a31f49e31f905ed39e0f1">itpp::fft</a> (const <a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a> &amp;in, <a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a> &amp;out)</td></tr>
72
73<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fast Fourier Transform. <br></td></tr>
74<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g775759be446df573489daeaa57bbebf0"></a><!-- doxytag: member="fft::fft" ref="g775759be446df573489daeaa57bbebf0" args="(const cvec &amp;in)" -->
75<a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fft.html#g775759be446df573489daeaa57bbebf0">itpp::fft</a> (const <a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a> &amp;in)</td></tr>
76
77<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fast Fourier Transform. <br></td></tr>
78<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g47b556fc383bceb3cc562045acfa9f00"></a><!-- doxytag: member="fft::fft" ref="g47b556fc383bceb3cc562045acfa9f00" args="(const cvec &amp;in, const int N)" -->
79<a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fft.html#g47b556fc383bceb3cc562045acfa9f00">itpp::fft</a> (const <a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a> &amp;in, const int N)</td></tr>
80
81<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Fast Fourier Transform, with zero-padding up to size N. <br></td></tr>
82<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gebcff694509f7327dc33294b6509c898"></a><!-- doxytag: member="fft::ifft" ref="gebcff694509f7327dc33294b6509c898" args="(const cvec &amp;in, cvec &amp;out)" -->
83void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fft.html#gebcff694509f7327dc33294b6509c898">itpp::ifft</a> (const <a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a> &amp;in, <a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a> &amp;out)</td></tr>
84
85<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Inverse Fast Fourier Transform. <br></td></tr>
86<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g94f627e1158bfaad7e8a44983b3ef2c8"></a><!-- doxytag: member="fft::ifft" ref="g94f627e1158bfaad7e8a44983b3ef2c8" args="(const cvec &amp;in)" -->
87<a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fft.html#g94f627e1158bfaad7e8a44983b3ef2c8">itpp::ifft</a> (const <a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a> &amp;in)</td></tr>
88
89<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Inverse Fast Fourier Transform. <br></td></tr>
90<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="gda0d68d66e55693b98d6f5a374943593"></a><!-- doxytag: member="fft::ifft" ref="gda0d68d66e55693b98d6f5a374943593" args="(const cvec &amp;in, const int N)" -->
91<a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fft.html#gda0d68d66e55693b98d6f5a374943593">itpp::ifft</a> (const <a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a> &amp;in, const int N)</td></tr>
92
93<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Inverse Fast Fourier Transform, with zero-padding up to size N. <br></td></tr>
94<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g74452ecda507ce524c3a65d46ddb6d55"></a><!-- doxytag: member="fft::fft_real" ref="g74452ecda507ce524c3a65d46ddb6d55" args="(const vec &amp;in, cvec &amp;out)" -->
95void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fft.html#g74452ecda507ce524c3a65d46ddb6d55">itpp::fft_real</a> (const <a class="el" href="classitpp_1_1Vec.html#02e1bb55f60f3c2eb7a020eb1c2cfcf4">vec</a> &amp;in, <a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a> &amp;out)</td></tr>
96
97<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Real Fast Fourier Transform. <br></td></tr>
98<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g95c44ca850df9bb948f5c3f6da5d4080"></a><!-- doxytag: member="fft::fft_real" ref="g95c44ca850df9bb948f5c3f6da5d4080" args="(const vec &amp;in)" -->
99<a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fft.html#g95c44ca850df9bb948f5c3f6da5d4080">itpp::fft_real</a> (const <a class="el" href="classitpp_1_1Vec.html#02e1bb55f60f3c2eb7a020eb1c2cfcf4">vec</a> &amp;in)</td></tr>
100
101<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Real Fast Fourier Transform. <br></td></tr>
102<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g907314f1fcae54228f62d9de06382fd8"></a><!-- doxytag: member="fft::fft_real" ref="g907314f1fcae54228f62d9de06382fd8" args="(const vec &amp;in, const int N)" -->
103<a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fft.html#g907314f1fcae54228f62d9de06382fd8">itpp::fft_real</a> (const <a class="el" href="classitpp_1_1Vec.html#02e1bb55f60f3c2eb7a020eb1c2cfcf4">vec</a> &amp;in, const int N)</td></tr>
104
105<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Real Fast Fourier Transform, with zero-padding up to size N. <br></td></tr>
106<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g3e13112d3fbd59d6099561e552389249"></a><!-- doxytag: member="fft::ifft_real" ref="g3e13112d3fbd59d6099561e552389249" args="(const cvec &amp;in, vec &amp;out)" -->
107void&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fft.html#g3e13112d3fbd59d6099561e552389249">itpp::ifft_real</a> (const <a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a> &amp;in, <a class="el" href="classitpp_1_1Vec.html#02e1bb55f60f3c2eb7a020eb1c2cfcf4">vec</a> &amp;out)</td></tr>
108
109<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Inverse Real Fast Fourier Transform. Assumes even size. <br></td></tr>
110<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g4b3665be18735eeb0219c42175bea81b"></a><!-- doxytag: member="fft::ifft_real" ref="g4b3665be18735eeb0219c42175bea81b" args="(const cvec &amp;in)" -->
111<a class="el" href="classitpp_1_1Vec.html#02e1bb55f60f3c2eb7a020eb1c2cfcf4">vec</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fft.html#g4b3665be18735eeb0219c42175bea81b">itpp::ifft_real</a> (const <a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a> &amp;in)</td></tr>
112
113<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Inverse Real Fast Fourier Transform. Assumes even size. <br></td></tr>
114<tr><td class="memItemLeft" nowrap align="right" valign="top"><a class="anchor" name="g032f33ed9bd8e7b794c6ee2eb3456f68"></a><!-- doxytag: member="fft::ifft_real" ref="g032f33ed9bd8e7b794c6ee2eb3456f68" args="(const cvec &amp;in, const int N)" -->
115<a class="el" href="classitpp_1_1Vec.html#02e1bb55f60f3c2eb7a020eb1c2cfcf4">vec</a>&nbsp;</td><td class="memItemRight" valign="bottom"><a class="el" href="group__fft.html#g032f33ed9bd8e7b794c6ee2eb3456f68">itpp::ifft_real</a> (const <a class="el" href="classitpp_1_1Vec.html#e83c1408740e41a7e29c383b71d4d544">cvec</a> &amp;in, const int N)</td></tr>
116
117<tr><td class="mdescLeft">&nbsp;</td><td class="mdescRight">Inverse Real Fast Fourier Transform, with zero-padding up to size N. <br></td></tr>
118</table>
119<hr><a name="_details"></a><h2>Detailed Description</h2>
120One dimensional fast fourier transform.
121<p>
122<dl class="author" compact><dt><b>Author:</b></dt><dd>Tony Ottosson and Adam Piatyszek</dd></dl>
123The functions <div class="fragment"><pre class="fragment"> X = <a class="code" href="group__fft.html#g09570749435a31f49e31f905ed39e0f1" title="Fast Fourier Transform.">fft</a>(x)
124</pre></div> and <div class="fragment"><pre class="fragment"> x = <a class="code" href="group__fft.html#gebcff694509f7327dc33294b6509c898" title="Inverse Fast Fourier Transform.">ifft</a>(X)
125</pre></div> are the fourier and inverse fourier transforms of size <em>N</em> defined as: <p class="formulaDsp">
126<img class="formulaDsp" alt="\[ X(k) = \sum_{j=0}^{N-1} x(j) e^{-2\pi j k \cdot i / N} \]" src="form_358.png">
127<p>
128<p>
129<p class="formulaDsp">
130<img class="formulaDsp" alt="\[ x(j) = \frac{1}{N} \sum_{k=0}^{N-1} X(k) e^{2\pi j k \cdot i / N} \]" src="form_359.png">
131<p>
132<p>
133<div class="fragment"><pre class="fragment"> Y = <a class="code" href="group__fft.html#g09570749435a31f49e31f905ed39e0f1" title="Fast Fourier Transform.">fft</a>(X, N)
134</pre></div> performs zero-padding up to size N and then performs an N-size fft.<p>
135The implementation is built upon one of the following libraries:<ul>
136<li>FFTW (version 3.0.0 or higher)</li><li>MKL (version 8.0.0 or higher)</li><li>ACML (version 2.5.3 or higher).</li></ul>
137<p>
138<dl class="note" compact><dt><b>Note:</b></dt><dd>FFTW-based implementation is the fastest for powers of two. Furthermore, the second time you call the routine with the same size, the calculation is much faster due to many things were calculated and stored the first time the routine was called.<p>
139Achieving maximum runtime efficiency with the FFTW library on some computer architectures requires that data are stored in the memory with a special alignment (to 16-byte boundaries). The IT++ memory management functions and container classes do not generally allocate memory aligned this way, and as a result calling FFTW via the IT++ interface (i.e. the <a class="el" href="group__fft.html#g09570749435a31f49e31f905ed39e0f1" title="Fast Fourier Transform.">fft()</a> function) may be slower than using the FFTW library directly. Therefore, FFTW users concerned about maximum possible performance may want to consider the possibility of calling the FFTW library and its memory management/allocation routines directly, bypassing the IT++ storage classes and the <a class="el" href="group__fft.html#g09570749435a31f49e31f905ed39e0f1" title="Fast Fourier Transform.">fft()</a> interface to FFTW. </dd></dl>
140</div>
141<hr size="1"><address style="text-align: right;"><small>Generated on Tue Jun 2 10:02:14 2009 for mixpp by&nbsp;
142<a href="http://www.doxygen.org/index.html">
143<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.8 </small></address>
144</body>
145</html>
Note: See TracBrowser for help on using the browser.