# Example: System Combination

Published 2009-08-06 | Author: Harish Krishnamurthy

A block diagram of system combination technique of combining several Automatic Speech Recognition Systems (ASRs) to determine best word sequence outputs is shown here. The training and validation phase are the important phases.

Do you have a question regarding this example, TikZ or LaTeX in general? Just ask in the LaTeX Forum.
Oder frag auf Deutsch auf TeXwelt.de. En français: TeXnique.fr.

% System Combination
% Harish K Krishnamurthy <www.ece.neu.edu/~hkashyap/>
\documentclass{article}

\usepackage{tikz}
\usepackage{amsmath,bm,times}
\newcommand{\mx}{\mathbf{\bm{#1}}} % Matrix command
\newcommand{\vc}{\mathbf{\bm{#1}}} % Vector command

\begin{document}
% Define the layers to draw the diagram
\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}

% Define block styles used later

\tikzstyle{sensor}=[draw, fill=blue!20, text width=5em,
\tikzstyle{ann} = [above, text width=5em, text centered]
\tikzstyle{wa} = [sensor, text width=10em, fill=red!20,
minimum height=6em, rounded corners, drop shadow]
\tikzstyle{sc} = [sensor, text width=13em, fill=red!20,
minimum height=10em, rounded corners, drop shadow]

% Define distances for bordering
\def\blockdist{2.3}
\def\edgedist{2.5}

\begin{tikzpicture}
\node (wa) [wa]  {System Combination};
\path (wa.west)+(-3.2,1.5) node (asr1) [sensor] {$ASR_1$};
\path (wa.west)+(-3.2,0.5) node (asr2)[sensor] {$ASR_2$};
\path (wa.west)+(-3.2,-1.0) node (dots)[ann] {$\vdots$};
\path (wa.west)+(-3.2,-2.0) node (asr3)[sensor] {$ASR_N$};

\path (wa.east)+(\blockdist,0) node (vote) [sensor] {$\theta_0,\theta_1,...,\theta_M$\\Estimated Parameters};

\path [draw, ->] (asr1.east) -- node [above] {}
(wa.160) ;
\path [draw, ->] (asr2.east) -- node [above] {}
(wa.180);
\path [draw, ->] (asr3.east) -- node [above] {}
(wa.200);
\path [draw, ->] (wa.east) -- node [above] {}
(vote.west);

\path (wa.south) +(0,-\blockdist) node (asrs) {System Combination - Training};

\begin{pgfonlayer}{background}
\path (asr1.west |- asr1.north)+(-0.5,0.3) node (a) {};
\path (wa.south -| wa.east)+(+0.5,-0.3) node (b) {};
\path (vote.east |- asrs.east)+(+0.5,-0.5) node (c) {};

\path[fill=yellow!20,rounded corners, draw=black!50, dashed]
(a) rectangle (c);
\path (asr1.north west)+(-0.2,0.2) node (a) {};

\end{pgfonlayer}

% Validation Layer is the same except that there are a set of nodes and links which are added

\path (wa.south)+(-2.0,-7.5) node (syscomb) [sc] {\textbf{System Combination \\Algorithm}\\Estimated Parameters\\from training};
\path (syscomb.west)+(-2.2,1.5) node (asrt1) [sensor] {$ASR_1$};
\path (syscomb.west)+(-2.2,0.5) node (asrt2)[sensor] {$ASR_2$};
\path (syscomb.west)+(-2.2,-1.0) node (dots)[ann] {$\vdots$};
\path (syscomb.west)+(-2.2,-2.0) node (asrt3)[sensor] {$ASR_N$};

\path [draw, ->] (asrt1.east) -- node [above] {}
(syscomb.160) ;
\path [draw, ->] (asrt2.east) -- node [above] {}
(syscomb.180);
\path [draw, ->] (asrt3.east) -- node [above] {}
(syscomb.200);

\path (wa.south) +(0,-\blockdist) node (sct) {System Combination - Training};

\path (syscomb.east)+(1.0,0.0) node (bwtn) {};

% Note how the single nodes are repeated using for loop
\foreach \x in {0,1,...,4}
{
\draw (bwtn.east)+(\x,0) node (asr\x-2)[]{};
\fill (bwtn.east)+(\x,0) circle (0.1cm);
}

\path [draw, ->] (syscomb.east) -- node [above] {}
(bwtn.east);
\path [draw, ->] (asr0-2) -- node [above] {@}
(asr1-2);
\path [draw, -] (asr1-2) -- node [above] {b}
(asr2-2);
\path [draw, -] (asr2-2) -- node [above] {z}
(asr3-2);
\path [draw, -] (asr3-2) -- node [above] {}
(asr4-2);

\path [draw, ->] (asr0-2) edge[bend  right]  node [below] {@}
(asr1-2);
\path [draw, ->] (asr1-2) edge[bend  right]  node [below] {b}
(asr2-2);
\path [draw, ->] (asr2-2) edge[bend  right]  node [below] {c}
(asr3-2);
\path [draw, ->] (asr4-2) node[]{} (asr4-2)+(1.0,0);

\begin{scope}[looseness=1.6]
\path [draw, ->] (asr0-2) edge[bend  right=90]  node [below] {a}
(asr1-2);
\path [draw, ->] (asr1-2) edge[bend  right=90]  node [below] {b}
(asr2-2);
\path [draw, ->] (asr2-2) edge[bend  right=90]  node [below] {c}
(asr3-2);
\end{scope}
\path (asr3-2.east)+(1.5,0.0) node (bw)[sensor] {Best Word Sequence\\$\arg\max$};

\path [draw, -] (asr1-2.east) node [below] {}
(bw.west);

\begin{pgfonlayer}{background}
\path (asrt1.west)+(-0.5,1.0) node (g) {};
\path (bw.east |- syscomb.south)+(0.5,-1.5) node (h) {};

\path[fill=yellow!20,rounded corners, draw=black!50, dashed]
(g) rectangle (h);

\path [draw, ->] (vote.south) edge[bend  left=90]  node [below] {Used in validation}
(syscomb.30);

\end{pgfonlayer}

\path (asr1-2.south) +(-\blockdist,-\blockdist)
node (asrs) {System Combination - Validation};

\end{tikzpicture}

\end{document}


• #1 ruslan, December 11, 2009 at 1:54 p.m.

On my machine the newline commands \ and \newline do not work in the node texts. What's the possible reason for this?

• #2 ruslan, December 11, 2009 at 1:56 p.m.

must be \ \ and \newline

• #3 Kjell Magne Fauske, December 14, 2009 at 8:22 a.m.

@ruslan: If I remember correctly, this does not work with PGF 2.0, only in the CVS version. You can grab a recent build from the TikZ builds section. 