Main Content


Fast Fourier transform (FFT) of iddata object



datf = fft(data) uses the fast Fourier transform (FFT) algorithm to transform the time-domain iddata object data to the frequency domain iddata object datf. data contains real-valued signals and has constant sample time Ts, and datf has frequency values equally distributed from 0 to the Nyquist frequency. The Nyquist frequency is included if the signal length is even and not included if the length is odd. To preserve the signal power and noise level, FFTs are normalized by dividing each transform by the square root of the signal length.


datf = fft(data,N) specifies the transformation length N. In the default case, the length of the transformation is determined by the signal length. Including N forces the FFT transformations to pad with zeros if the signals in data are shorter than N and truncate the signals otherwise. Thus, the number of frequencies in the real signal case is (N/2)+1 when N is even or (N+1)/2 when N is odd. If data contains several experiments, N can be a row vector of corresponding length.


datf = fft(data,N,'complex') specifies to include negative frequencies. For real signals, the default is that datf contains only nonnegative frequencies, while for complex-valued signals, negative frequencies are always included. To enforce negative frequencies in the real case, add 'complex'.


collapse all

Load and plot the time-domain data z1, which contains 300 samples.

load iddata1 z1;

Transform data to the frequency domain and plot.

datf = fft(z1);

Load the data. Use fft to transform the time-domain data z1 to the frequency domain, using a transformation length N of 100.

load iddata1 z1;
datf = fft(z1, 100);

Load the data. Create 2 frequency-domain objects zf1 and zf2, using 'complex' when creating zf2 to include negative frequencies.

Compare the results.

load iddata1 z1
zf1 = fft(z1,300);
zf2 = fft(z1,300,'complex');
h = plot(zf2,zf1);
opt = getoptions(h);
opt.FreqScale = 'linear';
opt.PhaseMatching = 'on';
xlim([-32 32])

Input Arguments

collapse all

Time-domain data, specified as an iddata object.

Transformation length, specified as a scalar integer, or for multiexperiment data, a row vector of integers. By default, each element of N is equal to the corresponding signal length.

Output Arguments

collapse all

Frequency-domain data, returned as an iddata object.


fft does not produce the same answer as the base MATLAB® fft function.

  • For real signals, by default, fft computes the FFT for only the positive portion of frequency range. MATLAB fft computes the FFT for the entire frequency range.

  • fft scales the result by 1/sqrt(N), where N is the data length. MATLAB fft does not apply scaling.

Version History

Introduced in R2007a