Schéma explicatif de la FFT pour une suite de 2^3=8 valeurs, et donc de 3 étages
\documentclass[border=10pt]{standalone}
\usepackage{tikz,ifthen}
\newcounter{ym}
\newcounter{yp}
\newcounter{ai}
\newcounter{wi}
\definecolor{myblue}{RGB}{67,67,167}
\definecolor{myred}{RGB}{167,67,67}
\usetikzlibrary {arrows.meta}
\begin{document}
\tikzstyle{n}= [circle, fill, minimum size=4pt,inner sep=0pt, outer sep=0pt]
\tikzstyle{mul} = [circle,draw,inner sep=-1pt]
\begin{tikzpicture}[>=Latex,thick]
\foreach \y in {0,...,7}
\coordinate
(N-0-\y) at (0,-\y);
\node[left] at (N-0-0) {$a_0$};
\node[left] at (N-0-1) {$a_4$};
\node[left] at (N-0-2) {$a_2$};
\node[left] at (N-0-3) {$a_6$};
\node[left] at (N-0-4) {$a_1$};
\node[left] at (N-0-5) {$a_5$};
\node[left] at (N-0-6) {$a_3$};
\node[left] at (N-0-7) {$a_7$};
\foreach \y in {0,...,7}
{
\ifodd\y
\node[draw,anchor=east]
(N-1-\y) at (2,-\y) {$\omega_{2}^0$};
\else
\coordinate
(N-1-\y) at (2,-\y);
\fi
\draw[{Circle[]}->] (N-0-\y.east)--(N-1-\y.west);
}
\foreach \y in {0,...,7}
{
\ifodd\y
\node[mul]
(N-2-\y) at (4,-\y) {$-$};
\else
\node[mul]
(N-2-\y) at (4,-\y) {$+$};
\fi
}
\foreach \y in {0,...,7}{
\ifodd\y
\draw[myblue,->] (N-1-\y)--(N-2-\y);
\pgfmathparse{\y-1}
\pgfmathsetcounter{ym}{\pgfmathresult}
\draw[myblue,->] (N-1-\y.east)--(N-2-\theym.west);
\else
\draw[myred,->] (N-1-\y.east)--(N-2-\y.west);
\pgfmathparse{\y+1}
\pgfmathsetcounter{yp}{\pgfmathresult}
\draw[myred,->] (N-1-\y.east)--(N-2-\theyp.west);
\fi
}
\foreach \y in {0,...,7}
{
\pgfmathparse{int(mod(2*\y+1,8))}
\pgfmathsetcounter{ai}{\pgfmathresult}
\ifthenelse{\value{ai}>4}{
\node[draw,anchor=east]
(N-3-\y) at (6,-\y) {$\omega_4^{\thewi}$};
\addtocounter{wi}{1}
}{
\setcounter{wi}{0}
\coordinate
(N-3-\y) at (6,-\y);
}
\draw[->] (N-2-\y.east)--(N-3-\y.west);
}
\foreach \y in {0,...,7}
{
\pgfmathparse{int(mod(2*\y+1,8))}
\pgfmathsetcounter{ai}{\pgfmathresult}
\ifthenelse{\value{ai}>4}{
\node[mul]
(N-4-\y) at (8,-\y) {$-$};
}{
\node[mul]
(N-4-\y) at (8,-\y) {$+$};
}
}
\foreach \y in {0,...,7}
{
\pgfmathparse{int(mod(2*\y+1,8))}
\pgfmathsetcounter{ai}{\pgfmathresult}
\ifthenelse{\value{ai}>4}{
\node[mul]
(N-4-\y) at (8,-\y) {$-$};
}{
\node[mul]
(N-4-\y) at (8,-\y) {$+$};
}
}
\foreach \y in {0,...,7}
{
\pgfmathparse{int(mod(2*\y+1,8))}
\pgfmathsetcounter{ai}{\pgfmathresult}
\ifthenelse{\value{ai}>4}{
\pgfmathparse{\y-2}
\pgfmathsetcounter{ym}{\pgfmathresult}
\draw[myblue,->]
(N-3-\y.east)--(N-4-\y.west);
\draw[myblue,->]
(N-3-\y.east)--(N-4-\theym.west);
}{
\pgfmathparse{\y+2}
\pgfmathsetcounter{yp}{\pgfmathresult}
\draw[myred,->]
(N-3-\y.east)--(N-4-\y.west);
\draw[myred,->]
(N-3-\y.east)--(N-4-\theyp.west);
}
}
\setcounter{wi}{0}
\foreach \y in {0,...,7}
{
\ifthenelse{\y>3}{
\node[draw,anchor=east]
(N-5-\y) at (10,-\y) {$\omega_8^{\thewi}$};
\addtocounter{wi}{1}
}{
\coordinate (N-5-\y) at (10,-\y);
}
\draw[->] (N-4-\y.east)--(N-5-\y.west);
}
\foreach \y in {0,...,7}
{
\ifthenelse{\y<4}{
\node[mul]
(N-6-\y) at (12,-\y) {$+$};
}{
\node[mul]
(N-6-\y) at (12,-\y) {$-$};
}
}
\foreach \y in {0,...,7}
{
\ifthenelse{\y<4}{
\pgfmathparse{\y+4}
\pgfmathsetcounter{yp}{\pgfmathresult}
\draw[myred,->]
(N-5-\y.east)--(N-6-\y.west);
\draw[myred,->]
(N-5-\y.east)--(N-6-\theyp.west);
}
{
\pgfmathparse{\y-4}
\pgfmathsetcounter{ym}{\pgfmathresult}
\draw[myblue,->]
(N-5-\y.east)--(N-6-\y.west);
\draw[myblue,->]
(N-5-\y.east)--(N-6-\theym.west);
}
}
\foreach \y in {0,...,7}{
\node[anchor=west]
(N-7-\y) at (13,-\y) {$A_{\y}$};
\draw[->] (N-6-\y.east)--(N-7-\y.west);
}
\end{tikzpicture}
\end{document}
