Content deleted Content added
DaltonCastle (talk | contribs) added Category:Digital signal processing using HotCat |
m clean up spacing around commas and other punctuation, replaced: ,and → , and , ,N → , N (2), ,k → , k (29), ,r → , r (5), ,u → , u |
||
(25 intermediate revisions by 15 users not shown) | |||
Line 1:
{{Short description|Multidimensional fast Fourier transform algorithm}}
The '''
The most common multidimensional [[FFT]] algorithm is row-column algorithm, which means transforming the array first in one index and then in the other, see more in [[FFT]]. Then a radix-2 direct 2-D FFT has been developed<ref name="Rivard77">{{cite journal|last1=Rivard|first1=G.|title=Direct fast Fourier transform of bivariate functions|journal=IEEE Transactions on Acoustics, Speech, and Signal Processing|volume=25|page=250-252|doi=10.1109/TASSP.1977.1162951|url=http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1162951&isnumber=26125}}</ref>, and it can eliminate 25% of the multiplies by the conventional row-column approach. And this algorithm has been extended to rectangular arrays and arbitrary radices<ref name="Harris77">{{cite journal|last1=Harris|first1=D.|last2=McClellan|first2=J.|last3=Chan|first3=D.|last4=Schuessler|first4=H.|title=Vector radix fast Fourier transform|journal=Acoustics, Speech, and Signal Processing, IEEE International Conference on ICASSP '77|volume=2|page=548-551|doi=10.1109/ICASSP.1977.1170349|url=http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=1170349&isnumber=26347}}</ref>, which is the general Vector-Radix algorithm. Perhaps it is the simplest non-row-column [[FFT]] algorithm. <br />▼
'''Vector-radix FFT algorithm''' can reduce the number of complex multiplications significantly, compared to row-vector algorithm. For example, for a <math>N^M</math> time matrix (M dimensions, and size N on each dimension), the number of complex multiples of vector-radix FFT algorithm is <math>\frac{2^M -1}{2^M} N^M log_2 N</math>, meanwhile, for row-column algorithm, it is <math>\frac{M N^M}{2} log_2 N</math>. And generally, even larger savings in multiplies are obtained when this algorithm is operated on larger radices and on higher dimensional arrays<ref name=Harris77/>.▼
▲The most common multidimensional [[Fast Fourier transform|FFT]] algorithm is the row-column algorithm, which means transforming the array first in one index and then in the other, see more in [[Fast Fourier transform|FFT]]. Then a radix-2 direct 2-D FFT has been developed,<ref name="Rivard77">{{cite journal|last1=Rivard|first1=G.|title=Direct fast Fourier transform of bivariate functions|journal=IEEE Transactions on Acoustics, Speech, and Signal Processing|volume=25|
▲
Overall, the vector-radix algorithm significantly reduces the structural complexity of the traditional DFT having a better indexing scheme, at the expense of a slight increase in arithmetic operations. So this algorithm is widely used for many applications in engineering, science, and mathematics, for example, implementations in image processing,<ref name="Buijs74">{{cite journal|last1=Buijs|first1=H.|last2=Pomerleau|first2=A.|last3=Fournier|first3=M.|last4=Tam|first4=W.|title=Implementation of a fast Fourier transform (FFT) for image processing applications|journal=IEEE Transactions on Acoustics, Speech, and Signal Processing|date=Dec 1974|volume=22|issue=6|pages=420–424|doi=10.1109/TASSP.1974.1162620}}</ref> and high speed FFT processor designing.<ref name="Badar15">{{cite book|last1=Badar|first1=S.|last2=Dandekar|first2=D.|title=2015 International Conference on Industrial Instrumentation and Control (ICIC) |chapter=High speed FFT processor design using radix −<sup>4</sup> pipelined architecture |pages=1050–1055|doi=10.1109/IIC.2015.7150901|year=2015|isbn=978-1-4799-7165-7|s2cid=11093545 }}</ref>
== 2-D DIT case ==
As with the [[Cooley–Tukey FFT algorithm]], the two dimensional vector-radix FFT is derived by decomposing the regular 2-D
A decimation-in-time ('''DIT''') algorithm means the decomposition is based on time ___domain <math>x</math>, see more in [[Cooley–Tukey FFT algorithm]].
We suppose the 2-D
:<math>X(k_1,k_2) = \sum_{n_1=0}^{N_1-1} \sum_{n_2=0}^{N_2-1} x[n_1, n_2] \cdot W_{N_1}^{k_1 n_1} W_{N_2}^{k_2 n_2}, </math>
where <math>k_1 = 0,\dots,N_1-1</math>, and <math>k_2 = 0,\dots,N_2-1</math>, and <math>x[n_1, n_2]</math> is
For simplicity, let us assume that <math>N_1=N_2=N</math>, and the radix-<math>(r\times r)</math>
Using the change of variables:
* <math>n_i=rp_i+q_i</math>, where <math>p_i=0,\
* <math>k_i=u_i+v_i N/r</math>, where <math>u_i=0,\
where <math>i = 1</math> or <math>2</math>, then the two dimensional DFT can be written as:<ref name="Chan92">{{cite journal|last1=Chan|first1=S. C.|last2=Ho|first2=K. L.|title=Split vector-radix fast Fourier transform|journal=IEEE Transactions on Signal Processing|volume=40|issue=8|pages=2029–2039|doi=10.1109/78.150004|bibcode=1992ITSP...40.2029C|year=1992}}</ref>
where <math>i = 1</math> or <math>2</math>.<br />▼
:<math> X(u_1+v_1 N/r,u_2+v_2 N/r)=\sum_{q_1=0}^{r-1} \sum_{q_2=0}^{r-1} \left[ \sum_{p_1=0}^{N/r-1} \sum_{p_2=0}^{N/r-1} x[rp_1+q_1,
[[File:
▲:<math> X(u_1+v_1 N/r,u_2+v_2 N/r)=\sum_{q_1=0}^{r-1} \sum_{q_2=0}^{r-1} \left[ \sum_{p_1=0}^{N/r-1} \sum_{p_2=0}^{N/r-1} x[rp_1+q_1, rp_1+q_1] W_{N/r}^{p_1 u_1} W_{N/r}^{p_2 u_2} \right] \cdot W_{N}^{q_1 u_1+q_2 u_2} W_{r}^{q_1 v_1} W_{r}^{q_2 v_2},</math>
The equation above defines the basic structure of the 2-D DIT radix-<math>(r\times r)</math> "butterfly". (See 1-D "butterfly" in [[Cooley–Tukey FFT algorithm]])
▲[[File:2-D DIT-FFT-butterfly.png|thumb|400px|One stage "butterfly" for DIT vector-radix 2x2 FFT]]
When <math>r=2</math>, the equation can be broken into four summations, and this leads to:<ref name=Dudgeon83/>
▲The equation above defines the basic structure of the 2-D DIT radix-<math>(r\times r)</math> "butterfly". (See 1-D "butterfly" in [[Cooley–Tukey FFT algorithm]])<br />
:<math> X(k_1,k_2) = S_{00}(k_1,k_2) + S_{01}(k_1,k_2)
▲:<math> X(k_1,k_2) = S_{00}(k_1,k_2) + S_{01}(k_1,k_2) W_{N}^{k_2} +S_{10}(k_1,k_2) W_{N}^{k_1} + S_{11}(k_1,k_2) W_{N}^{k_1+k_2}</math>,<br />
where <math>S_{ij}(k_1,k_2)=\sum_{n_1=0}^{N/2-1} \sum_{n_2=0}^{N/2-1} x[2 n_1 + i, 2 n_2 + j] \cdot W_{N/2}^{n_1 k_1} W_{N/2}^{n_2 k_2}</math>.
The <math>S_{ij}</math> can be viewed as the <math>N/2</math>-dimensional DFT, each over a subset of the original sample:
== 2-D DIF case ==▼
* <math>S_{00}</math> is the DFT over those samples of <math>x</math> for which both <math>n_1</math> and <math>n_2</math> are even;
Similarly, a decimation-in-frequency ('''DIF''', also called the Sande-Tukey algorithm) algorithm means the decomposition is based on frequency ___domain <math>X</math>, see more in [[Cooley–Tukey FFT algorithm]].<br />▼
* <math>S_{01}</math> is the DFT over the samples for which <math>n_1</math> is even and <math>n_2</math> is odd;
Using the change of variables:▼
* <math>
* <math>
:<math> X(r u_1+v_1,r u_2+v_2)=\sum_{p_1=0}^{N/r-1} \sum_{p_2=0}^{N/r-1} \left[ \sum_{q_1=0}^{r-1} \sum_{q_2=0}^{r-1} x[p_1+q_1 N/r, p_1+q_1 N/r] W_{r}^{q_1 v_1} W_{r}^{q_2 v_2} \right] \cdot W_{N}^{p_1 v_1+p_2 v_2} W_{N/r}^{p_1 u_1} W_{N/r}^{p_2 u_2},</math>▼
Thanks to the [[List of trigonometric identities#Shifts and periodicity|periodicity of the complex exponential]], we can obtain the following additional identities, valid for <math>0\leq k_1, k_2 < \frac{N}{2}</math>:
* <math>X\biggl(k_1,k_2+\frac{N}{2}\biggr) = S_{00}(k_1,k_2) - S_{01}(k_1,k_2) W_N^{k_2} +S_{10}(k_1,k_2) W_N^{k_1} - S_{11}(k_1,k_2) W_N^{k_1+k_2}</math>;
* <math>X\biggl(k_1+\frac{N}{2},k_2+\frac{N}{2}\biggr) = S_{00}(k_1,k_2) - S_{01}(k_1,k_2) W_N^{k_2} -S_{10}(k_1,k_2) W_N^{k_1} + S_{11}(k_1,k_2) W_N^{k_1+k_2}</math>.
▲== 2-D DIF case ==
▲Similarly, a decimation-in-frequency ('''DIF''', also called the
▲Using the change of variables:
* <math>n_i=p_i+q_i N/r</math>, where <math>p_i=0,\ldots,(N/r)-1; q_i = 0,\ldots,r-1;</math>
* <math>k_i=r u_i+v_i</math>, where <math>u_i=0,\ldots,(N/r)-1; v_i = 0,\ldots,r-1;</math>
▲where <math>i = 1</math> or <math>2</math>
▲:<math> X(r u_1+v_1,r u_2+v_2)=\sum_{p_1=0}^{N/r-1} \sum_{p_2=0}^{N/r-1} \left[ \sum_{q_1=0}^{r-1} \sum_{q_2=0}^{r-1} x[p_1+q_1 N/r,
== Other approaches ==
The [[
In conventional 2-D vector-radix algorithm, we decompose the
: <math>▼
▲In conventional 2-D vector-radix algorithm, we decompose the incident <math>k_1,k_2</math> into 4 groups:<br />
▲<math>
\begin{array}{lcl}
X(2 k_1, 2 k_2) & : & \text{even-even} \\
X(2 k_1, 2 k_2 +1) & : & \text{even-odd} \\
X(2 k_1 +1, 2 k_2) & : & \text{odd-even} \\
X(2 k_1+1, 2 k_2+1) & : & \text{odd-odd
\end{array}
</math>
By the split vector-radix algorithm, the first three groups remain unchanged, the fourth odd-odd group is further decomposed into another four sub-groups, and seven groups in total:
: < \begin{array}{lcl}
X(2 k_1, 2 k_2) & : & \text{even-even} \\
X(2 k_1, 2 k_2 +1) & : & \text{even-odd} \\
X(2 k_1 +1, 2 k_2) & : & \text{odd-even} \\
X(4 k_1+1, 4 k_2+1) & : & \text{odd-odd} \\
X(4 k_1+1, 4 k_2+3) & : & \text{odd-odd} \\
X(4 k_1+3, 4 k_2+1) & : & \text{odd-odd} \\
X(4 k_1+3, 4 k_2+3) & : & \text{odd-odd}
\end{array}
</math>
That means the fourth term in 2-D DIT radix-<math>(2\times 2)</math> equation, <math>S_{11}(k_1,k_2) W_{N}^{k_1+k_2}</math> becomes:<
▲:<math> A_{11}(k_1,k_2) W_{N}^{k_1+k_2} + A_{13}(k_1,k_2) W_{N}^{k_1+3 k_2} +A_{31}(k_1,k_2) W_{N}^{3 k_1+k_2} + A_{33}(k_1,k_2) W_{N}^{3(k_1+k_2)}</math>,<br />
where <math>A_{ij}(k_1,k_2)=\sum_{n_1=0}^{N/4-1} \sum_{n_2=0}^{N/4-1} x[4 n_1 + i, 4 n_2 + j] \cdot W_{N/4}^{n_1 k_1} W_{N/4}^{n_2 k_2}</math>
The 2-D N by N DFT is then obtained by successive use of the above decomposition, up to the last stage.<br />▼
It has been shown that the split vector radix algorithm has saved about 30% of the complex multiplications and about the same number of the complex additions for typical <math>1024\times 1024</math> array, compared with the vector-radix algorithm<ref name=Pei87/>.▼
▲The 2-D N by N DFT is then obtained by successive use of the above decomposition, up to the last stage.
▲It has been shown that the split vector radix algorithm has saved about 30% of the complex multiplications and about the same number of the complex additions for typical <math>1024\times 1024</math> array, compared with the vector-radix algorithm.<ref name=Pei87/>
==References==
{{reflist|30em}}
[[Category:FFT algorithms]]
[[Category:Digital signal processing]]
[[Category:Discrete transforms]]
|