Programmer Guide/Command Reference/EVAL/fft: Difference between revisions

From STX Wiki
Jump to navigationJump to search
No edit summary
No edit summary
 
(25 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{DISPLAYTITLE:{{SUBPAGENAME}}}}
{{DISPLAYTITLE:{{SUBPAGENAME}}}}
Fast fourier transform.
Compute the discrete fourier transform of a real signal using the '''fft''' or the '''dft''' algorithm.
----
----
;Usage 1:<code>fft(<var>x</var>)</code>
;Usage 1:<code>fft(<var>n</var>)</code>
:;<var>n</var>: desired signal window length (scalar)
;Result 1:The next (nearest) possible signal window length.
----
;Usage 2:<code>fft(<var>x</var>)</code>
:;<var>x</var>: signal vector or matrix; if ''x'' is a matrix a spectrum of each column is computed
:;<var>x</var>: signal vector or matrix; if ''x'' is a matrix a spectrum of each column is computed
;Result:A matrix containing a complex spectrum for each column (channel) of the input signal ''x''. The transformation length L is set to <code>[[./npow2|npow2(nrow(
;Result 2:A matrix ''y'' with [[../ncol|ncol(''x'')]] columns and L+2 rows, where each column ''y''[*,j] contains the complex spectrum of the column (channel) ''x''[*,j]. The transformation length L is set to [[../npow2|npow2(nrow(''x''))]].
// (1) fft( X )
----
// function:
;Usage 3:<code>fft(<var>x</var>, <var>n</var> {, <var>ytype</var>, <var>poffset</var>, <var>prange</var>, <var>aref</var>})</code>
// if X is a vector: compute the fft spectrum of X
:;<var>x</var>: signal vector or matrix; if ''x'' is a matrix a spectrum of each column is computed
// if X is a matrix: compute the fft spectrum of each row of X
:;<var>n</var>: desired length of analysis window;
// the fft length L is set to the next power of 2 of nrow(X)
::*If <code>''n'' < nrow(''x'')</code>, the analysis window length L is set to nrow(''x''), otherwise L is set to ''n''.
// if L is greater than nrow(X), zero padding is applied
::*If the analysis window length L is a power of 2 (L=2<sup>M</sup>), the '''fft''' algorithm is used, otherwise the '''dft''' is used.
// result:  
::*If L is greater than [[../nrow|nrow(''x'')]], zero padding is applied to the signal.
// vector or matrix Y containing one complex spectrum per row;  
:;<var>ytype</var>: select the type and format of the computed spectrum (default=0) &rarr; see '''Result 3'''
// nrow(Y) = L+2, ncol(Y) = ncol(X)
:;<var>poffset</var>: offset in samples to the signal begin or the selected ''zero phase'' position (default=0)
 
:::{|class="keinrahmen"
 
|''poffset''='''0''' ||&rarr; <code>phase[i] = atan2(im[i], re[i])</code>
 
|-
=====fft=====
|otherwise ||&rarr; <code>phase[i] = (atan2(im[i], re[i]) - 2*pi*i/L * ''poffset'') % (2 * pi)</code>
 
|}
{|
:;<var>prange</var>: selects the range of phase values (default=0)
:::{|class="keinrahmen"
|''prange''='''0''' ||&rarr; <code>0 &le; phase[i] < 2*pi</code>
|-
|otherwise ||&rarr; <code>-pi &le; phase[i] < pi</code>
|}
:;<var>aref</var>: reference amplitude if the log. spectrum (''ytype''=4) is requested (default=1)
;Result 3: A matrix ''y'' with [[../ncol|ncol(''x'')]] columns, where each column ''y''[*,j] contains the spectrum of the column (channel) ''x''[*,j]. The type and the length of the spectra is selected by the argument ''ytype''.
::{|class="einrahmen"
!''ytype'' !! description !! content of ''y''[*,j] !! nrow(''y'')
|-
|'''0'''
|complex spectrum in cartesian format
|<code>{ re<sub>0</sub>, im<sub>0</sub>, re<sub>1</sub>, im<sub>1</sub>, ... }</code>
|L+2
|-
|'''1'''
|complex spectrum in polar format
|<code>{ amp<sub>0</sub>, phase<sub>0</sub>, amp<sub>1</sub>, phase<sub>1</sub>, ... }<BR>with: amp<sub>i</sub>=sqrt(re<sub>i</sub><sup>2</sup> + im<sub>i</sub><sup>2</sup>),<BR>phase<sub>i</sub> see ''poffset''</code>
|L+2
|-
|'''2'''
|amplitude spectrum
|<code>{ amp<sub>0</sub>, amp<sub>1</sub>, ... }</code>
|L+1
|-
|'''3'''
|power spectrum
|<code>{ amp<sub>0</sub><sup>2</sup>, amp<sub>1</sub><sup>2</sup>, ... }</code>
| L+1
|-
|-
|fft(x)fft(<var>x</var>, <var>n</var>)
|'''4'''
|Calculate the FFT of the vector x. If the parameter <var>n</var> is given and <var>n</var> >= nrow(<var>x</var>), then <var>n</var> is used as the signal length. The next possible value of <var>x</var>^2 is used for the FFT length (if necessary, 0 samples are added to <var>x</var>). The result is a complex FFT spectrum with 2^(m-1)+1 complex values (2^m = FFT length)
|logarithmic amplitude spectrum
|<code>{ lev<sub>0</sub>, lev<sub>1</sub>, ... }<BR>with: lev<sub>i</sub>=20*log<sub>10</sub>(amp<sub>i</sub>/''aref'')</code>  
| L+1
|}
|}
----
;See also: [[../ifft|ifft]], [[../dft|dft]], [[../dct|dct]], [[../cepstrum|cepstrum]], [[../lpc|lpc]], [[../complex arithmetic|complex arithmetic]]
[[../#Functions|<function list>]]

Latest revision as of 19:22, 21 April 2011

Compute the discrete fourier transform of a real signal using the fft or the dft algorithm.


Usage 1
fft(n)
n
desired signal window length (scalar)
Result 1
The next (nearest) possible signal window length.

Usage 2
fft(x)
x
signal vector or matrix; if x is a matrix a spectrum of each column is computed
Result 2
A matrix y with ncol(x) columns and L+2 rows, where each column y[*,j] contains the complex spectrum of the column (channel) x[*,j]. The transformation length L is set to npow2(nrow(x)).

Usage 3
fft(x, n {, ytype, poffset, prange, aref})
x
signal vector or matrix; if x is a matrix a spectrum of each column is computed
n
desired length of analysis window;
  • If n < nrow(x), the analysis window length L is set to nrow(x), otherwise L is set to n.
  • If the analysis window length L is a power of 2 (L=2M), the fft algorithm is used, otherwise the dft is used.
  • If L is greater than nrow(x), zero padding is applied to the signal.
ytype
select the type and format of the computed spectrum (default=0) → see Result 3
poffset
offset in samples to the signal begin or the selected zero phase position (default=0)
poffset=0 phase[i] = atan2(im[i], re[i])
otherwise phase[i] = (atan2(im[i], re[i]) - 2*pi*i/L * poffset) % (2 * pi)
prange
selects the range of phase values (default=0)
prange=0 0 ≤ phase[i] < 2*pi
otherwise -pi ≤ phase[i] < pi
aref
reference amplitude if the log. spectrum (ytype=4) is requested (default=1)
Result 3
A matrix y with ncol(x) columns, where each column y[*,j] contains the spectrum of the column (channel) x[*,j]. The type and the length of the spectra is selected by the argument ytype.
ytype description content of y[*,j] nrow(y)
0 complex spectrum in cartesian format { re0, im0, re1, im1, ... } L+2
1 complex spectrum in polar format { amp0, phase0, amp1, phase1, ... }
with: ampi=sqrt(rei2 + imi2),
phasei see poffset
L+2
2 amplitude spectrum { amp0, amp1, ... } L+1
3 power spectrum { amp02, amp12, ... } L+1
4 logarithmic amplitude spectrum { lev0, lev1, ... }
with: levi=20*log10(ampi/aref)
L+1

See also
ifft, dft, dct, cepstrum, lpc, complex arithmetic

<function list>

Navigation menu

Personal tools