Inverse fast Fourier transform (IFFT) of input
Transforms
dspxfrm3
The IFFT block computes the inverse fast Fourier transform (IFFT) across the first dimension of an ND input array.
When you specify an FFT length not equal to the length of the input vector, (or first dimension of the input array), the block implements zeropadding, truncating, or moduloM, (FFT length) data wrapping. This occurs before the IFFT operation.
y = ifft(u,M) % P ≤ M
Wrapping:
y(:,l) = ifft(datawrap(u(:,l),M)) % P > M; l = 1,...,N
Truncating:
y (:,l) = ifft(u,M) % P > M; l = 1,...,N
When the input length, P, is greater than the FFT length, M, you may see magnitude increases in your IFFT output. These magnitude increases occur because the IFFT block uses moduloM data wrapping to preserve all available input samples.
To avoid such magnitude increases, you can truncate the length of your input sample, P, to the FFT length, M. To do so, place a Pad block before the IFFT block in your model.
The kth entry of the lth output channel, y(k, l), is equal to the kth point of the Mpoint inverse discrete Fourier transform (IDFT) of the lth input channel:
$$y(k,l)=\frac{1}{M}{\displaystyle \sum _{p=1}^{P}u(p,l){e}^{j2\pi (p1)(k1)/M}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}\text{\hspace{0.17em}}k=1,\dots ,M$$
The output of this block has the same dimensions as the input. If the input signal has a floatingpoint data type, the data type of the output signal uses the same floatingpoint data type. Otherwise, the output can be any fixedpoint data type. The block computes scaled and unscaled versions of the IFFT.
The input to this block can be floatingpoint or fixedpoint,
real or complex, and conjugate symmetric. The block uses one of two
possible FFT implementations. You can select an implementation based
on the FFTW library or an implementation based on a collection of
Radix2 algorithms. You can select Auto
to
allow the block to choose the implementation.
The FFTW implementation provides an optimized FFT calculation including support for poweroftwo and nonpoweroftwo transform lengths in both simulation and code generation. Generated code using the FFTW implementation will be restricted to MATLAB^{®} host computers. The data type must be floatingpoint. Refer to Simulink^{®} Coder™ for more details on generating code.
The Radix2 implementation supports bitreversed processing, fixed or floatingpoint data, and allows the block to provide portable Ccode generation using the Simulink Coder. The dimension M of the MbyN input matrix, must be a power of two. To work with other input sizes, use the Pad block to pad or truncate these dimensions to powers of two, or if possible choose the FFTW implementation.
With Radix2 selected, the block implements one or more of the following algorithms:
Butterfly operation
Doublesignal algorithm
Halflength algorithm
Radix2 decimationintime (DIT) algorithm
Radix2 decimationinfrequency (DIF) algorithm
Parameter Settings  Algorithms Used for IFFT Computation 

 Bitreversal operation and radix2 DIT 
 Radix2 DIT 
 Bitreversal operation and radix2 DIT in conjunction with the halflength and doublesignal algorithms 
 Radix2 DIT in conjunction with the halflength and doublesignal algorithms 
In certain situations, the block’s Radix–2 algorithm computes all the possible trigonometric values of the twiddle factor
$${e}^{j\frac{2\pi k}{K}}$$
Number of Table Entries for NPoint FFT  

