annotate src/fftw-3.3.3/doc/html/Real_002ddata-DFT-Array-Format.html @ 83:ae30d91d2ffe

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam
date Fri, 07 Feb 2020 11:51:13 +0000
parents 37bf6b4a2645
children
rev   line source
Chris@10 1 <html lang="en">
Chris@10 2 <head>
Chris@10 3 <title>Real-data DFT Array Format - FFTW 3.3.3</title>
Chris@10 4 <meta http-equiv="Content-Type" content="text/html">
Chris@10 5 <meta name="description" content="FFTW 3.3.3">
Chris@10 6 <meta name="generator" content="makeinfo 4.13">
Chris@10 7 <link title="Top" rel="start" href="index.html#Top">
Chris@10 8 <link rel="up" href="Basic-Interface.html#Basic-Interface" title="Basic Interface">
Chris@10 9 <link rel="prev" href="Real_002ddata-DFTs.html#Real_002ddata-DFTs" title="Real-data DFTs">
Chris@10 10 <link rel="next" href="Real_002dto_002dReal-Transforms.html#Real_002dto_002dReal-Transforms" title="Real-to-Real Transforms">
Chris@10 11 <link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
Chris@10 12 <!--
Chris@10 13 This manual is for FFTW
Chris@10 14 (version 3.3.3, 25 November 2012).
Chris@10 15
Chris@10 16 Copyright (C) 2003 Matteo Frigo.
Chris@10 17
Chris@10 18 Copyright (C) 2003 Massachusetts Institute of Technology.
Chris@10 19
Chris@10 20 Permission is granted to make and distribute verbatim copies of
Chris@10 21 this manual provided the copyright notice and this permission
Chris@10 22 notice are preserved on all copies.
Chris@10 23
Chris@10 24 Permission is granted to copy and distribute modified versions of
Chris@10 25 this manual under the conditions for verbatim copying, provided
Chris@10 26 that the entire resulting derived work is distributed under the
Chris@10 27 terms of a permission notice identical to this one.
Chris@10 28
Chris@10 29 Permission is granted to copy and distribute translations of this
Chris@10 30 manual into another language, under the above conditions for
Chris@10 31 modified versions, except that this permission notice may be
Chris@10 32 stated in a translation approved by the Free Software Foundation.
Chris@10 33 -->
Chris@10 34 <meta http-equiv="Content-Style-Type" content="text/css">
Chris@10 35 <style type="text/css"><!--
Chris@10 36 pre.display { font-family:inherit }
Chris@10 37 pre.format { font-family:inherit }
Chris@10 38 pre.smalldisplay { font-family:inherit; font-size:smaller }
Chris@10 39 pre.smallformat { font-family:inherit; font-size:smaller }
Chris@10 40 pre.smallexample { font-size:smaller }
Chris@10 41 pre.smalllisp { font-size:smaller }
Chris@10 42 span.sc { font-variant:small-caps }
Chris@10 43 span.roman { font-family:serif; font-weight:normal; }
Chris@10 44 span.sansserif { font-family:sans-serif; font-weight:normal; }
Chris@10 45 --></style>
Chris@10 46 </head>
Chris@10 47 <body>
Chris@10 48 <div class="node">
Chris@10 49 <a name="Real-data-DFT-Array-Format"></a>
Chris@10 50 <a name="Real_002ddata-DFT-Array-Format"></a>
Chris@10 51 <p>
Chris@10 52 Next:&nbsp;<a rel="next" accesskey="n" href="Real_002dto_002dReal-Transforms.html#Real_002dto_002dReal-Transforms">Real-to-Real Transforms</a>,
Chris@10 53 Previous:&nbsp;<a rel="previous" accesskey="p" href="Real_002ddata-DFTs.html#Real_002ddata-DFTs">Real-data DFTs</a>,
Chris@10 54 Up:&nbsp;<a rel="up" accesskey="u" href="Basic-Interface.html#Basic-Interface">Basic Interface</a>
Chris@10 55 <hr>
Chris@10 56 </div>
Chris@10 57
Chris@10 58 <h4 class="subsection">4.3.4 Real-data DFT Array Format</h4>
Chris@10 59
Chris@10 60 <p><a name="index-r2c_002fc2r-multi_002ddimensional-array-format-199"></a>
Chris@10 61 The output of a DFT of real data (r2c) contains symmetries that, in
Chris@10 62 principle, make half of the outputs redundant (see <a href="What-FFTW-Really-Computes.html#What-FFTW-Really-Computes">What FFTW Really Computes</a>). (Similarly for the input of an inverse c2r transform.) In
Chris@10 63 practice, it is not possible to entirely realize these savings in an
Chris@10 64 efficient and understandable format that generalizes to
Chris@10 65 multi-dimensional transforms. Instead, the output of the r2c
Chris@10 66 transforms is <em>slightly</em> over half of the output of the
Chris@10 67 corresponding complex transform. We do not &ldquo;pack&rdquo; the data in any
Chris@10 68 way, but store it as an ordinary array of <code>fftw_complex</code> values.
Chris@10 69 In fact, this data is simply a subsection of what would be the array in
Chris@10 70 the corresponding complex transform.
Chris@10 71
Chris@10 72 <p>Specifically, for a real transform of d (= <code>rank</code>)
Chris@10 73 dimensions n<sub>0</sub>&nbsp;&times;&nbsp;n<sub>1</sub>&nbsp;&times;&nbsp;n<sub>2</sub>&nbsp;&times;&nbsp;&hellip;&nbsp;&times;&nbsp;n<sub>d-1</sub>, the complex data is an n<sub>0</sub>&nbsp;&times;&nbsp;n<sub>1</sub>&nbsp;&times;&nbsp;n<sub>2</sub>&nbsp;&times;&nbsp;&hellip;&nbsp;&times;&nbsp;(n<sub>d-1</sub>/2 + 1) array of
Chris@10 74 <code>fftw_complex</code> values in row-major order (with the division rounded
Chris@10 75 down). That is, we only store the <em>lower</em> half (non-negative
Chris@10 76 frequencies), plus one element, of the last dimension of the data from
Chris@10 77 the ordinary complex transform. (We could have instead taken half of
Chris@10 78 any other dimension, but implementation turns out to be simpler if the
Chris@10 79 last, contiguous, dimension is used.)
Chris@10 80
Chris@10 81 <p><a name="index-out_002dof_002dplace-200"></a>For an out-of-place transform, the real data is simply an array with
Chris@10 82 physical dimensions n<sub>0</sub>&nbsp;&times;&nbsp;n<sub>1</sub>&nbsp;&times;&nbsp;n<sub>2</sub>&nbsp;&times;&nbsp;&hellip;&nbsp;&times;&nbsp;n<sub>d-1</sub> in row-major order.
Chris@10 83
Chris@10 84 <p><a name="index-in_002dplace-201"></a><a name="index-padding-202"></a>For an in-place transform, some complications arise since the complex data
Chris@10 85 is slightly larger than the real data. In this case, the final
Chris@10 86 dimension of the real data must be <em>padded</em> with extra values to
Chris@10 87 accommodate the size of the complex data&mdash;two extra if the last
Chris@10 88 dimension is even and one if it is odd. That is, the last dimension of
Chris@10 89 the real data must physically contain
Chris@10 90 2 * (n<sub>d-1</sub>/2+1)<code>double</code> values (exactly enough to hold the complex data). This
Chris@10 91 physical array size does not, however, change the <em>logical</em> array
Chris@10 92 size&mdash;only
Chris@10 93 n<sub>d-1</sub>values are actually stored in the last dimension, and
Chris@10 94 n<sub>d-1</sub>is the last dimension passed to the planner.
Chris@10 95
Chris@10 96 <!-- =========> -->
Chris@10 97 </body></html>
Chris@10 98