% vim: set ts=2 sw=2 noet:
\begin{tikzpicture}[
		dot/.style = {
			circle,
			fill = black, draw = black,
			minimum size = 1.5mm,
			outer sep = 0, inner sep = 0,
		},
		block/.style = {
			rectangle, draw, thick,
			black, fill = white,
			minimum height = 8mm, minimum width = 8mm,
		},
		prod/.style = {
			circle, draw, thick,
			black, fill = white,
			minimum size = 6mm,
			inner sep = 0, outer sep = 0,
		},
		sum/.style = {
			circle, draw, thick,
			black, fill = white,
			minimum size = 6mm,
			inner sep = 0, outer sep = 0,
		},
	]

	\matrix[column sep = 5mm, row sep = 3mm] {
		\node[block] (B0) {\(z^{-1}\)}; & \node[dot] (D0) {}; &
		\node[block] (B1) {\(z^{-1}\)}; & \node[dot] (D1) {}; &
		\node[block] (B2) {\(z^{-1}\)}; & \node[dot] (D2) {}; & \node (dots) {\ldots}; & 
		\node[block] (Bk) {\(z^{-1}\)}; &
		\\
		& \node[prod] (P0) {\(\times\)}; &
		& \node[prod] (P1) {\(\times\)}; &
		& \node[prod] (P2) {\(\times\)}; & &
		& \node[prod] (Pk) {\(\times\)}; &
		\\[6mm]
		& & & & & & & & \node[sum] (S) {\(+\)}; \\
	};

	\begin{scope}[thick, -latex]
		% delayed line
		\draw[latex-] (B0.west) -- ++(-5mm,0) node[left] {\(s(n)\)};
		\draw (B0.east) -- (D0) -- (B1.west);
		\draw (B1.east) -- (D1) -- (B2.west);
		\draw (B2.east) -- (D2) -- (dots) -- (Bk.west);

		% taps
		\draw (D0) -- (P0);
		\draw (P0) |- (S);

		\draw (D1) -- (P1);
		\draw (P1.south) |- ($(S) + (150:10mm)$) -- (S);

		\draw (D2) -- (P2);
		\draw (P2.south) |- ($(S) + (120:10mm)$) -- (S);

		\draw (Bk) -| (Pk);
		\draw (Pk) -- (S);

		% product weights
		\draw[latex-] (P0.west) -- ++(-4mm,0) node[left] {\(h_1(m)\)};
		\draw[latex-] (P1.west) -- ++(-4mm,0) node[left] {\(h_2(m)\)};
		\draw[latex-] (P2.west) -- ++(-4mm,0) node[left] {\(h_3(m)\)};
		\draw[latex-] (Pk.west) -- ++(-4mm,0) node[left] {\(h_l(m)\)};

		% result
		\draw (S.south) |- ++(1cm,-3mm) node[right] {\(r(m)\)};
	\end{scope}

\end{tikzpicture}
