[Tex/LaTex] How to draw a block of rectangles and arrows in tikz

tikz-pgf

I am trying to draw the picture attached in tikz but I failed to do so. Can anyone help me? Thanks.

MMSE-SIC

What I did is the following which produces something as follow:

\documentclass[tikz,border=5]{standalone}
\renewcommand\familydefault\sfdefault
\usetikzlibrary{calc,fit,shapes.geometric}
\pgfdeclarelayer{signal}
\pgfsetlayers{signal,main}
\usetikzlibrary{chains,shapes.multipart}
\usetikzlibrary{automata,positioning}
\usetikzlibrary{arrows}% To get more arrow heads
\newcounter{cntr}
\renewcommand{\rmdefault}{ptm}
\usepackage[lite,subscriptcorrection,slantedGreek,nofontinfo]{mtpro2}
\usetikzlibrary{snakes}
\tikzstyle{printersafe}=[snake=snake,segment amplitude=0 pt]
\colorlet{sky blue}{blue!60!cyan!75!black}
\colorlet{dark blue}{blue!50!cyan}
\colorlet{chameleon}{olive!75!green}
\tikzset{signal/.style={draw=black, line width=0.2em}}


\begin{document}
    \begin{tikzpicture}[>=triangle 45,x=1em,y=1em]  
        \node[] at (-8,1) (y) {$y_n$};
        \node[] at (-8,0) (y0) {};
        \node[] at (-7,0) (y00) {};
        \node[draw,rectangle] at (0,0) (a) {MMSE $\mathbf{o}_n[1]$};
        \node[draw,rectangle] at (15,0) (b) {Decode $\mathbf{o}_n[1]$};
        \node[] at (25,0) (x) {$\hat{x}_{\mathbf{o}_n[1]}$};
        \node[] at (22,0) (x00) {};
        \draw [semithick,->] (a) -- (b);
        \draw [semithick,->] (b) -- (x);
        \draw [semithick,->] (y0) -- (a);
        \node[draw,rectangle] at (0,-5) (a1) {MMSE $\mathbf{o}_n[2]$};
        \node[draw,rectangle] at (15,-5) (b1) {Decode $\mathbf{o}_n[2]$};
        \node[] at (25,-5) (x1) {$\hat{x}_{\mathbf{o}_n[2]}$};
        \draw [semithick,->] (a1) -- (b1);
        \draw [semithick,->] (b1) -- (x1);
        \node[draw,circle] at (-5, -5) (c1) {};
        \draw [semithick,->] (c1) -- (a1);
        \draw [semithick,->] (y00) |- (c1);
        \node[] at (-5.2, -2.1) (c01) {};
        \draw [semithick] (x00) |- (c01);
        \draw [semithick, ->] (c01) |- (c1);
    \end{tikzpicture}
\end{document}

enter image description here

EDIT:
According to some comments, I am clarifying the following: I need to reproduce the blocks with the arrows and the circles. Something like this is sufficient:

enter image description here

Best Answer

Something like this, perhaps? I don't understand the labels etc. in the code given that the diagram is meant to be precisely the same as the posted image, so I've ignored those and gone by the image.

Most of the libraries and definitions were irrelevant to the example, so I've eliminated them. I don't have the non-free fonts, so I dropped those. The change of \rmdefault has no effect given that it does not affect maths and the \familydefault is set to sans-serif. So I've deleted that, too.

\documentclass[tikz,border=5pt,multi]{standalone}
\renewcommand\familydefault\sfdefault
\usetikzlibrary{chains,scopes,arrows.meta}
\begin{document}
\begin{tikzpicture}
  [
    start chain=main going right,
    semithick,
    >={Triangle[angle=45:5pt 3]},
    pass/.style={on chain, shape=coordinate, join},
    dash pass/.style={on chain, shape=coordinate, join=by {dashed} },
    block/.style={on chain, draw, join=by {->}},
    circ/.style={on chain, draw, minimum width=5pt, circle, join=by {->}, anchor=center, label={[inner sep=0pt]135:$+$}, label={[inner sep=0pt]45:$-$}},
  ]
  {
    \node [on chain, label=above:$y_m$] {};
    \node [pass] {};
    {[start branch=first going below]
      \node [pass] {};
      \node (a) [pass] {};
      \node [dash pass] {};
    }
    \node [pass] {};
    {[start branch=third going below]
      \node (c) [shape=coordinate, on chain, label={-45:$p_{n_{m1}}h_{n_{m1}}\hat{x}_{n_{m1}}$}] {};
    }
    \node [block] {MMSE $n_{m1}$};
    \node [block] {Decode $n_{m1}$};
    \node [pass] {};
    {[start branch=second going below]
      \node (b) [pass] {};
      \chainin (c) [join];
      \node [circ] {};
      {[start branch=fourth going below]
        \node (e) [shape=coordinate, on chain, label={-45:$p_{n_{m1}}h_{n_{m1}}\hat{x}_{n_{m1}}+\dots+p_{n_{mN_{m^{-1}}}}h_{n_{mN_{m^{-1}}}}\hat{x}_{n_{mN_{m^{-1}}}}$}] {};
      }
    }
    {[continue branch=second going right]
      \node [block] {MMSE $n_{m2}$};
      \node [block] {Decode $n_{m2}$};
      \node [pass] {};
      {[start branch=third going below]
        \node (d) [dash pass] {};
        \chainin (e);
        \draw (d) -| (e);
        \node [circ] {};
        {[start branch=fifth going left]
          \node [on chain, join=by <-] {};
        }
      }
      {[continue branch=third going right]
        \node [block] {MMSE $n_{m3}$};
        \node [block] {Decode $n_{m3}$};
        \node [pass] {};
        \node [on chain, join=by ->] {$\hat{x}_{n_{m3}}$};
      }
      \node [on chain, join=by ->] {$\hat{x}_{n_{m2}}$};
    }
    \node [on chain, join=by ->] {$\hat{x}_{n_{m1}}$};
  }
\end{tikzpicture}
\end{document}

chains within chains

Related Question