0

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

  • Are you trying to do exactly the same graph or only drawing inspiration from it? – Alenanno Jan 6 '16 at 0:37
  • I am trying to get exactly the same graph. In my attempt, I changed the math symbols only but I did not succeed to produce the arrows directions and the rest of the blocks. – Jika Jan 6 '16 at 0:45
  • 1
    So the lines e.g. horizontal and vertical are not supposed to join completely? The little gaps are required? – cfr Jan 6 '16 at 0:49
  • So you want 3 layers of blocks? And also that long "equation"? Please provide those in text. :) – Alenanno Jan 6 '16 at 1:01
2

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

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.