<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <!-- This manual is for FFTW (version 3.3.10, 10 December 2020). Copyright (C) 2003 Matteo Frigo. Copyright (C) 2003 Massachusetts Institute of Technology. Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies. Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions, except that this permission notice may be stated in a translation approved by the Free Software Foundation. --> <!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ --> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Real-data DFT Array Format (FFTW 3.3.10)</title> <meta name="description" content="Real-data DFT Array Format (FFTW 3.3.10)"> <meta name="keywords" content="Real-data DFT Array Format (FFTW 3.3.10)"> <meta name="resource-type" content="document"> <meta name="distribution" content="global"> <meta name="Generator" content="makeinfo"> <link href="index.html" rel="start" title="Top"> <link href="Concept-Index.html" rel="index" title="Concept Index"> <link href="index.html#SEC_Contents" rel="contents" title="Table of Contents"> <link href="Basic-Interface.html" rel="up" title="Basic Interface"> <link href="Real_002dto_002dReal-Transforms.html" rel="next" title="Real-to-Real Transforms"> <link href="Real_002ddata-DFTs.html" rel="prev" title="Real-data DFTs"> <style type="text/css"> <!-- a.summary-letter {text-decoration: none} blockquote.indentedblock {margin-right: 0em} div.display {margin-left: 3.2em} div.example {margin-left: 3.2em} div.lisp {margin-left: 3.2em} kbd {font-style: oblique} pre.display {font-family: inherit} pre.format {font-family: inherit} pre.menu-comment {font-family: serif} pre.menu-preformatted {font-family: serif} span.nolinebreak {white-space: nowrap} span.roman {font-family: initial; font-weight: normal} span.sansserif {font-family: sans-serif; font-weight: normal} ul.no-bullet {list-style: none} --> </style> </head> <body lang="en"> <span id="Real_002ddata-DFT-Array-Format"></span><div class="header"> <p> Next: <a href="Real_002dto_002dReal-Transforms.html" accesskey="n" rel="next">Real-to-Real Transforms</a>, Previous: <a href="Real_002ddata-DFTs.html" accesskey="p" rel="prev">Real-data DFTs</a>, Up: <a href="Basic-Interface.html" accesskey="u" rel="up">Basic Interface</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p> </div> <hr> <span id="Real_002ddata-DFT-Array-Format-1"></span><h4 class="subsection">4.3.4 Real-data DFT Array Format</h4> <span id="index-r2c_002fc2r-multi_002ddimensional-array-format-1"></span> <p>The output of a DFT of real data (r2c) contains symmetries that, in principle, make half of the outputs redundant (see <a href="What-FFTW-Really-Computes.html">What FFTW Really Computes</a>). (Similarly for the input of an inverse c2r transform.) In practice, it is not possible to entirely realize these savings in an efficient and understandable format that generalizes to multi-dimensional transforms. Instead, the output of the r2c transforms is <em>slightly</em> over half of the output of the corresponding complex transform. We do not “pack” the data in any way, but store it as an ordinary array of <code>fftw_complex</code> values. In fact, this data is simply a subsection of what would be the array in the corresponding complex transform. </p> <p>Specifically, for a real transform of <em>d</em> (= <code>rank</code>) dimensions n<sub>0</sub> × n<sub>1</sub> × n<sub>2</sub> × … × n<sub>d-1</sub> , the complex data is an n<sub>0</sub> × n<sub>1</sub> × n<sub>2</sub> × … × (n<sub>d-1</sub>/2 + 1) array of <code>fftw_complex</code> values in row-major order (with the division rounded down). That is, we only store the <em>lower</em> half (non-negative frequencies), plus one element, of the last dimension of the data from the ordinary complex transform. (We could have instead taken half of any other dimension, but implementation turns out to be simpler if the last, contiguous, dimension is used.) </p> <span id="index-out_002dof_002dplace-1"></span> <p>For an out-of-place transform, the real data is simply an array with physical dimensions n<sub>0</sub> × n<sub>1</sub> × n<sub>2</sub> × … × n<sub>d-1</sub> in row-major order. </p> <span id="index-in_002dplace-4"></span> <span id="index-padding-3"></span> <p>For an in-place transform, some complications arise since the complex data is slightly larger than the real data. In this case, the final dimension of the real data must be <em>padded</em> with extra values to accommodate the size of the complex data—two extra if the last dimension is even and one if it is odd. That is, the last dimension of the real data must physically contain 2 * (n<sub>d-1</sub>/2+1) <code>double</code> values (exactly enough to hold the complex data). This physical array size does not, however, change the <em>logical</em> array size—only n<sub>d-1</sub> values are actually stored in the last dimension, and n<sub>d-1</sub> is the last dimension passed to the planner. </p> <hr> <div class="header"> <p> Next: <a href="Real_002dto_002dReal-Transforms.html" accesskey="n" rel="next">Real-to-Real Transforms</a>, Previous: <a href="Real_002ddata-DFTs.html" accesskey="p" rel="prev">Real-data DFTs</a>, Up: <a href="Basic-Interface.html" accesskey="u" rel="up">Basic Interface</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p> </div> </body> </html>