Advertisement
Guest User

Untitled

a guest
Apr 12th, 2016
528
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Latex 13.83 KB | None | 0 0
  1. \NeedsTeXFormat{LaTeX2e}[1994/06/01]
  2. \ProvidesPackage{tikzblocks}[2016/04/08 TikZ Blocks]
  3.  
  4. \usetikzlibrary{automata,arrows,calc,intersections,matrix,patterns,positioning,shapes,decorations,decorations.markings,math}
  5.  
  6. \def\blockcolor{white}
  7. \newdimen\blocksize
  8. \blocksize = 6mm
  9. \tikzmath{\fontscale = \blocksize/10mm;}
  10.  
  11. \newdimen\scaledlinewidth
  12. \scaledlinewidth = 0.5pt
  13. \setlength{\scaledlinewidth}{\fontscale\scaledlinewidth}
  14.  
  15. \newcommand{\scale}[1]{\scalebox{\fontscale}{#1}}
  16.  
  17. \pgfdeclaredecoration{complete sines}{initial}
  18. {
  19.  \state{initial}[width = +0pt, next state = sine, persistent precomputation = {\pgfmathsetmacro\matchinglength{
  20.    \pgfdecoratedinputsegmentlength / int(\pgfdecoratedinputsegmentlength/\pgfdecorationsegmentlength)
  21.  }
  22.  \setlength{\pgfdecorationsegmentlength}{\matchinglength pt}}]{}
  23.  \state{sine}[width = \pgfdecorationsegmentlength]{
  24.    \pgfpathsine{\pgfpoint{0.25\pgfdecorationsegmentlength}{0.5\pgfdecorationsegmentamplitude}}
  25.    \pgfpathcosine{\pgfpoint{0.25\pgfdecorationsegmentlength}{-0.5\pgfdecorationsegmentamplitude}}
  26.    \pgfpathsine{\pgfpoint{0.25\pgfdecorationsegmentlength}{-0.5\pgfdecorationsegmentamplitude}}
  27.    \pgfpathcosine{\pgfpoint{0.25\pgfdecorationsegmentlength}{0.5\pgfdecorationsegmentamplitude}}
  28.  }
  29.  \state{final}{}
  30. }
  31.  
  32. \newcommand{\textdirectcurrent}{%
  33.   \settowidth{\dimen0}{$ = $}%
  34.   \vbox to .85ex {\offinterlineskip
  35.    \hbox to \dimen0{\leaders\hrule\hfill}
  36.     \vskip.35ex
  37.     \hbox to \dimen0{%
  38.       \leaders\hrule\hskip.2\dimen0\hfill
  39.       \leaders\hrule\hskip.2\dimen0\hfill
  40.       \leaders\hrule\hskip.2\dimen0
  41.     }
  42.     \vfill
  43.   }%
  44. }
  45.  
  46. \def\ppbb{path picture bounding box}
  47.  
  48. \tikzset{
  49.  auto,
  50.  > = latex',
  51.  anchor = center,
  52.  node distance = \blocksize,
  53.  every node/.style =
  54.  {
  55.    line width = \scaledlinewidth
  56.  },
  57.  every path/.style =
  58.  {
  59.    line width = \scaledlinewidth
  60.  },
  61.  mark red/.style =
  62.  {
  63.    color = red,fill = red!20
  64.  },
  65.  mark blue/.style =
  66.  {
  67.    color = blue,fill = blue!20
  68.  },
  69.  mark yellow/.style =
  70.  {
  71.    color = orange,fill = yellow!20
  72.  },
  73.  mixer/.style =
  74.  {
  75.    draw,
  76.    fill = \blockcolor,
  77.    circle,
  78.    inner sep = 0pt,
  79.    minimum width = 0.5\blocksize,
  80.    path picture =
  81.    {
  82.      \draw
  83.        (\ppbb.north west) -- (\ppbb.south east)
  84.        (\ppbb.south west) -- (\ppbb.north east);
  85.    }
  86.  },
  87.  wave/.style =
  88.  {
  89.    decorate,
  90.    decoration =
  91.    {
  92.      complete sines,
  93.      amplitude = 0.1\blocksize,
  94.      segment length = 0.6\blocksize
  95.    }
  96.  },
  97.  block/.style =
  98.  {
  99.    draw,
  100.    fill = \blockcolor,
  101.    rectangle,
  102.    minimum height = \blocksize,
  103.    minimum width = \blocksize,
  104.    anchor = center,
  105.    inner sep = 0.1\blocksize
  106.  },
  107.  osciwave/.style =
  108.  {
  109.    decorate,
  110.    decoration =
  111.    {
  112.      complete sines,
  113.      amplitude = 0.35\blocksize,
  114.      segment length = 0.4\blocksize
  115.    }
  116.  },
  117.  bpf/.style =
  118.  {
  119.    draw,
  120.    block,
  121.    path picture =
  122.    {
  123.      \draw[wave] ([xshift = -0.3\blocksize, yshift = 0.2\blocksize]\ppbb.center) -- +(0.6\blocksize,0) {};
  124.      \draw[wave] ([xshift = -0.3\blocksize]\ppbb.center) -- +(0.6\blocksize,0) {};
  125.      \draw[wave] ([xshift = -0.3\blocksize, yshift = -0.2\blocksize]\ppbb.center) -- +(0.6\blocksize,0) {};
  126.      \draw[transform canvas = {yshift = 0.2\blocksize}] ([xshift = 0.05\blocksize,yshift = 0.05\blocksize]\ppbb.center) -- ([xshift = -0.05\blocksize,yshift = -0.05\blocksize]\ppbb.center) {};
  127.      \draw[transform canvas = {yshift = -0.2\blocksize}] ([xshift = 0.05\blocksize,yshift = 0.05\blocksize]\ppbb.center) -- ([xshift = -0.05\blocksize,yshift = -0.05\blocksize]\ppbb.center) {};
  128.    }
  129.  },
  130.  bsf/.style =
  131.  {
  132.    draw,
  133.    block,
  134.    path picture =
  135.    {
  136.      \draw[wave] ([xshift = -0.3\blocksize, yshift = 0.2\blocksize]\ppbb.center) -- +(0.6\blocksize,0) {};
  137.      \draw[wave] ([xshift = -0.3\blocksize]\ppbb.center) -- +(0.6\blocksize,0) {};
  138.      \draw[wave] ([xshift = -0.3\blocksize, yshift = -0.2\blocksize]\ppbb.center) -- +(0.6\blocksize,0) {};
  139.      \draw ([xshift = 0.05\blocksize,yshift = 0.05\blocksize]\ppbb.center) -- ([xshift = -0.05\blocksize,yshift = -0.05\blocksize]\ppbb.center) {};
  140.    }
  141.  },
  142.  lpf/.style =
  143.  {
  144.    draw,
  145.    block,
  146.    path picture =
  147.    {
  148.      \draw[wave] ([xshift = -0.3\blocksize, yshift = 0.1\blocksize]\ppbb.center) -- +(0.6\blocksize,0) {};
  149.      \draw[wave] ([xshift = -0.3\blocksize, yshift = -0.1\blocksize]\ppbb.center) -- +(0.6\blocksize,0) {};
  150.      \draw[transform canvas = {yshift = 0.1\blocksize}] ([xshift = 0.05\blocksize,yshift = 0.05\blocksize]\ppbb.center) -- ([xshift = -0.05\blocksize,yshift = -0.05\blocksize]\ppbb.center) {};
  151.    }
  152.  },
  153.  hpf/.style =
  154.  {
  155.    draw,
  156.    block,
  157.    path picture =
  158.    {
  159.      \draw[wave] ([xshift = -0.3\blocksize, yshift = 0.1\blocksize]\ppbb.center) -- +(0.6\blocksize,0) {};
  160.      \draw[wave] ([xshift = -0.3\blocksize, yshift = -0.1\blocksize]\ppbb.center) -- +(0.6\blocksize,0) {};
  161.      \draw[transform canvas = {yshift = -0.1\blocksize}] ([xshift = 0.05\blocksize,yshift = 0.05\blocksize]\ppbb.center) -- ([xshift = -0.05\blocksize,yshift = -0.05\blocksize]\ppbb.center) {};
  162.    }
  163.  },
  164.  osc/.style =
  165.  {
  166.    draw,
  167.    fill = \blockcolor,
  168.    circle,
  169.    inner sep = 0pt,
  170.    minimum width = 0.8\blocksize,
  171.    path picture =
  172.    {
  173.      \draw[osciwave] ([xshift = -0.2\blocksize]\ppbb.center) -- +(0.4\blocksize,0) {};
  174.    }
  175.  },
  176.  motor/.style =
  177.  {
  178.    draw,
  179.    fill = \blockcolor,
  180.    circle,
  181.    inner sep = 0pt,
  182.    minimum width = 0.8\blocksize,
  183.    path picture =
  184.    {
  185.      \node[scale = \fontscale,anchor = center] (\ppbb.center) {M};
  186.    }
  187.  },
  188.  generator/.style =
  189.  {
  190.    draw,
  191.    fill = \blockcolor,
  192.    circle,
  193.    inner sep = 0pt,
  194.    minimum width = 0.8\blocksize,
  195.    path picture =
  196.    {
  197.      \node[scale = \fontscale,anchor = center] (\ppbb.center) {G};
  198.    }
  199.  },
  200.   osc var/.style =
  201.   {
  202.     osc,
  203.     append after command =
  204.     {
  205.       \pgfextra
  206.       {%
  207.         \draw[->] ([xshift = -0.5\blocksize,yshift = -0.5\blocksize]\tikzlastnode.center) -- +(\blocksize,\blocksize) {};
  208.      }
  209.    },
  210.    path picture =
  211.    {
  212.      \draw[osciwave] ([xshift = -0.2\blocksize]\ppbb.center) -- +(0.4\blocksize,0) {};
  213.      \draw (\ppbb.south west) -- (\ppbb.north east) {};
  214.    }
  215.  },
  216.  integ/.style =
  217.  {
  218.    draw,
  219.    block,
  220.    path picture =
  221.    {
  222.      \node[scale = \fontscale,anchor = center] at (\ppbb.center) {\scalebox{1.3}{$\int$}};
  223.    }
  224.  },
  225.  integ var/.style args =
  226.  {#1}{
  227.    draw,
  228.    block,
  229.    path picture =
  230.    {
  231.      \node[scale = \fontscale,anchor = center] at (\ppbb.center) {\scalebox{1.3}{$\int$}$\cdot d#1$};
  232.    }
  233.  },
  234.  differentiator/.style =
  235.  {
  236.    draw,
  237.    block,
  238.    path picture =
  239.    {
  240.      \node[scale = \fontscale,anchor = center] at (\ppbb.center) {\scalebox{1.3}{$\frac{d}{dt}$}};
  241.    }
  242.  },
  243.  upsampler/.style args =
  244.  {#1}{
  245.    draw,
  246.    block,
  247.    path picture =
  248.    {
  249.      \node[scale = \fontscale,anchor = center] at (\ppbb.center) {$\uparrow$\,#1};
  250.    }
  251.  },
  252.  downsampler/.style args =
  253.  {#1}{
  254.    draw,
  255.    block,
  256.    path picture =
  257.    {
  258.      \node[scale = \fontscale,anchor = center] at (\ppbb.center) {$\downarrow$\,#1};
  259.    }
  260.  },
  261.  diode demodulator/.style =
  262.  {
  263.    draw,
  264.    block,
  265.    path picture =
  266.    {
  267.      \draw ([xshift = -0.3\blocksize]\ppbb.center) -- +(0.6\blocksize,0) {};
  268.      \draw ([xshift = 0.15\blocksize]\ppbb.center) -- ([xshift = -0.15\blocksize,yshift = 0.15\blocksize]\ppbb.center) -- ([xshift = -0.15\blocksize,yshift = -0.15\blocksize]\ppbb.center) -- cycle {};
  269.      \draw ([xshift = 0.15\blocksize, yshift = 0.15\blocksize]\ppbb.center) -- +(0,-0.3\blocksize) {};
  270.    }
  271.  },
  272.  amp/.style =
  273.  {
  274.    draw,
  275.    block,
  276.    path picture =
  277.    {
  278.      \draw ([xshift = -0.2\blocksize,yshift = 0.3\blocksize]\ppbb.center) -- ([xshift = 0.3\blocksize]\ppbb.center) -- ([xshift = -0.2\blocksize,yshift = -0.3\blocksize]\ppbb.center) -- cycle {};
  279.    }
  280.  },
  281.  sample and hold/.style =
  282.  {
  283.    draw,
  284.    block,
  285.    path picture =
  286.    {
  287.      \node[anchor = center,scale = \fontscale] at (\ppbb.center) {S\&{}H};
  288.    }
  289.  },
  290.  converter/.style args =
  291.  {from #1 to #2}{
  292.    draw,
  293.    block,
  294.    path picture =
  295.    {
  296.      \draw (\ppbb.south west) -- (\ppbb.north east) {};
  297.      \node[scale = \fontscale, anchor = center] at ([xshift = -0.2\blocksize,yshift = 0.2\blocksize]\ppbb.center) {\small #1};
  298.      \node[scale = \fontscale, anchor = center] at ([xshift = 0.2\blocksize,yshift = -0.2\blocksize]\ppbb.center) {\small #2};
  299.    }
  300.  },
  301.  rectifier/.style =
  302.  {
  303.    draw,
  304.    block,
  305.    path picture =
  306.    {
  307.      \draw (\ppbb.south west) -- (\ppbb.north east) {};
  308.      \node[scale = \fontscale, anchor = center] at ([xshift = -0.2\blocksize,yshift = 0.16\blocksize]\ppbb.center) {$\sim$};
  309.      \node[scale = \fontscale, anchor = center] at ([xshift = 0.2\blocksize,yshift = -0.2\blocksize]\ppbb.center) {\textdirectcurrent};
  310.    }
  311.  },
  312.  transformer/.style =
  313.  {
  314.    draw,
  315.    block,
  316.    path picture =
  317.    {
  318.      \draw ([xshift = -0.3\blocksize,yshift = 0.4\blocksize]\ppbb.center) -- ([xshift = -0.1\blocksize,yshift = 0.4\blocksize]\ppbb.center) -- +(0,-0.8\blocksize) -- ([xshift = -0.3\blocksize,yshift = -0.4\blocksize]\ppbb.center);
  319.      \draw ([xshift = 0.3\blocksize,yshift = 0.4\blocksize]\ppbb.center) -- ([xshift = 0.1\blocksize,yshift = 0.4\blocksize]\ppbb.center) -- +(0,-0.8\blocksize) -- ([xshift = 0.3\blocksize,yshift = -0.4\blocksize]\ppbb.center);
  320.    }
  321.  },
  322.  deadtime/.style args =
  323.  {#1}{
  324.    draw,
  325.    block,
  326.    path picture =
  327.    {
  328.      \draw ([xshift = -0.3\blocksize,yshift = -0.3\blocksize]\ppbb.center) -- +(0,0.2\blocksize);
  329.      \draw ([xshift = 0.3\blocksize,yshift = -0.3\blocksize]\ppbb.center) -- +(0,0.2\blocksize);
  330.      \draw ([xshift = -0.3\blocksize,yshift = -0.2\blocksize]\ppbb.center) -- +(0.6\blocksize, 0);
  331.      \node[anchor = center,scale = \fontscale] at ([yshift = 0.1\blocksize]\ppbb.center) {#1};
  332.    }
  333.  },
  334.  schmitt trigger/.style =
  335.  {
  336.    draw,
  337.    block,
  338.    path picture =
  339.    {
  340.      \draw ([xshift = -0.35\blocksize,yshift = -0.3\blocksize]\ppbb.center) -- +(0.35\blocksize,0) -- ([xshift = 0.2\blocksize,yshift = 0.3\blocksize]\ppbb.center) -- +(0.15\blocksize, 0);
  341.      \draw ([xshift = 0.2\blocksize,yshift = 0.3\blocksize]\ppbb.center) -- +(-0.2\blocksize,0) -- ([xshift = -0.2\blocksize,yshift = -0.3\blocksize]\ppbb.center);
  342.    }
  343.  },
  344.  nonlinear fcn/.style args =
  345.  {#1}{
  346.    draw,
  347.    block,
  348.    path picture =
  349.    {
  350.      \node[scale = \fontscale,anchor = center] (\ppbb.center) {$#1(\cdot)$};
  351.    }
  352.  },
  353.  zero order hold/.style args =
  354.  {#1}{
  355.    draw,
  356.    block,
  357.    path picture =
  358.    {
  359.      \draw ([xshift = -0.3\blocksize,yshift = -0.3\blocksize]\ppbb.center) -- +(0.2\blocksize,0) -- +(0.2\blocksize,0.6\blocksize) -- +(0.3\blocksize,0.6\blocksize) -- +(0.3\blocksize,0.4\blocksize) -- +(0.4\blocksize,0.4\blocksize) -- +(0.4\blocksize,0.2\blocksize) -- +(0.5\blocksize,0.2\blocksize) -- +(0.6\blocksize,0.2\blocksize);
  360.    }
  361.  },
  362.  first order hold/.style args =
  363.  {#1}{
  364.    draw,
  365.    block,
  366.    path picture =
  367.    {
  368.      \draw ([xshift = -0.3\blocksize,yshift = -0.3\blocksize]\ppbb.center) -- +(0.2\blocksize,0.1\blocksize) -- +(0.3\blocksize,0.6\blocksize) -- +(0.4\blocksize,0.4\blocksize) -- +(0.5\blocksize,0.2\blocksize) -- +(0.6\blocksize,0.2\blocksize);
  369.    }
  370.  },
  371.  divider/.style args =
  372.  {#1}{
  373.    draw,
  374.    block,
  375.    path picture =
  376.    {
  377.      \node[scale = \fontscale, anchor = center] (\ppbb.center) {$\div #1$};
  378.    }
  379.  },
  380.  delay/.style args =
  381.  {#1}{
  382.    draw,
  383.    block,
  384.    node contents =
  385.    {
  386.      \scalebox{\fontscale}{$z^{-#1}$}
  387.    }
  388.  },
  389.  transfer fcn/.style args =
  390.  {#1}{
  391.    draw,
  392.    block,
  393.    node contents =
  394.    {
  395.      \scalebox{\fontscale}{#1}
  396.    }
  397.  },
  398.  gain/.style =
  399.  {
  400.    fill = \blockcolor,
  401.    text height = 1.5ex,
  402.    text depth = .25ex,
  403.    draw,
  404.    isosceles triangle,
  405.    minimum height = 10mm,
  406.    minimum width = 10mm,
  407.    anchor = center,
  408.    scale = \fontscale
  409.  },
  410.  sum/.style args =
  411.  {#1}{
  412.    draw,
  413.    anchor = center,
  414.    scale = \fontscale,
  415.    fill = \blockcolor,
  416.    circle,
  417.    inner sep = 0.05\blocksize,
  418.    minimum size = 0.15\blocksize,
  419.    node contents =
  420.    {
  421.      \small #1
  422.    }
  423.  },
  424.  junction/.style =
  425.  {
  426.    circle,inner sep = 0pt,
  427.    minimum size = 0.1\blocksize,
  428.    fill = black,
  429.    draw = black,
  430.    node distance = 0.5\blocksize
  431.  },
  432.  inout/.style =
  433.  {
  434.    draw,
  435.    circle,
  436.    inner sep = 0pt,
  437.    minimum size = 0.1\blocksize,
  438.    node distance = 10mm
  439.  },
  440.  mid arrow/.style =
  441.  {
  442.    postaction =
  443.    {
  444.      decorate,
  445.      decoration =
  446.      {
  447.        markings,
  448.        mark = at position .5 with
  449.        {
  450.          \arrow[#1]{latex'}
  451.        }
  452.      }
  453.    }
  454.  },
  455.  shorten <>/.style =
  456.  {
  457.    shorten > = 0.1\blocksize,
  458.    shorten < = 0.1\blocksize
  459.  },
  460.  between/.style args =
  461.  {#1 and #2}{
  462.    at = ($(#1)!0.5!(#2)$)
  463.  },
  464.  intersection of/.style args =
  465.  {#1 and #2}{
  466.    at = (#1 |- #2)
  467.  },
  468.  saturation/.style =
  469.  {
  470.    block,
  471.    path picture =
  472.    {
  473.      \draw[shorten <>] (\ppbb.west) -- (\ppbb.east);
  474.      \draw[shorten <>] (\ppbb.south) -- (\ppbb.north);
  475.      \draw ([shift = (45:0.2\blocksize)]\ppbb.south west) -- ++(0:0.2\blocksize)--(\ppbb.center);
  476.      \draw ([shift = (225:0.2\blocksize)]\ppbb.north east) -- ++(180:0.2\blocksize)--(\ppbb.center);
  477.    },
  478.  },
  479.  dead zone/.style =
  480.  {
  481.    block,
  482.    path picture =
  483.    {
  484.      \draw[shorten <>] (\ppbb.west) -- (\ppbb.east);
  485.      \draw[shorten <>] (\ppbb.south) -- (\ppbb.north);
  486.      \draw ([shift = (45:0.2\blocksize)]\ppbb.south west) -- ([xshift = -0.15\blocksize]\ppbb.center);
  487.      \draw ([shift = (225:0.2\blocksize)]\ppbb.north east) -- ([xshift = 0.15\blocksize]\ppbb.center);
  488.    },
  489.  }
  490. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement