# How to draw Block diagram like this in LaTeX?

I like to draw the following diagram:

So far i succeed to draw the the following:

\begin{tikzpicture}[
block/.style={draw, minimum width=10mm, minimum height=6mm},
sum/.style={circle, draw, minimum size=6mm, inner sep=0pt,
node contents={\huge$+$}},
mult/.style={circle, draw, minimum size=6mm, inner sep=0pt,
node contents={\huge$\times$}},
>=Stealth,
node distance=12mm and 10mm]
\node (b1) [block]              {$E$};
\node (b2) [block,below=of b1] {$E$};
\node (b3) [block,below=of b2]  {$E$};
\node (b4) [block,below=of b3]  {$E$};
\coordinate[left=of $(b1.west)!1.5!(b2.west)$] (in);
\coordinate[left=of $(b1.east)!1.5!(b2.east)$] (out);
\node (m)  [mult, right=of b2];
\node (m1)  [mult, left=of b2];
\node (s)  [sum,right=of out -| m.west];
\node (b5) [block,right=of s]   {$h_5[n]$};
%
\draw[<-] (in) -- node[above] {$x[n]$} + (-12mm,0);
\draw[<->] (m1.west)-| (in) |- (b3.west);
\draw[<->] (b1.west) -| (in) |- (b4.west);
\draw[->]   (b1) -| (s);
\draw[->]   (b2) -- (m);
\draw[->]   (m1) -- (b2);
\draw[->]   (m)  -| (s);
\draw[->]   (s)  -- (b5);
\draw[->]   (b5.east)  -- node[above] {$y[n]$} + (12mm,0);
\end{tikzpicture}


It is far from what I like to have. On above image I marked:

• with blue mark lines which should be longer [taht I can put the multiplication-red-block their]
• I want to make h_5[n] more big
• I want to define a variable (xx for example) to make it enter to any multiplication block.
• also how can i put a dots vertically between third and fourth line
• Welcome to TeX.SX! On this site, a question should typically revolve around an abstract issue (e.g. "How do I get a double horizontal line in a table?") rather than a concrete application (e.g. "How do I make this table?"). Questions that look like "Please do this complicated thing for me" tend to get closed because they are either "off topic", "too broad", or "unclear". Please try to make your question clear and simple by giving a minimal working example (MWE): you'll stand a greater chance of getting help. – user36296 Jul 25 '16 at 17:29
• Why not show us the code you are "getting [a] problem in rendering"? – user36296 Jul 25 '16 at 17:30
• Can you post the code you came up with and explain the problem with it? – cfr Jul 25 '16 at 17:50
• @CloseVoters Please allow at least a little time for new OPs to improve their first questions unless the questions are actually harmful (e.g. bigoted, spam, illegal, dangerous etc.). Sure, this is a poor question as it stands and needs some work, but voting to close it within 30 minutes amounts to Closing Without Due Care and Attention. Of course, the question should have an MWE and, of course, it is not entirely clear and, of course, the clarification in comments should be edited into the question. But the OP only joined the site today so please have a little patience, at least! – cfr Jul 25 '16 at 17:54
• @AliAmma That's not the point. It tells us how far you got and where an answer should begin from. It is much easier to help somebody when I know what they understand and where they are stuck. Moreover, help is more effective when people better understand your situation. And it is easier to help - people at least have the textual content, for example, and don't have to start from scratch. The boring bits are done and the interesting challenge is immediately available. – cfr Jul 25 '16 at 17:58

Code is not very simple, however, it is (to my opinion) well structered with description what is task of each its part.

\documentclass[tikz, border=3mm]{standalone}
\usetikzlibrary{arrows.meta, calc, chains, quotes, positioning}

\usepackage{amssymb}

