%% This is the package dspblocks %% %% (c) Paolo Prandoni %% %% This program can be redistributed and/or modified under the terms %% of the LaTeX Project Public License Distributed from CTAN archives %% in directory macros/latex/base/lppl.txt. %% %% DESCRIPTION: %% `dspblocks' is a companion package to dsptricks; it contains a %% set of macros to draw the types of block diagrams commonly %% used in DSP theory %% %% v1.1, November 2023 %% % required packages: \RequirePackage{calc} \RequirePackage{fp} \RequirePackage{pst-xkey} \RequirePackage{fmtcount} \RequirePackage{ifthen} % \ProvidesPackage{dspblocks}[2023/11/08 package for signal processing graphics] % turn off FP messages \FPmessagesfalse \makeatletter %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % %% Set up BLOCK DIAGRAM plot % % \begin{psdrawBDmatrix}[OPTIONS]{X_SPACING}{Y_SPACING} % % X_SPACING % Y_SPACING vertical and horizontal spacing % % Once in Block diagram mode the following commands are available % (they all create nodes) % % \BDadd adder % \BDmul multiplier % \BDdelay z^{-1} delay block % \BDdelayN{N} z^{-N} delay block % \BDfilter{text} filter box % \BDfilterMulti{text} multiline filter box % \BDsplit splitting point (dot) % \BDupsmp{K} upsampler by K % \BDdwsmp{K} downsampler by K % \def\BDwidth{1.2pt} \psset{xunit=1mm,yunit=1mm,linewidth=\BDwidth} \def\BDadd{[mnode=circle] +}% \def\BDsub{[mnode=circle] -}% \def\BDmul{[mnode=circle] $\times$}% \def\BDdelay{\psframebox[framesep=.3]{$z^{-1}$}}% \def\BDdelayN#1{\psframebox[framesep=.3]{$z^{-#1}$}}% \def\BDfilter#1{\psframebox[framesep=.3]{#1}}% \def\BDfilterMulti#1{\psframebox% {\begin{tabular}{c} #1 \end{tabular}}}% \def\BDsplit{[mnode=dot,linewidth=1.5pt]}% \def\BDupsmp#1{[mnode=circle] $#1 \uparrow$}% \def\BDdwsmp#1{[mnode=circle] $#1 \downarrow$}% \def\BDsampler{\raisebox{-14.6pt}{ \psset{xunit=1em,yunit=1em,linewidth=1.2pt}% \pspicture(-2.6,-1.8)(1,1.8)% \psline(-3,0)(-1.6,0)(0.7,1.2) \psline(0.8,0)(1,0) \psarc[linewidth=1pt]{<-}(-1.2,0){1.4em}{-10}{55} \endpspicture}} \newcommand{\BDsamplerFramed}[1][1em]{ \newskip\tmpLen \tmpLen=#1% \raisebox{-1.5\tmpLen}{% \psframebox[linewidth=1.2pt]{% \psset{unit=#1,linearc=0}% \pspicture(-3.1,-2)(3,2)% \psline(-2.8,-0.2)(-1.6,-0.2)(1.2,1.4)% \psline(1.1,-0.2)(1.8,-0.2)% \psarc[linewidth=1pt]{<-}(-1.6,0){2}{-10}{55}% \endpspicture}}} \newcommand{\BDlowpass}[1][1em]{% \newskip\tmpLen \tmpLen=#1% \raisebox{-1.5\tmpLen}{% \psframebox[linewidth=1.2pt]{% \psset{unit=#1,linearc=0}% \pspicture(-3.1,-2)(3,2)% \psline{->}(-2.8,-1)(2.8,-1)% \psline{->}(0,-1.8)(0,2)% \psline[linewidth=1.5pt](-1,-1)(-1,0.8)(1,0.8)(1,-1)% \endpspicture}}} \newcommand{\BDsinc}[1][1em]{% \newskip\tmpLen \tmpLen=#1% \raisebox{-1.5\tmpLen}{% \psframebox[linewidth=1.2pt]{% \psset{unit=#1,linearc=0}% \pspicture(-3.1,-2)(3,2)% \psline{->}(-2.8,-.5)(2.8,-.5)% \psline{->}(0,-1.8)(0,2)% \psplot[linewidth=1pt, plotpoints=500,linejoin=1]{-2.5}{2.5}{x \dspSinc{0}{0.5} 1.5 mul .5 sub}% \endpspicture}}} \newcommand{\BDclip}[1][1em]{ \newskip\tmpLen \tmpLen=#1% \raisebox{-1.5\tmpLen}{% \psframebox[linewidth=1.2pt]{% \psset{unit=#1,linearc=0,linewidth=2pt}% \pspicture(-3,-2)(3,2)% \psline[linecolor=gray](-2,-0)(2,-0)% \psline(-1.5,-1.7)(0,-1.7)(0,1.7)(1.5,1.7)% \endpspicture}}} \newenvironment{dspBlocks}[2]{% \begin{psmatrix}[colsep=#1,rowsep=#2,emnode=R] }{% \end{psmatrix} } \newcommand{\BDConnH}[5][]{\ncline[#1]{->}{#2,#3}{#2,#4}\taput{#5}} \newcommand{\BDConnHNext}[2]{\FPupn\n{#2 1 add 0 trunc}\ncline{->}{#1,#2}{#1,\n}} \newcommand{\BDConnV}[5][]{\ncline[#1]{->}{#2,#3}{#4,#3}\tlput{#5}} \makeatother