# [Xy-pic] Diagrams of digital LTI filter

Richard Lewis xypic at rtf.org.uk
Thu Jul 31 01:36:22 CEST 2003

Nicolas Ratier <nicolas.ratier at lpmo.edu> writes:

> I'm preparing a course on Digital Signal Processing.
> I have to draw diagrams of digital LTI filter on the form :
>
>                            z
>                 X o-->--o-->--o
>                         |     |
>                       h |     |
>                         o-->--o-->--o Y
>
> I don't succeed in doing 3 things :

>        + Write an array at the center of the line : i.e.  -->--
>          (horizontally and vertically)

Before i discovered xygraph, I used to use

\def\armid[#1]{\ar@{-}[#1]|<>(.6){\object@{>}}}

in \xymatrix. Here #1 can be any hop', so \armid[rd] will be a diagonal arrow with
a -->-- in the middle.

Thus you could say:

\newcommand{\Xr}{\ar@{-}[r]}
\newcommand{\Xd}{\ar@{-}[d]}
\newcommand{\Xv}{*\txt{ }}

\def\armid[#1]{\ar@{-}[#1]|<>(.6){\object@{>}}}

\entrymodifiers={+[o][F-]}

\xymatrix{
\armid[r] & \armid[r]^{z^{-1}} \armid[d]^{h_{0}} & \armid[d]^{h_{1}} & \Xv \\
\Xv      & \armid[r]                            & \armid[r]         & \;\\
}

>        + Write the letter X to the left of the node
>          (idem for Y to the right of the node)

I dont know how to do this with \xymatrix, thought i expect it is
possible.  With \xygraph it is not too hard:

%first define !Z#1#2 to set the scale of the diagram. #1 affects the
%width, #2 the height
\newgraphescape{Z}#1#2{!{0;<#1,0pc>:<0pc,#2>::0}}

\xygraph{!Z{4em}{4em}
!~*{+[o][F-]}
!~-{@{-}|<>(.6){\object@{>}}}
%here comes the complicated bit.
%the {} groups represent nodes
{}="start"-[r] {}(? -^{z^{-1}}[r] {} -^{h1}[d] {}="a",
? -^{h_0}   [d]{}="b")
"b"-"a" -[r] {}="end"
%here we add X' before the "start" node
"start"!{"start"+L*+!R{X}}
%here we add Y' to right of the "end" node
"end"!{"end"+R*+!L{Y}}}

The above looks unreadable, but with practice (read
<ftp://ftp.diku.dk/diku/semantics/papers/D-210.ps.Z> and all will
become clear) it isnt so hard.

roughly:
the !Z stuff just sets the dimensions

the !~* stuff does the same as \entrymodifiers, but in an xygraph, if
we say !{...} then we can override the entrymodifiers and hence get an
unframed X and Y.

the !~- stuff makes -' draw an \armid' type label

in the actual diagram:

{} is the same as your \Xv, ie an empty object
(that will get a +[o][F-] frame from the !~* setting).  So the first
empty node is named "start"

[r] means we move right from the current position; -[r] {} means we draw
an arrow to an empty node to the right of our current position.

the  (? ...[r] ,
? ...[d]  ) construction draws
1. the upper then right-hand edge
2. the left edge
of the square

the "a"-"b"' does the bottom edge of the square

the "start"!{"start"+L*+!R{X}}' puts an X to the left of the "start" node.

>        + Write black and white circle and set the radius
>

page 26 of the reference manual might be what you need here?

> With such an example, I can draw almost all the LTI filter.
> (And release a LaTeX/xy-pix filter library)
>
> Many thanks,
> Nicolas
>
> -------------------------------------------------------
> \documentclass{article}
>
> \usepackage[all,2cell,ps]{xy}
>
> \begin{document}
>
> \newcommand{\Xr}{\ar@{-}[r]}
> \newcommand{\Xd}{\ar@{-}[d]}
> \newcommand{\Xv}{*\txt{ }}
>
> \entrymodifiers={+[o][F-]}
> \xymatrix{
> \Xr & \Xr^{z^{-1}} \Xd^{h_{0}} & \Xd^{h_{1}} & \Xv    \\
> \Xv & \Xr                      & \Xr         & \, \\
> }
>
> \end{document}
>
> _______________________________________________
> xy-pic mailing list
> http://tug.org/mailman/listinfo/xy-pic

`