\begin{document}
\begin{tikzpicture}[
> = Stealth,
node distance = 10mm and 13mm,
start chain = S going below,
block/.style = {draw, minimum size=6mm, inner sep=1mm},
sum/.style = {circle, draw, minimum size=6mm, inner sep=0pt, outer sep=0pt,
font=\huge, node contents={$+$}},
mult/.style = {circle, draw, minimum size=6mm, inner sep=0pt,
font=\huge, node contents={$\times$}},
VD/.style = {minimum height=6mm, node contents={},
yshift=7mm,% <-- for adjustin of vertical distance
%     between sum and vertical dots
path picture={\draw[ultra thick, dotted]
(path picture bounding box.north) --
(path picture bounding box.south);}
},
]
% first column: nodes sum
\begin{scope}[every node/.append style={on chain=S}]
\node[sum];         % name: S-1
\node[sum];
\node[VD];
\node[sum];
\node[VD] {};
\node[sum];         %       S-6
\end{scope}
% arrows with weights N_1 ... N_N
\draw[<-] (S-1.north) -- + (0,0.3) node[above] {$N_1$};
\draw[<-] (S-2.north) -- + (0,0.3) node[above] {$N_2$};
\draw[<-] (S-4.north) -- + (0,0.3) node[above] {$N_M$};
\draw[<-] (S-6.north) -- + (0,0.3) node[above] {$N_1$};
% second column: nodes E
\begin{scope}[every node/.style={block, node contents={E}}]
\node (E1) [right=of S-1];
\node (E2) [right=of S-2];
\node (E4) [right=of S-4];
\node (E6) [right=of S-6];
\end{scope}
% nodes with vertical dots in second column
\node[VD, below=of E2];
\node[VD, below=of E4];
% arrows with sums x_i[n], drawn as edges with labels
\draw[->]   (S-1) edge ["{$x_1[n]$}"]  (E1)
(S-2) edge ["{$x_2[n]$}"]  (E2)
(S-4) edge ["{$x_N[n]$}"]  (E4)
(S-6) edge ["{$x_M[n]$}"]  (E6);
% third column: block for wireless sensor network,
%   first is measured distance between E1.nort and E6.south
%   and than this distance is used as minimal height of block
%   here is used library calc
\path   let \p1 = ($(E1.north) - (E6.south)$),
\n1 = {veclen(\y1,\x1)} in
node (WSN)  [block,
inner ysep=0pt, minimum height=\n1, align=center,
below right = 0mm and 10mm of E1.north east]
{Wireless\\ Sensor\\ Network};
% arrows with weights Y_1 ... Y_N drawn as edges with labels
\draw[->]   (E1) edge ["{$Y_1[n]$}"]  (E1 -| WSN.west)
(E2) edge ["{$Y_2[n]$}"]  (E2 -| WSN.west)
(E4) edge ["{$Y_N[n]$}"]  (E4 -| WSN.west)
(E6)  to  ["{$Y_M[n]$}"]  (E6 -| WSN.west);
% fourth column: nodes D
\begin{scope}[every node/.style={block, node contents={D}}]
\node (D1) [right=of E1 -| WSN.east];
\node (D2) [right=of E2 -| WSN.east];
\node (D4) [right=of E4 -| WSN.east];
\node (D6) [right=of E6 -| WSN.east];
\end{scope}
% arrows to nodes D
\draw[->]   (D1 -| WSN.east) edge (D1)
(D2 -| WSN.east) edge (D2)
(D4 -| WSN.east) edge (D4)
(D6 -| WSN.east)  to  (D6);
% nodes with vertical dots in fourth column
\node[VD, below=of D2];
\node[VD, below=of D4];
% auxiliary coordinates used for draw edges from nodes D
\coordinate[right=of D1] (Z1);
\coordinate[right=of D2] (Z2);
\coordinate[right=of D4] (Z4);
\coordinate[right=of D6] (Z6);
% summations of Z_i, node sum is in line with D_4
\node (out) [sum, right=of Z4];
% arrow from nodes D with labels Z_i[n]
\draw[->]   (D1) to ["{$Z_1[n]$}"] (Z1) -- (out);
\draw[->]   (D2) to ["{$Z_2[n]$}"] (Z2) -- (out);
\draw[->]   (D4) to ["{$Z_N[n]$}"] (Z4) -- (out);
\draw[->]   (D6) to ["{$Z_M[n]$}"] (Z6) -- (out);
\draw[->]   (out) -- + (1,0) node[right] {$\boldmath{\widehat{S}}$};% <-- output
% on the end lets make input to this graph
\coordinate[left=of S-1.west] (X1);
\coordinate[left=of S-2.west] (X2);
\coordinate[left=of S-4.west] (X4);
\coordinate[left=of S-6.west] (X6);
% input x[n]
\coordinate[left=of X4.west] (in);
% input arrows
\draw       (in) -- + (-1,0) node[left] {$x[n]$};
\draw[->]   (in) -- (X1) -- (S-1);
\draw[->]   (in) -- (X2) -- (S-2);
\draw[->]   (in) -- (X4) -- (S-4);
\draw[->]   (in) -- (X6) -- (S-6);
\end{tikzpicture}
\end{document}


For beginners, Tikz's undoubtedly complicated, therefore I suggest using a WYSISYG editors, for example: GeoGebra/TikzEdt (if you don't have much time).

TikzEdt: http://www.tikzedt.org/

But, please consider learning to write Tikz code (as the quality of generated Tikz code from mentioned program is not very good).

• i done that . can u see it above – Ali Amma Jul 25 '16 at 21:55