floatingpoint  3 N/4 
fixedpoint  N 
The following diagrams show the data types used in the IFFT block for fixedpoint signals. You can set the sine table, accumulator, product output, and output data types displayed in the diagrams in the IFFT dialog box as discussed in Parameters.
Inputs to the IFFT block are first cast to the output data type and stored in the output buffer. Each butterfly stage then processes signals in the accumulator data type, with the final output of the butterfly being cast back into the output data type. The block multiplies in a twiddle factor before each butterfly stage in a decimationintime IFFT and after each butterfly stage in a decimationinfrequency IFFT.
The multiplier output appears in the accumulator data type because both of the inputs to the multiplier are complex. For details on the complex multiplication performed, refer to Multiplication Data Types.
The following diagrams show the data types used within the IFFT block for fixedpoint signals. You can set the sine table, accumulator, product output, and output data types displayed in the diagrams in the IFFT block dialog, as discussed in Parameters.
The IFFT block first casts input to the output data type and then stores it in the output buffer. Each butterfly stage then processes signals in the accumulator data type, with the final output of the butterfly being cast back into the output data type. The block multiplies in a twiddle factor before each butterfly stage in a decimationintime IFFT, and after each butterfly stage in a decimationinfrequency IFFT.
The output of the multiplier is in the accumulator data type because both of the inputs to the multiplier are complex. For details on the complex multiplication performed, see Multiplication Data Types.
When the block input is fixed point, all internal data types are signed fixed point.
Main Tab
Set this parameter to FFTW
to support
an arbitrary length input signal. The block restricts generated code
with FFTW implementation to MATLAB host computers.
Set this parameter to Radix2
for bitreversed
processing, fixed or floatingpoint data, or for portable Ccode generation
using the Simulink
Coder. The dimension M of
the MbyN input matrix, must
be a power of two. To work with other input sizes, use the Pad block to pad or truncate these dimensions
to powers of two, or if possible choose the FFTW implementation. See Radix2 Implementation.
Set this parameter to Auto
to let the
block choose the FFT implementation. For nonpoweroftwo transform
lengths, the block restricts generated code to MATLAB host computers.
Select or clear this check box to designate the order of the
input channel elements. Select this check box when the input should
appear in reversed order, and clear it when the input should appear
in linear order. The block yields invalid outputs when you do not
set this parameter correctly. This check box only appears when you
set the FFT implementation parameter to Radix2
or Auto
.
You cannot select this check box if you have cleared the Inherit
FFT length from input dimensions check box, and you are
specifying the FFT length using the FFT length parameter.
Also, it cannot be selected when you set the FFT implementation parameter
to FFTW
.
For more information on ordering of the output, see Linear and BitReversed Output Order.
Select this option when the block inputs conjugate symmetric data and you want realvalued outputs. Selecting this check box optimizes the block's computation method.
The FFT block yields conjugate symmetric output when you input realvalued data. Taking the IFFT of a conjugate symmetric input matrix produces realvalued output. Therefore, if the input to the block is both floating point and conjugate symmetric, and you select this check box, the block produces realvalued outputs.
You cannot select this check box if you have cleared the Inherit FFT length from input dimensions check box, and you are specifying the FFT length using the FFT length parameter.
If you input conjugate symmetric data to the IFFT block and do not select this check box, the IFFT block outputs a complexvalued signal with small imaginary parts. The block outputs invalid data if you select this option with non conjugate symmetric input data.
When you select this check box, the block computes its output according to the IDFT equation, discussed in the Description section.
When you clear this check box, the block computes the output using a modified version of the IDFT: $$M\cdot y(k,l)$$, which is defined by the following equation:
$$\begin{array}{cc}M\cdot y(k,l)={\displaystyle \sum _{p=1}^{P}u(p,l){e}^{j2\pi (p1)(k1)/M}}& k=1,\mathrm{...},M\end{array}$$
Select to inherit the FFT length from the input dimensions. If you do not select this parameter, the FFT length parameter becomes available to specify the length. You cannot clear this parameter when you select either the Input is in bitreversed order or the Input is conjugate symmetric parameter.
Specify FFT length. This parameter only becomes available if you do not select the Inherit FFT length from input dimensions parameter.
When you set the FFT implementation parameter
to Radix2
, or when you check the Output
in bitreversed order check box, this value must be a power
of two.
Choose to wrap or truncate the input, depending on the FFT length. If this parameter is checked, modulolength data wrapping occurs before the FFT operation, given FFT length is shorter than the input length. If this property is unchecked, truncation of the input data to the FFT length occurs before the FFT operation. The default is checked.
Data Types Tab
Select the rounding mode for fixedpoint operations.
The sine table values do not obey this parameter; instead, they always
round to Nearest
.
When you select this parameter, the block saturates the result of its
fixedpoint operation. When you clear this parameter, the block wraps the
result of its fixedpoint operation. For details on
saturate
and wrap
, see overflow
mode for fixedpoint operations.
The Rounding mode and Saturate on integer overflow parameters have no effect on numeric results when all these conditions are met:
Product output data type is
Inherit: Inherit via internal
rule
.
Accumulator data type is
Inherit: Inherit via internal
rule
.
With these data type settings, the block operates in fullprecision mode.
Choose how you specify the word length of the values of the sine table. The fraction length of the sine table values always equals the word length minus one. You can set this parameter to:
A rule that inherits a data type, for example, Inherit:
Same word length as input
An expression that evaluates to a valid data type,
for example, fixdt(1,16)
The sine table values do not obey the Rounding mode and Saturate
on integer overflow parameters; instead, they are always
saturated and rounded to Nearest
.
Specify the product output data type. See FixedPoint Data Types and Multiplication Data Types for illustrations depicting the use of the product output data type in this block. You can set this parameter to:
A rule that inherits a data type, for example, Inherit:
Inherit via internal rule
. For more information on this
rule, see Inherit via Internal Rule.
An expression that evaluates to a valid data type,
for example, fixdt(1,16,0)
Click the Show data type assistant button to display the Data Type Assistant, which helps you set the Product output data type parameter.
See Specify Data Types Using Data Type Assistant (Simulink) for more information.
Specify the accumulator data type. See FixedPoint Data Types for illustrations depicting the use of the accumulator data type in this block. You can set this parameter to:
A rule that inherits a data type, for example, Inherit:
Inherit via internal rule
. For more information on this
rule, see Inherit via Internal Rule.
An expression that evaluates to a valid data type,
for example, fixdt(1,16,0)
Click the Show data type assistant button to display the Data Type Assistant, which helps you set the Accumulator data type parameter.
See Specify Data Types Using Data Type Assistant (Simulink) for more information.
Specify the output data type. See FixedPoint Data Types for illustrations depicting the use of the output data type in this block. You can set this parameter to:
A rule that inherits a data type, for example, Inherit:
Inherit via internal rule
.
When you select Inherit: Inherit via internal rule
,
the block calculates the output word length and fraction length automatically.
The equations that the block uses to calculate the ideal output word
length and fraction length depend on the setting of the Divide
output by FFT length check box.
When you select the Divide output by FFT length check box, the ideal output word and fraction lengths are the same as the input word and fraction lengths.
When you clear the Divide output by FFT length check box, the block computes the ideal output word and fraction lengths according to the following equations:
$$W{L}_{idealoutput}=W{L}_{input}+floor({\mathrm{log}}_{2}(FFTlength1))+1$$
$$F{L}_{idealoutput}=F{L}_{input}$$
Using these ideal results, the internal rule then selects word lengths and fraction lengths that are appropriate for your hardware. For more information, see Inherit via Internal Rule.
An expression that evaluates to a valid data type,
for example, fixdt(1,16,0)
Click the Show data type assistant button to display the Data Type Assistant, which helps you set the Output data type parameter.
See Control Signal Data Types (Simulink) for more information.
Specify the minimum value that the block should output. The
default value is []
(unspecified). Simulink software
uses this value to perform:
Simulation range checking (see Signal Ranges (Simulink))
Automatic scaling of fixedpoint data types
Specify the maximum value that the block should output. The
default value is []
(unspecified). Simulink software
uses this value to perform:
Simulation range checking (see Signal Ranges (Simulink))
Automatic scaling of fixedpoint data types
Select this parameter to prevent the fixedpoint tools from overriding the data types you specify on the block mask.
See Transform FrequencyDomain Data into Time Domain in the DSP System Toolbox™ User's Guide.
Port  Supported Data Types 

Input 

Output 

[1] Orfanidis, S. J. Introduction to Signal Processing. Upper Saddle River, NJ: Prentice Hall, 1996, p. 497.
[2] Proakis, John G. and Dimitris G. Manolakis. Digital Signal Processing, 3rd ed. Upper Saddle River, NJ: Prentice Hall, 1996.
[3] FFTW (http://www.fftw.org
)
[4] Frigo, M. and S. G. Johnson, “FFTW: An Adaptive Software Architecture for the FFT,”Proceedings of the International Conference on Acoustics, Speech, and Signal Processing, Vol. 3, 1998, pp. 13811384.