diff options
Diffstat (limited to 'graphics/pgf/contrib/bodeplot/bodeplot.dtx')
-rw-r--r-- | graphics/pgf/contrib/bodeplot/bodeplot.dtx | 13662 |
1 files changed, 11545 insertions, 2117 deletions
diff --git a/graphics/pgf/contrib/bodeplot/bodeplot.dtx b/graphics/pgf/contrib/bodeplot/bodeplot.dtx index aad1eb47d6..8b39af91e0 100644 --- a/graphics/pgf/contrib/bodeplot/bodeplot.dtx +++ b/graphics/pgf/contrib/bodeplot/bodeplot.dtx @@ -1,2118 +1,11546 @@ -% \iffalse meta-comment -% -% Copyright (C) 2021 by Rushikesh Kamalapurkar <rlkamalapurkar@gmail.com> -% ----------------------------------------------------------- -% -% This file may be distributed and/or modified under the conditions of -% the LaTeX Project Public License, either version 1.3c of this license -% or (at your option) any later version. The latest version of this -% license is in: -% -% http://www.latex-project.org/lppl.txt -% -% and version 1.3c or later is part of all distributions of LaTeX -% version 2006/05/20 or later. -% -% \fi -% -% \iffalse -%<package>\NeedsTeXFormat{LaTeX2e}[2006/05/20] -%<package>\ProvidesPackage{bodeplot} -%<package>\RequirePackage{pdftexcmds} -%<package>\RequirePackage{ifplatform} -%<package>\RequirePackage{pgfplots} -%<package> \pgfplotsset{compat=1.18} -%<package> \usepgfplotslibrary{groupplots} -% -%<*driver> -\documentclass{ltxdoc} -\usepackage{cprotect} -\usepackage[declutter]{bodeplot} -\usepackage[colorlinks]{hyperref} -\usepackage{iftex} - \iftutex % LuaTeX, XeTeX - \usepackage{fontspec} - \setmonofont{DejaVuSansMono}[Scale=MatchUppercase] - \else % old engines - \usepackage[T1]{fontenc} - \usepackage{lmodern} - \usepackage[scaled]{DejaVuSansMono} - \fi -\usepackage{showexpl} - \lstset{ - explpreset={numbers=none}, - language=[LaTeX]Tex, - basicstyle=\ttfamily\tiny, - commentstyle=\itshape\ttfamily\tiny, - showspaces=false, - showstringspaces=false, - breaklines=true, - backgroundcolor=\color{white!90!black}, - breakautoindent=true, - captionpos=t - } -\usepackage{geometry} - \geometry{lmargin=2in,rmargin=1in,tmargin=1in,bmargin=1in} -\usetikzlibrary{decorations.markings,arrows.meta,spy,backgrounds} -\usepackage[nottoc]{tocbibind} -\sloppy -\EnableCrossrefs -\CodelineIndex -\RecordChanges -\begin{document} - \DocInput{bodeplot.dtx} - \PrintChanges - \PrintIndex -\end{document} -%</driver> -% \fi -% -% \CheckSum{1723} -% -% \changes{v1.0}{2021/10/25}{Initial release} -% \changes{v1.0.4}{2021/11/05}{Fixed unintended optional argument macro expansion} -% \changes{v1.0.6}{2021/11/18}{Fixed issue \#3} -% \changes{v1.0.7}{2021/12/02}{Removed unnecessary semicolons} -% \changes{v1.0.7}{2022/01/18}{Updated documentation} -% \changes{v1.0.8}{2022/07/06}{Added a new class option `declutter'} -% \changes{v1.1.0}{2022/07/06}{Fixed phase wrapping in gnuplot mode} -% \changes{v1.1.1}{2022/07/31}{Enable Hz and rad units} -% -% \GetFileInfo{bodeplot.sty} -% \DoNotIndex{\newcommand,\xdef,\gdef,\def,\edef,\addplot,\approx,\arabic,\opt,\typ,\obj,\else,\if@pgfarg,\if@Hzarg,\if@radarg,\if@declutterarg,\fi,\begin,\end,\feature,\footnotesize,\draw,\detokenize,\DeclareOption,\foreach,\ifdim,\ifodd,\Im,\Re,\let,\newif,\nextgroupplot,\noexpand,\expandafter,\unexpanded,\PackageError,\PackageWarning,\relax,\RequirePackage,\tikzset,\pgfmathsetmacro,\pgfmathtruncatemacro,\ProcessOptions} -% -% \title{The \textsf{bodeplot} package\\version 1.1.1} -% \author{Rushikesh Kamalapurkar \\ \texttt{rlkamalapurkar@gmail.com}} -% -% \maketitle -% \tableofcontents -% \clearpage -% \section{Introduction} -% -% Generate Bode, Nyquist, and Nichols plots for transfer functions in the canonical (TF) form \begin{equation}G(s) = e^{-Ts}\frac{b_ms^m+\cdots+b_1s+b_0}{a_ns^n+\cdots+a_1s+a_0}\label{eq:TF}\end{equation} and the zero-pole-gain (ZPK) form \begin{equation}G(s) = Ke^{-Ts}\frac{(s-z_1)(s-z_2)\cdots(s-z_m)}{(s-p_1)(s-p_2)\cdots(s-p_n)}.\label{eq:ZPK}\end{equation} In the equations above, $b_m,\cdots,b_0$ and $a_n,\cdots,a_0$ are real coefficients, $T\geq 0$ is the loop delay, $z_1,\cdots,z_m$ and $p_1,\cdots,p_n$ are complex zeros and poles of the transfer function, respectively, and $K\in \Re$ is the loop gain. -% -% For transfer functions in the ZPK format in (\ref{eq:ZPK}) \emph{with zero delay}, this package also supports linear and asymptotic approximation of Bode plots. -% -% By default, all phase plots use degrees as units. Use the |rad| package option or the optional argument |tikz/{phase unit=rad}| to generate plots in radians. The |phase unit| key accepts either |rad| or |deg| as inputs and needs to be added to the |tikzpicture| environment that contains the plots. -% -% By default, frequency inputs and outputs are in radians per second. Use the |Hz| package option or the optional argument |tikz/{frequency unit=Hz}| to generate plots in hertz. The |frequency unit| key accepts either |rad| or |Hz| as inputs and needs to be added to the |tikzpicture| environment that contains the plots. -% \subsection{External Dependencies} -% By default, the package uses |gnuplot| to do all the computations. If |gnuplot| is not available, the |pgf| package option can be used to do the calculations using the native |pgf| math engine. Compilation using the |pgf| math engine is typically slower, but the end result should be the identical (other than phase wrapping in the TF form, see limitations below). -%\subsection{Directory Structure} -% Since version 1.0.8, the |bodeplot| package places all |gnuplot| temporary files in the working directory. The package option |declutter| restores the original behavior where the temporary files are placed in a folder called |gnuplot|. -% \subsection{Limitations} -% \begin{itemize} -% \item In |pgf| mode, Bode phase plots and Nichols charts in TF form wrap angles so that they are always between 0 and 360$^\circ$ or 0 and $2\pi$ radian. As such, these plots will show phase wrapping discontinuities. Since v1.1.1, in |gnuplot| mode, the package uses the |smooth unwrap| filter to correct wrapping discontinuities. As of now, I have not found a way to do this in |pgf| mode, any merge requests or ideas you may have are welcome! -% \item Use of the |declutter| option with other directory management tools such as a |tikzexternalize| prefix is not recommended. -% \end{itemize} -% \clearpage -% \section{TL;DR} -% All Bode plots in this section are for the transfer function (with and without a transport delay) -% \begin{equation} -% G(s) = 10\frac{s(s+0.1+0.5\mathrm{i})(s+0.1-0.5\mathrm{i})}{(s+0.5+10\mathrm{i})(s+0.5-10\mathrm{i})} = \frac{s(10s^2+2s+2.6)}{(s^2+s+100.25)}. -% \end{equation} -% \iffalse -%<*ignore> -% \fi - -\hrulefill - -{\centering Bode plot in ZPK format -\begin{LTXexample}[pos=l,hsep=20pt,width=0.5\textwidth] -\BodeZPK{% - z/{0,{-0.1,-0.5},{-0.1,0.5}}, - p/{{-0.5,-10},{-0.5,10}}, - k/10% -} -{0.01} -{100} -\end{LTXexample} - -\hrulefill - -Same Bode plot over the same frequency range but supplied in Hz, in TF format with arrow decoration, transport delay, unit, and color customization (the phase plot may show wrapping if the |pgf| package option is used) -\begin{LTXexample}[pos=r,width=0.5\textwidth] -\BodeTF[% - samples=1000, - plot/mag/{blue,thick}, - plot/ph/{green,thick}, - tikz/{% - >=latex, - phase unit=rad, - frequency unit=Hz% - }, - commands/mag/{ - \draw[->](axis cs:0.1,40) -- (axis cs:{10/(2*pi)},60); - \node at (axis cs: 0.08,30) {\tiny Resonant Peak}; - }% -] -{% - num/{10,2,2.6,0}, - den/{1,1,100.25}% -} -{0.01/(2*pi)} -{100/(2*pi)} -\end{LTXexample} - -\hrulefill -\clearpage -\hrulefill - -Linear approximation with customization -\begin{LTXexample}[pos=l,hsep=20pt,width=0.5\textwidth] -\BodeZPK[% - plot/mag/{red,thick}, - plot/ph/{blue,thick}, - axes/mag/{ytick distance=40}, - axes/ph/{ytick distance=90}, - approx/linear% -]{% - z/{0,{-0.1,-0.5},{-0.1,0.5}}, - p/{{-0.5,-10},{-0.5,10}}, - k/10% -} -{0.01} -{100} -\end{LTXexample} - -\hrulefill - -Plot with delay and customization -\begin{LTXexample}[pos=r,hsep=20pt,width=0.5\textwidth] -\BodeZPK[% - plot/mag/{blue,thick}, - plot/ph/{green,thick}, - axes/mag/ytick distance=40, - axes/ph/ytick distance=90% -]{% - z/{0,{-0.1,-0.5},{-0.1,0.5}}, - p/{{-0.5,-10},{-0.5,10}}, - k/10, - d/0.01% -} -{0.01} -{100} -\end{LTXexample} - -\hrulefill -\clearpage -\hrulefill - -Individual gain and phase plots with more customization - -\begin{minipage}[t]{0.45\textwidth} -\begin{LTXexample}[pos=t,width=\columnwidth] -\begin{BodeMagPlot}[% - axes/{height=2cm, - width=4cm} -] -{0.01} -{100} - \addBodeZPKPlots[% - true/{black,thick}, - linear/{red,dashed,thick}, - asymptotic/{blue,dotted,thick}% - ] - {magnitude} - {% - z/{0,{-0.1,-0.5},{-0.1,0.5}}, - p/{{-0.5,-10},{-0.5,10}}, - k/10% - } -\end{BodeMagPlot} -\end{LTXexample} -\end{minipage}\hfill -\begin{minipage}[t]{0.45\textwidth} -\begin{LTXexample}[pos=t,width=\columnwidth] -\begin{BodePhPlot}[% - height=2cm, - width=4cm, - ytick distance=90 -] -{0.01} -{100} - \addBodeZPKPlots[% - true/{black,thick}, - linear/{red,dashed,thick}, - asymptotic/{blue,dotted,thick}% - ] - {phase} - {% - z/{0,{-0.1,-0.5},{-0.1,0.5}}, - p/{{-0.5,-10},{-0.5,10}}, - k/10% - } -\end{BodePhPlot} -\end{LTXexample} -\end{minipage} - -\hrulefill - -Nichols chart -\begin{LTXexample}[pos=l,hsep=20pt,width=0.5\textwidth] -\NicholsZPK[samples=1000] -{% - z/{0,{-0.1,-0.5},{-0.1,0.5}}, - p/{{-0.5,-10},{-0.5,10}}, - k/10, - d/0.01% -} -{0.001} -{500} -\end{LTXexample} - -\hrulefill - -Same Nichols chart in TF format (may show wrapping in |pgf| mode) -\begin{LTXexample}[pos=r,hsep=20pt,width=0.5\textwidth] -\NicholsTF[samples=1000] -{% - num/{10,2,2.6,0}, - den/{1,1,100.25}, - d/0.01% -} -{0.001} -{500} -\end{LTXexample} - -\hrulefill -\clearpage -\hrulefill - -Multiple Nichols charts with customization -\begin{LTXexample}[pos=l,hsep=20pt,width=0.5\textwidth] -\begin{NicholsChart}[% - ytick distance=20, - xtick distance=30 -] -{0.001} -{100} - \addNicholsZPKChart [red,samples=1000] {% - z/{0,{-0.1,-0.5},{-0.1,0.5}}, - p/{{-0.5,-10},{-0.5,10}}, - k/10% - } - \addNicholsZPKChart [blue,samples=1000] {% - z/{0,{-0.1,-0.5},{-0.1,0.5}}, - p/{{-0.5,-10},{-0.5,10}}, - k/5% - } -\end{NicholsChart} -\end{LTXexample} - -\hrulefill - -Nyquist plot -\begin{LTXexample}[pos=r,hsep=20pt,width=0.5\textwidth] -\NyquistZPK[plot/{red,thick,samples=1000}] -{% - z/{0,{-0.1,-0.5},{-0.1,0.5}}, - p/{{-0.5,-10},{-0.5,10}}, - k/10% -} -{-30} -{30} -\end{LTXexample} - -\hrulefill - -Nyquist plot in TF format with arrows -\begin{LTXexample}[pos=l,width=0.5\textwidth] -\NyquistTF[% - plot/{% - samples=1000, - postaction=decorate, - decoration={% - markings, - mark=between positions 0.1 and 0.9 step 5em with {% - \arrow{Stealth [length=2mm, blue]} - } - } - }% -] -{% - num/{10,2,2.6,0}, - den/{1,1,100.25}% -} -{-30} -{30} -\end{LTXexample} - -\hrulefill -\clearpage -\hrulefill - -Multiple Nyquist plots with customization -\begin{LTXexample}[pos=r,hsep=20pt,width=0.5\textwidth] -\begin{NyquistPlot}{-30}{30} - \addNyquistZPKPlot [red,samples=1000] {% - z/{0,{-0.1,-0.5},{-0.1,0.5}}, - p/{{-0.5,-10},{-0.5,10}}, - k/10% - } - \addNyquistZPKPlot [blue,samples=1000] {% - z/{0,{-0.1,-0.5},{-0.1,0.5}}, - p/{{-0.5,-10},{-0.5,10}}, - k/5% - } -\end{NyquistPlot} -\end{LTXexample} - -\hrulefill - -Nyquist plots with additional commands, using two different macros - -\begin{minipage}[t]{0.48\textwidth} -\begin{LTXexample}[pos=t,width=\columnwidth] -\begin{NyquistPlot}[% - tikz/{ - spy using outlines={% - circle, - magnification=3, - connect spies, - size=2cm - } - }% -] -{-30}{30} - \addNyquistZPKPlot [blue,samples=1000] {% - z/{0,{-0.1,-0.5},{-0.1,0.5}}, - p/{{-0.5,-10},{-0.5,10}}, - k/0.5% - } - \coordinate (spyon) at (axis cs:0,0); - \coordinate (spyat) at (axis cs:-22,5); - \spy [green] on (spyon) in - node [fill=white] at (spyat); -\end{NyquistPlot} -\end{LTXexample} -\end{minipage}\hfill -\begin{minipage}[t]{0.48\textwidth} -\begin{LTXexample}[pos=t,width=\columnwidth] -\NyquistZPK[% - plot/{blue,samples=1000}, - tikz/{ - spy using outlines={% - circle, - magnification=3, - connect spies, - size=2cm - } - }, - commands/{ - \coordinate (spyon) at (axis cs:0,0); - \coordinate (spyat) at (axis cs:-22,5); - \spy [green] on (spyon) in - node [fill=white] at (spyat); - }% -] -{% - z/{0,{-0.1,-0.5},{-0.1,0.5}}, - p/{{-0.5,-10},{-0.5,10}}, - k/0.5% -} -{-30} -{30} -\end{LTXexample} -\end{minipage}} - -\hrulefill -\clearpage - -% \iffalse -%</ignore> -% \fi -% -% \section{Usage} -% \noindent In all the macros described here, the frequency limits supplied by the user are assumed to be in |rad/s| unless either the |Hz| package option is used or the optional argument |tikz/{frequency unit=Hz}| is supplied to the |tikzpicture| environment. All phase plots are getenrated in degrees unless either the |rad| package option is used or the optional argument |tikz/{frequency unit=rad}| is supplied to the |tikzpicture| environment. -% -% \subsection{Bode plots} -% \DescribeMacro{\BodeZPK} -% |\BodeZPK| \oarg{obj1/typ1/\marg{opt1},obj2/typ2/\marg{opt2},...}\\ -% \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}\\ -% \hspace*{2em}\marg{min-freq}\marg{max-freq} -% -% \noindent Plots the Bode plot of a transfer function given in ZPK format using the |groupplot| environment. The three mandatory arguments include: (1) a list of tuples, comprised of the zeros, the poles, the gain, and the transport delay of the transfer function, (2) the lower end of the frequency range for the $x-$axis, and (3) the higher end of the frequency range for the $x-$axis. The zeros and the poles are complex numbers, entered as a comma-separated list of comma-separated lists, of the form |{{real part 1,imaginary part 1},| |{real part 2,imaginary part 2},...}|. If the imaginary part is not provided, it is assumed to be zero. -% -% The optional argument is comprised of a comma separated list of tuples, either |obj/typ/{opt}|, or |obj/{opt}|, or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the group, the axes, and the plots according to: -% \begin{itemize} -% \item Tuples of the form |obj/typ/{opt}|: -% \begin{itemize} -% \item |plot/typ/{opt}|: modify plot properties by adding options |{opt}| to the |\addplot| macro for the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|. -% \item |axes/typ/{opt}|: modify axis properties by adding options |{opt}| to the |\nextgroupplot| macro for the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|. -% \item |commands/typ/{opt}|: add any valid TikZ commands (including the the parametric function generator macros in this package, such as |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|) to the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual. For example, a TikZ command is used in the description of the |\BodeTF| macro below to mark the gain crossover frequency on the Bode Magnitude plot. -% \end{itemize} -% \item Tuples of the form |obj/{opt}|: -% \begin{itemize} -% \item |plot/{opt}|: adds options |{opt}| to |\addplot| macros for both the magnitude and the phase plots. -% \item |axes/{opt}|: adds options |{opt}| to |\nextgroupplot| macros for both the magnitude and the phase plots. -% \item |group/{opt}|: adds options |{opt}| to the |groupplot| environment. -% \item |tikz/{opt}|: adds options |{opt}| to the |tikzpicture| environment. -% \item |approx/linear|: plots linear approximation. -% \item |approx/asymptotic|: plots asymptotic approximation. -% \end{itemize} -% \item Tuples of the form |{opt}| add all of the supplied options to |\addplot| macros for both the magnitude and the phase plots. -% \end{itemize} -% The options |{opt}| can be any |key=value| options that are supported by the |pgfplots| macros they are added to. - -% For example, given a transfer function \begin{equation}G(s) = 10\frac{s(s+0.1+0.5\mathrm{i})(s+0.1-0.5\mathrm{i})}{(s+0.5+10\mathrm{i})(s+0.5-10\mathrm{i})},\label{eq:ZPKExample}\end{equation} its Bode plot over the frequency range $[0.01,100]$ can be generated using\\ -% |\BodeZPK [blue,thick]|\\ -% | {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}|\\ -% | {0.01}{100}|\\ -% which generates the plot in Figure \ref{simpleBode}. If a delay is not specified, it is assumed to be zero. If a gain is not specified, it is assumed to be 1. By default, each of the axes, excluding ticks and labels, are 5cm wide and 2.5cm high. The width and the height, along with other properties of the plots, the axes, and the group can be customized using native |pgf| keys as shown in the example below. -% -% \begin{figure} -% \begin{center} -% \BodeZPK[blue,thick]{z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}{0.01}{100} -% \cprotect\caption{\label{simpleBode}Output of the default |\BodeZPK| macro.} -% \end{center} -% \end{figure} -% As demonstrated in this example, if a single comma-separated list of options is passed, it applies to both the magnitude and the phase plots. Without any optional arguments, we gets a thick black Bode plot. -% -% A linear approximation of the Bode plot with customization of the plots, the axes, and the group can be generated using\\ -% |\BodeZPK[plot/mag/{red,thick},plot/ph/{blue,thick},|\\ -% | axes/mag/{ytick distance=40,xmajorticks=true,|\\ -% | xlabel={Frequency (rad/s)}},axes/ph/{ytick distance=90},|\\ -% | group/{group style={group size=2 by 1,horizontal sep=2cm,|\\ -% | width=4cm,height=2cm}},approx/linear]|\\ -% | {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}|\\ -% | {0.01}{100}|\\ -% which generates the plot in Figure \ref{customBode}. -% -% \begin{figure} -% \begin{center} -% \BodeZPK[plot/mag/{red,thick},plot/ph/{blue,thick},axes/mag/{ytick distance=40,xmajorticks=true,xlabel={Frequency (rad/s)}},axes/ph/{ytick distance=90},approx/linear,group/{group style={group size = 2 by 1,horizontal sep=2cm},width=4cm,height=2cm}] {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},g/10} {0.01} {100} -% \cprotect\caption{\label{customBode}Customization of the default |\BodeZPK| macro.} -% \end{center} -% \end{figure} -% -% \DescribeMacro{\BodeTF} -% |\BodeTF| \oarg{obj1/typ1/\marg{opt1},obj2/typ2/\marg{opt2},...}\\ -% \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}\\ -% \hspace*{2em}\marg{min-freq}\marg{max-freq} \rmfamily -% -% \noindent Plots the Bode plot of a transfer function given in TF format. The three mandatory arguments include: (1) a list of tuples comprised of the coefficients in the numerator and the denominator of the transfer function and the transport delay, (2) the lower end of the frequency range for the $x-$ axis, and (3) the higher end of the frequency range for the $x-$axis. The coefficients are entered as a comma-separated list, in order from the highest degree of $s$ to the lowest, with zeros for missing degrees. The optional arguments are the same as |\BodeZPK|, except that linear/asymptotic approximation is not supported, so |approx/...| is ignored. -% -% For example, given the same transfer function as (\ref{eq:ZPKExample}) in TF form and with a small transport delay, \begin{equation}G(s) = e^{-0.01s}\frac{s(10s^2+2s+2.6)}{(s^2+s+100.25)},\label{eq:TFExample}\end{equation} its Bode plot over the frequency range $[0.01,100]$ can be generated using\\ -% |\BodeTF[commands/mag/{\node at (axis cs: 2.1,0) |\\ -% | [circle,fill,inner sep=0.05cm,label=below:{$\omega_{gc}$}]{};}]|\\ -% | {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}|\\ -% | {0.01}{100}|\\ -% which generates the plot in Figure \ref{simpleBodeTF}. Note the $0$ added to the numerator coefficients to account for the fact that the numerator does not have a constant term in it. Note the semicolon after the TikZ command passed to the |\commands| option. -% -% \begin{figure} -% \begin{center} -% \BodeTF[commands/mag/{\node at (axis cs: 2.1,0) [circle,fill,inner sep=0.05cm,label=below:{$\omega_{gc}$}] {};}]{num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}{0.01}{100} -% \cprotect\caption{\label{simpleBodeTF}Output of the |\BodeTF| macro with an optional TikZ command used to mark the gain crossover frequency.} -% \end{center} -% \end{figure} -% -% \DescribeEnv{BodeMagPlot} -% |\begin{BodeMagPlot}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\ -% \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\ -% \hspace*{2em}|\addBode...|\\ -% \hspace*{1.5em}|\end{BodeMagPlot}|\\ -% The |BodeMagPlot| environment works in conjunction with the parametric function generator macros |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|, intended to be used for magnitude plots. The optional argument is comprised of a comma separated list of tuples, either |obj/{opt}| or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the axes and the plots according to: -% \begin{itemize} -% \item Tuples of the form |obj/{opt}|: -% \begin{itemize} -% \item |tikz/{opt}|: modify picture properties by adding options |{opt}| to the |tikzpicture| environment. -% \item |axes/{opt}|: modify axis properties by adding options |{opt}| to the |semilogaxis| environment. -% \item |commands/{opt}|: add any valid TikZ commands inside |semilogaxis| environment. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual. -% \end{itemize} -% \item Tuples of the form |{opt}| are passed directly to the |semilogaxis| environment. -% \end{itemize} -% The frequency limits are translated to the x-axis limits and the domain of the |semilogaxis| environment. Example usage in the description of |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|. -% -%\DescribeEnv{BodePhPlot} -% |\begin{BodePhPlot}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\ - % \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\ - % \hspace*{2em}|\addBode...|\\ - % \hspace*{1.5em}|\end{BodePhPlot}|\\ -% Intended to be used for phase plots, otherwise same as the |BodeMagPlot| environment -% -% \DescribeMacro{\addBodeZPKPlots} -% |\addBodeZPKPlots| \oarg{approx1/\marg{opt1},approx2/\marg{opt2},...}\\ -% \hspace*{2em}\marg{plot-type}\\ -% \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}} -% -% \noindent Generates the appropriate parametric functions and supplies them to multiple |\addplot| macros, one for each |approx/{opt}| pair in the optional argument. If no optional argument is supplied, then a single |\addplot| command corresponding to a thick true Bode plot is generated. If an optional argument is supplied, it needs to be one of |true/{opt}|, |linear/{opt}|, or |asymptotic/{opt}|. This macro can be used inside any |semilogaxis| environment as long as a domain for the x-axis is supplied through either the |approx/{opt}| interface or directly in the optional argument of the |semilogaxis| environment. Use with the |BodePlot| environment supplied with this package is recommended. The second mandatory argument, |plot-type| is either |magnitude| or |phase|. If it is not equal to |phase|, it is assumed to be |magnitude|. The last mandatory argument is the same as |\BodeZPK|. -% -% For example, given the transfer function in (\ref{eq:ZPKExample}), its linear, asymptotic, and true Bode plots can be superimposed using -%\begin{verbatim} -%\begin{BodeMagPlot}[height=2cm,width=4cm] {0.01} {100} -% \addBodeZPKPlots[% -% true/{black,thick}, -% linear/{red,dashed,thick}, -% asymptotic/{blue,dotted,thick}] -% {magnitude} -% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10} -%\end{BodeMagPlot} -% -%\begin{BodePhPlot}[height=2cm, width=4cm, ytick distance=90] {0.01} {100} -% \addBodeZPKPlots[% -% true/{black,thick}, -% linear/{red,dashed,thick}, -% asymptotic/{blue,dotted,thick}] -% {phase} -% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10} -%\end{BodePhPlot} -%\end{verbatim} -% \begin{figure} -% \begin{center} -% \begin{BodeMagPlot}[height=2cm,width=4cm]{0.01}{100} -% \addBodeZPKPlots[% -% true/{black,thick}, -% linear/{red,dashed,thick}, -% asymptotic/{blue,dotted,thick}] -% {magnitude} -% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10} -% \end{BodeMagPlot} -% \begin{BodePhPlot}[height=2cm,width=4cm,ytick distance=90]{0.01}{100} -% \addBodeZPKPlots[% -% true/{black,thick}, -% linear/{red,dashed,thick}, -% asymptotic/{blue,dotted,thick}] -% {phase} -% {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10} -% \end{BodePhPlot} -% \end{center} -% \caption{\label{multiBodeZPK}Superimposed approximate and true Bode plots using the \texttt{BodeMagPlot} and \texttt{BodePhPlot} environments and the \texttt{\textbackslash addBodeZPKPlots} macro.} -% \end{figure} -% which generates the plot in Figure \ref{multiBodeZPK}. -% -% \DescribeMacro{\addBodeTFPlot} -% |\addBodeTFPlot|\oarg{plot-options}\\ -% \hspace*{2em}\marg{plot-type}\\ -% \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}} -% -% \noindent Generates a single parametric function for either Bode magnitude or phase plot of a transfer function in TF form. The generated parametric function is passed to the |\addplot| macro. This macro can be used inside any |semilogaxis| environment as long as a domain for the x-axis is supplied through either the |plot-options| interface or directly in the optional argument of the container |semilogaxis| environment. Use with the |BodePlot| environment supplied with this package is recommended. The second mandatory argument, |plot-type| is either magnitude or |phase|. If it is not equal to |phase|, it is assumed to be |magnitude|. The last mandatory argument is the same as |\BodeTF|. -% -% \DescribeMacro{\addBodeComponentPlot} -% |\addBodeComponentPlot|\oarg{plot-options}\marg{plot-command} -% -% \noindent Generates a single parametric function corresponding to the mandatory argument |plot-command| and passes it to the |\addplot| macro. The plot command can be any parametric function that uses |t| as the independent variable. The parametric function must be |gnuplot| compatible (or |pgfplots| compatible if the package is loaded using the |pgf| option). The intended use of this macro is to plot the parametric functions generated using the basic component macros described in Section \ref{sec:BasicComponents} below. -% -% \subsubsection{Basic components up to first order\label{sec:BasicComponents}} -% -% \DescribeMacro{\TypeFeatureApprox} -% |\TypeFeatureApprox|\marg{real-part}\marg{imaginary-part} -% -% \noindent This entry describes 20 different macros of the form |\TypeFeatureApprox| that take the real part and the imaginary part of a complex number as arguments. The |Type| in the macro name should be replaced by either |Mag| or |Ph| to generate a parametric function corresponding to the magnitude or the phase plot, respectively. The |Feature| in the macro name should be replaced by one of |K|, |Pole|, |Zero|, or |Del|, to generate the Bode plot of a gain, a complex pole, a complex zero, or a transport delay, respectively. If the |Feature| is set to either |K| or |Del|, the |imaginary-part| mandatory argument is ignored. The |Approx| in the macro name should either be removed, or it should be replaced by |Lin| or |Asymp| to generate the true Bode plot, the linear approximation, or the asymptotic approximation, respectively. If the |Feature| is set to |Del|, then |Approx| has to be removed. For example, -% \begin{itemize} -% \item |\MagK{k}{0}| or |\MagK{k}{400}| generates a parametric function for the true Bode magnitude of $ G(s) = k $ -% \item |\PhPoleLin{a}{b}| generates a parametric function for the linear approximation of the Bode phase of $ G(s) = \frac{1}{s-a-\mathrm{i}b} $. -% \item |\PhDel{T}{200}| or |\PhDel{T}{0}| generates a parametric function for the Bode phase of $ G(s) = e^{-Ts} $. -% \end{itemize} -% All 20 of the macros defined by combinations of |Type|, |Feature|, and |Approx|, and any |gnuplot| (or |pgfplot| if the |pgf| class option is loaded) compatible function of the 20 macros can be used as |plot-command| in the |addBodeComponentPlot| macro. This is sufficient to generate the Bode plot of any rational transfer function with delay. For example, the Bode phase plot in Figure \ref{multiBodeZPK} can also be generated using: -%\begin{verbatim} -%\begin{BodePhPlot}[ytick distance=90]{0.01}{100} -% \addBodeComponentPlot[black,thick]{\PhZero{0}{0} + \PhZero{-0.1}{-0.5} + -% \PhZero{-0.1}{0.5} + \PhPole{-0.5}{-10} + \PhPole{-0.5}{10} + -% \PhK{10}{0}} -% \addBodeComponentPlot[red,dashed,thick] {\PhZeroLin{0}{0} + -% \PhZeroLin{-0.1}{-0.5} + \PhZeroLin{-0.1}{0.5} + -% \PhPoleLin{-0.5}{-10} + \PhPoleLin{-0.5}{10} + \PhKLin{10}{20}} -% \addBodeComponentPlot[blue,dotted,thick] {\PhZeroAsymp{0}{0} + -% \PhZeroAsymp{-0.1}{-0.5} + \PhZeroAsymp{-0.1}{0.5} + -% \PhPoleAsymp{-0.5}{-10} + \PhPoleAsymp{-0.5}{10} + \PhKAsymp{10}{40}} -%\end{BodePhPlot} -%\end{verbatim} -%\begin{figure} -% \begin{center} -% \begin{BodePhPlot}[ytick distance=90]{0.01}{100} -% \addBodeComponentPlot[black,thick] {\PhZero{0}{0} + \PhZero{-0.1}{-0.5} + \PhZero{-0.1}{0.5} + \PhPole{-0.5}{-10} + \PhPole{-0.5}{10} + \PhK{10}{0}} -% \addBodeComponentPlot[red,dashed,thick] {\PhZeroLin{0}{0} + \PhZeroLin{-0.1}{-0.5} + \PhZeroLin{-0.1}{0.5} + \PhPoleLin{-0.5}{-10} + \PhPoleLin{-0.5}{10} + \PhKLin{10}{20}} -% \addBodeComponentPlot[blue,dotted,thick] {\PhZeroAsymp{0}{0} + \PhZeroAsymp{-0.1}{-0.5} + \PhZeroAsymp{-0.1}{0.5} + \PhPoleAsymp{-0.5}{-10} + \PhPoleAsymp{-0.5}{10} + \PhKAsymp{10}{40}} -% \end{BodePhPlot} -% \end{center} -% \caption{\label{multiBodeComponents}Superimposed approximate and true Bode Phase plot using the \texttt{BodePhPlot} environment, the \texttt{\textbackslash addBodeComponentPlot} macro, and several macros of the \texttt{\textbackslash TypeFeatureApprox} form.} -%\end{figure} -% which gives us the plot in Figure \ref{multiBodeComponents}. -% -% \subsubsection{Basic components of the second order} -% -% \DescribeMacro{\TypeSOFeatureApprox} -% |\TypeSOFeatureApprox|\marg{a1}\marg{a0} -% -% \noindent This entry describes 12 different macros of the form |\TypeSOFeatureApprox| that take the coefficients $ a_1 $ and $ a_0 $ of a general second order system as inputs. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate the Bode plot of $G(s)=\frac{1}{s^2+a_1 s+a_0}$ or $G(s)=s^2+a_1 s+a_0$, respectively. The |Type| in the macro name should be replaced by either |Mag| or |Ph| to generate a parametric function corresponding to the magnitude or the phase plot, respectively. The |Approx| in the macro name should either be removed, or it should be replaced by |Lin| or |Asymp| to generate the true Bode plot, the linear approximation, or the asymptotic approximation, respectively. -% -% \DescribeMacro{\MagSOFeaturePeak} -% |\MagSOFeaturePeak|\oarg{draw-options}\marg{a1}\marg{a0} -% -% \noindent This entry describes 2 different macros of the form |\MagSOFeaturePeak| that take the the coefficients $ a_1 $ and $ a_0 $ of a general second order system as inputs, and draw a resonant peak using the |\draw| TikZ macro. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate a peak for poles and a valley for zeros, respectively. For example, the command -%\begin{verbatim} -%\begin{BodeMagPlot}[xlabel={}]{0.1}{10} -% \addBodeComponentPlot[red,dashed,thick]{\MagSOPoles{0.2}{1}} -% \addBodeComponentPlot[black,thick]{\MagSOPolesLin{0.2}{1}} -% \MagSOPolesPeak[thick]{0.2}{1} -%\end{BodeMagPlot} -%\end{verbatim} -% generates the plot in Figure \ref{BodePeak}. -% -% \begin{figure} -% \begin{center} -% \begin{BodeMagPlot}[xlabel={}]{0.1}{10} -% \addBodeComponentPlot[red,dashed,thick]{\MagSOPoles{0.2}{1}} -% \addBodeComponentPlot[black,thick]{\MagSOPolesLin{0.2}{1}} -% \MagSOPolesPeak[very thick]{0.2}{1} -% \end{BodeMagPlot} -% \end{center} -% \cprotect\caption{\label{BodePeak} Resonant peak in asymptotic Bode plot using |\MagSOPolesPeak|.} -% \end{figure} -% -% \DescribeMacro{\TypeCSFeatureApprox} -% |\TypeCSFeatureApprox|\marg{zeta}\marg{omega-n} -% -% \noindent This entry describes 12 different macros of the form |\TypeCSFeatureApprox| that take the damping ratio, $ \zeta $, and the natural frequency, $ \omega_n $ of a canonical second order system as inputs. The |Type| in the macro name should be replaced by either |Mag| or |Ph| to generate a parametric function corresponding to the magnitude or the phase plot, respectively. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate the Bode plot of $G(s)=\frac{1}{s^2+2\zeta\omega_n s+\omega_n^2}$ or $G(s)=s^2+2\zeta\omega_n s+\omega_n^2$, respectively. The |Approx| in the macro name should either be removed, or it should be replaced by |Lin| or |Asymp| to generate the true Bode plot, the linear approximation, or the asymptotic approximation, respectively. -% -% \DescribeMacro{\MagCSFeaturePeak} -% |\MagCSFeaturePeak|\oarg{draw-options}\marg{zeta}\marg{omega-n} -% -% \noindent This entry describes 2 different macros of the form |\MagCSFeaturePeak| that take the damping ratio, $ \zeta $, and the natural frequency, $ \omega_n $ of a canonical second order system as inputs, and draw a resonant peak using the |\draw| TikZ macro. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate a peak for poles and a valley for zeros, respectively. -% -% \DescribeMacro{\MagCCFeaturePeak} -% |\MagCCFeaturePeak|\oarg{draw-options}\marg{real-part}\marg{imaginary-part} -% -% \noindent This entry describes 2 different macros of the form |\MagCCFeaturePeak| that take the real and imaginary parts of a pair of complex conjugate poles or zeros as inputs, and draw a resonant peak using the |\draw| TikZ macro. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate a peak for poles and a valley for zeros, respectively. -% -% \subsection{Nyquist plots} -% \DescribeMacro{\NyquistZPK} -% |\NyquistZPK| \oarg{plot/\marg{opt},axes/\marg{opt}}\\ -% \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}\\ -% \hspace*{2em}\marg{min-freq}\marg{max-freq} -% -% \noindent Plots the Nyquist plot of a transfer function given in ZPK format with a thick red $+$ marking the critical point (-1,0). The mandatory arguments are the same as |\BodeZPK|. Since there is only one plot in a Nyquist diagram, the |\typ| specifier in the optional argument tuples is not needed. As such, the supported optional argument tuples are |plot/{opt}|, which passes |{opt}| to |\addplot|, |axes/{opt}|, which passes |{\opt}| to the |axis| environment, and |tikz/{opt}|, which passes |{\opt}| to the |tikzpicture| environment. Asymptotic/linear approximations are not supported in Nyquist plots. If just |{opt}| is provided as the optional argument, it is interpreted as |plot/{opt}|. Arrows to indicate the direction of increasing $\omega$ can be added by adding |\usetikzlibrary{decorations.markings}| and |\usetikzlibrary{arrows.meta}| to the preamble and then passing a tuple of the form\\ -%|plot/{postaction=decorate,decoration={markings,|\\ -%| mark=between positions 0.1 and 0.9 step 5em with|\\ -%| {\arrow{Stealth| |[length=2mm, blue]}}}}|\\ -%\textbf{Caution:} with a high number of samples, adding arrows in this way may cause the error message |! Dimension too big|. -% -% For example, the command\\ -% |\NyquistZPK[plot/{red,thick,samples=2000},axes/{blue,thick}]|\\ -% | {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}|\\ -% | {-30}{30}|\\ -% generates the Nyquist plot in Figure \ref{simpleNyquistZPK}. -% -% \begin{figure} -% \begin{center} -% \NyquistZPK[plot/{red,thick,samples=2000},axes/{blue,thick}] {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10} {-30} {30} -% \cprotect\caption{\label{simpleNyquistZPK}Output of the |\NyquistZPK| macro.} -% \end{center} -% \end{figure} -% -% % \DescribeMacro{\NyquistTF} -% |\NyquistTF| \oarg{plot/\marg{opt},axes/\marg{opt}}\\ -% \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}\\ -% \hspace*{2em}\marg{min-freq}\marg{max-freq} -% -% \noindent Nyquist plot of a transfer function given in TF format. Same mandatory arguments as |\BodeTF| and same optional arguments as |\NyquistZPK|. For example, the command\\ -% |\NyquistTF[plot/{green,thick,samples=500,postaction=decorate,|\\ -% | decoration={markings,|\\ -% | mark=between positions 0.1 and 0.9 step 5em|\\ -% | with{\arrow{Stealth[length=2mm, blue]}}}}]|\\ -% | {num/{10,2,2.6,0},den/{1,1,100.25}}|\\ -% | {-30}{30}|\\ -% generates the Nyquist plot in Figure \ref{simpleNyquistTF}. -% -% \begin{figure} -% \begin{center} -% \NyquistTF[plot/{green,thick,samples=500,postaction=decorate,decoration={markings,mark=between positions 0.1 and 0.9 step 5em with {\arrow{Stealth[length=2mm, blue]}}}}] {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01} {-30} {30} -% \cprotect\caption{\label{simpleNyquistTF}Output of the |\NyquistTF| macro with direction arrows. Increasing the number of samples can cause |decorations.markings| to throw errors.} -% \end{center} -% \end{figure} -% -% \DescribeEnv{NyquistPlot} -% |\begin{NyquistPlot}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\ -% \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\ -% \hspace*{2em}|\addNyquist...|\\ -% \hspace*{1.5em}|\end{NyquistPlot}|\\ -% The |NyquistPlot| environment works in conjunction with the parametric function generator macros |\addNyquistZPKPlot| and |\addNyquistTFPlot|. The optional argument is comprised of a comma separated list of tuples, either |obj/{opt}| or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the axes and the plots according to: -% \begin{itemize} -% \item Tuples of the form |obj/{opt}|: -% \begin{itemize} -% \item |tikz/{opt}|: modify picture properties by adding options |{opt}| to the |tikzpicture| environment. -% \item |axes/{opt}|: modify axis properties by adding options |{opt}| to the |axis| environment. -% \item |commands/{opt}|: add any valid TikZ commands inside |axis| environment. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual. -% \end{itemize} -% \item Tuples of the form |{opt}| are passed directly to the |axis| environment. -% \end{itemize} -% The frequency limits are translated to the x-axis limits and the domain of the |axis| environment. -% -% \DescribeMacro{\addNyquistZPKPlot} -% |\addNyquistZPKPlot|\oarg{plot-options}\\ -% \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}} -% -% \noindent Generates a twp parametric functions for the magnitude and the phase a transfer function in ZPK form. The generated magnitude and phase parametric functions are converted to real and imaginary part parametric functions and passed to the |\addplot| macro. This macro can be used inside any |axis| environment as long as a domain for the x-axis is supplied through either the |plot-options| interface or directly in the optional argument of the container |axis| environment. Use with the |NyquistPlot| environment supplied with this package is recommended. The mandatory argument is the same as |\BodeZPK|. -% -% \DescribeMacro{\addNyquistTFPlot} -% |\addNyquistTFPlot|\oarg{plot-options}\\ -% \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}} -% -% \noindent Similar to |\addNyquistZPKPlot|, with a transfer function input in the TF form. -% -% \subsection{Nichols charts} -% \DescribeMacro{\NicholsZPK} -% |\NicholsZPK| \oarg{plot/\marg{opt},axes/\marg{opt}}\\ -% \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}\\ -% \hspace*{2em}\marg{min-freq}\marg{max-freq} -% -% \noindent Nichols chart of a transfer function given in ZPK format. Same arguments as |\NyquistZPK|. -% -% \DescribeMacro{\NicholsTF} -% |\NicholsTF| \oarg{plot/\marg{opt},axes/\marg{opt}}\\ -% \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}\\ -% \hspace*{2em}\marg{min-freq}\marg{max-freq} -% -% \noindent Nichols chart of a transfer function given in TF format. Same arguments as |\NyquistTF|. For example, the command\\ -% |\NicholsTF[plot/{green,thick,samples=2000}]|\\ -% | {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}|\\ -% | {0.001}{100}|\\ -% generates the Nichols chart in Figure \ref{simpleNicholsTF}. -% -% \begin{figure} -% \begin{center} -% \NicholsTF[plot/{green,thick,samples=2000}] {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01} {0.001} {100} -% \cprotect\caption{\label{simpleNicholsTF}Output of the |\NyquistZPK| macro.} -% \end{center} -% \end{figure} -% -% -% \DescribeEnv{NicholsChart} -% |\begin{NicholsChart}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\ -% \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\ -% \hspace*{2em}|\addNichols...|\\ -% \hspace*{1.5em}|\end{NicholsChart}|\\ -% The |NicholsChart| environment works in conjunction with the parametric function generator macros |\addNicholsZPKChart| and |\addNicholsTFChart|. The optional argument is comprised of a comma separated list of tuples, either |obj/{opt}| or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the axes and the plots according to: -% \begin{itemize} -% \item Tuples of the form |obj/{opt}|: -% \begin{itemize} -% \item |tikz/{opt}|: modify picture properties by adding options |{opt}| to the |tikzpicture| environment. -% \item |axes/{opt}|: modify axis properties by adding options |{opt}| to the |axis| environment. -% \item |commands/{opt}|: add any valid TikZ commands inside |axis| environment. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual. -% \end{itemize} -% \item Tuples of the form |{opt}| are passed directly to the |axis| environment. -% \end{itemize} -% The frequency limits are translated to the x-axis limits and the domain of the |axis| environment. -% -% \DescribeMacro{\addNicholsZPKChart} -% |\addNicholsZPKChart|\oarg{plot-options}\\ -% \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}} -% -% \noindent Generates a twp parametric functions for the magnitude and the phase a transfer function in ZPK form. The generated magnitude and phase parametric functions are passed to the |\addplot| macro. This macro can be used inside any |axis| environment as long as a domain for the x-axis is supplied through either the |plot-options| interface or directly in the optional argument of the container |axis| environment. Use with the |NicholsChart| environment supplied with this package is recommended. The mandatory argument is the same as |\BodeZPK|. -% -% \DescribeMacro{\addNicholsTFChart} -% |\addNicholsTFChart|\oarg{plot-options}\\ -% \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}} -% -% \noindent Similar to |\addNicholsZPKChart|, with a transfer function input in the TF form. -% -% \StopEventually{\PrintIndex} -% \clearpage -% \section{Implementation} -% \subsection{Initialization} -% \begin{macro}{\n@mod} -% \begin{macro}{\n@pow} -% \begin{macro}{gnuplot@id} -% \begin{macro}{gnuplot@prefix} -% \changes{v1.0.3}{2021/11/03}{Added jobname to gnuplot prefix} -% \changes{v1.0.8}{2022/07/06}{Fixed issue \#6} -% This code is needed to support both |pgfplots| and |gnuplot| simultaneously. New macros are defined for the |pow| and |mod| functions to address differences between the two math engines. We start by processing the class options. -% \begin{macrocode} -\newif\if@pgfarg\@pgfargfalse -\DeclareOption{pgf}{ - \@pgfargtrue -} -\newif\if@declutterarg\@declutterargfalse -\DeclareOption{declutter}{ - \@declutterargtrue -} -\newif\if@radarg\@radargfalse -\DeclareOption{rad}{ - \@radargtrue -} -\newif\if@hzarg\@hzargfalse -\DeclareOption{Hz}{ - \@hzargtrue -} -\ProcessOptions\relax -% \end{macrocode} -% Then, we define two new macros to unify |pgfplots| and |gnuplot|. -% \begin{macrocode} -\newcommand{\n@mod}[2]{(#1)-(floor((#1)/(#2))*(#2))} -\if@pgfarg - \newcommand{\n@pow}[2]{(#1)^(#2)} - \pgfplotsset{ - trig format plots=rad - } -\else - \newcommand{\n@pow}[2]{(#1)**(#2)} -% \end{macrocode} -% Then, we create a counter so that a new data table is generated and for each new plot. If the plot macros have not changed, the tables, once generated, can be reused by |gnuplot|, which reduces compilation time. The |declutter| option is used to enable the |gnuplot| directory to declutter the working directory. -% \begin{macrocode} - \newcounter{gnuplot@id} - \setcounter{gnuplot@id}{0} - \if@declutterarg - \edef\bodeplot@prefix{gnuplot/\jobname} - \else - \edef\bodeplot@prefix{\jobname} - \fi - \tikzset{ - gnuplot@prefix/.style={ - id=\arabic{gnuplot@id}, - prefix=\bodeplot@prefix - } - } -% \end{macrocode} -% If the operating system is not Windows, and if the |declutter| option is not passed, we create the |gnuplot| folder if it does not already exist. \changes{v1.0.2}{2021/11/01}{Fixed issue \#1} -% \begin{macrocode} - \ifwindows\else - \if@declutterarg - \immediate\write18{mkdir -p gnuplot} - \fi - \fi -\fi -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \begin{macro}{bode@style} -% Default axis properties for all plot macros are collected in this |pgf| style. -% \begin{macrocode} -\pgfplotsset{ - bode@style/.style = { - label style={font=\footnotesize}, - tick label style={font=\footnotesize}, - grid=both, - major grid style={color=gray!80}, - minor grid style={color=gray!20}, - x label style={at={(ticklabel cs:0.5)},anchor=near ticklabel}, - y label style={at={(ticklabel cs:0.5)},anchor=near ticklabel}, - scale only axis, - samples=200, - width=5cm, - log basis x=10 - } -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{freq@filter} -% \begin{macro}{freq@label} -% \begin{macro}{freq@scale} -% \begin{macro}{ph@scale} -% \begin{macro}{ph@x@label} -% \begin{macro}{ph@y@label} -% These macros handle the |Hz| and |rad| class options and two new |pgf| keys named |frequency unit| and |phase unit| for conversion of frequency and phase units, respectively. \changes{v1.1.1}{2022/07/31}{New macros to enable `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\pgfplotsset{freq@filter/.style = {}} -\def\freq@scale{1} -\pgfplotsset{freq@label/.style = {xlabel = {Frequency (rad/s)}}} -\pgfplotsset{ph@x@label/.style = {xlabel={Phase (deg)}}} -\pgfplotsset{ph@y@label/.style = {ylabel={Phase (deg)}}} -\def\ph@scale{180/pi} -\if@radarg - \pgfplotsset{ph@y@label/.style = {ylabel={Phase (rad)}}} - \pgfplotsset{ph@x@label/.style = {xlabel={Phase (rad)}}} - \def\ph@scale{1} -\fi -\if@hzarg - \def\freq@scale{2*pi} - \pgfplotsset{freq@label/.style = {xlabel = {Frequency (Hz)}}} - \if@pgfarg - \pgfplotsset{freq@filter/.style = {x filter/.expression={x-log10(2*pi)}}} - \fi -\fi -\tikzset{ - phase unit/.initial={deg}, - phase unit/.default={deg}, - phase unit/.is choice, - phase unit/deg/.code={ - \renewcommand{\ph@scale}{180/pi} - \pgfplotsset{ph@x@label/.style = {xlabel={Phase (deg)}}} - \pgfplotsset{ph@y@label/.style = {ylabel={Phase (deg)}}} - }, - phase unit/rad/.code={ - \renewcommand{\ph@scale}{1} - \pgfplotsset{ph@y@label/.style = {ylabel={Phase (rad)}}} - \pgfplotsset{ph@x@label/.style = {xlabel={Phase (rad)}}} - }, - frequency unit/.initial={rad}, - frequency unit/.default={rad}, - frequency unit/.is choice, - frequency unit/Hz/.code={ - \renewcommand{\freq@scale}{2*pi} - \pgfplotsset{freq@label/.style = {xlabel = {Frequency (Hz)}}} - \if@pgfarg - \pgfplotsset{freq@filter/.style = {x filter/.expression={x-log10(2*pi)}}} - \fi - }, - frequency unit/rad/.code={ - \renewcommand{\freq@scale}{1} - \pgfplotsset{freq@label/.style = {xlabel = {Frequency (rad/s)}}} - } -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \begin{macro}{get@interval@start} -% \begin{macro}{get@interval@end} -% Internal macros to extract start and end frequency limits from domain specifications.\changes{v1.1.1}{2022/07/31}{New macros to enable `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\def\get@interval@start#1:#2\@nil{#1} -\def\get@interval@end#1:#2\@nil{#2} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \subsection{Parametric function generators for poles, zeros, gains, and delays.} -% All calculations are carried out assuming that frequeny inputs are in |rad/s|. Magnitude outputs are in |dB| and phase outputs are in degrees or radians, depending on the value of |\ph@scale|. -% \begin{macro}{\MagK} -% \begin{macro}{\MagKAsymp} -% \begin{macro}{\MagKLin} -% \begin{macro}{\PhK} -% \begin{macro}{\PhKAsymp} -% \begin{macro}{\PhKLin} -% True, linear, and asymptotic magnitude and phase parametric functions for a pure gain $G(s)=k+0\mathrm{i}$. The macros take two arguments corresponding to real and imaginary part of the gain to facilitate code reuse between delays, gains, poles, and zeros, but only real gains are supported. The second argument, if supplied, is ignored. -% \begin{macrocode} -\newcommand*{\MagK}[2]{(20*log10(abs(#1)))} -\newcommand*{\MagKAsymp}{\MagK} -\newcommand*{\MagKLin}{\MagK} -\newcommand*{\PhK}[2]{((#1<0?-pi:0)*\ph@scale)} -\newcommand*{\PhKAsymp}{\PhK} -\newcommand*{\PhKLin}{\PhK} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \begin{macro}{\PhKAsymp} -% \begin{macro}{\PhKLin} -% True magnitude and phase parametric functions for a pure delay $G(s)=e^{-Ts}$. The macros take two arguments corresponding to real and imaginary part of the gain to facilitate code reuse between delays, gains, poles, and zeros, but only real gains are supported. The second argument, if supplied, is ignored. -% \begin{macrocode} -\newcommand*{\MagDel}[2]{0} -\newcommand*{\PhDel}[2]{(-#1*t*\ph@scale)} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \begin{macro}{\MagPole} -% \begin{macro}{\MagPoleAsymp} -% \begin{macro}{\MagPoleLin} -% \begin{macro}{\PhPole} -% \begin{macro}{\PhPoleAsymp} -% \begin{macro}{\PhPoleLin} -% These macros are the building blocks for most of the plotting functions provided by this package. We start with Parametric function for the true magnitude of a complex pole. -% \begin{macrocode} -\newcommand*{\MagPole}[2] - {(-20*log10(sqrt(\n@pow{#1}{2} + \n@pow{t - (#2)}{2})))} -% \end{macrocode} -% Parametric function for linear approximation of the magnitude of a complex pole. -% \begin{macrocode} -\newcommand*{\MagPoleLin}[2]{(t < sqrt(\n@pow{#1}{2} + \n@pow{#2}{2}) ? - -20*log10(sqrt(\n@pow{#1}{2} + \n@pow{#2}{2})) : - -20*log10(t) - )} -% \end{macrocode} -% Parametric function for asymptotic approximation of the magnitude of a complex pole, same as linear approximation. -% \begin{macrocode} -\newcommand*{\MagPoleAsymp}{\MagPoleLin} -% \end{macrocode} -% Parametric function for the true phase of a complex pole. -% \begin{macrocode} -\newcommand*{\PhPole}[2]{((#1 > 0 ? (#2 > 0 ? - (\n@mod{-atan2((t - (#2)),-(#1))}{2*pi}) : - (-atan2((t - (#2)),-(#1)))) : - (-atan2((t - (#2)),-(#1))))*\ph@scale)} -% \end{macrocode} -% Parametric function for linear approximation of the phase of a complex pole. -% \begin{macrocode} -\newcommand*{\PhPoleLin}[2]{ - ((abs(#1)+abs(#2) == 0 ? -pi/2 : - (t < (sqrt(\n@pow{#1}{2} + \n@pow{#2}{2}) / - (\n@pow{10}{sqrt(\n@pow{#1}{2}/(\n@pow{#1}{2} + \n@pow{#2}{2}))})) ? - (-atan2(-(#2),-(#1))) : - (t >= (sqrt(\n@pow{#1}{2} + \n@pow{#2}{2}) * - (\n@pow{10}{sqrt(\n@pow{#1}{2}/(\n@pow{#1}{2} + \n@pow{#2}{2}))})) ? - (#2>0?(#1>0?3*pi/2:-pi/2):-pi/2) : - (-atan2(-(#2),-(#1)) + (log10(t/(sqrt(\n@pow{#1}{2} + \n@pow{#2}{2}) / - (\n@pow{10}{sqrt(\n@pow{#1}{2}/(\n@pow{#1}{2} + - \n@pow{#2}{2}))}))))*((#2>0?(#1>0?3*pi/2:-pi/2):-pi/2) + atan2(-(#2),-(#1)))/ - (log10(\n@pow{10}{sqrt((4*\n@pow{#1}{2})/ - (\n@pow{#1}{2} + \n@pow{#2}{2}))}))))))*\ph@scale)} -% \end{macrocode} -% Parametric function for asymptotic approximation of the phase of a complex pole. -% \begin{macrocode} -\newcommand*{\PhPoleAsymp}[2]{((t < (sqrt(\n@pow{#1}{2} + \n@pow{#2}{2})) ? - (-atan2(-(#2),-(#1))) : - (#2>0?(#1>0?3*pi/2:-pi/2):-pi/2))*\ph@scale)} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \begin{macro}{\MagZero} -% \begin{macro}{\MagZeroAsymp} -% \begin{macro}{\MagZeroLin} -% \begin{macro}{\PhZero} -% \begin{macro}{\PhZeroAsymp} -% \begin{macro}{\PhZeroLin} -% Plots of zeros are defined to be negative of plots of poles. The |0-| is necessary due to a bug in |gnuplot| (fixed in version 5.4, patchlevel 3). -% \begin{macrocode} -\newcommand*{\MagZero}{0-\MagPole} -\newcommand*{\MagZeroLin}{0-\MagPoleLin} -\newcommand*{\MagZeroAsymp}{0-\MagPoleAsymp} -\newcommand*{\PhZero}{0-\PhPole} -\newcommand*{\PhZeroLin}{0-\PhPoleLin} -\newcommand*{\PhZeroAsymp}{0-\PhPoleAsymp} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \subsection{Second order systems.} -% Although second order systems can be dealt with using the macros defined so far, the following dedicated macros for second order systems involve less computation. -% \begin{macro}{\MagCSPoles} -% \begin{macro}{\MagCSPolesAsymp} -% \begin{macro}{\MagCSPolesLin} -% \begin{macro}{\PhCSPoles} -% \begin{macro}{\PhCSPolesAsymp} -% \begin{macro}{\PhCSPolesLin} -% \begin{macro}{\MagCSZeros} -% \begin{macro}{\MagCSZerosAsymp} -% \begin{macro}{\MagCSZerosLin} -% \begin{macro}{\PhCSZeros} -% \begin{macro}{\PhCSZerosAsymp} -% \begin{macro}{\PhCSZerosLin} -% Consider the canonical second order transfer function $G(s) = \frac{1}{s^2 + 2 \zeta w_n s + w_n^2}$. We start with true, linear, and asymptotic magnitude plots for this transfer function. -% \begin{macrocode} -\newcommand*{\MagCSPoles}[2]{(-20*log10(sqrt(\n@pow{\n@pow{#2}{2} - - \n@pow{t}{2}}{2} + \n@pow{2*#1*#2*t}{2})))} -\newcommand*{\MagCSPolesLin}[2]{(t < #2 ? -40*log10(#2) : - 40*log10(t))} -\newcommand*{\MagCSPolesAsymp}{\MagCSPolesLin} -% \end{macrocode} -% Then, we have true, linear, and asymptotic phase plots for the canonical second order transfer function. -% \begin{macrocode} -\newcommand*{\PhCSPoles}[2]{((-atan2((2*(#1)*(#2)*t),(\n@pow{#2}{2} - - \n@pow{t}{2})))*\ph@scale)} -\newcommand*{\PhCSPolesLin}[2]{((t < (#2 / (\n@pow{10}{abs(#1)})) ? - 0 : - (t >= (#2 * (\n@pow{10}{abs(#1)})) ? - (#1>0 ? -pi : pi) : - (#1>0 ? (-pi*(log10(t*(\n@pow{10}{#1})/#2))/(2*#1)) : - (pi*(log10(t*(\n@pow{10}{abs(#1)})/#2))/(2*abs(#1))))))*\ph@scale)} -\newcommand*{\PhCSPolesAsymp}[2]{((#1>0?(t<#2?0:-pi):(t<#2?0:pi))*\ph@scale)} -% \end{macrocode} -% Plots of the inverse function $G(s)=s^2+2\zeta\omega_n s+\omega_n^2$ are defined to be negative of plots of poles. The |0-| is necessary due to a bug in |gnuplot| (fixed in version 5.4, patchlevel 3). -% \begin{macrocode} -\newcommand*{\MagCSZeros}{0-\MagCSPoles} -\newcommand*{\MagCSZerosLin}{0-\MagCSPolesLin} -\newcommand*{\MagCSZerosAsymp}{0-\MagCSPolesAsymp} -\newcommand*{\PhCSZeros}{0-\PhCSPoles} -\newcommand*{\PhCSZerosLin}{0-\PhCSPolesLin} -\newcommand*{\PhCSZerosAsymp}{0-\PhCSPolesAsymp} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \begin{macro}{\MagCSPolesPeak} -% \begin{macro}{\MagCSZerosPeak} -% These macros are used to add a resonant peak to linear and asymptotic plots of canonical second order poles and zeros. Since the plots are parametric, a separate |\draw| command is needed to add a vertical arrow. -% \begin{macrocode} -\newcommand*{\MagCSPolesPeak}[3][]{ - \draw[#1,->] (axis cs:{#3},{-40*log10(#3)}) -- - (axis cs:{#3},{-40*log10(#3)-20*log10(2*abs(#2))}) -} -\newcommand*{\MagCSZerosPeak}[3][]{ - \draw[#1,->] (axis cs:{#3},{40*log10(#3)}) -- - (axis cs:{#3},{40*log10(#3)+20*log10(2*abs(#2))}) -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \begin{macro}{\MagSOPoles} -% \begin{macro}{\MagSOPolesAsymp} -% \begin{macro}{\MagSOPolesLin} -% \begin{macro}{\PhSOPoles} -% \begin{macro}{\PhSOPolesAsymp} -% \begin{macro}{\PhSOPolesLin} -% \begin{macro}{\MagSOZeros} -% \begin{macro}{\MagSOZerosAsymp} -% \begin{macro}{\MagSOZerosLin} -% \begin{macro}{\PhSOZeros} -% \begin{macro}{\PhSOZerosAsymp} -% \begin{macro}{\PhSOZerosLin} -% Consider a general second order transfer function $G(s) = \frac{1}{s^2 + a s + b}$. We start with true, linear, and asymptotic magnitude plots for this transfer function. -% \begin{macrocode} -\newcommand*{\MagSOPoles}[2]{ - (-20*log10(sqrt(\n@pow{#2 - \n@pow{t}{2}}{2} + \n@pow{#1*t}{2})))} -\newcommand*{\MagSOPolesLin}[2]{ - (t < sqrt(abs(#2)) ? -20*log10(abs(#2)) : - 40*log10(t))} -\newcommand*{\MagSOPolesAsymp}{\MagSOPolesLin} -% \end{macrocode} -% Then, we have true, linear, and asymptotic phase plots for the general second order transfer function. -% \begin{macrocode} -\newcommand*{\PhSOPoles}[2]{((-atan2((#1)*t,((#2) - \n@pow{t}{2})))*\ph@scale)} -\newcommand*{\PhSOPolesLin}[2]{((#2>0 ? - \PhCSPolesLin{(#1/(2*sqrt(#2)))}{(sqrt(#2))} : - (#1>0 ? -pi : pi))*\ph@scale)} -\newcommand*{\PhSOPolesAsymp}[2]{((#2>0 ? - \PhCSPolesAsymp{(#1/(2*sqrt(#2)))}{(sqrt(#2))} : - (#1>0 ? -pi : pi))*\ph@scale)} -% \end{macrocode} -% Plots of the inverse function $G(s)=s^2+as+b$ are defined to be negative of plots of poles. The |0-| is necessary due to a bug in |gnuplot| (fixed in version 5.4, patchlevel 3). -% \begin{macrocode} -\newcommand*{\MagSOZeros}{0-\MagSOPoles} -\newcommand*{\MagSOZerosLin}{0-\MagSOPolesLin} -\newcommand*{\MagSOZerosAsymp}{0-\MagSOPolesAsymp} -\newcommand*{\PhSOZeros}{0-\PhSOPoles} -\newcommand*{\PhSOZerosLin}{0-\PhSOPolesLin} -\newcommand*{\PhSOZerosAsymp}{0-\PhSOPolesAsymp} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \begin{macro}{\MagSOPolesPeak} -% \begin{macro}{\MagSOZerosPeak} -% These macros are used to add a resonant peak to linear and asymptotic plots of general second order poles and zeros. Since the plots are parametric, a separate |\draw| command is needed to add a vertical arrow. -% \begin{macrocode} -\newcommand*{\MagSOPolesPeak}[3][]{ - \draw[#1,->] (axis cs:{sqrt(abs(#3))},{-20*log10(abs(#3))}) -- - (axis cs:{sqrt(abs(#3))},{-20*log10(abs(#3)) - - 20*log10(abs(#2/sqrt(abs(#3))))}); -} -\newcommand*{\MagSOZerosPeak}[3][]{ - \draw[#1,->] (axis cs:{sqrt(abs(#3))},{20*log10(abs(#3))}) -- - (axis cs:{sqrt(abs(#3))},{20*log10(abs(#3)) + - 20*log10(abs(#2/sqrt(abs(#3))))}); -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \subsection{Commands for Bode plots} -% \subsubsection{User macros} -% \begin{macro}{\BodeZPK} -% This macro takes lists of complex poles and zeros of the form |{re,im}|, and values of gain and delay as inputs and constructs parametric functions for the Bode magnitude and phase plots. This is done by adding together the parametric functions generated by the macros for individual zeros, poles, gain, and delay, described above. The parametric functions are then plotted in a |tikzpicture| environment using the |\addplot| macro. Unless the package is loaded with the option |pgf|, the parametric functions are evaluated using |gnuplot|. \changes{v1.0.1}{2021/10/29}{Pass arbitrary TikZ commands as options.} -% \begin{macrocode} -\newcommand{\BodeZPK}[4][approx/true]{ -% \end{macrocode} -% Most of the work is done by the |\parse@opt| and the |\build@ZPK@plot| macros, described in the 'Internal macros' section. The former is used to parse the optional arguments and the latter to extract poles, zeros, gain, and delay from the first mandatory argument and to generate macros |\func@mag| and |\func@ph| that hold the magnitude and phase parametric functions. The |\noexpand| macros below are needed to so that only the macro |\opt@group| is expanded. \changes{v1.0.3}{2021/11/03}{Added Tikz option}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} - \parse@opt{#1} - \gdef\func@mag{} - \gdef\func@ph{} - \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]} - \temp@cmd - \build@ZPK@plot{\func@mag}{\func@ph}{\opt@approx}{#2} - \edef\temp@cmd{\noexpand\begin{groupplot}[ - bode@style, - xmin=#3, - xmax=#4, - domain=#3*\freq@scale:#4*\freq@scale, - height=2.5cm, - xmode=log, - group style = {group size = 1 by 2,vertical sep=0.25cm}, - \opt@group - ]} - \temp@cmd -% \end{macrocode} -% To ensure frequency tick marks on magnitude and the phase plots are always aligned, we use the |groupplot| library. The |\noexpand| and |\unexpanded\expandafter| macros below are used to expand macros in the plot and group optional arguments. -% \begin{macrocode} - \edef\temp@mag@cmd{\noexpand\nextgroupplot [ylabel={Gain (dB)}, xmajorticks=false, \optmag@axes] - \noexpand\addplot [freq@filter, variable=t, thick, \optmag@plot]} - \edef\temp@ph@cmd{\noexpand\nextgroupplot [ph@y@label, freq@label, \optph@axes] - \noexpand\addplot [freq@filter, variable=t, thick, \optph@plot]} - \if@pgfarg - \temp@mag@cmd {\func@mag}; - \optmag@commands - \temp@ph@cmd {\func@ph}; - \optph@commands - \else -% \end{macrocode} -% In |gnuplot| mode, we increment the |gnuplot@id| counter before every plot to make sure that new and reusable |.gnuplot| and |.table| files are generated for every plot. We use |raw gnuplot| to make sure that the tables generated by |gnuplot| use the correct phase and frequency units as supplied by the user. -% \begin{macrocode} - \stepcounter{gnuplot@id} - \temp@mag@cmd gnuplot [raw gnuplot, gnuplot@prefix] - { set table $meta; - set dummy t; - set logscale x 10; - set xrange [#3*\freq@scale:#4*\freq@scale]; - set samples \pgfkeysvalueof{/pgfplots/samples}; - plot \func@mag; - set table "\bodeplot@prefix\arabic{gnuplot@id}.table"; - plot "$meta" using ($1/(\freq@scale)):($2); - }; - \optmag@commands - \stepcounter{gnuplot@id} - \temp@ph@cmd gnuplot [raw gnuplot, gnuplot@prefix] - { set table $meta; - set dummy t; - set logscale x 10; - set xrange [#3*\freq@scale:#4*\freq@scale]; - set samples \pgfkeysvalueof{/pgfplots/samples}; - plot \func@ph; - set table "\bodeplot@prefix\arabic{gnuplot@id}.table"; - plot "$meta" using ($1/(\freq@scale)):($2); - }; - \optph@commands - \fi - \end{groupplot} - \end{tikzpicture} -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\BodeTF} -% Implementation of this macro is very similar to the |\BodeZPK| macro above. The only difference is the lack of linear and asymptotic plots and slightly different parsing of the mandatory arguments. \changes{v1.0.3}{2021/11/03}{Added Tikz option} \changes{v1.1.0}{2022/07/06}{Fixed phase wrapping in gnuplot mode}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\newcommand{\BodeTF}[4][]{ - \parse@opt{#1} - \gdef\func@mag{} - \gdef\func@ph{} - \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]} - \temp@cmd - \build@TF@plot{\func@mag}{\func@ph}{#2} - \edef\temp@cmd{\noexpand\begin{groupplot}[ - bode@style, - xmin=#3, - xmax=#4, - domain=#3*\freq@scale:#4*\freq@scale, - height=2.5cm, - xmode=log, - group style = {group size = 1 by 2,vertical sep=0.25cm}, - \opt@group - ]} - \temp@cmd - \edef\temp@mag@cmd{\noexpand\nextgroupplot [ylabel={Gain (dB)}, xmajorticks=false, \optmag@axes] - \noexpand\addplot [freq@filter, variable=t, thick, \optmag@plot]} - \edef\temp@ph@cmd{\noexpand\nextgroupplot [ph@y@label, freq@label, \optph@axes] - \noexpand\addplot [freq@filter, variable=t, thick, \optph@plot]} - \if@pgfarg - \temp@mag@cmd {\func@mag}; - \optmag@commands - \temp@ph@cmd {\n@mod{\func@ph}{2*pi*\ph@scale}}; - \optph@commands - \else - \stepcounter{gnuplot@id} - \temp@mag@cmd gnuplot [raw gnuplot, gnuplot@prefix] - { set table $meta; - set dummy t; - set logscale x 10; - set xrange [#3*\freq@scale:#4*\freq@scale]; - set samples \pgfkeysvalueof{/pgfplots/samples}; - plot \func@mag; - set table "\bodeplot@prefix\arabic{gnuplot@id}.table"; - plot "$meta" using ($1/(\freq@scale)):($2); - }; - \optmag@commands - \stepcounter{gnuplot@id} - \temp@ph@cmd gnuplot [raw gnuplot, gnuplot@prefix] - { set table $meta; - set dummy t; - set logscale x 10; - set trange [#3*\freq@scale:#4*\freq@scale]; - set samples \pgfkeysvalueof{/pgfplots/samples}; - plot '+' using (t) : ((\func@ph)/(\ph@scale)) smooth unwrap; - set table "\bodeplot@prefix\arabic{gnuplot@id}.table"; - plot "$meta" using ($1/(\freq@scale)):($2*\ph@scale); - }; - \optph@commands - \fi - \end{groupplot} - \end{tikzpicture} -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\addBodeZPKPlots} -% This macro is designed to issues multiple |\addplot| macros for the same set of poles, zeros, gain, and delay. All of the work is done by the |\build@ZPK@plot| macro. \changes{v1.0.1}{2021/10/29}{Improved optional argument handling.}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\newcommand{\addBodeZPKPlots}[3][true/{}]{ - \foreach \approx/\opt in {#1} { - \gdef\plot@macro{} - \gdef\temp@macro{} - \ifnum\pdf@strcmp{#2}{phase}=0 - \build@ZPK@plot{\temp@macro}{\plot@macro}{\approx}{#3} - \else - \build@ZPK@plot{\plot@macro}{\temp@macro}{\approx}{#3} - \fi - \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}} - \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil} - \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil} - \if@pgfarg - \edef\temp@cmd{\noexpand\addplot [freq@filter, domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, thick, \opt]} - \temp@cmd {\plot@macro}; - \else - \stepcounter{gnuplot@id} - \edef\temp@cmd{\noexpand\addplot [variable=t, thick, \opt]} - \temp@cmd gnuplot [raw gnuplot, gnuplot@prefix] - { set table $meta; - set dummy t; - set logscale x 10; - set xrange [\domain@start*\freq@scale:\domain@end*\freq@scale]; - set samples \pgfkeysvalueof{/pgfplots/samples}; - plot \plot@macro; - set table "\bodeplot@prefix\arabic{gnuplot@id}.table"; - plot "$meta" using ($1/(\freq@scale)):($2); - }; - \fi - } -} -% \end{macrocode} -%\end{macro} -% \begin{macro}{\addBodeTFPlot} -% This macro is designed to issues a single |\addplot| macros for the set of coefficients and delay. All of the work is done by the |\build@TF@plot| macro. \changes{v1.1.0}{2022/07/06}{Fixed phase wrapping in gnuplot mode}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\newcommand{\addBodeTFPlot}[3][thick]{ - \gdef\plot@macro{} - \gdef\temp@macro{} - \ifnum\pdf@strcmp{#2}{phase}=0 - \build@TF@plot{\temp@macro}{\plot@macro}{#3} - \else - \build@TF@plot{\plot@macro}{\temp@macro}{#3} - \fi - \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}} - \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil} - \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil} - \if@pgfarg - \ifnum\pdf@strcmp{#2}{phase}=0 - \addplot [freq@filter, domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1]{\n@mod{\plot@macro}{2*pi}}; - \else - \addplot [freq@filter, domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1]{\plot@macro}; - \fi - \else - \stepcounter{gnuplot@id} - \ifnum\pdf@strcmp{#2}{phase}=0 - \addplot [variable=t, #1] gnuplot [raw gnuplot, gnuplot@prefix] - { set table $meta; - set dummy t; - set logscale x 10; - set trange [\domain@start*\freq@scale:\domain@end*\freq@scale]; - set samples \pgfkeysvalueof{/pgfplots/samples}; - plot '+' using (t) : ((\plot@macro)/(\ph@scale)) smooth unwrap; - set table "\bodeplot@prefix\arabic{gnuplot@id}.table"; - plot "$meta" using ($1/(\freq@scale)):($2*\ph@scale); - }; - \else - \addplot [variable=t, #1] gnuplot [raw gnuplot, gnuplot@prefix] - { set table $meta; - set dummy t; - set logscale x 10; - set xrange [\domain@start*\freq@scale:\domain@end*\freq@scale]; - set samples \pgfkeysvalueof{/pgfplots/samples}; - plot \plot@macro; - set table "\bodeplot@prefix\arabic{gnuplot@id}.table"; - plot "$meta" using ($1/(\freq@scale)):($2); - }; - \fi - \fi -} -% \end{macrocode} -%\end{macro} -% \begin{macro}{\addBodeComponentPlot} -% This macro is designed to issue a single |\addplot| macro capable of plotting linear combinations of the basic components described in Section \ref{sec:BasicComponents}. The only work to do here is to handle the |pgf| package option.\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\newcommand{\addBodeComponentPlot}[2][thick]{ - \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}} - \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil} - \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil} - \if@pgfarg - \addplot [freq@filter, domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1] {#2}; - \else - \stepcounter{gnuplot@id} - \addplot [variable=t, #1] gnuplot [raw gnuplot, gnuplot@prefix] - { set table $meta; - set dummy t; - set logscale x 10; - set xrange [\domain@start*\freq@scale:\domain@end*\freq@scale]; - set samples \pgfkeysvalueof{/pgfplots/samples}; - plot #2; - set table "\bodeplot@prefix\arabic{gnuplot@id}.table"; - plot "$meta" using ($1/(\freq@scale)):($2); - }; - \fi -} -% \end{macrocode} -%\end{macro} -% \begin{environment}{BodePhPlot} -% An environment to host phase plot macros that pass parametric functions to |\addplot| macros. Uses the defaults specified in |bode@style| to create a shortcut that includes the |tikzpicture| and |semilogaxis| environments.\changes{v1.1.0}{2022/07/20}{Added separate environments for phase and magnitude plots}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\newenvironment{BodePhPlot}[3][]{ - \parse@env@opt{#1} - \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}] - \noexpand\begin{semilogxaxis}[ - ph@y@label, - freq@label, - bode@style, - xmin={#2}, - xmax={#3}, - domain=#2:#3, - height=2.5cm, - \unexpanded\expandafter{\opt@axes} - ] - } - \temp@cmd -}{ - \end{semilogxaxis} - \end{tikzpicture} -} -% \end{macrocode} -% \end{environment} -% \begin{environment}{BodeMagPlot} -% An environment to host magnitude plot macros that pass parametric functions to |\addplot| macros. Uses the defaults specified in |bode@style| to create a shortcut that includes the |tikzpicture| and |semilogaxis| environments.\changes{v1.1.0}{2022/07/20}{Added separate environments for phase and magnitude plots}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\newenvironment{BodeMagPlot}[3][]{ - \parse@env@opt{#1} - \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}] - \noexpand\begin{semilogxaxis}[ - bode@style, - freq@label, - xmin={#2}, - xmax={#3}, - domain=#2:#3, - height=2.5cm, - ylabel={Gain (dB)}, - \unexpanded\expandafter{\opt@axes} - ] - } - \temp@cmd -}{ - \end{semilogxaxis} - \end{tikzpicture} -} -% \end{macrocode} -% \end{environment} -% \begin{environment}{BodePlot} -% Same as |BodeMagPlot|. The |BodePlot| environment is deprecated as of v1.1.0, please use the |BodePhPlot| and |BodeMagPlot| environments instead.\changes{v1.0.3}{2021/11/03}{Added tikz option to environments}\changes{v1.1.0}{2022/02/20}{Deprecated BodePlot environment}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\newenvironment{BodePlot}[3][]{ - \parse@env@opt{#1} - \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}] - \noexpand\begin{semilogxaxis}[ - bode@style, - freq@label, - xmin={#2}, - xmax={#3}, - domain=#2:#3, - height=2.5cm, - \unexpanded\expandafter{\opt@axes} - ] - } - \temp@cmd -}{ - \end{semilogxaxis} - \end{tikzpicture} -} -% \end{macrocode} -% \end{environment} -% \subsubsection{Internal macros} -% \begin{macro}{\add@feature} -% This is an internal macro to add a basic component (pole, zero, gain, or delay), described using one of the macros in Section \ref{sec:BasicComponents} (input |#2|), to a parametric function stored in a global macro (input |#1|). The basic component value (input |#3|) is a complex number of the form |{re,im}|. If the imaginary part is missing, it is assumed to be zero. Implementation made possible by \href{https://tex.stackexchange.com/a/619637/110602}{this StackExchange answer}. -% \begin{macrocode} -\newcommand*{\add@feature}[3]{ - \ifcat$\detokenize\expandafter{#1}$ - \xdef#1{\unexpanded\expandafter{#1 0+#2}} - \else - \xdef#1{\unexpanded\expandafter{#1+#2}} - \fi - \foreach \y [count=\n] in #3 { - \xdef#1{\unexpanded\expandafter{#1}{\y}} - \xdef\Last@LoopValue{\n} - } - \ifnum\Last@LoopValue=1 - \xdef#1{\unexpanded\expandafter{#1}{0}} - \fi -} -% \end{macrocode} -%\end{macro} -% \begin{macro}{\build@ZPK@plot} -% This is an internal macro to build parametric Bode magnitude and phase plots by concatenating basic component (pole, zero, gain, or delay) macros (Section \ref{sec:BasicComponents}) to global magnitude and phase macros (inputs |#1| and |#2|). The |\add@feature| macro is used to do the concatenation. The basic component macros are inferred from a |feature/{values}| list, where |feature| is one of |z|,|p|,|k|, and |d|, for zeros, poles, gain, and delay, respectively, and |{values}| is a comma separated list of comma separated lists (complex numbers of the form |{re,im}|). If the imaginary part is missing, it is assumed to be zero. -% \begin{macrocode} -\newcommand{\build@ZPK@plot}[4]{ - \foreach \feature/\values in {#4} { - \ifnum\pdf@strcmp{\feature}{z}=0 - \foreach \z in \values { - \ifnum\pdf@strcmp{#3}{linear}=0 - \add@feature{#2}{\PhZeroLin}{\z} - \add@feature{#1}{\MagZeroLin}{\z} - \else - \ifnum\pdf@strcmp{#3}{asymptotic}=0 - \add@feature{#2}{\PhZeroAsymp}{\z} - \add@feature{#1}{\MagZeroAsymp}{\z} - \else - \add@feature{#2}{\PhZero}{\z} - \add@feature{#1}{\MagZero}{\z} - \fi - \fi - } - \fi - \ifnum\pdf@strcmp{\feature}{p}=0 - \foreach \p in \values { - \ifnum\pdf@strcmp{#3}{linear}=0 - \add@feature{#2}{\PhPoleLin}{\p} - \add@feature{#1}{\MagPoleLin}{\p} - \else - \ifnum\pdf@strcmp{#3}{asymptotic}=0 - \add@feature{#2}{\PhPoleAsymp}{\p} - \add@feature{#1}{\MagPoleAsymp}{\p} - \else - \add@feature{#2}{\PhPole}{\p} - \add@feature{#1}{\MagPole}{\p} - \fi - \fi - } - \fi - \ifnum\pdf@strcmp{\feature}{k}=0 - \ifnum\pdf@strcmp{#3}{linear}=0 - \add@feature{#2}{\PhKLin}{\values} - \add@feature{#1}{\MagKLin}{\values} - \else - \ifnum\pdf@strcmp{#3}{asymptotic}=0 - \add@feature{#2}{\PhKAsymp}{\values} - \add@feature{#1}{\MagKAsymp}{\values} - \else - \add@feature{#2}{\PhK}{\values} - \add@feature{#1}{\MagK}{\values} - \fi - \fi - \fi - \ifnum\pdf@strcmp{\feature}{d}=0 - \ifnum\pdf@strcmp{#3}{linear}=0 - \PackageError {bodeplot} {Linear approximation for pure delays is not - supported.} {Plot the true Bode plot using `true' instead of `linear'.} - \else - \ifnum\pdf@strcmp{#3}{asymptotic}=0 - \PackageError {bodeplot} {Asymptotic approximation for pure delays is not - supported.} {Plot the true Bode plot using `true' instead of `asymptotic'.} - \else - \ifdim\values pt < 0pt - \PackageError {bodeplot} {Delay needs to be a positive number.} - \fi - \add@feature{#2}{\PhDel}{\values} - \add@feature{#1}{\MagDel}{\values} - \fi - \fi - \fi - } -} -% \end{macrocode} -%\end{macro} -% \begin{macro}{\build@TF@plot} -% This is an internal macro to build parametric Bode magnitude and phase functions by computing the magnitude and the phase given numerator and denominator coefficients and delay (input |#3|). The functions are assigned to user-supplied global magnitude and phase macros (inputs |#1| and |#2|). \changes{v1.0.8}{2022/07/05}{Included phase due to delay in wrapping.}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\newcommand{\build@TF@plot}[3]{ - \gdef\num@real{0} - \gdef\num@im{0} - \gdef\den@real{0} - \gdef\den@im{0} - \gdef\loop@delay{0} - \foreach \feature/\values in {#3} { - \ifnum\pdf@strcmp{\feature}{num}=0 - \foreach \numcoeff [count=\numpow] in \values { - \xdef\num@degree{\numpow} - } - \foreach \numcoeff [count=\numpow] in \values { - \pgfmathtruncatemacro{\currentdegree}{\num@degree-\numpow} - \ifnum\currentdegree = 0 - \xdef\num@real{\num@real+\numcoeff} - \else - \ifodd\currentdegree - \xdef\num@im{\num@im+(\numcoeff*(\n@pow{-1}{(\currentdegree-1)/2})*% - (\n@pow{t}{\currentdegree}))} - \else - \xdef\num@real{\num@real+(\numcoeff*(\n@pow{-1}{(\currentdegree)/2})*% - (\n@pow{t}{\currentdegree}))} - \fi - \fi - } - \fi - \ifnum\pdf@strcmp{\feature}{den}=0 - \foreach \dencoeff [count=\denpow] in \values { - \xdef\den@degree{\denpow} - } - \foreach \dencoeff [count=\denpow] in \values { - \pgfmathtruncatemacro{\currentdegree}{\den@degree-\denpow} - \ifnum\currentdegree = 0 - \xdef\den@real{\den@real+\dencoeff} - \else - \ifodd\currentdegree - \xdef\den@im{\den@im+(\dencoeff*(\n@pow{-1}{(\currentdegree-1)/2})*% - (\n@pow{t}{\currentdegree}))} - \else - \xdef\den@real{\den@real+(\dencoeff*(\n@pow{-1}{(\currentdegree)/2})*% - (\n@pow{t}{\currentdegree}))} - \fi - \fi + + + + + + + +<!DOCTYPE html> +<html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system"> + <head> + <meta charset="utf-8"> + <link rel="dns-prefetch" href="https://github.githubassets.com"> + <link rel="dns-prefetch" href="https://avatars.githubusercontent.com"> + <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> + <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> + <link rel="preconnect" href="https://github.githubassets.com" crossorigin> + <link rel="preconnect" href="https://avatars.githubusercontent.com"> + + + + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-5178aee0ee76.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-217d4f9c8e70.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-0adfa28f0e68.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-1c8575b36644.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-5113d2be20b0.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-c96add742484.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-290f92f5e867.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-cdd88f146bf7.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-2171ea0f078b.css" /> + + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-5508e6d5461e.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-d3a0fca0d75c.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-d9fe73e621ce.css" /> + <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-7cc3c15b62f7.css" /> + + <meta name="optimizely-datafile" content="{"groups": [], "environmentKey": "production", "rollouts": [], "typedAudiences": [], "projectId": "16737760170", "variables": [], "featureFlags": [], "experiments": [], "version": "4", "audiences": [{"conditions": "[\"or\", {\"match\": \"exact\", \"name\": \"$opt_dummy_attribute\", \"type\": \"custom_attribute\", \"value\": \"$opt_dummy_value\"}]", "id": "$opt_dummy_audience", "name": "Optimizely-Generated Audience for Backwards Compatibility"}], "anonymizeIP": true, "sdkKey": "WTc6awnGuYDdG98CYRban", "attributes": [{"id": "16822470375", "key": "user_id"}, {"id": "17143601254", "key": "spammy"}, {"id": "18175660309", "key": "organization_plan"}, {"id": "18813001570", "key": "is_logged_in"}, {"id": "19073851829", "key": "geo"}, {"id": "20175462351", "key": "requestedCurrency"}, {"id": "20785470195", "key": "country_code"}, {"id": "21656311196", "key": "opened_downgrade_dialog"}], "botFiltering": false, "accountId": "16737760170", "events": [{"experimentIds": [], "id": "17911811441", "key": "hydro_click.dashboard.teacher_toolbox_cta"}, {"experimentIds": [], "id": "18124116703", "key": "submit.organizations.complete_sign_up"}, {"experimentIds": [], "id": "18145892387", "key": "no_metric.tracked_outside_of_optimizely"}, {"experimentIds": [], "id": "18178755568", "key": "click.org_onboarding_checklist.add_repo"}, {"experimentIds": [], "id": "18180553241", "key": "submit.repository_imports.create"}, {"experimentIds": [], "id": "18186103728", "key": "click.help.learn_more_about_repository_creation"}, {"experimentIds": [], "id": "18188530140", "key": "test_event"}, {"experimentIds": [], "id": "18191963644", "key": "click.empty_org_repo_cta.transfer_repository"}, {"experimentIds": [], "id": "18195612788", "key": "click.empty_org_repo_cta.import_repository"}, {"experimentIds": [], "id": "18210945499", "key": "click.org_onboarding_checklist.invite_members"}, {"experimentIds": [], "id": "18211063248", "key": "click.empty_org_repo_cta.create_repository"}, {"experimentIds": [], "id": "18215721889", "key": "click.org_onboarding_checklist.update_profile"}, {"experimentIds": [], "id": "18224360785", "key": "click.org_onboarding_checklist.dismiss"}, {"experimentIds": [], "id": "18234832286", "key": "submit.organization_activation.complete"}, {"experimentIds": [], "id": "18252392383", "key": "submit.org_repository.create"}, {"experimentIds": [], "id": "18257551537", "key": "submit.org_member_invitation.create"}, {"experimentIds": [], "id": "18259522260", "key": "submit.organization_profile.update"}, {"experimentIds": [], "id": "18564603625", "key": "view.classroom_select_organization"}, {"experimentIds": [], "id": "18568612016", "key": "click.classroom_sign_in_click"}, {"experimentIds": [], "id": "18572592540", "key": "view.classroom_name"}, {"experimentIds": [], "id": "18574203855", "key": "click.classroom_create_organization"}, {"experimentIds": [], "id": "18582053415", "key": "click.classroom_select_organization"}, {"experimentIds": [], "id": "18589463420", "key": "click.classroom_create_classroom"}, {"experimentIds": [], "id": "18591323364", "key": "click.classroom_create_first_classroom"}, {"experimentIds": [], "id": "18591652321", "key": "click.classroom_grant_access"}, {"experimentIds": [], "id": "18607131425", "key": "view.classroom_creation"}, {"experimentIds": [], "id": "18831680583", "key": "upgrade_account_plan"}, {"experimentIds": [], "id": "19064064515", "key": "click.signup"}, {"experimentIds": [], "id": "19075373687", "key": "click.view_account_billing_page"}, {"experimentIds": [], "id": "19077355841", "key": "click.dismiss_signup_prompt"}, {"experimentIds": [], "id": "19079713938", "key": "click.contact_sales"}, {"experimentIds": [], "id": "19120963070", "key": "click.compare_account_plans"}, {"experimentIds": [], "id": "19151690317", "key": "click.upgrade_account_cta"}, {"experimentIds": [], "id": "19424193129", "key": "click.open_account_switcher"}, {"experimentIds": [], "id": "19520330825", "key": "click.visit_account_profile"}, {"experimentIds": [], "id": "19540970635", "key": "click.switch_account_context"}, {"experimentIds": [], "id": "19730198868", "key": "submit.homepage_signup"}, {"experimentIds": [], "id": "19820830627", "key": "click.homepage_signup"}, {"experimentIds": [], "id": "19988571001", "key": "click.create_enterprise_trial"}, {"experimentIds": [], "id": "20036538294", "key": "click.create_organization_team"}, {"experimentIds": [], "id": "20040653299", "key": "click.input_enterprise_trial_form"}, {"experimentIds": [], "id": "20062030003", "key": "click.continue_with_team"}, {"experimentIds": [], "id": "20068947153", "key": "click.create_organization_free"}, {"experimentIds": [], "id": "20086636658", "key": "click.signup_continue.username"}, {"experimentIds": [], "id": "20091648988", "key": "click.signup_continue.create_account"}, {"experimentIds": [], "id": "20103637615", "key": "click.signup_continue.email"}, {"experimentIds": [], "id": "20111574253", "key": "click.signup_continue.password"}, {"experimentIds": [], "id": "20120044111", "key": "view.pricing_page"}, {"experimentIds": [], "id": "20152062109", "key": "submit.create_account"}, {"experimentIds": [], "id": "20165800992", "key": "submit.upgrade_payment_form"}, {"experimentIds": [], "id": "20171520319", "key": "submit.create_organization"}, {"experimentIds": [], "id": "20222645674", "key": "click.recommended_plan_in_signup.discuss_your_needs"}, {"experimentIds": [], "id": "20227443657", "key": "submit.verify_primary_user_email"}, {"experimentIds": [], "id": "20234607160", "key": "click.recommended_plan_in_signup.try_enterprise"}, {"experimentIds": [], "id": "20238175784", "key": "click.recommended_plan_in_signup.team"}, {"experimentIds": [], "id": "20239847212", "key": "click.recommended_plan_in_signup.continue_free"}, {"experimentIds": [], "id": "20251097193", "key": "recommended_plan"}, {"experimentIds": [], "id": "20438619534", "key": "click.pricing_calculator.1_member"}, {"experimentIds": [], "id": "20456699683", "key": "click.pricing_calculator.15_members"}, {"experimentIds": [], "id": "20467868331", "key": "click.pricing_calculator.10_members"}, {"experimentIds": [], "id": "20476267432", "key": "click.trial_days_remaining"}, {"experimentIds": [], "id": "20476357660", "key": "click.discover_feature"}, {"experimentIds": [], "id": "20479287901", "key": "click.pricing_calculator.custom_members"}, {"experimentIds": [], "id": "20481107083", "key": "click.recommended_plan_in_signup.apply_teacher_benefits"}, {"experimentIds": [], "id": "20483089392", "key": "click.pricing_calculator.5_members"}, {"experimentIds": [], "id": "20484283944", "key": "click.onboarding_task"}, {"experimentIds": [], "id": "20484996281", "key": "click.recommended_plan_in_signup.apply_student_benefits"}, {"experimentIds": [], "id": "20486713726", "key": "click.onboarding_task_breadcrumb"}, {"experimentIds": [], "id": "20490791319", "key": "click.upgrade_to_enterprise"}, {"experimentIds": [], "id": "20491786766", "key": "click.talk_to_us"}, {"experimentIds": [], "id": "20494144087", "key": "click.dismiss_enterprise_trial"}, {"experimentIds": [], "id": "20499722759", "key": "completed_all_tasks"}, {"experimentIds": [], "id": "20500710104", "key": "completed_onboarding_tasks"}, {"experimentIds": [], "id": "20513160672", "key": "click.read_doc"}, {"experimentIds": [], "id": "20516196762", "key": "actions_enabled"}, {"experimentIds": [], "id": "20518980986", "key": "click.dismiss_trial_banner"}, {"experimentIds": [], "id": "20535446721", "key": "click.issue_actions_prompt.dismiss_prompt"}, {"experimentIds": [], "id": "20557002247", "key": "click.issue_actions_prompt.setup_workflow"}, {"experimentIds": [], "id": "20595070227", "key": "click.pull_request_setup_workflow"}, {"experimentIds": [], "id": "20626600314", "key": "click.seats_input"}, {"experimentIds": [], "id": "20642310305", "key": "click.decrease_seats_number"}, {"experimentIds": [], "id": "20662990045", "key": "click.increase_seats_number"}, {"experimentIds": [], "id": "20679620969", "key": "click.public_product_roadmap"}, {"experimentIds": [], "id": "20761240940", "key": "click.dismiss_survey_banner"}, {"experimentIds": [], "id": "20767210721", "key": "click.take_survey"}, {"experimentIds": [], "id": "20795281201", "key": "click.archive_list"}, {"experimentIds": [], "id": "20966790249", "key": "contact_sales.submit"}, {"experimentIds": [], "id": "20996500333", "key": "contact_sales.existing_customer"}, {"experimentIds": [], "id": "20996890162", "key": "contact_sales.blank_message_field"}, {"experimentIds": [], "id": "21000470317", "key": "contact_sales.personal_email"}, {"experimentIds": [], "id": "21002790172", "key": "contact_sales.blank_phone_field"}, {"experimentIds": [], "id": "21354412592", "key": "click.dismiss_create_readme"}, {"experimentIds": [], "id": "21366102546", "key": "click.dismiss_zero_user_content"}, {"experimentIds": [], "id": "21370252505", "key": "account_did_downgrade"}, {"experimentIds": [], "id": "21370840408", "key": "click.cta_create_readme"}, {"experimentIds": [], "id": "21375451068", "key": "click.cta_create_new_repository"}, {"experimentIds": [], "id": "21385390948", "key": "click.zero_user_content"}, {"experimentIds": [], "id": "21467712175", "key": "click.downgrade_keep"}, {"experimentIds": [], "id": "21484112202", "key": "click.downgrade"}, {"experimentIds": [], "id": "21495292213", "key": "click.downgrade_survey_exit"}, {"experimentIds": [], "id": "21508241468", "key": "click.downgrade_survey_submit"}, {"experimentIds": [], "id": "21512030356", "key": "click.downgrade_support"}, {"experimentIds": [], "id": "21539090022", "key": "click.downgrade_exit"}, {"experimentIds": [], "id": "21543640644", "key": "click_fetch_upstream"}, {"experimentIds": [], "id": "21646510300", "key": "click.move_your_work"}, {"experimentIds": [], "id": "21656151116", "key": "click.add_branch_protection_rule"}, {"experimentIds": [], "id": "21663860599", "key": "click.downgrade_dialog_open"}, {"experimentIds": [], "id": "21687860483", "key": "click.learn_about_protected_branches"}, {"experimentIds": [], "id": "21689050333", "key": "click.dismiss_protect_this_branch"}, {"experimentIds": [], "id": "21864370109", "key": "click.sign_in"}], "revision": "1367"}" /> + + + <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-b59a0e362e81.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_manuelpuyol_turbo_dist_turbo_es2017-esm_js-7ca92c8d513d.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_stacktrace-parser_dist_stack-trace-parser_esm_js-node_modules_github_bro-d351f6-c1d63d230b29.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-4b8bfb4aa754.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_selector-observer_dist_index_esm_js-650337916dbd.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_details-dialog-elemen-63debe-4a2f37f7419e.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-6afc16-fa4f01d20b81.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_fzy_js_index_js-node_modules_github_markdown-toolbar-element_dist_index_js-5936f45973f5.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_time-elements_dist_index_js-74b4ec51ce20.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_text-ex-3415a8-daf4603c6e6b.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-45d711-b0ab6a967ae1.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-e7701ef9a8c3.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-866f36727ef8.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-e954e8c01c93.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_remote-form_dist_-ece2b0-917c0dad4566.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_dimensions_js-node_modules_github_hydro-analyt-fed224-54236d9d6de1.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_alive-client_dist_index_js-156187f13fbb.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_paste-mark-c3e01c-82f4760ef552.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_updatable-content_ts-62df1309213c.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-5035229a4e5d.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_keyboard-shortcuts-helper_ts-app_assets_modules_github_be-ac2ea2-e5885e2381d2.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_batch-deferred-content_ts-app_assets_modules_github_behav-dc1370-6456e197635f.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-02b38260d85d.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-362d7c554824.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-06ff533-60844731e2b9.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-e71e7f99b10d.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_optimizely_optimizely-sdk_dist_optimizely_browser_es_min_js-node_modules-4de5ed-a1d36fafc3a7.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/optimizely-beee345dedab.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_virtualized-list_es_index_js-node_modules_github_template-parts_lib_index_js-17ccfc4926a4.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_mini-throt-bb75aa-97625d2d4f26.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_mini-th-699a01-5abf39efc269.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_ref-selector_ts-23a59aa1d1c9.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repositories-41124485c7c9.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_clipboard-copy-element_dist_index_esm_js-node_modules_github_remo-8e6bec-4a54aa10cc28.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_scroll-anchoring_di-e71893-60cf13769d05.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_diffs_blob-lines_ts-app_assets_modules_github_diffs_linkable-line-n-dca161-ceb6301d2ba3.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/diffs-96fffae01eaa.js"></script> + + + <title>bodeplot/bodeplot.dtx at main · rlkamalapurkar/bodeplot</title> + + + + + + <meta name="request-id" content="463F:7A0B:59FCB9D:857966A:635E0EB1" data-turbo-transient="true" /><meta name="html-safe-nonce" content="933697d380b0a314f0c8c2db1c8bb934f54a74a795aa0670561ae936cec19b01" data-turbo-transient="true" /><meta name="visitor-payload" content="eyJyZWZlcnJlciI6Imh0dHBzOi8vZ2l0aHViLmNvbS9ybGthbWFsYXB1cmthci9ib2RlcGxvdCIsInJlcXVlc3RfaWQiOiI0NjNGOjdBMEI6NTlGQ0I5RDo4NTc5NjZBOjYzNUUwRUIxIiwidmlzaXRvcl9pZCI6IjcxOTA1ODcwNzY5NzgwMjIyMzciLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ==" data-turbo-transient="true" /><meta name="visitor-hmac" content="47cb1fa8149c35fb9e132162c9bafb4ecccde981b7c23b8eb4cfdb39e7f8229d" data-turbo-transient="true" /> + + <meta name="hovercard-subject-tag" content="repository:418699104" data-turbo-transient> + + + <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree" data-turbo-transient="true" /> + + + <meta name="selected-link" value="repo_source" data-turbo-transient> + + <meta name="google-site-verification" content="c1kuD-K2HIVF635lypcsWPoD4kilo5-jA_wBFyT4uMY"> + <meta name="google-site-verification" content="KT5gs8h0wvaagLKAVWq8bbeNwnZZK1r1XQysX3xurLU"> + <meta name="google-site-verification" content="ZzhVyEFwb7w3e0-uOTltm8Jsck2F5StVihD0exw2fsA"> + <meta name="google-site-verification" content="GXs5KoUUkNCoaAZn7wPN-t01Pywp9M3sEjnt_3_ZWPc"> + <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I"> + +<meta name="octolytics-url" content="https://collector.github.com/github/collect" /><meta name="octolytics-actor-id" content="30264720" /><meta name="octolytics-actor-login" content="rlkamalapurkar" /><meta name="octolytics-actor-hash" content="3cce62c367e83c02faf0c427366d604b6f38f73f7a6d187b1727d291ebe3b1d6" /> + + <meta name="analytics-location" content="/<user-name>/<repo-name>/blob/show" data-turbo-transient="true" /> + + + + + + + + + <meta name="user-login" content="rlkamalapurkar"> + + <link rel="sudo-modal" href="/sessions/sudo_modal"> + + <meta name="viewport" content="width=device-width"> + + <meta name="description" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub."> + <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> + <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> + <meta property="fb:app_id" content="1401488693436528"> + <meta name="apple-itunes-app" content="app-id=1477376905" /> + <meta name="twitter:image:src" content="https://opengraph.githubassets.com/75d13310abaea2c3a6b08281cd0dc89cb30b997fb8ca3fd9cfec936cb36a8649/rlkamalapurkar/bodeplot" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="bodeplot/bodeplot.dtx at main · rlkamalapurkar/bodeplot" /><meta name="twitter:description" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub." /> + <meta property="og:image" content="https://opengraph.githubassets.com/75d13310abaea2c3a6b08281cd0dc89cb30b997fb8ca3fd9cfec936cb36a8649/rlkamalapurkar/bodeplot" /><meta property="og:image:alt" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub." /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="bodeplot/bodeplot.dtx at main · rlkamalapurkar/bodeplot" /><meta property="og:url" content="https://github.com/rlkamalapurkar/bodeplot" /><meta property="og:description" content="LaTeX package to plot Bode diagrams. Contribute to rlkamalapurkar/bodeplot development by creating an account on GitHub." /> + + <link rel="assets" href="https://github.githubassets.com/"> + <link rel="shared-web-socket" href="wss://alive.github.com/_sockets/u/30264720/ws?session=eyJ2IjoiVjMiLCJ1IjozMDI2NDcyMCwicyI6OTgyMjY4Njg5LCJjIjoxNjcyMTU4NzA0LCJ0IjoxNjY3MTA4NTUyfQ==--f8c1cf5fe10e5974f7f31513a3a5219d593f046edf3ac25ca3f04453c9980364" data-refresh-url="/_alive" data-session-id="fb8691b3307882b02af8fc5d6f24656c8a25319007c2330370f80ba9a25465ab"> + <link rel="shared-web-socket-src" href="/assets-cdn/worker/socket-worker-b87581f5816c.js"> + + + <meta name="hostname" content="github.com"> + + + <meta name="keyboard-shortcuts-preference" content="all"> + <script type="application/json" id="memex_keyboard_shortcuts_preference">"all"</script> + + <meta name="expected-hostname" content="github.com"> + + <meta name="enabled-features" content="ACTIONS_RUN_NAME,IMAGE_METRIC_TRACKING,GEOJSON_AZURE_MAPS,STRICT_DEFERRED_DIFF_LINES_CHECKS"> + + + <meta http-equiv="x-pjax-version" content="56d9d73658be7d98108b9c9ab739f0ae1ee3bca4f394e843ca812a557dd9f356" data-turbo-track="reload"> + <meta http-equiv="x-pjax-csp-version" content="196a13434ccf3e32885dfa5574a2cfb5e2e8e4987d0b1b46aa95067a394485c1" data-turbo-track="reload"> + <meta http-equiv="x-pjax-css-version" content="38ca272926597b58c4df943237eec5e109768b1182e12017c8041d0104e24596" data-turbo-track="reload"> + <meta http-equiv="x-pjax-js-version" content="973193c59b7fdfa00b79e99c79606fcda8afd73b3a100b55c0fb6ef8d8dab2da" data-turbo-track="reload"> + + <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> + + <meta data-hydrostats="publish"> + + <meta name="go-import" content="github.com/rlkamalapurkar/bodeplot git https://github.com/rlkamalapurkar/bodeplot.git"> + + <meta name="octolytics-dimension-user_id" content="30264720" /><meta name="octolytics-dimension-user_login" content="rlkamalapurkar" /><meta name="octolytics-dimension-repository_id" content="418699104" /><meta name="octolytics-dimension-repository_nwo" content="rlkamalapurkar/bodeplot" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="418699104" /><meta name="octolytics-dimension-repository_network_root_nwo" content="rlkamalapurkar/bodeplot" /> + + + + <link rel="canonical" href="https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx" data-turbo-transient> + <meta name="turbo-body-classes" content="logged-in env-production page-responsive page-blob"> + + + <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> + + <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> + + <meta name="browser-optimizely-client-errors-url" content="https://api.github.com/_private/browser/optimizely_client/errors"> + + <link rel="mask-icon" href="https://github.githubassets.com/pinned-octocat.svg" color="#000000"> + <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png"> + <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg"> + +<meta name="theme-color" content="#1e2327"> +<meta name="color-scheme" content="light dark" /> + + + <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> + + </head> + + <body class="logged-in env-production page-responsive page-blob" style="word-wrap: break-word;"> + + + <div class="position-relative js-header-wrapper "> + <a href="#start-of-content" class="p-3 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a> + <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full"> + <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> +</span> + + + + <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_github_command-pale-51fe14-9a1b633e9244.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_clipboard-copy-element_dist_index_esm_js-node_modules_delegated-e-976da2-e22766eedf00.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_command-palette_items_help-item_ts-app_assets_modules_github_comman-48ad9d-300540e938f3.js"></script> +<script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/command-palette-7174ee8c0061.js"></script> + + <header class="Header js-details-container Details px-3 px-md-4 px-lg-5 flex-wrap flex-md-nowrap" role="banner"> + + <div class="Header-item mt-n1 mb-n1 d-none d-md-flex"> + <a + class="Header-link" + href="https://github.com/" + data-hotkey="g d" + aria-label="Homepage " + data-turbo="false" + data-analytics-event="{"category":"Header","action":"go to dashboard","label":"icon:logo"}" +> + <svg height="32" aria-hidden="true" viewBox="0 0 16 16" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github v-align-middle"> + <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path> +</svg> +</a> + + </div> + + <div class="Header-item d-md-none"> + <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="Header-link js-details-target btn-link"> <svg aria-hidden="true" height="24" viewBox="0 0 16 16" version="1.1" width="24" data-view-component="true" class="octicon octicon-three-bars"> + <path fill-rule="evenodd" d="M1 2.75A.75.75 0 011.75 2h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 2.75zm0 5A.75.75 0 011.75 7h12.5a.75.75 0 110 1.5H1.75A.75.75 0 011 7.75zM1.75 12a.75.75 0 100 1.5h12.5a.75.75 0 100-1.5H1.75z"></path> +</svg> +</button> </div> + + <div class="Header-item Header-item--full flex-column flex-md-row width-full flex-order-2 flex-md-order-none mr-0 mt-3 mt-md-0 Details-content--hidden-not-important d-md-flex"> + + + + +<div class="header-search flex-auto position-relative js-site-search flex-self-stretch flex-md-self-auto mb-3 mb-md-0 mr-0 mr-md-3 scoped-search site-scoped-search js-jump-to" +> + <div class="position-relative"> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-site-search-form" role="search" aria-label="Site" data-scope-type="Repository" data-scope-id="418699104" data-scoped-search-url="/rlkamalapurkar/bodeplot/search" data-owner-scoped-search-url="/users/rlkamalapurkar/search" data-unscoped-search-url="/search" data-turbo="false" action="/rlkamalapurkar/bodeplot/search" accept-charset="UTF-8" method="get"> + <label class="form-control header-search-wrapper input-sm p-0 js-chromeless-input-container header-search-wrapper-jump-to position-relative d-flex flex-justify-between flex-items-center"> + <input type="text" + class="form-control js-site-search-focus header-search-input jump-to-field js-jump-to-field js-site-search-field is-clearable" + data-hotkey=s,/ + name="q" + data-test-selector="nav-search-input" + placeholder="Search or jump to…" + data-unscoped-placeholder="Search or jump to…" + data-scoped-placeholder="Search or jump to…" + autocapitalize="off" + role="combobox" + aria-haspopup="listbox" + aria-expanded="false" + aria-autocomplete="list" + aria-controls="jump-to-results" + aria-label="Search or jump to…" + data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" + spellcheck="false" + autocomplete="off" + > + <input type="hidden" value="Q_HsAvjiOju5gOxmvcjCEz9eGVhvpxox0K9yTlMez3NWxjEO6DO0jYku8_NAQqftkp07GuIkLCqkKHGYas1e9Q" data-csrf="true" class="js-data-jump-to-suggestions-path-csrf" /> + <input type="hidden" class="js-site-search-type-field" name="type" > + <svg xmlns="http://www.w3.org/2000/svg" width="22" height="20" aria-hidden="true" class="mr-1 header-search-key-slash"><path fill="none" stroke="#979A9C" opacity=".4" d="M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z"></path><path fill="#979A9C" d="M11.8 6L8 15.1h-.9L10.8 6h1z"></path></svg> + + + <div class="Box position-absolute overflow-hidden d-none jump-to-suggestions js-jump-to-suggestions-container"> + +<ul class="d-none js-jump-to-suggestions-template-container"> + + +<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-suggestion" role="option"> + <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="suggestion"> + <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none"> + <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0"> + <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path> +</svg> + <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0"> + <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path> +</svg> + <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0"> + <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path> +</svg> + </div> + + <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28"> + + <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target"> + </div> + + <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search"> + <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository"> + In this repository + </span> + <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub"> + All GitHub + </span> + <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + + <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump"> + Jump to + <span class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + </a> +</li> + +</ul> + +<ul class="d-none js-jump-to-no-results-template-container"> + <li class="d-flex flex-justify-center flex-items-center f5 d-none js-jump-to-suggestion p-2"> + <span class="color-fg-muted">No suggested jump to results</span> + </li> +</ul> + +<ul id="jump-to-results" role="listbox" class="p-0 m-0 js-navigation-container jump-to-suggestions-results-container js-jump-to-suggestions-results-container"> + + +<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-scoped-search d-none" role="option"> + <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="scoped_search"> + <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none"> + <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0"> + <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path> +</svg> + <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0"> + <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path> +</svg> + <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0"> + <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path> +</svg> + </div> + + <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28"> + + <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target"> + </div> + + <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search"> + <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository"> + In this repository + </span> + <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub"> + All GitHub + </span> + <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + + <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump"> + Jump to + <span class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + </a> +</li> + + + +<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-owner-scoped-search d-none" role="option"> + <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="owner_scoped_search"> + <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none"> + <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0"> + <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path> +</svg> + <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0"> + <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path> +</svg> + <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0"> + <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path> +</svg> + </div> + + <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28"> + + <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target"> + </div> + + <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search"> + <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this user"> + In this user + </span> + <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub"> + All GitHub + </span> + <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + + <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump"> + Jump to + <span class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + </a> +</li> + + + +<li class="d-flex flex-justify-start flex-items-center p-0 f5 navigation-item js-navigation-item js-jump-to-global-search d-none" role="option"> + <a tabindex="-1" class="no-underline d-flex flex-auto flex-items-center jump-to-suggestions-path js-jump-to-suggestion-path js-navigation-open p-2" href="" data-item-type="global_search"> + <div class="jump-to-octicon js-jump-to-octicon flex-shrink-0 mr-2 text-center d-none"> + <svg title="Repository" aria-label="Repository" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo js-jump-to-octicon-repo d-none flex-shrink-0"> + <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path> +</svg> + <svg title="Project" aria-label="Project" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project js-jump-to-octicon-project d-none flex-shrink-0"> + <path fill-rule="evenodd" d="M1.75 0A1.75 1.75 0 000 1.75v12.5C0 15.216.784 16 1.75 16h12.5A1.75 1.75 0 0016 14.25V1.75A1.75 1.75 0 0014.25 0H1.75zM1.5 1.75a.25.25 0 01.25-.25h12.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25H1.75a.25.25 0 01-.25-.25V1.75zM11.75 3a.75.75 0 00-.75.75v7.5a.75.75 0 001.5 0v-7.5a.75.75 0 00-.75-.75zm-8.25.75a.75.75 0 011.5 0v5.5a.75.75 0 01-1.5 0v-5.5zM8 3a.75.75 0 00-.75.75v3.5a.75.75 0 001.5 0v-3.5A.75.75 0 008 3z"></path> +</svg> + <svg title="Search" aria-label="Search" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search js-jump-to-octicon-search d-none flex-shrink-0"> + <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path> +</svg> + </div> + + <img class="avatar mr-2 flex-shrink-0 js-jump-to-suggestion-avatar d-none" alt="" aria-label="Team" src="" width="28" height="28"> + + <div class="jump-to-suggestion-name js-jump-to-suggestion-name flex-auto overflow-hidden text-left no-wrap css-truncate css-truncate-target"> + </div> + + <div class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none js-jump-to-badge-search"> + <span class="js-jump-to-badge-search-text-default d-none" aria-label="in this repository"> + In this repository + </span> + <span class="js-jump-to-badge-search-text-global d-none" aria-label="in all of GitHub"> + All GitHub + </span> + <span aria-hidden="true" class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + + <div aria-hidden="true" class="border rounded-2 flex-shrink-0 color-bg-subtle px-1 color-fg-muted ml-1 f6 d-none d-on-nav-focus js-jump-to-badge-jump"> + Jump to + <span class="d-inline-block ml-1 v-align-middle">↵</span> + </div> + </a> +</li> + + + <li class="d-flex flex-justify-center flex-items-center p-0 f5 js-jump-to-suggestion"> + <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="m-3 anim-rotate"> + <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" /> + <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> +</svg> + </li> +</ul> + + </div> + </label> +</form> </div> +</div> + + <nav id="global-nav" class="d-flex flex-column flex-md-row flex-self-stretch flex-md-self-auto" aria-label="Global"> + <a class="Header-link py-md-3 d-block d-md-none py-2 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:dashboard:user" aria-label="Dashboard" data-turbo="false" href="/dashboard">Dashboard</a> + + <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-hotkey="g p" data-ga-click="Header, click, Nav menu - item:pulls context:user" aria-label="Pull requests you created" data-turbo="false" data-selected-links="/pulls /pulls/assigned /pulls/mentioned /pulls" href="/pulls"> + Pull<span class="d-inline d-md-none d-lg-inline"> request</span>s +</a> + <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-hotkey="g i" data-ga-click="Header, click, Nav menu - item:issues context:user" aria-label="Issues you created" data-turbo="false" data-selected-links="/issues /issues/assigned /issues/mentioned /issues" href="/issues">Issues</a> + + <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade d-md-none" data-ga-click="Header, click, Nav menu - item:workspaces context:user" data-turbo="false" data-selected-links="/codespaces /codespaces" href="/codespaces">Codespaces</a> + + <div class="d-flex position-relative"> + <a class="js-selected-navigation-item Header-link flex-auto mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:marketplace context:user" data-octo-click="marketplace_click" data-octo-dimensions="location:nav_bar" data-turbo="false" data-selected-links=" /marketplace" href="/marketplace">Marketplace</a> + </div> + + <a class="js-selected-navigation-item Header-link mt-md-n3 mb-md-n3 py-2 py-md-3 mr-0 mr-md-3 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:explore" data-turbo="false" data-selected-links="/explore /trending /trending/developers /integrations /integrations/feature/code /integrations/feature/collaborate /integrations/feature/ship showcases showcases_search showcases_landing /explore" href="/explore">Explore</a> + + <a class="js-selected-navigation-item Header-link d-block d-md-none py-2 py-md-3 border-top border-md-top-0 border-white-fade" data-ga-click="Header, click, Nav menu - item:Sponsors" data-hydro-click="{"event_type":"sponsors.button_click","payload":{"button":"HEADER_SPONSORS_DASHBOARD","sponsorable_login":"rlkamalapurkar","originating_url":"https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx","user_id":30264720}}" data-hydro-click-hmac="d30bfbb34ef6fa7dd7465b704b895b99860f2ab781d3caecba66e46261216335" data-turbo="false" data-selected-links=" /sponsors/accounts" href="/sponsors/accounts">Sponsors</a> + + <a class="Header-link d-block d-md-none mr-0 mr-md-3 py-2 py-md-3 border-top border-md-top-0 border-white-fade" data-turbo="false" href="/settings/profile">Settings</a> + + <a class="Header-link d-block d-md-none mr-0 mr-md-3 py-2 py-md-3 border-top border-md-top-0 border-white-fade" data-turbo="false" href="/rlkamalapurkar"> + <img class="avatar avatar-user" loading="lazy" decoding="async" src="https://avatars.githubusercontent.com/u/30264720?s=40&v=4" width="20" height="20" alt="@rlkamalapurkar" /> + rlkamalapurkar +</a> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/logout" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="mIxgGAatepzZ5HEXoEUwFwD03aNq7tE9PTvx-dFHSBXcY2gNr1fd-7YpG6QHRpUX1FiSQ8iAZG3_qrGk_PUbSQ" /> + <button + type="submit" + class="Header-link mr-0 mr-md-3 py-2 py-md-3 border-top border-md-top-0 border-white-fade d-md-none btn-link d-block width-full text-left" + style="padding-left: 2px;" + data-analytics-event="{"category":"Header","action":"sign out","label":"icon:logout"}" + > + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-sign-out v-align-middle"> + <path fill-rule="evenodd" d="M2 2.75C2 1.784 2.784 1 3.75 1h2.5a.75.75 0 010 1.5h-2.5a.25.25 0 00-.25.25v10.5c0 .138.112.25.25.25h2.5a.75.75 0 010 1.5h-2.5A1.75 1.75 0 012 13.25V2.75zm10.44 4.5H6.75a.75.75 0 000 1.5h5.69l-1.97 1.97a.75.75 0 101.06 1.06l3.25-3.25a.75.75 0 000-1.06l-3.25-3.25a.75.75 0 10-1.06 1.06l1.97 1.97z"></path> +</svg> + Sign out + </button> +</form></nav> + + </div> + + <div class="Header-item Header-item--full flex-justify-center d-md-none position-relative"> + <a + class="Header-link" + href="https://github.com/" + data-hotkey="g d" + aria-label="Homepage " + data-turbo="false" + data-analytics-event="{"category":"Header","action":"go to dashboard","label":"icon:logo"}" +> + <svg height="32" aria-hidden="true" viewBox="0 0 16 16" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github v-align-middle"> + <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path> +</svg> +</a> + + </div> + + <div class="Header-item mr-0 mr-md-3 flex-order-1 flex-md-order-none"> + + +<notification-indicator data-channel="eyJjIjoibm90aWZpY2F0aW9uLWNoYW5nZWQ6MzAyNjQ3MjAiLCJ0IjoxNjY3MTA4NTUyfQ==--e8a72a119a537521c17451f4169941629670279627843583e1938df8e56a253d" data-indicator-mode="none" data-tooltip-global="You have unread notifications" data-tooltip-unavailable="Notifications are unavailable at the moment." data-tooltip-none="You have no unread notifications" data-view-component="true" class="js-socket-channel"> + <a id="AppHeader-notifications-button" href="/notifications" + class="Header-link notification-indicator position-relative tooltipped tooltipped-sw" + + + + data-hotkey="g n" + data-target="notification-indicator.link" + aria-label="Notifications" + + data-analytics-event="{"category":"Header","action":"go to notifications","label":"icon:read"}" + > + + <span + data-target="notification-indicator.badge" + class="mail-status unread" hidden> + </span> + + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell"> + <path d="M8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path><path fill-rule="evenodd" d="M8 1.5A3.5 3.5 0 004.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01l.001.006c0 .002.002.004.004.006a.017.017 0 00.006.004l.007.001h10.964l.007-.001a.016.016 0 00.006-.004.016.016 0 00.004-.006l.001-.007a.017.017 0 00-.003-.01l-1.703-2.554a1.75 1.75 0 01-.294-.97V5A3.5 3.5 0 008 1.5zM3 5a5 5 0 0110 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.518 1.518 0 0113.482 13H2.518a1.518 1.518 0 01-1.263-2.36l1.703-2.554A.25.25 0 003 7.947V5z"></path> +</svg> + </a> + +</notification-indicator> + </div> + + + <div class="Header-item position-relative d-none d-md-flex"> + <details class="details-overlay details-reset"> + <summary + class="Header-link" + aria-label="Create new…" + data-analytics-event="{"category":"Header","action":"create new","label":"icon:add"}" + > + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus"> + <path fill-rule="evenodd" d="M7.75 2a.75.75 0 01.75.75V7h4.25a.75.75 0 110 1.5H8.5v4.25a.75.75 0 11-1.5 0V8.5H2.75a.75.75 0 010-1.5H7V2.75A.75.75 0 017.75 2z"></path> +</svg> <span class="dropdown-caret"></span> + </summary> + <details-menu class="dropdown-menu dropdown-menu-sw"> + +<a role="menuitem" class="dropdown-item" href="/new" data-ga-click="Header, create new repository"> + New repository +</a> + + <a role="menuitem" class="dropdown-item" href="/new/import" data-ga-click="Header, import a repository"> + Import repository + </a> + + +<a role="menuitem" class="dropdown-item" href="https://gist.github.com/" data-ga-click="Header, create new gist"> + New gist +</a> + + <a role="menuitem" class="dropdown-item" href="/organizations/new" data-ga-click="Header, create new organization"> + New organization + </a> + + + + </details-menu> +</details> + + </div> + + <div class="Header-item position-relative mr-0 d-none d-md-flex"> + + <details class="details-overlay details-reset js-feature-preview-indicator-container" data-feature-preview-indicator-src="/users/rlkamalapurkar/feature_preview/indicator_check"> + + <summary + class="Header-link" + aria-label="View profile and more" + data-analytics-event="{"category":"Header","action":"show menu","label":"icon:avatar"}" + > + <img src="https://avatars.githubusercontent.com/u/30264720?s=40&v=4" alt="@rlkamalapurkar" size="20" height="20" width="20" data-view-component="true" class="avatar avatar-small circle" /> + <span class="unread-indicator js-feature-preview-indicator" style="top: 1px;" hidden></span> + <span class="dropdown-caret"></span> + </summary> + <details-menu + class="dropdown-menu dropdown-menu-sw" + style="width: 180px" + + preload> + <include-fragment src="/users/30264720/menu" loading="lazy"> + <p class="text-center mt-3" data-hide-on-error> + <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate"> + <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" /> + <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> +</svg> + </p> + <p class="ml-1 mb-2 mt-2 color-fg-default" data-show-on-error> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> + <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path> +</svg> + Sorry, something went wrong. + </p> + </include-fragment> + </details-menu> +</details> + + </div> +</header> + + + </div> + + <div id="start-of-content" class="show-on-focus"></div> + + + + + + + + <div id="js-flash-container" data-turbo-replace> + + + + + <template class="js-flash-template"> + +<div class="flash flash-full {{ className }}"> + <div class="px-2" > + <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> + <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path> +</svg> + </button> + <div aria-atomic="true" role="alert" class="js-flash-alert"> + + <div>{{ message }}</div> + + </div> + </div> +</div> + </template> +</div> + + + + <include-fragment class="js-notification-shelf-include-fragment" data-base-src="https://github.com/notifications/beta/shelf"></include-fragment> + + + + + + <details + class="details-reset details-overlay details-overlay-dark js-command-palette-dialog" + id="command-palette-pjax-container" + data-turbo-replace +> + <summary aria-label="command palette trigger"> + </summary> + <details-dialog class="command-palette-details-dialog d-flex flex-column flex-justify-center height-fit" aria-label="command palette"> + <command-palette + class="command-palette color-bg-default rounded-3 border color-shadow-small" + return-to=/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx + user-id="30264720" + activation-hotkey="Mod+k,Mod+Alt+k" + command-mode-hotkey="Mod+Shift+k" + data-action=" + command-palette-input-ready:command-palette#inputReady + command-palette-page-stack-updated:command-palette#updateInputScope + itemsUpdated:command-palette#itemsUpdated + keydown:command-palette#onKeydown + loadingStateChanged:command-palette#loadingStateChanged + selectedItemChanged:command-palette#selectedItemChanged + pageFetchError:command-palette#pageFetchError + "> + + <command-palette-mode + data-char="#" + data-scope-types="[""]" + data-placeholder="Search issues and pull requests" + ></command-palette-mode> + <command-palette-mode + data-char="#" + data-scope-types="["owner","repository"]" + data-placeholder="Search issues, pull requests, discussions, and projects" + ></command-palette-mode> + <command-palette-mode + data-char="!" + data-scope-types="["owner","repository"]" + data-placeholder="Search projects" + ></command-palette-mode> + <command-palette-mode + data-char="@" + data-scope-types="[""]" + data-placeholder="Search or jump to a user, organization, or repository" + ></command-palette-mode> + <command-palette-mode + data-char="@" + data-scope-types="["owner"]" + data-placeholder="Search or jump to a repository" + ></command-palette-mode> + <command-palette-mode + data-char="/" + data-scope-types="["repository"]" + data-placeholder="Search files" + ></command-palette-mode> + <command-palette-mode + data-char="?" + ></command-palette-mode> + <command-palette-mode + data-char=">" + data-placeholder="Run a command" + ></command-palette-mode> + <command-palette-mode + data-char="" + data-scope-types="[""]" + data-placeholder="Search or jump to..." + ></command-palette-mode> + <command-palette-mode + data-char="" + data-scope-types="["owner"]" + data-placeholder="Search or jump to..." + ></command-palette-mode> + <command-palette-mode + class="js-command-palette-default-mode" + data-char="" + data-placeholder="Search or jump to..." + ></command-palette-mode> + + <command-palette-input placeholder="Search or jump to..." + + data-action=" + command-palette-input:command-palette#onInput + command-palette-select:command-palette#onSelect + command-palette-descope:command-palette#onDescope + command-palette-cleared:command-palette#onInputClear + " + > + <div class="js-search-icon d-flex flex-items-center mr-2" style="height: 26px"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search color-fg-muted"> + <path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path> +</svg> + </div> + <div class="js-spinner d-flex flex-items-center mr-2 color-fg-muted" hidden> + <svg aria-label="Loading" class="anim-rotate" viewBox="0 0 16 16" fill="none" width="16" height="16"> + <circle + cx="8" + cy="8" + r="7" + stroke="currentColor" + stroke-opacity="0.25" + stroke-width="2" + vector-effect="non-scaling-stroke" + ></circle> + <path + d="M15 8a7.002 7.002 0 00-7-7" + stroke="currentColor" + stroke-width="2" + stroke-linecap="round" + vector-effect="non-scaling-stroke" + ></path> + </svg> + </div> + <command-palette-scope > + <div data-target="command-palette-scope.placeholder" hidden class="color-fg-subtle">/ <span class="text-semibold color-fg-default">...</span> / </div> + <command-palette-token + data-text="rlkamalapurkar" + data-id="MDQ6VXNlcjMwMjY0NzIw" + data-type="owner" + data-value="rlkamalapurkar" + data-targets="command-palette-scope.tokens" + class="color-fg-default text-semibold" + style="white-space:nowrap;line-height:20px;" + >rlkamalapurkar<span class="color-fg-subtle text-normal"> / </span></command-palette-token> + <command-palette-token + data-text="bodeplot" + data-id="R_kgDOGPTXYA" + data-type="repository" + data-value="bodeplot" + data-targets="command-palette-scope.tokens" + class="color-fg-default text-semibold" + style="white-space:nowrap;line-height:20px;" + >bodeplot<span class="color-fg-subtle text-normal"> / </span></command-palette-token> + </command-palette-scope> + <div class="command-palette-input-group flex-1 form-control border-0 box-shadow-none" style="z-index: 0"> + <div class="command-palette-typeahead position-absolute d-flex flex-items-center Truncate"> + <span class="typeahead-segment input-mirror" data-target="command-palette-input.mirror"></span> + <span class="Truncate-text" data-target="command-palette-input.typeaheadText"></span> + <span class="typeahead-segment" data-target="command-palette-input.typeaheadPlaceholder"></span> + </div> + <input + class="js-overlay-input typeahead-input d-none" + disabled + tabindex="-1" + aria-label="Hidden input for typeahead" + > + <input + type="text" + autocomplete="off" + autocorrect="off" + autocapitalize="off" + spellcheck="false" + class="js-input typeahead-input form-control border-0 box-shadow-none input-block width-full no-focus-indicator" + aria-label="Command palette input" + aria-haspopup="listbox" + aria-expanded="false" + aria-autocomplete="list" + aria-controls="command-palette-page-stack" + role="combobox" + data-action=" + input:command-palette-input#onInput + keydown:command-palette-input#onKeydown + " + > + </div> + <div data-view-component="true" class="position-relative d-inline-block"> + <button aria-keyshortcuts="Control+Backspace" data-action="click:command-palette-input#onClear keypress:command-palette-input#onClear" data-target="command-palette-input.clearButton" id="command-palette-clear-button" hidden="hidden" type="button" data-view-component="true" class="btn-octicon command-palette-input-clear-button"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill"> + <path fill-rule="evenodd" d="M2.343 13.657A8 8 0 1113.657 2.343 8 8 0 012.343 13.657zM6.03 4.97a.75.75 0 00-1.06 1.06L6.94 8 4.97 9.97a.75.75 0 101.06 1.06L8 9.06l1.97 1.97a.75.75 0 101.06-1.06L9.06 8l1.97-1.97a.75.75 0 10-1.06-1.06L8 6.94 6.03 4.97z"></path> +</svg> +</button> <tool-tip for="command-palette-clear-button" data-direction="w" data-type="label" data-view-component="true" class="sr-only position-absolute">Clear Command Palette</tool-tip> +</div> + </command-palette-input> + + <command-palette-page-stack + data-default-scope-id="R_kgDOGPTXYA" + data-default-scope-type="Repository" + data-action="command-palette-page-octicons-cached:command-palette-page-stack#cacheOcticons" + > + <command-palette-tip + class="color-fg-muted f6 px-3 py-1 my-2" + data-scope-types="["","owner","repository"]" + data-mode="" + data-value=""> + <div class="d-flex flex-items-start flex-justify-between"> + <div> + <span class="text-bold">Tip:</span> + Type <kbd class="hx_kbd">#</kbd> to search pull requests + </div> + <div class="ml-2 flex-shrink-0"> + Type <kbd class="hx_kbd">?</kbd> for help and tips + </div> + </div> + </command-palette-tip> + <command-palette-tip + class="color-fg-muted f6 px-3 py-1 my-2" + data-scope-types="["","owner","repository"]" + data-mode="" + data-value=""> + <div class="d-flex flex-items-start flex-justify-between"> + <div> + <span class="text-bold">Tip:</span> + Type <kbd class="hx_kbd">#</kbd> to search issues + </div> + <div class="ml-2 flex-shrink-0"> + Type <kbd class="hx_kbd">?</kbd> for help and tips + </div> + </div> + </command-palette-tip> + <command-palette-tip + class="color-fg-muted f6 px-3 py-1 my-2" + data-scope-types="["owner","repository"]" + data-mode="" + data-value=""> + <div class="d-flex flex-items-start flex-justify-between"> + <div> + <span class="text-bold">Tip:</span> + Type <kbd class="hx_kbd">#</kbd> to search discussions + </div> + <div class="ml-2 flex-shrink-0"> + Type <kbd class="hx_kbd">?</kbd> for help and tips + </div> + </div> + </command-palette-tip> + <command-palette-tip + class="color-fg-muted f6 px-3 py-1 my-2" + data-scope-types="["owner","repository"]" + data-mode="" + data-value=""> + <div class="d-flex flex-items-start flex-justify-between"> + <div> + <span class="text-bold">Tip:</span> + Type <kbd class="hx_kbd">!</kbd> to search projects + </div> + <div class="ml-2 flex-shrink-0"> + Type <kbd class="hx_kbd">?</kbd> for help and tips + </div> + </div> + </command-palette-tip> + <command-palette-tip + class="color-fg-muted f6 px-3 py-1 my-2" + data-scope-types="["owner"]" + data-mode="" + data-value=""> + <div class="d-flex flex-items-start flex-justify-between"> + <div> + <span class="text-bold">Tip:</span> + Type <kbd class="hx_kbd">@</kbd> to search teams + </div> + <div class="ml-2 flex-shrink-0"> + Type <kbd class="hx_kbd">?</kbd> for help and tips + </div> + </div> + </command-palette-tip> + <command-palette-tip + class="color-fg-muted f6 px-3 py-1 my-2" + data-scope-types="[""]" + data-mode="" + data-value=""> + <div class="d-flex flex-items-start flex-justify-between"> + <div> + <span class="text-bold">Tip:</span> + Type <kbd class="hx_kbd">@</kbd> to search people and organizations + </div> + <div class="ml-2 flex-shrink-0"> + Type <kbd class="hx_kbd">?</kbd> for help and tips + </div> + </div> + </command-palette-tip> + <command-palette-tip + class="color-fg-muted f6 px-3 py-1 my-2" + data-scope-types="["","owner","repository"]" + data-mode="" + data-value=""> + <div class="d-flex flex-items-start flex-justify-between"> + <div> + <span class="text-bold">Tip:</span> + Type <kbd class="hx_kbd">></kbd> to activate command mode + </div> + <div class="ml-2 flex-shrink-0"> + Type <kbd class="hx_kbd">?</kbd> for help and tips + </div> + </div> + </command-palette-tip> + <command-palette-tip + class="color-fg-muted f6 px-3 py-1 my-2" + data-scope-types="["","owner","repository"]" + data-mode="" + data-value=""> + <div class="d-flex flex-items-start flex-justify-between"> + <div> + <span class="text-bold">Tip:</span> + Go to your accessibility settings to change your keyboard shortcuts + </div> + <div class="ml-2 flex-shrink-0"> + Type <kbd class="hx_kbd">?</kbd> for help and tips + </div> + </div> + </command-palette-tip> + <command-palette-tip + class="color-fg-muted f6 px-3 py-1 my-2" + data-scope-types="["","owner","repository"]" + data-mode="#" + data-value=""> + <div class="d-flex flex-items-start flex-justify-between"> + <div> + <span class="text-bold">Tip:</span> + Type author:@me to search your content + </div> + <div class="ml-2 flex-shrink-0"> + Type <kbd class="hx_kbd">?</kbd> for help and tips + </div> + </div> + </command-palette-tip> + <command-palette-tip + class="color-fg-muted f6 px-3 py-1 my-2" + data-scope-types="["","owner","repository"]" + data-mode="#" + data-value=""> + <div class="d-flex flex-items-start flex-justify-between"> + <div> + <span class="text-bold">Tip:</span> + Type is:pr to filter to pull requests + </div> + <div class="ml-2 flex-shrink-0"> + Type <kbd class="hx_kbd">?</kbd> for help and tips + </div> + </div> + </command-palette-tip> + <command-palette-tip + class="color-fg-muted f6 px-3 py-1 my-2" + data-scope-types="["","owner","repository"]" + data-mode="#" + data-value=""> + <div class="d-flex flex-items-start flex-justify-between"> + <div> + <span class="text-bold">Tip:</span> + Type is:issue to filter to issues + </div> + <div class="ml-2 flex-shrink-0"> + Type <kbd class="hx_kbd">?</kbd> for help and tips + </div> + </div> + </command-palette-tip> + <command-palette-tip + class="color-fg-muted f6 px-3 py-1 my-2" + data-scope-types="["owner","repository"]" + data-mode="#" + data-value=""> + <div class="d-flex flex-items-start flex-justify-between"> + <div> + <span class="text-bold">Tip:</span> + Type is:project to filter to projects + </div> + <div class="ml-2 flex-shrink-0"> + Type <kbd class="hx_kbd">?</kbd> for help and tips + </div> + </div> + </command-palette-tip> + <command-palette-tip + class="color-fg-muted f6 px-3 py-1 my-2" + data-scope-types="["","owner","repository"]" + data-mode="#" + data-value=""> + <div class="d-flex flex-items-start flex-justify-between"> + <div> + <span class="text-bold">Tip:</span> + Type is:open to filter to open content + </div> + <div class="ml-2 flex-shrink-0"> + Type <kbd class="hx_kbd">?</kbd> for help and tips + </div> + </div> + </command-palette-tip> + <command-palette-tip class="mx-3 my-2 flash flash-error d-flex flex-items-center" data-scope-types="*" data-on-error> + <div> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> + <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path> +</svg> + </div> + <div class="px-2"> + We’ve encountered an error and some results aren't available at this time. Type a new search or try again later. + </div> + </command-palette-tip> + <command-palette-tip class="h4 color-fg-default pl-3 pb-2 pt-3" data-on-empty data-scope-types="*" data-match-mode="[^?]|^$"> + No results matched your search + </command-palette-tip> + + <div hidden> + + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="arrow-right-color-fg-muted"> + <svg height="16" class="octicon octicon-arrow-right color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="arrow-right-color-fg-default"> + <svg height="16" class="octicon octicon-arrow-right color-fg-default" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="codespaces-color-fg-muted"> + <svg height="16" class="octicon octicon-codespaces color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2 1.75C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 01-1.75 1.75h-8.5A1.75 1.75 0 012 6.75v-5zm1.75-.25a.25.25 0 00-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 00.25-.25v-5a.25.25 0 00-.25-.25h-8.5zM0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0114.25 16H1.75A1.75 1.75 0 010 14.25v-3zM1.75 11a.25.25 0 00-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 00.25-.25v-3a.25.25 0 00-.25-.25H1.75z"></path><path fill-rule="evenodd" d="M3 12.75a.75.75 0 01.75-.75h.5a.75.75 0 010 1.5h-.5a.75.75 0 01-.75-.75zm4 0a.75.75 0 01.75-.75h4.5a.75.75 0 010 1.5h-4.5a.75.75 0 01-.75-.75z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="copy-color-fg-muted"> + <svg height="16" class="octicon octicon-copy color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="dash-color-fg-muted"> + <svg height="16" class="octicon octicon-dash color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2 7.75A.75.75 0 012.75 7h10a.75.75 0 010 1.5h-10A.75.75 0 012 7.75z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="file-color-fg-muted"> + <svg height="16" class="octicon octicon-file color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M3.75 1.5a.25.25 0 00-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 00.25-.25V6h-2.75A1.75 1.75 0 019 4.25V1.5H3.75zm6.75.062V4.25c0 .138.112.25.25.25h2.688a.252.252 0 00-.011-.013l-2.914-2.914a.272.272 0 00-.013-.011zM2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0113.25 16h-9.5A1.75 1.75 0 012 14.25V1.75z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="gear-color-fg-muted"> + <svg height="16" class="octicon octicon-gear color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="lock-color-fg-muted"> + <svg height="16" class="octicon octicon-lock color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M4 4v2h-.25A1.75 1.75 0 002 7.75v5.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 13.25v-5.5A1.75 1.75 0 0012.25 6H12V4a4 4 0 10-8 0zm6.5 2V4a2.5 2.5 0 00-5 0v2h5zM12 7.5h.25a.25.25 0 01.25.25v5.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25v-5.5a.25.25 0 01.25-.25H12z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="moon-color-fg-muted"> + <svg height="16" class="octicon octicon-moon color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M9.598 1.591a.75.75 0 01.785-.175 7 7 0 11-8.967 8.967.75.75 0 01.961-.96 5.5 5.5 0 007.046-7.046.75.75 0 01.175-.786zm1.616 1.945a7 7 0 01-7.678 7.678 5.5 5.5 0 107.678-7.678z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="person-color-fg-muted"> + <svg height="16" class="octicon octicon-person color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M10.5 5a2.5 2.5 0 11-5 0 2.5 2.5 0 015 0zm.061 3.073a4 4 0 10-5.123 0 6.004 6.004 0 00-3.431 5.142.75.75 0 001.498.07 4.5 4.5 0 018.99 0 .75.75 0 101.498-.07 6.005 6.005 0 00-3.432-5.142z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="pencil-color-fg-muted"> + <svg height="16" class="octicon octicon-pencil color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.013 1.427a1.75 1.75 0 012.474 0l1.086 1.086a1.75 1.75 0 010 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 01-.927-.928l.929-3.25a1.75 1.75 0 01.445-.758l8.61-8.61zm1.414 1.06a.25.25 0 00-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 000-.354l-1.086-1.086zM11.189 6.25L9.75 4.81l-6.286 6.287a.25.25 0 00-.064.108l-.558 1.953 1.953-.558a.249.249 0 00.108-.064l6.286-6.286z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="issue-opened-open"> + <svg height="16" class="octicon octicon-issue-opened open" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path d="M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path><path fill-rule="evenodd" d="M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="git-pull-request-draft-color-fg-muted"> + <svg height="16" class="octicon octicon-git-pull-request-draft color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M2.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.25 1a2.25 2.25 0 00-.75 4.372v5.256a2.251 2.251 0 101.5 0V5.372A2.25 2.25 0 003.25 1zm0 11a.75.75 0 100 1.5.75.75 0 000-1.5zm9.5 3a2.25 2.25 0 100-4.5 2.25 2.25 0 000 4.5zm0-3a.75.75 0 100 1.5.75.75 0 000-1.5z"></path><path d="M14 7.5a1.25 1.25 0 11-2.5 0 1.25 1.25 0 012.5 0zm0-4.25a1.25 1.25 0 11-2.5 0 1.25 1.25 0 012.5 0z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="search-color-fg-muted"> + <svg height="16" class="octicon octicon-search color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.5 7a4.499 4.499 0 11-8.998 0A4.499 4.499 0 0111.5 7zm-.82 4.74a6 6 0 111.06-1.06l3.04 3.04a.75.75 0 11-1.06 1.06l-3.04-3.04z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="sun-color-fg-muted"> + <svg height="16" class="octicon octicon-sun color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 10.5a2.5 2.5 0 100-5 2.5 2.5 0 000 5zM8 12a4 4 0 100-8 4 4 0 000 8zM8 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V.75A.75.75 0 018 0zm0 13a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 018 13zM2.343 2.343a.75.75 0 011.061 0l1.06 1.061a.75.75 0 01-1.06 1.06l-1.06-1.06a.75.75 0 010-1.06zm9.193 9.193a.75.75 0 011.06 0l1.061 1.06a.75.75 0 01-1.06 1.061l-1.061-1.06a.75.75 0 010-1.061zM16 8a.75.75 0 01-.75.75h-1.5a.75.75 0 010-1.5h1.5A.75.75 0 0116 8zM3 8a.75.75 0 01-.75.75H.75a.75.75 0 010-1.5h1.5A.75.75 0 013 8zm10.657-5.657a.75.75 0 010 1.061l-1.061 1.06a.75.75 0 11-1.06-1.06l1.06-1.06a.75.75 0 011.06 0zm-9.193 9.193a.75.75 0 010 1.06l-1.06 1.061a.75.75 0 11-1.061-1.06l1.06-1.061a.75.75 0 011.061 0z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="sync-color-fg-muted"> + <svg height="16" class="octicon octicon-sync color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 2.5a5.487 5.487 0 00-4.131 1.869l1.204 1.204A.25.25 0 014.896 6H1.25A.25.25 0 011 5.75V2.104a.25.25 0 01.427-.177l1.38 1.38A7.001 7.001 0 0114.95 7.16a.75.75 0 11-1.49.178A5.501 5.501 0 008 2.5zM1.705 8.005a.75.75 0 01.834.656 5.501 5.501 0 009.592 2.97l-1.204-1.204a.25.25 0 01.177-.427h3.646a.25.25 0 01.25.25v3.646a.25.25 0 01-.427.177l-1.38-1.38A7.001 7.001 0 011.05 8.84a.75.75 0 01.656-.834z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="trash-color-fg-muted"> + <svg height="16" class="octicon octicon-trash color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="key-color-fg-muted"> + <svg height="16" class="octicon octicon-key color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M6.5 5.5a4 4 0 112.731 3.795.75.75 0 00-.768.18L7.44 10.5H6.25a.75.75 0 00-.75.75v1.19l-.06.06H4.25a.75.75 0 00-.75.75v1.19l-.06.06H1.75a.25.25 0 01-.25-.25v-1.69l5.024-5.023a.75.75 0 00.181-.768A3.995 3.995 0 016.5 5.5zm4-5.5a5.5 5.5 0 00-5.348 6.788L.22 11.72a.75.75 0 00-.22.53v2C0 15.216.784 16 1.75 16h2a.75.75 0 00.53-.22l.5-.5a.75.75 0 00.22-.53V14h.75a.75.75 0 00.53-.22l.5-.5a.75.75 0 00.22-.53V12h.75a.75.75 0 00.53-.22l.932-.932A5.5 5.5 0 1010.5 0zm.5 6a1 1 0 100-2 1 1 0 000 2z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="comment-discussion-color-fg-muted"> + <svg height="16" class="octicon octicon-comment-discussion color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M1.5 2.75a.25.25 0 01.25-.25h8.5a.25.25 0 01.25.25v5.5a.25.25 0 01-.25.25h-3.5a.75.75 0 00-.53.22L3.5 11.44V9.25a.75.75 0 00-.75-.75h-1a.25.25 0 01-.25-.25v-5.5zM1.75 1A1.75 1.75 0 000 2.75v5.5C0 9.216.784 10 1.75 10H2v1.543a1.457 1.457 0 002.487 1.03L7.061 10h3.189A1.75 1.75 0 0012 8.25v-5.5A1.75 1.75 0 0010.25 1h-8.5zM14.5 4.75a.25.25 0 00-.25-.25h-.5a.75.75 0 110-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0114.25 12H14v1.543a1.457 1.457 0 01-2.487 1.03L9.22 12.28a.75.75 0 111.06-1.06l2.22 2.22v-2.19a.75.75 0 01.75-.75h1a.25.25 0 00.25-.25v-5.5z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="bell-color-fg-muted"> + <svg height="16" class="octicon octicon-bell color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path d="M8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path><path fill-rule="evenodd" d="M8 1.5A3.5 3.5 0 004.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01l.001.006c0 .002.002.004.004.006a.017.017 0 00.006.004l.007.001h10.964l.007-.001a.016.016 0 00.006-.004.016.016 0 00.004-.006l.001-.007a.017.017 0 00-.003-.01l-1.703-2.554a1.75 1.75 0 01-.294-.97V5A3.5 3.5 0 008 1.5zM3 5a5 5 0 0110 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.518 1.518 0 0113.482 13H2.518a1.518 1.518 0 01-1.263-2.36l1.703-2.554A.25.25 0 003 7.947V5z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="bell-slash-color-fg-muted"> + <svg height="16" class="octicon octicon-bell-slash color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M8 1.5c-.997 0-1.895.416-2.534 1.086A.75.75 0 014.38 1.55 5 5 0 0113 5v2.373a.75.75 0 01-1.5 0V5A3.5 3.5 0 008 1.5zM4.182 4.31L1.19 2.143a.75.75 0 10-.88 1.214L3 5.305v2.642a.25.25 0 01-.042.139L1.255 10.64A1.518 1.518 0 002.518 13h11.108l1.184.857a.75.75 0 10.88-1.214l-1.375-.996a1.196 1.196 0 00-.013-.01L4.198 4.321a.733.733 0 00-.016-.011zm7.373 7.19L4.5 6.391v1.556c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01.015.015 0 00.005.012.017.017 0 00.006.004l.007.001h9.037zM8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path></svg> + </div> + <div data-targets="command-palette-page-stack.localOcticons" data-octicon-id="paintbrush-color-fg-muted"> + <svg height="16" class="octicon octicon-paintbrush color-fg-muted" viewBox="0 0 16 16" version="1.1" width="16" aria-hidden="true"><path fill-rule="evenodd" d="M11.134 1.535C9.722 2.562 8.16 4.057 6.889 5.312 5.8 6.387 5.041 7.401 4.575 8.294a3.745 3.745 0 00-3.227 1.054c-.43.431-.69 1.066-.86 1.657a11.982 11.982 0 00-.358 1.914A21.263 21.263 0 000 15.203v.054l.75-.007-.007.75h.054a14.404 14.404 0 00.654-.012 21.243 21.243 0 001.63-.118c.62-.07 1.3-.18 1.914-.357.592-.17 1.226-.43 1.657-.861a3.745 3.745 0 001.055-3.217c.908-.461 1.942-1.216 3.04-2.3 1.279-1.262 2.764-2.825 3.775-4.249.501-.706.923-1.428 1.125-2.096.2-.659.235-1.469-.368-2.07-.606-.607-1.42-.55-2.069-.34-.66.213-1.376.646-2.076 1.155zm-3.95 8.48a3.76 3.76 0 00-1.19-1.192 9.758 9.758 0 011.161-1.607l1.658 1.658a9.853 9.853 0 01-1.63 1.142zM.742 16l.007-.75-.75.008A.75.75 0 00.743 16zM12.016 2.749c-1.224.89-2.605 2.189-3.822 3.384l1.718 1.718c1.21-1.205 2.51-2.597 3.387-3.833.47-.662.78-1.227.912-1.662.134-.444.032-.551.009-.575h-.001V1.78c-.014-.014-.112-.113-.548.027-.432.14-.995.462-1.655.942zM1.62 13.089a19.56 19.56 0 00-.104 1.395 19.55 19.55 0 001.396-.104 10.528 10.528 0 001.668-.309c.526-.151.856-.325 1.011-.48a2.25 2.25 0 00-3.182-3.182c-.155.155-.329.485-.48 1.01a10.515 10.515 0 00-.309 1.67z"></path></svg> + </div> + + <command-palette-item-group + data-group-id="top" + data-group-title="Top result" + data-group-hint="" + data-group-limits="{}" + data-default-priority="0" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="commands" + data-group-title="Commands" + data-group-hint="Type > to filter" + data-group-limits="{"static_items_page":50,"issue":50,"pull_request":50,"discussion":50}" + data-default-priority="1" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="global_commands" + data-group-title="Global Commands" + data-group-hint="Type > to filter" + data-group-limits="{"issue":0,"pull_request":0,"discussion":0}" + data-default-priority="2" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="this_page" + data-group-title="This Page" + data-group-hint="" + data-group-limits="{}" + data-default-priority="3" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="files" + data-group-title="Files" + data-group-hint="" + data-group-limits="{}" + data-default-priority="4" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="default" + data-group-title="Default" + data-group-hint="" + data-group-limits="{"static_items_page":50}" + data-default-priority="5" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="pages" + data-group-title="Pages" + data-group-hint="" + data-group-limits="{"repository":10}" + data-default-priority="6" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="access_policies" + data-group-title="Access Policies" + data-group-hint="" + data-group-limits="{}" + data-default-priority="7" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="organizations" + data-group-title="Organizations" + data-group-hint="" + data-group-limits="{}" + data-default-priority="8" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="repositories" + data-group-title="Repositories" + data-group-hint="" + data-group-limits="{}" + data-default-priority="9" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="references" + data-group-title="Issues, pull requests, and discussions" + data-group-hint="Type # to filter" + data-group-limits="{}" + data-default-priority="10" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="teams" + data-group-title="Teams" + data-group-hint="" + data-group-limits="{}" + data-default-priority="11" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="users" + data-group-title="Users" + data-group-hint="" + data-group-limits="{}" + data-default-priority="12" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="projects" + data-group-title="Projects" + data-group-hint="" + data-group-limits="{}" + data-default-priority="13" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="footer" + data-group-title="Footer" + data-group-hint="" + data-group-limits="{}" + data-default-priority="14" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="modes_help" + data-group-title="Modes" + data-group-hint="" + data-group-limits="{}" + data-default-priority="15" + > + </command-palette-item-group> + <command-palette-item-group + data-group-id="filters_help" + data-group-title="Use filters in issues, pull requests, discussions, and projects" + data-group-hint="" + data-group-limits="{}" + data-default-priority="16" + > + </command-palette-item-group> + + <command-palette-page + data-page-title="rlkamalapurkar" + data-scope-id="MDQ6VXNlcjMwMjY0NzIw" + data-scope-type="owner" + data-targets="command-palette-page-stack.defaultPages" + hidden + > + </command-palette-page> + <command-palette-page + data-page-title="bodeplot" + data-scope-id="R_kgDOGPTXYA" + data-scope-type="repository" + data-targets="command-palette-page-stack.defaultPages" + hidden + > + </command-palette-page> + </div> + + <command-palette-page data-is-root> + </command-palette-page> + <command-palette-page + data-page-title="rlkamalapurkar" + data-scope-id="MDQ6VXNlcjMwMjY0NzIw" + data-scope-type="owner" + > + </command-palette-page> + <command-palette-page + data-page-title="bodeplot" + data-scope-id="R_kgDOGPTXYA" + data-scope-type="repository" + > + </command-palette-page> + </command-palette-page-stack> + + <server-defined-provider data-type="search-links" data-targets="command-palette.serverDefinedProviderElements"></server-defined-provider> + <server-defined-provider data-type="help" data-targets="command-palette.serverDefinedProviderElements"> + <command-palette-help + data-group="modes_help" + data-prefix="#" + data-scope-types="[""]" + > + <span data-target="command-palette-help.titleElement">Search for <strong>issues</strong> and <strong>pull requests</strong></span> + <span data-target="command-palette-help.hintElement"> + <kbd class="hx_kbd">#</kbd> + </span> + </command-palette-help> + <command-palette-help + data-group="modes_help" + data-prefix="#" + data-scope-types="["owner","repository"]" + > + <span data-target="command-palette-help.titleElement">Search for <strong>issues, pull requests, discussions,</strong> and <strong>projects</strong></span> + <span data-target="command-palette-help.hintElement"> + <kbd class="hx_kbd">#</kbd> + </span> + </command-palette-help> + <command-palette-help + data-group="modes_help" + data-prefix="@" + data-scope-types="[""]" + > + <span data-target="command-palette-help.titleElement">Search for <strong>organizations, repositories,</strong> and <strong>users</strong></span> + <span data-target="command-palette-help.hintElement"> + <kbd class="hx_kbd">@</kbd> + </span> + </command-palette-help> + <command-palette-help + data-group="modes_help" + data-prefix="!" + data-scope-types="["owner","repository"]" + > + <span data-target="command-palette-help.titleElement">Search for <strong>projects</strong></span> + <span data-target="command-palette-help.hintElement"> + <kbd class="hx_kbd">!</kbd> + </span> + </command-palette-help> + <command-palette-help + data-group="modes_help" + data-prefix="/" + data-scope-types="["repository"]" + > + <span data-target="command-palette-help.titleElement">Search for <strong>files</strong></span> + <span data-target="command-palette-help.hintElement"> + <kbd class="hx_kbd">/</kbd> + </span> + </command-palette-help> + <command-palette-help + data-group="modes_help" + data-prefix=">" + > + <span data-target="command-palette-help.titleElement">Activate <strong>command mode</strong></span> + <span data-target="command-palette-help.hintElement"> + <kbd class="hx_kbd">></kbd> + </span> + </command-palette-help> + <command-palette-help + data-group="filters_help" + data-prefix="# author:@me" + > + <span data-target="command-palette-help.titleElement">Search your issues, pull requests, and discussions</span> + <span data-target="command-palette-help.hintElement"> + <kbd class="hx_kbd"># author:@me</kbd> + </span> + </command-palette-help> + <command-palette-help + data-group="filters_help" + data-prefix="# author:@me" + > + <span data-target="command-palette-help.titleElement">Search your issues, pull requests, and discussions</span> + <span data-target="command-palette-help.hintElement"> + <kbd class="hx_kbd"># author:@me</kbd> + </span> + </command-palette-help> + <command-palette-help + data-group="filters_help" + data-prefix="# is:pr" + > + <span data-target="command-palette-help.titleElement">Filter to pull requests</span> + <span data-target="command-palette-help.hintElement"> + <kbd class="hx_kbd"># is:pr</kbd> + </span> + </command-palette-help> + <command-palette-help + data-group="filters_help" + data-prefix="# is:issue" + > + <span data-target="command-palette-help.titleElement">Filter to issues</span> + <span data-target="command-palette-help.hintElement"> + <kbd class="hx_kbd"># is:issue</kbd> + </span> + </command-palette-help> + <command-palette-help + data-group="filters_help" + data-prefix="# is:discussion" + data-scope-types="["owner","repository"]" + > + <span data-target="command-palette-help.titleElement">Filter to discussions</span> + <span data-target="command-palette-help.hintElement"> + <kbd class="hx_kbd"># is:discussion</kbd> + </span> + </command-palette-help> + <command-palette-help + data-group="filters_help" + data-prefix="# is:project" + data-scope-types="["owner","repository"]" + > + <span data-target="command-palette-help.titleElement">Filter to projects</span> + <span data-target="command-palette-help.hintElement"> + <kbd class="hx_kbd"># is:project</kbd> + </span> + </command-palette-help> + <command-palette-help + data-group="filters_help" + data-prefix="# is:open" + > + <span data-target="command-palette-help.titleElement">Filter to open issues, pull requests, and discussions</span> + <span data-target="command-palette-help.hintElement"> + <kbd class="hx_kbd"># is:open</kbd> + </span> + </command-palette-help> + </server-defined-provider> + + <server-defined-provider + data-type="commands" + data-fetch-debounce="0" + data-src="/command_palette/commands" + data-supported-modes="[]" + data-supports-commands + + data-targets="command-palette.serverDefinedProviderElements" + ></server-defined-provider> + <server-defined-provider + data-type="prefetched" + data-fetch-debounce="0" + data-src="/command_palette/jump_to_page_navigation" + data-supported-modes="[""]" + data-supported-scope-types="["","owner","repository"]" + + data-targets="command-palette.serverDefinedProviderElements" + ></server-defined-provider> + <server-defined-provider + data-type="remote" + data-fetch-debounce="200" + data-src="/command_palette/issues" + data-supported-modes="["#","#"]" + data-supported-scope-types="["owner","repository",""]" + + data-targets="command-palette.serverDefinedProviderElements" + ></server-defined-provider> + <server-defined-provider + data-type="remote" + data-fetch-debounce="200" + data-src="/command_palette/jump_to" + data-supported-modes="["@","@"]" + data-supported-scope-types="["","owner"]" + + data-targets="command-palette.serverDefinedProviderElements" + ></server-defined-provider> + <server-defined-provider + data-type="remote" + data-fetch-debounce="200" + data-src="/command_palette/jump_to_members_only" + data-supported-modes="["@","@","",""]" + data-supported-scope-types="["","owner"]" + + data-targets="command-palette.serverDefinedProviderElements" + ></server-defined-provider> + <server-defined-provider + data-type="prefetched" + data-fetch-debounce="0" + data-src="/command_palette/jump_to_members_only_prefetched" + data-supported-modes="["@","@","",""]" + data-supported-scope-types="["","owner"]" + + data-targets="command-palette.serverDefinedProviderElements" + ></server-defined-provider> + <server-defined-provider + data-type="files" + data-fetch-debounce="0" + data-src="/command_palette/files" + data-supported-modes="["/"]" + data-supported-scope-types="["repository"]" + + data-targets="command-palette.serverDefinedProviderElements" + ></server-defined-provider> + <server-defined-provider + data-type="remote" + data-fetch-debounce="200" + data-src="/command_palette/discussions" + data-supported-modes="["#"]" + data-supported-scope-types="["owner","repository"]" + + data-targets="command-palette.serverDefinedProviderElements" + ></server-defined-provider> + <server-defined-provider + data-type="remote" + data-fetch-debounce="200" + data-src="/command_palette/projects" + data-supported-modes="["#","!"]" + data-supported-scope-types="["owner","repository"]" + + data-targets="command-palette.serverDefinedProviderElements" + ></server-defined-provider> + <server-defined-provider + data-type="prefetched" + data-fetch-debounce="0" + data-src="/command_palette/recent_issues" + data-supported-modes="["#","#"]" + data-supported-scope-types="["owner","repository",""]" + + data-targets="command-palette.serverDefinedProviderElements" + ></server-defined-provider> + <server-defined-provider + data-type="remote" + data-fetch-debounce="200" + data-src="/command_palette/teams" + data-supported-modes="["@",""]" + data-supported-scope-types="["owner"]" + + data-targets="command-palette.serverDefinedProviderElements" + ></server-defined-provider> + <server-defined-provider + data-type="remote" + data-fetch-debounce="200" + data-src="/command_palette/name_with_owner_repository" + data-supported-modes="["@","@","",""]" + data-supported-scope-types="["","owner"]" + + data-targets="command-palette.serverDefinedProviderElements" + ></server-defined-provider> + </command-palette> + </details-dialog> +</details> + +<div class="position-fixed bottom-0 left-0 ml-5 mb-5 js-command-palette-toasts" style="z-index: 1000"> + <div hidden class="Toast Toast--loading"> + <span class="Toast-icon"> + <svg class="Toast--spinner" viewBox="0 0 32 32" width="18" height="18" aria-hidden="true"> + <path + fill="#959da5" + d="M16 0 A16 16 0 0 0 16 32 A16 16 0 0 0 16 0 M16 4 A12 12 0 0 1 16 28 A12 12 0 0 1 16 4" + /> + <path fill="#ffffff" d="M16 0 A16 16 0 0 1 32 16 L28 16 A12 12 0 0 0 16 4z"></path> + </svg> + </span> + <span class="Toast-content"></span> + </div> + + <div hidden class="anim-fade-in fast Toast Toast--error"> + <span class="Toast-icon"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-stop"> + <path fill-rule="evenodd" d="M4.47.22A.75.75 0 015 0h6a.75.75 0 01.53.22l4.25 4.25c.141.14.22.331.22.53v6a.75.75 0 01-.22.53l-4.25 4.25A.75.75 0 0111 16H5a.75.75 0 01-.53-.22L.22 11.53A.75.75 0 010 11V5a.75.75 0 01.22-.53L4.47.22zm.84 1.28L1.5 5.31v5.38l3.81 3.81h5.38l3.81-3.81V5.31L10.69 1.5H5.31zM8 4a.75.75 0 01.75.75v3.5a.75.75 0 01-1.5 0v-3.5A.75.75 0 018 4zm0 8a1 1 0 100-2 1 1 0 000 2z"></path> +</svg> + </span> + <span class="Toast-content"></span> + </div> + + <div hidden class="anim-fade-in fast Toast Toast--warning"> + <span class="Toast-icon"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> + <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path> +</svg> + </span> + <span class="Toast-content"></span> + </div> + + + <div hidden class="anim-fade-in fast Toast Toast--success"> + <span class="Toast-icon"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check"> + <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path> +</svg> + </span> + <span class="Toast-content"></span> + </div> + + <div hidden class="anim-fade-in fast Toast"> + <span class="Toast-icon"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-info"> + <path fill-rule="evenodd" d="M8 1.5a6.5 6.5 0 100 13 6.5 6.5 0 000-13zM0 8a8 8 0 1116 0A8 8 0 010 8zm6.5-.25A.75.75 0 017.25 7h1a.75.75 0 01.75.75v2.75h.25a.75.75 0 010 1.5h-2a.75.75 0 010-1.5h.25v-2h-.25a.75.75 0 01-.75-.75zM8 6a1 1 0 100-2 1 1 0 000 2z"></path> +</svg> + </span> + <span class="Toast-content"></span> + </div> +</div> + + + <div + class="application-main " + data-commit-hovercards-enabled + data-discussion-hovercards-enabled + data-issue-and-pr-hovercards-enabled + > + <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> + <main id="js-repo-pjax-container" > + + + + + + + + + + + <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--color-page-header-bg);" data-turbo-replace> + + <div class="d-flex flex-wrap flex-justify-end mb-3 px-3 px-md-4 px-lg-5" style="gap: 1rem;"> + + <div class="flex-auto min-width-0 width-fit mr-3"> + + <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2"> + <path fill-rule="evenodd" d="M2 2.5A2.5 2.5 0 014.5 0h8.75a.75.75 0 01.75.75v12.5a.75.75 0 01-.75.75h-2.5a.75.75 0 110-1.5h1.75v-2h-8a1 1 0 00-.714 1.7.75.75 0 01-1.072 1.05A2.495 2.495 0 012 11.5v-9zm10.5-1V9h-8c-.356 0-.694.074-1 .208V2.5a1 1 0 011-1h8zM5 12.25v3.25a.25.25 0 00.4.2l1.45-1.087a.25.25 0 01.3 0L8.6 15.7a.25.25 0 00.4-.2v-3.25a.25.25 0 00-.25-.25h-3.5a.25.25 0 00-.25.25z"></path> +</svg> + + <span class="author flex-self-stretch" itemprop="author"> + <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/rlkamalapurkar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/rlkamalapurkar">rlkamalapurkar</a> + </span> + <span class="mx-1 flex-self-stretch color-fg-muted">/</span> + <strong itemprop="name" class="mr-2 flex-self-stretch"> + <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/rlkamalapurkar/bodeplot">bodeplot</a> + </strong> + + <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span> + </div> + + + </div> + + <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;"> + + <li> + <div class="float-left" data-test-selector="pin-repo-button"> + <form data-turbo="false" action="/rlkamalapurkar/bodeplot/profile_pin" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="efKDrRk8y7xWYWfGES0snbh9X2kt65PPpzE9o-qpQD3F9j3ADxLxBfQ8VqEAYFxtz1-80U86VlVDU97GT8yceQ" autocomplete="off" /> + <button title="Pin this repository to your profile" type="submit" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pin mr-2"> + <path fill-rule="evenodd" d="M4.456.734a1.75 1.75 0 012.826.504l.613 1.327a3.081 3.081 0 002.084 1.707l2.454.584c1.332.317 1.8 1.972.832 2.94L11.06 10l3.72 3.72a.75.75 0 11-1.061 1.06L10 11.06l-2.204 2.205c-.968.968-2.623.5-2.94-.832l-.584-2.454a3.081 3.081 0 00-1.707-2.084l-1.327-.613a1.75 1.75 0 01-.504-2.826L4.456.734zM5.92 1.866a.25.25 0 00-.404-.072L1.794 5.516a.25.25 0 00.072.404l1.328.613A4.582 4.582 0 015.73 9.63l.584 2.454a.25.25 0 00.42.12l5.47-5.47a.25.25 0 00-.12-.42L9.63 5.73a4.581 4.581 0 01-3.098-2.537L5.92 1.866z"></path> +</svg>Pin +</button></form> </div> +</li> + + + <li> + <notifications-list-subscription-form + data-action="notifications-dialog-label-toggled:notifications-list-subscription-form#handleDialogLabelToggle" + class="f5 position-relative" + > + <details + class="details-reset details-overlay f5 position-relative" + data-target="notifications-list-subscription-form.details" + data-action="toggle:notifications-list-subscription-form#detailsToggled" + > + + <summary data-hydro-click="{"event_type":"repository.click","payload":{"target":"WATCH_BUTTON","repository_id":418699104,"originating_url":"https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx","user_id":30264720}}" data-hydro-click-hmac="ef1d3ec417ba76c8764d8684e429ac0b279976194870ffa845da9e0605db9331" data-ga-click="Repository, click Watch settings, action:blob#show" aria-label="Notification settings" data-view-component="true" class="btn-sm btn"> <span data-menu-button> + <span + + + data-target="notifications-list-subscription-form.unwatchButtonCopy" + > + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-eye"> + <path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path> +</svg> + Unwatch + </span> + <span + hidden + + data-target="notifications-list-subscription-form.stopIgnoringButtonCopy" + > + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell-slash"> + <path fill-rule="evenodd" d="M8 1.5c-.997 0-1.895.416-2.534 1.086A.75.75 0 014.38 1.55 5 5 0 0113 5v2.373a.75.75 0 01-1.5 0V5A3.5 3.5 0 008 1.5zM4.182 4.31L1.19 2.143a.75.75 0 10-.88 1.214L3 5.305v2.642a.25.25 0 01-.042.139L1.255 10.64A1.518 1.518 0 002.518 13h11.108l1.184.857a.75.75 0 10.88-1.214l-1.375-.996a1.196 1.196 0 00-.013-.01L4.198 4.321a.733.733 0 00-.016-.011zm7.373 7.19L4.5 6.391v1.556c0 .346-.102.683-.294.97l-1.703 2.556a.018.018 0 00-.003.01.015.015 0 00.005.012.017.017 0 00.006.004l.007.001h9.037zM8 16a2 2 0 001.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 008 16z"></path> +</svg> + Stop ignoring + </span> + <span + hidden + + data-target="notifications-list-subscription-form.watchButtonCopy" + > + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-eye"> + <path fill-rule="evenodd" d="M1.679 7.932c.412-.621 1.242-1.75 2.366-2.717C5.175 4.242 6.527 3.5 8 3.5c1.473 0 2.824.742 3.955 1.715 1.124.967 1.954 2.096 2.366 2.717a.119.119 0 010 .136c-.412.621-1.242 1.75-2.366 2.717C10.825 11.758 9.473 12.5 8 12.5c-1.473 0-2.824-.742-3.955-1.715C2.92 9.818 2.09 8.69 1.679 8.068a.119.119 0 010-.136zM8 2c-1.981 0-3.67.992-4.933 2.078C1.797 5.169.88 6.423.43 7.1a1.619 1.619 0 000 1.798c.45.678 1.367 1.932 2.637 3.024C4.329 13.008 6.019 14 8 14c1.981 0 3.67-.992 4.933-2.078 1.27-1.091 2.187-2.345 2.637-3.023a1.619 1.619 0 000-1.798c-.45-.678-1.367-1.932-2.637-3.023C11.671 2.992 9.981 2 8 2zm0 8a2 2 0 100-4 2 2 0 000 4z"></path> +</svg> + Watch + </span> + </span> + <span id="repo-notifications-counter" data-target="notifications-list-subscription-form.socialCount" data-pjax-replace="true" data-turbo-replace="true" title="1" data-view-component="true" class="Counter">1</span> + <span class="dropdown-caret"></span> +</summary> + <details-menu + class="SelectMenu " + role="menu" + data-target="notifications-list-subscription-form.menu" + + > + <div class="SelectMenu-modal notifications-component-menu-modal"> + <header class="SelectMenu-header"> + <h3 class="SelectMenu-title">Notifications</h3> + <button class="SelectMenu-closeButton" type="button" aria-label="Close menu" data-action="click:notifications-list-subscription-form#closeMenu"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> + <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path> +</svg> + </button> + </header> + + <div class="SelectMenu-list"> + <form data-target="notifications-list-subscription-form.form" data-action="submit:notifications-list-subscription-form#submitForm" data-turbo="false" action="/notifications/subscribe" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="ATW70sfjhJkV_6MKRJ-LuTHQJy54JQ3WtIKY3sCfYMWwUNYqY06UQxvue_yCrVLa8c2LarX3aEX4eycyvX0Q5g" autocomplete="off" /> + + <input type="hidden" name="repository_id" value="418699104"> + + <button + type="submit" + name="do" + value="included" + class="SelectMenu-item flex-items-start" + role="menuitemradio" + aria-checked="false" + data-targets="notifications-list-subscription-form.subscriptionButtons" + + > + <span class="f5"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check"> + <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path> +</svg> + </span> + <div> + <div class="f5 text-bold"> + Participating and @mentions + </div> + <div class="text-small color-fg-muted text-normal pb-1"> + Only receive notifications from this repository when participating or @mentioned. + </div> + </div> + </button> + + <button + type="submit" + name="do" + value="subscribed" + class="SelectMenu-item flex-items-start" + role="menuitemradio" + aria-checked="true" + data-targets="notifications-list-subscription-form.subscriptionButtons" + > + <span class="f5"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check"> + <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path> +</svg> + </span> + <div> + <div class="f5 text-bold"> + All Activity + </div> + <div class="text-small color-fg-muted text-normal pb-1"> + Notified of all notifications on this repository. + </div> + </div> + </button> + + <button + type="submit" + name="do" + value="ignore" + class="SelectMenu-item flex-items-start" + role="menuitemradio" + aria-checked="false" + data-targets="notifications-list-subscription-form.subscriptionButtons" + > + <span class="f5"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check"> + <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path> +</svg> + </span> + <div> + <div class="f5 text-bold"> + Ignore + </div> + <div class="text-small color-fg-muted text-normal pb-1"> + Never be notified. + </div> + </div> + </button> +</form> + <button + class="SelectMenu-item flex-items-start pr-3" + type="button" + role="menuitemradio" + data-target="notifications-list-subscription-form.customButton" + data-action="click:notifications-list-subscription-form#openCustomDialog" + aria-haspopup="true" + aria-checked="false" + + > + <span class="f5"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check"> + <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path> +</svg> + </span> + <div> + <div class="d-flex flex-items-start flex-justify-between"> + <div class="f5 text-bold">Custom</div> + <div class="f5 pr-1"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-arrow-right"> + <path fill-rule="evenodd" d="M8.22 2.97a.75.75 0 011.06 0l4.25 4.25a.75.75 0 010 1.06l-4.25 4.25a.75.75 0 01-1.06-1.06l2.97-2.97H3.75a.75.75 0 010-1.5h7.44L8.22 4.03a.75.75 0 010-1.06z"></path> +</svg> + </div> + </div> + <div class="text-small color-fg-muted text-normal pb-1"> + Select events you want to be notified of in addition to participating and @mentions. + </div> + </div> + </button> + + <div class="px-3 py-2 d-flex color-bg-subtle flex-items-center"> + <span class="f5"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile SelectMenu-icon SelectMenu-icon--device-mobile"> + <path fill-rule="evenodd" d="M3.75 0A1.75 1.75 0 002 1.75v12.5c0 .966.784 1.75 1.75 1.75h8.5A1.75 1.75 0 0014 14.25V1.75A1.75 1.75 0 0012.25 0h-8.5zM3.5 1.75a.25.25 0 01.25-.25h8.5a.25.25 0 01.25.25v12.5a.25.25 0 01-.25.25h-8.5a.25.25 0 01-.25-.25V1.75zM8 13a1 1 0 100-2 1 1 0 000 2z"></path> +</svg> + </span> + <span className="text-small color-fg-muted text-normal pb-1"> + Get push notifications on <a target="_blank" rel="noopener noreferrer" href="https://apps.apple.com/app/apple-store/id1477376905?ct=watch-dropdown&mt=8&pt=524675">iOS</a> or <a target="_blank" rel="noopener noreferrer" href="https://play.google.com/store/apps/details?id=com.github.android&referrer=utm_campaign%3Dwatch-dropdown%26utm_medium%3Dweb%26utm_source%3Dgithub">Android</a>. + </span> + </div> + </div> + </div> + </details-menu> + + <details-dialog + class="notifications-component-dialog " + data-target="notifications-list-subscription-form.customDialog" + aria-label="Custom dialog" + hidden + > + <div class="SelectMenu-modal notifications-component-dialog-modal overflow-visible"> + <form data-target="notifications-list-subscription-form.customform" data-action="submit:notifications-list-subscription-form#submitCustomForm" data-turbo="false" action="/notifications/subscribe" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="_pIDQ2TOfJcfNTeIqZM7JlTOFKGtWZKw1VBvt9MFAqJP9267wGNsTREk735voeJFlNO45WCL9yOZqdBbrudygQ" autocomplete="off" /> + + <input type="hidden" name="repository_id" value="418699104"> + + <header class="d-sm-none SelectMenu-header pb-0 border-bottom-0 px-2 px-sm-3"> + <h1 class="f3 SelectMenu-title d-inline-flex"> + <button + class="color-bg-default border-0 px-2 py-0 m-0 Link--secondary f5" + aria-label="Return to menu" + type="button" + data-action="click:notifications-list-subscription-form#closeCustomDialog" + > + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-arrow-left"> + <path fill-rule="evenodd" d="M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"></path> +</svg> + </button> + Custom + </h1> + </header> + + <header class="d-none d-sm-flex flex-items-start pt-1"> + <button + class="border-0 px-2 pt-1 m-0 Link--secondary f5" + style="background-color: transparent;" + aria-label="Return to menu" + type="button" + data-action="click:notifications-list-subscription-form#closeCustomDialog" + > + <svg style="position: relative; left: 2px; top: 1px" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-arrow-left"> + <path fill-rule="evenodd" d="M7.78 12.53a.75.75 0 01-1.06 0L2.47 8.28a.75.75 0 010-1.06l4.25-4.25a.75.75 0 011.06 1.06L4.81 7h7.44a.75.75 0 010 1.5H4.81l2.97 2.97a.75.75 0 010 1.06z"></path> +</svg> + </button> + + <h1 class="pt-1 pr-4 pb-0 pl-0 f5 text-bold"> + Custom + </h1> + </header> + + <fieldset> + <legend> + <div class="text-small color-fg-muted pt-0 pr-3 pb-3 pl-6 pl-sm-5 border-bottom mb-3"> + Select events you want to be notified of in addition to participating and @mentions. + </div> + </legend> + <div data-target="notifications-list-subscription-form.labelInputs"> + </div> + <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0"> + <label class="f5 text-normal"> + <input + type="checkbox" + name="thread_types[]" + value="Issue" + data-targets="notifications-list-subscription-form.threadTypeCheckboxes" + data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated" + + > + Issues + </label> + + + </div> + <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0"> + <label class="f5 text-normal"> + <input + type="checkbox" + name="thread_types[]" + value="PullRequest" + data-targets="notifications-list-subscription-form.threadTypeCheckboxes" + data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated" + + > + Pull requests + </label> + + + </div> + <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0"> + <label class="f5 text-normal"> + <input + type="checkbox" + name="thread_types[]" + value="Release" + data-targets="notifications-list-subscription-form.threadTypeCheckboxes" + data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated" + + > + Releases + </label> + + + </div> + <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0"> + <label class="f5 text-normal"> + <input + type="checkbox" + name="thread_types[]" + value="Discussion" + data-targets="notifications-list-subscription-form.threadTypeCheckboxes" + data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated" + + aria-describedby="Discussion-disabled" + aria-disabled="true" + > + Discussions + </label> + + <div + id="Discussion-disabled" + class="color-fg-muted" + > + Discussions are not enabled for this repository + </div> + + </div> + <div class="form-checkbox mr-3 ml-6 ml-sm-5 mb-2 mt-0"> + <label class="f5 text-normal"> + <input + type="checkbox" + name="thread_types[]" + value="SecurityAlert" + data-targets="notifications-list-subscription-form.threadTypeCheckboxes" + data-action="change:notifications-list-subscription-form#threadTypeCheckboxesUpdated" + + > + Security alerts + </label> + + + </div> + </fieldset> + <div class="pt-2 pb-3 px-3 d-flex flex-justify-start flex-row-reverse"> + <button name="do" value="custom" data-target="notifications-list-subscription-form.customSubmit" disabled="disabled" type="submit" data-view-component="true" class="btn-primary btn-sm btn ml-2"> Apply +</button> + + <button data-action="click:notifications-list-subscription-form#resetForm" data-close-dialog="" type="button" data-view-component="true" class="btn-sm btn"> Cancel +</button> + </div> +</form> </div> + </details-dialog> + + + <div class="notifications-component-dialog-overlay"></div> + </details> + </notifications-list-subscription-form> + + + + </li> + + <li> + <div data-view-component="true" class="BtnGroup"> + <a icon="repo-forked" href="/rlkamalapurkar/bodeplot/fork" data-hydro-click="{"event_type":"repository.click","payload":{"target":"FORK_BUTTON","repository_id":418699104,"originating_url":"https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx","user_id":30264720}}" data-hydro-click-hmac="94d183bd108fa76396cb80bc57658f0e8df407c86d663f5c8cc4b6b8c1ab7b45" data-ga-click="Repository, show fork modal, action:blob#show; text:Fork" aria-label="Fork your own copy of rlkamalapurkar/bodeplot" data-view-component="true" class="btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> + <path fill-rule="evenodd" d="M5 3.25a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm0 2.122a2.25 2.25 0 10-1.5 0v.878A2.25 2.25 0 005.75 8.5h1.5v2.128a2.251 2.251 0 101.5 0V8.5h1.5a2.25 2.25 0 002.25-2.25v-.878a2.25 2.25 0 10-1.5 0v.878a.75.75 0 01-.75.75h-4.5A.75.75 0 015 6.25v-.878zm3.75 7.378a.75.75 0 11-1.5 0 .75.75 0 011.5 0zm3-8.75a.75.75 0 100-1.5.75.75 0 000 1.5z"></path> +</svg>Fork + <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="1" data-view-component="true" class="Counter">1</span> +</a> + <details group_item="true" id="my-forks-menu-418699104" data-view-component="true" class="details-reset details-overlay BtnGroup-parent d-inline-block position-relative"> + <summary aria-label="See your forks of this repository" data-view-component="true" class="btn-sm btn BtnGroup-item px-2 float-none"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down"> + <path d="M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z"></path> +</svg> +</summary> + <details-menu + class="SelectMenu right-0" + src="/rlkamalapurkar/bodeplot/my_forks_menu_content?can_fork=true" + + role="menu" + +> + <div class="SelectMenu-modal"> + <button class="SelectMenu-closeButton position-absolute right-0 m-2" type="button" aria-label="Close menu" data-toggle-for="details-977774"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> + <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path> +</svg> + </button> + <div + id="filter-menu-977774" + class="d-flex flex-column flex-1 overflow-hidden" +> + <div + class="SelectMenu-list" + > + + <include-fragment class="SelectMenu-loading" aria-label="Loading"> + <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate"> + <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" /> + <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> +</svg> + </include-fragment> + </div> + + </div> + </div> + </details-menu> +</details></div> + </li> + + <li> + <template class="js-unstar-confirmation-dialog-template"> + <div class="Box-header"> + <h2 class="Box-title">Unstar this repository?</h2> + </div> + <div class="Box-body"> + <p class="mb-3"> + This will remove {{ repoNameWithOwner }} from the {{ listsWithCount }} that it's been added to. + </p> + <div class="form-actions"> + <form class="js-social-confirmation-form" data-turbo="false" action="{{ confirmUrl }}" accept-charset="UTF-8" method="post"> + <input type="hidden" name="authenticity_token" value="{{ confirmCsrfToken }}"> + <input type="hidden" name="confirm" value="true"> + <button data-close-dialog="true" type="submit" data-view-component="true" class="btn-danger btn width-full"> Unstar +</button> +</form> </div> + </div> +</template> + + <div data-view-component="true" class="js-toggler-container js-social-container starring-container d-flex"> + <div data-view-component="true" class="starred BtnGroup flex-1"> + <form class="js-social-form BtnGroup-parent flex-auto js-deferred-toggler-target" data-turbo="false" action="/rlkamalapurkar/bodeplot/unstar" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="ucvHytu-cPZUh6wounE_iV4Ws-o6smDS8krqmMMNb0sKQZ38OYiYdQAYQyJOvGnp_szFTAU1SmPRPSj8m9mOYA" autocomplete="off" /> + <input type="hidden" value="yBu7tYEgc1vuDgBt13NNHFgI5S2ZU83kIHJW4rii8yJ7keGDYxab2LqR72cjvht8-NKTi6bU51UDBZSG4HYSCQ" data-csrf="true" class="js-confirm-csrf-token" /> + <input type="hidden" name="context" value="repository"> + <button data-hydro-click="{"event_type":"repository.click","payload":{"target":"UNSTAR_BUTTON","repository_id":418699104,"originating_url":"https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx","user_id":30264720}}" data-hydro-click-hmac="d162afc52b4773eeaf9cd5a81563456c8ccc8ea9cdb81ff9117d5b3da10322b6" data-ga-click="Repository, click unstar button, action:blob#show; text:Unstar" aria-label="Unstar this repository (3)" type="submit" data-view-component="true" class="rounded-left-2 btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star-fill starred-button-icon d-inline-block mr-2"> + <path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25z"></path> +</svg><span data-view-component="true" class="d-inline"> + Starred +</span> <span id="repo-stars-counter-unstar" aria-label="3 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="3" data-view-component="true" class="Counter js-social-count">3</span> +</button></form> <details id="details-user-list-418699104" data-view-component="true" class="details-reset details-overlay BtnGroup-parent js-user-list-menu d-inline-block position-relative"> + <summary aria-label="Add this repository to a list" data-view-component="true" class="btn-sm btn BtnGroup-item px-2 float-none"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down"> + <path d="M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z"></path> +</svg> +</summary> + <details-menu + class="SelectMenu right-0" + src="/rlkamalapurkar/bodeplot/lists" + + role="menu" + +> + <div class="SelectMenu-modal"> + <button class="SelectMenu-closeButton position-absolute right-0 m-2" type="button" aria-label="Close menu" data-toggle-for="details-01286f"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> + <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path> +</svg> + </button> + <div + id="filter-menu-01286f" + class="d-flex flex-column flex-1 overflow-hidden" +> + <div + class="SelectMenu-list" + > + + <include-fragment class="SelectMenu-loading" aria-label="Loading"> + <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate"> + <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" /> + <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> +</svg> + </include-fragment> + </div> + + </div> + </div> + </details-menu> +</details> +</div> + <div data-view-component="true" class="unstarred BtnGroup flex-1"> + <form class="js-social-form BtnGroup-parent flex-auto" data-turbo="false" action="/rlkamalapurkar/bodeplot/star" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="ofOWdIflAHvENaAjBgT6QvWsPFaGJo3U7RRtogKxO2-rT8K8lnfVAZA82F-1e8mH6jqsteoOS-3RGGm81ekdww" autocomplete="off" /> + <input type="hidden" name="context" value="repository"> + <button data-hydro-click="{"event_type":"repository.click","payload":{"target":"STAR_BUTTON","repository_id":418699104,"originating_url":"https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx","user_id":30264720}}" data-hydro-click-hmac="20ac21edb2315748efe8c57dc4c126d95588340f69f3502780aa00d7a7a5f756" data-ga-click="Repository, click star button, action:blob#show; text:Star" aria-label="Star this repository (3)" type="submit" data-view-component="true" class="js-toggler-target rounded-left-2 btn-sm btn BtnGroup-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star d-inline-block mr-2"> + <path fill-rule="evenodd" d="M8 .25a.75.75 0 01.673.418l1.882 3.815 4.21.612a.75.75 0 01.416 1.279l-3.046 2.97.719 4.192a.75.75 0 01-1.088.791L8 12.347l-3.766 1.98a.75.75 0 01-1.088-.79l.72-4.194L.818 6.374a.75.75 0 01.416-1.28l4.21-.611L7.327.668A.75.75 0 018 .25zm0 2.445L6.615 5.5a.75.75 0 01-.564.41l-3.097.45 2.24 2.184a.75.75 0 01.216.664l-.528 3.084 2.769-1.456a.75.75 0 01.698 0l2.77 1.456-.53-3.084a.75.75 0 01.216-.664l2.24-2.183-3.096-.45a.75.75 0 01-.564-.41L8 2.694v.001z"></path> +</svg><span data-view-component="true" class="d-inline"> + Star +</span> <span id="repo-stars-counter-star" aria-label="3 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="3" data-view-component="true" class="Counter js-social-count">3</span> +</button></form> <details id="details-user-list-418699104" data-view-component="true" class="details-reset details-overlay BtnGroup-parent js-user-list-menu d-inline-block position-relative"> + <summary aria-label="Add this repository to a list" data-view-component="true" class="btn-sm btn BtnGroup-item px-2 float-none"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-triangle-down"> + <path d="M4.427 7.427l3.396 3.396a.25.25 0 00.354 0l3.396-3.396A.25.25 0 0011.396 7H4.604a.25.25 0 00-.177.427z"></path> +</svg> +</summary> + <details-menu + class="SelectMenu right-0" + src="/rlkamalapurkar/bodeplot/lists" + + role="menu" + +> + <div class="SelectMenu-modal"> + <button class="SelectMenu-closeButton position-absolute right-0 m-2" type="button" aria-label="Close menu" data-toggle-for="details-01286f"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> + <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path> +</svg> + </button> + <div + id="filter-menu-01286f" + class="d-flex flex-column flex-1 overflow-hidden" +> + <div + class="SelectMenu-list" + > + + <include-fragment class="SelectMenu-loading" aria-label="Loading"> + <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate"> + <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" /> + <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> +</svg> + </include-fragment> + </div> + + </div> + </div> + </details-menu> +</details> +</div></div> + </li> + + + +</ul> + + </div> + + <div id="responsive-meta-container" data-turbo-replace> +</div> + + + <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5"> + + <ul data-view-component="true" class="UnderlineNav-body list-style-none"> + <li data-view-component="true" class="d-inline-flex"> + <a id="code-tab" href="/rlkamalapurkar/bodeplot" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments /rlkamalapurkar/bodeplot" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Code","target":"UNDERLINE_NAV.TAB"}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected"> + + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline"> + <path fill-rule="evenodd" d="M4.72 3.22a.75.75 0 011.06 1.06L2.06 8l3.72 3.72a.75.75 0 11-1.06 1.06L.47 8.53a.75.75 0 010-1.06l4.25-4.25zm6.56 0a.75.75 0 10-1.06 1.06L13.94 8l-3.72 3.72a.75.75 0 101.06 1.06l4.25-4.25a.75.75 0 000-1.06l-4.25-4.25z"></path> +</svg> + <span data-content="Code">Code</span> + <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> + + + +</a></li> + <li data-view-component="true" class="d-inline-flex"> + <a id="issues-tab" href="/rlkamalapurkar/bodeplot/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /rlkamalapurkar/bodeplot/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Issues","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> + + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline"> + <path d="M8 9.5a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path><path fill-rule="evenodd" d="M8 0a8 8 0 100 16A8 8 0 008 0zM1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0z"></path> +</svg> + <span data-content="Issues">Issues</span> + <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="1" data-view-component="true" class="Counter">1</span> + + + +</a></li> + <li data-view-component="true" class="d-inline-flex"> + <a id="pull-requests-tab" href="/rlkamalapurkar/bodeplot/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /rlkamalapurkar/bodeplot/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Pull requests","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> + + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline"> + <path fill-rule="evenodd" d="M7.177 3.073L9.573.677A.25.25 0 0110 .854v4.792a.25.25 0 01-.427.177L7.177 3.427a.25.25 0 010-.354zM3.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122v5.256a2.251 2.251 0 11-1.5 0V5.372A2.25 2.25 0 011.5 3.25zM11 2.5h-1V4h1a1 1 0 011 1v5.628a2.251 2.251 0 101.5 0V5A2.5 2.5 0 0011 2.5zm1 10.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0zM3.75 12a.75.75 0 100 1.5.75.75 0 000-1.5z"></path> +</svg> + <span data-content="Pull requests">Pull requests</span> + <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span> + + + +</a></li> + <li data-view-component="true" class="d-inline-flex"> + <a id="actions-tab" href="/rlkamalapurkar/bodeplot/actions" data-tab-item="i3actions-tab" data-selected-links="repo_actions /rlkamalapurkar/bodeplot/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Actions","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> + + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline"> + <path fill-rule="evenodd" d="M1.5 8a6.5 6.5 0 1113 0 6.5 6.5 0 01-13 0zM8 0a8 8 0 100 16A8 8 0 008 0zM6.379 5.227A.25.25 0 006 5.442v5.117a.25.25 0 00.379.214l4.264-2.559a.25.25 0 000-.428L6.379 5.227z"></path> +</svg> + <span data-content="Actions">Actions</span> + <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> + + + +</a></li> + <li data-view-component="true" class="d-inline-flex"> + <a id="projects-tab" href="/rlkamalapurkar/bodeplot/projects" data-tab-item="i4projects-tab" data-selected-links="repo_projects new_repo_project repo_project /rlkamalapurkar/bodeplot/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Projects","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> + + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline"> + <path fill-rule="evenodd" d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0114.25 16H1.75A1.75 1.75 0 010 14.25V1.75zM1.5 6.5v7.75c0 .138.112.25.25.25H5v-8H1.5zM5 5H1.5V1.75a.25.25 0 01.25-.25H5V5zm1.5 1.5v8h7.75a.25.25 0 00.25-.25V6.5h-8zm8-1.5h-8V1.5h7.75a.25.25 0 01.25.25V5z"></path> +</svg> + <span data-content="Projects">Projects</span> + <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span> + + + +</a></li> + <li data-view-component="true" class="d-inline-flex"> + <a id="wiki-tab" href="/rlkamalapurkar/bodeplot/wiki" data-tab-item="i5wiki-tab" data-selected-links="repo_wiki /rlkamalapurkar/bodeplot/wiki" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g w" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Wiki","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> + + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book UnderlineNav-octicon d-none d-sm-inline"> + <path fill-rule="evenodd" d="M0 1.75A.75.75 0 01.75 1h4.253c1.227 0 2.317.59 3 1.501A3.744 3.744 0 0111.006 1h4.245a.75.75 0 01.75.75v10.5a.75.75 0 01-.75.75h-4.507a2.25 2.25 0 00-1.591.659l-.622.621a.75.75 0 01-1.06 0l-.622-.621A2.25 2.25 0 005.258 13H.75a.75.75 0 01-.75-.75V1.75zm8.755 3a2.25 2.25 0 012.25-2.25H14.5v9h-3.757c-.71 0-1.4.201-1.992.572l.004-7.322zm-1.504 7.324l.004-5.073-.002-2.253A2.25 2.25 0 005.003 2.5H1.5v9h3.757a3.75 3.75 0 011.994.574z"></path> +</svg> + <span data-content="Wiki">Wiki</span> + <span id="wiki-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> + + + +</a></li> + <li data-view-component="true" class="d-inline-flex"> + <a id="security-tab" href="/rlkamalapurkar/bodeplot/security" data-tab-item="i6security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /rlkamalapurkar/bodeplot/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Security","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> + + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline"> + <path fill-rule="evenodd" d="M7.467.133a1.75 1.75 0 011.066 0l5.25 1.68A1.75 1.75 0 0115 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.7 1.7 0 01-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 011.217-1.667l5.25-1.68zm.61 1.429a.25.25 0 00-.153 0l-5.25 1.68a.25.25 0 00-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.2.2 0 00.154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.25.25 0 00-.174-.237l-5.25-1.68zM9 10.5a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.75a.75.75 0 10-1.5 0v3a.75.75 0 001.5 0v-3z"></path> +</svg> + <span data-content="Security">Security</span> + <include-fragment src="/rlkamalapurkar/bodeplot/security/overall-count" accept="text/fragment+html"></include-fragment> + + +</a></li> + <li data-view-component="true" class="d-inline-flex"> + <a id="insights-tab" href="/rlkamalapurkar/bodeplot/pulse" data-tab-item="i7insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /rlkamalapurkar/bodeplot/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Insights","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> + + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline"> + <path fill-rule="evenodd" d="M1.5 1.75a.75.75 0 00-1.5 0v12.5c0 .414.336.75.75.75h14.5a.75.75 0 000-1.5H1.5V1.75zm14.28 2.53a.75.75 0 00-1.06-1.06L10 7.94 7.53 5.47a.75.75 0 00-1.06 0L3.22 8.72a.75.75 0 001.06 1.06L7 7.06l2.47 2.47a.75.75 0 001.06 0l5.25-5.25z"></path> +</svg> + <span data-content="Insights">Insights</span> + <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> + + + +</a></li> + <li data-view-component="true" class="d-inline-flex"> + <a id="settings-tab" href="/rlkamalapurkar/bodeplot/settings" data-tab-item="i8settings-tab" data-selected-links="repo_settings repo_branch_settings collaborators hooks integration_installations repo_keys_settings issue_template_editor secrets_settings_actions secrets_settings_codespaces secrets_settings_dependabot security_analysis key_links_settings repo_actions_settings notifications repository_actions_settings_runners repository_environments interaction_limits repository_actions_settings_general repository_actions_settings_add_new_runner repo_pages_settings repo_announcements repo_protected_tags_settings code_review_limits /rlkamalapurkar/bodeplot/settings" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Settings","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> + + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gear UnderlineNav-octicon d-none d-sm-inline"> + <path fill-rule="evenodd" d="M7.429 1.525a6.593 6.593 0 011.142 0c.036.003.108.036.137.146l.289 1.105c.147.56.55.967.997 1.189.174.086.341.183.501.29.417.278.97.423 1.53.27l1.102-.303c.11-.03.175.016.195.046.219.31.41.641.573.989.014.031.022.11-.059.19l-.815.806c-.411.406-.562.957-.53 1.456a4.588 4.588 0 010 .582c-.032.499.119 1.05.53 1.456l.815.806c.08.08.073.159.059.19a6.494 6.494 0 01-.573.99c-.02.029-.086.074-.195.045l-1.103-.303c-.559-.153-1.112-.008-1.529.27-.16.107-.327.204-.5.29-.449.222-.851.628-.998 1.189l-.289 1.105c-.029.11-.101.143-.137.146a6.613 6.613 0 01-1.142 0c-.036-.003-.108-.037-.137-.146l-.289-1.105c-.147-.56-.55-.967-.997-1.189a4.502 4.502 0 01-.501-.29c-.417-.278-.97-.423-1.53-.27l-1.102.303c-.11.03-.175-.016-.195-.046a6.492 6.492 0 01-.573-.989c-.014-.031-.022-.11.059-.19l.815-.806c.411-.406.562-.957.53-1.456a4.587 4.587 0 010-.582c.032-.499-.119-1.05-.53-1.456l-.815-.806c-.08-.08-.073-.159-.059-.19a6.44 6.44 0 01.573-.99c.02-.029.086-.075.195-.045l1.103.303c.559.153 1.112.008 1.529-.27.16-.107.327-.204.5-.29.449-.222.851-.628.998-1.189l.289-1.105c.029-.11.101-.143.137-.146zM8 0c-.236 0-.47.01-.701.03-.743.065-1.29.615-1.458 1.261l-.29 1.106c-.017.066-.078.158-.211.224a5.994 5.994 0 00-.668.386c-.123.082-.233.09-.3.071L3.27 2.776c-.644-.177-1.392.02-1.82.63a7.977 7.977 0 00-.704 1.217c-.315.675-.111 1.422.363 1.891l.815.806c.05.048.098.147.088.294a6.084 6.084 0 000 .772c.01.147-.038.246-.088.294l-.815.806c-.474.469-.678 1.216-.363 1.891.2.428.436.835.704 1.218.428.609 1.176.806 1.82.63l1.103-.303c.066-.019.176-.011.299.071.213.143.436.272.668.386.133.066.194.158.212.224l.289 1.106c.169.646.715 1.196 1.458 1.26a8.094 8.094 0 001.402 0c.743-.064 1.29-.614 1.458-1.26l.29-1.106c.017-.066.078-.158.211-.224a5.98 5.98 0 00.668-.386c.123-.082.233-.09.3-.071l1.102.302c.644.177 1.392-.02 1.82-.63.268-.382.505-.789.704-1.217.315-.675.111-1.422-.364-1.891l-.814-.806c-.05-.048-.098-.147-.088-.294a6.1 6.1 0 000-.772c-.01-.147.039-.246.088-.294l.814-.806c.475-.469.679-1.216.364-1.891a7.992 7.992 0 00-.704-1.218c-.428-.609-1.176-.806-1.82-.63l-1.103.303c-.066.019-.176.011-.299-.071a5.991 5.991 0 00-.668-.386c-.133-.066-.194-.158-.212-.224L10.16 1.29C9.99.645 9.444.095 8.701.031A8.094 8.094 0 008 0zm1.5 8a1.5 1.5 0 11-3 0 1.5 1.5 0 013 0zM11 8a3 3 0 11-6 0 3 3 0 016 0z"></path> +</svg> + <span data-content="Settings">Settings</span> + <span id="settings-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> + + + +</a></li> +</ul> + <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <details data-view-component="true" class="details-overlay details-reset position-relative"> + <summary role="button" data-view-component="true"> <div class="UnderlineNav-item mr-0 border-0"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal"> + <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path> +</svg> + <span class="sr-only">More</span> + </div> +</summary> + <details-menu role="menu" data-view-component="true" class="dropdown-menu dropdown-menu-sw"> <ul> + <li data-menu-item="i0code-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item selected dropdown-item" aria-current="page" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments /rlkamalapurkar/bodeplot" href="/rlkamalapurkar/bodeplot"> + Code +</a> </li> + <li data-menu-item="i1issues-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_issues repo_labels repo_milestones /rlkamalapurkar/bodeplot/issues" href="/rlkamalapurkar/bodeplot/issues"> + Issues +</a> </li> + <li data-menu-item="i2pull-requests-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_pulls checks /rlkamalapurkar/bodeplot/pulls" href="/rlkamalapurkar/bodeplot/pulls"> + Pull requests +</a> </li> + <li data-menu-item="i3actions-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_actions /rlkamalapurkar/bodeplot/actions" href="/rlkamalapurkar/bodeplot/actions"> + Actions +</a> </li> + <li data-menu-item="i4projects-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_projects new_repo_project repo_project /rlkamalapurkar/bodeplot/projects" href="/rlkamalapurkar/bodeplot/projects"> + Projects +</a> </li> + <li data-menu-item="i5wiki-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_wiki /rlkamalapurkar/bodeplot/wiki" href="/rlkamalapurkar/bodeplot/wiki"> + Wiki +</a> </li> + <li data-menu-item="i6security-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="security overview alerts policy token_scanning code_scanning /rlkamalapurkar/bodeplot/security" href="/rlkamalapurkar/bodeplot/security"> + Security +</a> </li> + <li data-menu-item="i7insights-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /rlkamalapurkar/bodeplot/pulse" href="/rlkamalapurkar/bodeplot/pulse"> + Insights +</a> </li> + <li data-menu-item="i8settings-tab" hidden> + <a role="menuitem" class="js-selected-navigation-item dropdown-item" data-selected-links="repo_settings repo_branch_settings collaborators hooks integration_installations repo_keys_settings issue_template_editor secrets_settings_actions secrets_settings_codespaces secrets_settings_dependabot security_analysis key_links_settings repo_actions_settings notifications repository_actions_settings_runners repository_environments interaction_limits repository_actions_settings_general repository_actions_settings_add_new_runner repo_pages_settings repo_announcements repo_protected_tags_settings code_review_limits /rlkamalapurkar/bodeplot/settings" href="/rlkamalapurkar/bodeplot/settings"> + Settings +</a> </li> + </ul> +</details-menu> +</details></div> +</nav> + + + + </div> + + + + <turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class=""> + <div id="repo-content-pjax-container" class="repository-content " > + <a href="https://github.dev/" class="d-none js-github-dev-shortcut" data-hotkey=".">Open in github.dev</a> + <a href="https://github.dev/" class="d-none js-github-dev-new-tab-shortcut" data-hotkey="Shift+.,Shift+>,>" target="_blank">Open in a new github.dev tab</a> + + + + + + + <div class="clearfix container-xl px-3 px-md-4 px-lg-5 mt-4"> + + +<div data-test-selector="blob-container"> + + + + + + + + +<a class="d-none js-permalink-shortcut" data-hotkey="y" href="/rlkamalapurkar/bodeplot/blob/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.dtx">Permalink</a> + +<div class="d-flex flex-items-start flex-shrink-0 pb-3 flex-wrap flex-md-nowrap flex-justify-between flex-md-justify-start"> + +<div class="position-relative"> + <details + class="js-branch-select-menu details-reset details-overlay mr-0 mb-0 " + id="branch-select-menu" + data-hydro-click-payload="{"event_type":"repository.click","payload":{"target":"REFS_SELECTOR_MENU","repository_id":418699104,"originating_url":"https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx","user_id":30264720}}" data-hydro-click-hmac="c1c4620c331fe499395f23e4b11d705872e097180066faa617a9423d8fb0679d"> + <summary class="btn css-truncate" + data-hotkey="w" + title="Switch branches or tags"> + <svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch"> + <path fill-rule="evenodd" d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"></path> +</svg> + <span class="css-truncate-target" data-menu-button>main</span> + <span class="dropdown-caret"></span> + </summary> + + +<div class="SelectMenu"> + <div class="SelectMenu-modal"> + <header class="SelectMenu-header"> + <span class="SelectMenu-title">Switch branches/tags</span> + <button class="SelectMenu-closeButton" type="button" data-toggle-for="branch-select-menu"><svg aria-label="Close menu" aria-hidden="false" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> + <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path> +</svg></button> + </header> + + <input-demux data-action="tab-container-change:input-demux#storeInput tab-container-changed:input-demux#updateInput"> + <tab-container class="d-flex flex-column js-branches-tags-tabs" style="min-height: 0;"> + <div class="SelectMenu-filter"> + <input data-target="input-demux.source" + id="context-commitish-filter-field" + class="SelectMenu-input form-control" + aria-owns="ref-list-branches" + data-controls-ref-menu-id="ref-list-branches" + autofocus + autocomplete="off" + aria-label="Find or create a branch…" + placeholder="Find or create a branch…" + type="text" + > + </div> + + <div class="SelectMenu-tabs" role="tablist" data-target="input-demux.control" > + <button class="SelectMenu-tab" type="button" role="tab" aria-selected="true">Branches</button> + <button class="SelectMenu-tab" type="button" role="tab">Tags</button> + </div> + + <div role="tabpanel" id="ref-list-branches" data-filter-placeholder="Find or create a branch…" tabindex="" class="d-flex flex-column flex-auto overflow-auto"> + <ref-selector + type="branch" + data-targets="input-demux.sinks" + data-action=" + input-entered:ref-selector#inputEntered + tab-selected:ref-selector#tabSelected + focus-list:ref-selector#focusFirstListMember + " + query-endpoint="/rlkamalapurkar/bodeplot/refs" + can-create + cache-key="v0:1659311748.791003" + current-committish="bWFpbg==" + default-branch="bWFpbg==" + name-with-owner="cmxrYW1hbGFwdXJrYXIvYm9kZXBsb3Q=" + prefetch-on-mouseover + > + + <template data-target="ref-selector.fetchFailedTemplate"> + <div class="SelectMenu-message" data-index="{{ index }}">Could not load branches</div> + </template> + + <template data-target="ref-selector.noMatchTemplate"> + <create-repo-from-selector + check-tag-name-exists-path="/rlkamalapurkar/bodeplot/branches/check_tag_name_exists" + > + <!-- '"` --><!-- </textarea></xmp> --></option></form><form data-turbo="false" action="/rlkamalapurkar/bodeplot/branches" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="5rxM_5hefL56cgTlvQIw7QE6iLZfCHyochsLZc1CKr-UNxKe5wSlRyaj6Ua5qvM4QyHMqY294erD51PXrMjR6w" /> + <input data-target="create-repo-from-selector.refName" type="hidden" name="name" value="{{ refName }}"> + <input type="hidden" name="branch" value="main"> + <input type="hidden" name="path_binary" value="Ym9kZXBsb3QuZHR4"> + + <button + class="SelectMenu-item wb-break-word" + type="submit" + role="menuitem" + data-index="{{ index }}" + data-action="click:create-repo-from-selector#createBranch" + data-hydro-click="{"event_type":"repository.click","payload":{"target":"REFS_SELECTOR_MENU_CREATE_BRANCH","repository_id":418699104,"ref_name":"{{ refName }}","originating_url":"https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx","user_id":30264720}}" data-hydro-click-hmac="e50274b5821d06e67a6f5ec2fc9d7477a5bbbf8b19542241a614390afe1c0b5c"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch SelectMenu-icon flex-self-baseline"> + <path fill-rule="evenodd" d="M11.75 2.5a.75.75 0 100 1.5.75.75 0 000-1.5zm-2.25.75a2.25 2.25 0 113 2.122V6A2.5 2.5 0 0110 8.5H6a1 1 0 00-1 1v1.128a2.251 2.251 0 11-1.5 0V5.372a2.25 2.25 0 111.5 0v1.836A2.492 2.492 0 016 7h4a1 1 0 001-1v-.628A2.25 2.25 0 019.5 3.25zM4.25 12a.75.75 0 100 1.5.75.75 0 000-1.5zM3.5 3.25a.75.75 0 111.5 0 .75.75 0 01-1.5 0z"></path> +</svg> + <div> + <span class="text-bold">Create branch: {{ refName }}</span> + <span class="color-fg-muted">from ‘main’</span> + <input type="hidden" value="vKcCT6KzpzIGITtvyWcnO17OG_IxNkmj8INgDHoywdtmjHf5Fmm_i55lq1ceVyKqYn2sCOHGggiEpqkGUAI8bQ" data-csrf="true" data-target="create-repo-from-selector.checkTagNameExistsPathCsrf" /> + </div> + </button> +</form> </create-repo-from-selector> +</template> + + + <div data-target="ref-selector.listContainer" role="menu" class="SelectMenu-list " data-turbo-frame="repo-content-turbo-frame"> + <div class="SelectMenu-loading pt-3 pb-0 overflow-hidden" aria-label="Menu is loading"> + <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate"> + <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" /> + <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> +</svg> + </div> + </div> + + + +<template data-target="ref-selector.itemTemplate"> + <a href="https://github.com/rlkamalapurkar/bodeplot/blob/{{ urlEncodedRefName }}/bodeplot.dtx" class="SelectMenu-item" role="menuitemradio" rel="nofollow" aria-checked="{{ isCurrent }}" data-index="{{ index }}" > + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check"> + <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path> +</svg> + <span class="flex-1 css-truncate css-truncate-overflow {{ isFilteringClass }}">{{ refName }}</span> + <span hidden="{{ isNotDefault }}" class="Label Label--secondary flex-self-start">default</span> + </a> +</template> + + + <footer class="SelectMenu-footer"><a href="/rlkamalapurkar/bodeplot/branches">View all branches</a></footer> + </ref-selector> + + </div> + + <div role="tabpanel" id="tags-menu" data-filter-placeholder="Find a tag" tabindex="" hidden class="d-flex flex-column flex-auto overflow-auto"> + <ref-selector + type="tag" + data-action=" + input-entered:ref-selector#inputEntered + tab-selected:ref-selector#tabSelected + focus-list:ref-selector#focusFirstListMember + " + data-targets="input-demux.sinks" + query-endpoint="/rlkamalapurkar/bodeplot/refs" + cache-key="v0:1659311748.791003" + current-committish="bWFpbg==" + default-branch="bWFpbg==" + name-with-owner="cmxrYW1hbGFwdXJrYXIvYm9kZXBsb3Q=" + > + + <template data-target="ref-selector.fetchFailedTemplate"> + <div class="SelectMenu-message" data-index="{{ index }}">Could not load tags</div> + </template> + + <template data-target="ref-selector.noMatchTemplate"> + <div class="SelectMenu-message" data-index="{{ index }}">Nothing to show</div> + </template> + + + +<template data-target="ref-selector.itemTemplate"> + <a href="https://github.com/rlkamalapurkar/bodeplot/blob/{{ urlEncodedRefName }}/bodeplot.dtx" class="SelectMenu-item" role="menuitemradio" rel="nofollow" aria-checked="{{ isCurrent }}" data-index="{{ index }}" > + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check SelectMenu-icon SelectMenu-icon--check"> + <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path> +</svg> + <span class="flex-1 css-truncate css-truncate-overflow {{ isFilteringClass }}">{{ refName }}</span> + <span hidden="{{ isNotDefault }}" class="Label Label--secondary flex-self-start">default</span> + </a> +</template> + + + <div data-target="ref-selector.listContainer" role="menu" class="SelectMenu-list" data-turbo-frame="repo-content-turbo-frame"> + <div class="SelectMenu-loading pt-3 pb-0 overflow-hidden" aria-label="Menu is loading"> + <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate"> + <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" /> + <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> +</svg> + </div> + </div> + <footer class="SelectMenu-footer"><a href="/rlkamalapurkar/bodeplot/tags">View all tags</a></footer> + </ref-selector> + </div> + </tab-container> + </input-demux> + </div> +</div> + + </details> + +</div> + + +<div class="Overlay--hidden Overlay-backdrop--center" data-modal-dialog-overlay> + <modal-dialog role="dialog" id="warn-tag-match-create-branch-dialog" aria-modal="true" aria-labelledby="warn-tag-match-create-branch-dialog-header" data-view-component="true" class="Overlay Overlay--width-large Overlay--height-auto Overlay--motion-scaleFade"> + <header class="Overlay-header Overlay-header--large Overlay-header--divided"> + <div class="Overlay-headerContentWrap"> + <div class="Overlay-titleWrap"> + <h1 id="warn-tag-match-create-branch-dialog-header" class="Overlay-title">Name already in use</h1> + </div> + <div class="Overlay-actionWrap"> + <button data-close-dialog-id="warn-tag-match-create-branch-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> + <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path> +</svg></button> + </div> + </div> + </header> + <div class="Overlay-body "> + + <div data-view-component="true"> A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch? +</div> + + </div> + <footer class="Overlay-footer Overlay-footer--alignEnd"> + <button data-close-dialog-id="warn-tag-match-create-branch-dialog" type="button" data-view-component="true" class="btn"> Cancel +</button> + <button data-submit-dialog-id="warn-tag-match-create-branch-dialog" type="button" data-view-component="true" class="btn-danger btn"> Create +</button> + </footer> +</modal-dialog></div> + + + <h2 id="blob-path" class="breadcrumb flex-auto flex-self-center min-width-0 text-normal mx-2 width-full width-md-auto flex-order-1 flex-md-order-none mt-3 mt-md-0"> + <span class="js-repo-root text-bold"><span class="js-path-segment d-inline-block wb-break-all"><a data-turbo-frame="repo-content-turbo-frame" href="/rlkamalapurkar/bodeplot"><span>bodeplot</span></a></span></span><span class="separator">/</span><strong class="final-path">bodeplot.dtx</strong> + </h2> + <a href="/rlkamalapurkar/bodeplot/find/main" data-pjax="" data-hotkey="t" data-view-component="true" class="btn mr-2 d-none d-md-block"> Go to file +</a> + <details id="blob-more-options-details" data-view-component="true" class="details-overlay details-reset position-relative"> + <summary role="button" data-view-component="true" class="btn"> <svg aria-label="More options" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal"> + <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path> +</svg> +</summary> + <div data-view-component="true"> <ul class="dropdown-menu dropdown-menu-sw"> + <li class="d-block d-md-none"> + <a class="dropdown-item d-flex flex-items-baseline" data-hydro-click="{"event_type":"repository.click","payload":{"target":"FIND_FILE_BUTTON","repository_id":418699104,"originating_url":"https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx","user_id":30264720}}" data-hydro-click-hmac="3a564da3df77b835819a7a4175de6ddf859493e7f607a77812c130b85186d0cd" data-ga-click="Repository, find file, location:repo overview" data-hotkey="t" href="/rlkamalapurkar/bodeplot/find/main"> + <span class="flex-auto">Go to file</span> + <span class="text-small color-fg-muted" aria-hidden="true">T</span> +</a> </li> + <li data-toggle-for="blob-more-options-details"> + <button data-toggle-for="jumpto-line-details-dialog" type="button" data-view-component="true" class="dropdown-item btn-link"> <span class="d-flex flex-items-baseline"> + <span class="flex-auto">Go to line</span> + <span class="text-small color-fg-muted" aria-hidden="true">L</span> + </span> +</button> </li> + <li class="dropdown-divider" role="none"></li> + <li> + <clipboard-copy data-toggle-for="blob-more-options-details" aria-label="Copy path" value="bodeplot.dtx" data-view-component="true" class="dropdown-item cursor-pointer"> + + Copy path + +</clipboard-copy> </li> + <li> + <clipboard-copy data-toggle-for="blob-more-options-details" aria-label="Copy permalink" value="https://github.com/rlkamalapurkar/bodeplot/blob/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.dtx" data-view-component="true" class="dropdown-item cursor-pointer"> + + <span class="d-flex flex-items-baseline"> + <span class="flex-auto">Copy permalink</span> + </span> + +</clipboard-copy> </li> + </ul> +</div> +</details></div> + + + + + + <div id="spoof-warning" class="mt-0 pb-3" hidden aria-hidden> + <div data-view-component="true" class="flash flash-warn mt-0 clearfix"> + + + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert float-left mt-1"> + <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path> +</svg> + + <div class="overflow-hidden">This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.</div> + + + +</div></div> + + <include-fragment src="/rlkamalapurkar/bodeplot/spoofed_commit_check/3746d1613a5eea9f1e26d4cf5bcce954068463f3" data-test-selector="spoofed-commit-check"></include-fragment> + + <div class="Box d-flex flex-column flex-shrink-0 mb-3"> + + <div class="Box-header Details js-details-container"> + <div class="d-flex flex-items-center"> + <span class="flex-shrink-0 ml-n1 mr-n1 mt-n1 mb-n1"> + <a rel="author" data-hovercard-type="user" data-hovercard-url="/users/rlkamalapurkar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/rlkamalapurkar"><img class="avatar avatar-user" src="https://avatars.githubusercontent.com/u/30264720?s=48&v=4" width="24" height="24" alt="@rlkamalapurkar" /></a> + </span> + <div class="flex-1 d-flex flex-items-center ml-3 min-width-0"> + <div class="css-truncate css-truncate-overflow"> + <a class="text-bold Link--primary" rel="author" data-hovercard-type="user" data-hovercard-url="/users/rlkamalapurkar/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/rlkamalapurkar">rlkamalapurkar</a> + + <span class="markdown-title"> + <a data-pjax="true" title="Bump to 1.1.2" class="Link--secondary" href="/rlkamalapurkar/bodeplot/commit/3746d1613a5eea9f1e26d4cf5bcce954068463f3">Bump to 1.1.2</a> + </span> + </div> + + + <span class="ml-2"> + <include-fragment accept="text/fragment+html" src="/rlkamalapurkar/bodeplot/commit/3746d1613a5eea9f1e26d4cf5bcce954068463f3/rollup?direction=e" class="d-inline"></include-fragment> + </span> + </div> + <div class="ml-3 d-flex flex-shrink-0 flex-items-center flex-justify-end color-fg-muted no-wrap"> + <span class="d-none d-md-inline"> + <span>Latest commit</span> + <a class="text-small text-mono Link--secondary" href="/rlkamalapurkar/bodeplot/commit/3746d1613a5eea9f1e26d4cf5bcce954068463f3" data-pjax>3746d16</a> + <span itemprop="dateModified"><relative-time datetime="2022-10-30T05:38:17Z" class="no-wrap">Oct 30, 2022</relative-time></span> + </span> + + <a data-pjax href="/rlkamalapurkar/bodeplot/commits/main/bodeplot.dtx" class="ml-3 no-wrap Link--primary no-underline"> + <svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-history"> + <path fill-rule="evenodd" d="M1.643 3.143L.427 1.927A.25.25 0 000 2.104V5.75c0 .138.112.25.25.25h3.646a.25.25 0 00.177-.427L2.715 4.215a6.5 6.5 0 11-1.18 4.458.75.75 0 10-1.493.154 8.001 8.001 0 101.6-5.684zM7.75 4a.75.75 0 01.75.75v2.992l2.028.812a.75.75 0 01-.557 1.392l-2.5-1A.75.75 0 017 8.25v-3.5A.75.75 0 017.75 4z"></path> +</svg> + <span class="d-none d-sm-inline"> + <strong>History</strong> + </span> + </a> + </div> + </div> + + </div> + + <div class="Box-body d-flex flex-items-center flex-auto border-bottom-0 flex-wrap" > + <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default float-left mr-3" id="blob_contributors_box"> + <summary class="Link--primary"> + <svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-people"> + <path fill-rule="evenodd" d="M5.5 3.5a2 2 0 100 4 2 2 0 000-4zM2 5.5a3.5 3.5 0 115.898 2.549 5.507 5.507 0 013.034 4.084.75.75 0 11-1.482.235 4.001 4.001 0 00-7.9 0 .75.75 0 01-1.482-.236A5.507 5.507 0 013.102 8.05 3.49 3.49 0 012 5.5zM11 4a.75.75 0 100 1.5 1.5 1.5 0 01.666 2.844.75.75 0 00-.416.672v.352a.75.75 0 00.574.73c1.2.289 2.162 1.2 2.522 2.372a.75.75 0 101.434-.44 5.01 5.01 0 00-2.56-3.012A3 3 0 0011 4z"></path> +</svg> + <strong>1</strong> + + contributor + </summary> + <details-dialog + class="Box Box--overlay d-flex flex-column anim-fade-in fast" + aria-label="Users who have contributed to this file" + src="/rlkamalapurkar/bodeplot/contributors-list/main/bodeplot.dtx" preload> + <div class="Box-header"> + <button class="Box-btn-octicon btn-octicon float-right" type="button" aria-label="Close dialog" data-close-dialog> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> + <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path> +</svg> + </button> + <h3 class="Box-title"> + Users who have contributed to this file + </h3> + </div> + <include-fragment> + <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="32" height="32" viewBox="0 0 16 16" fill="none" data-view-component="true" class="my-3 mx-auto d-block anim-rotate"> + <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" /> + <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> +</svg> + </include-fragment> + </details-dialog> + </details> + </div> +</div> + + + + + + + + + + + + + + <div data-target="readme-toc.content" class="Box mt-3 position-relative"> + + <div + class="Box-header js-blob-header py-2 pr-2 d-flex flex-shrink-0 flex-md-row flex-items-center" + + > + + + <div class="text-mono f6 flex-auto pr-3 flex-order-2 flex-md-order-1"> + + 2120 lines (2091 sloc) + <span class="file-info-divider"></span> + 95.6 KB + </div> + + <div class="d-flex py-1 py-md-0 flex-auto flex-order-1 flex-md-order-2 flex-sm-grow-0 flex-justify-between hide-sm hide-md"> + + + <div class="BtnGroup"> + <a data-permalink-href="/rlkamalapurkar/bodeplot/raw/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.dtx" href="/rlkamalapurkar/bodeplot/raw/main/bodeplot.dtx" id="raw-url" data-view-component="true" class="js-permalink-replaceable-link btn-sm btn BtnGroup-item"> Raw +</a> <a data-permalink-href="/rlkamalapurkar/bodeplot/blame/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.dtx" href="/rlkamalapurkar/bodeplot/blame/main/bodeplot.dtx" data-hotkey="b" data-view-component="true" class="js-update-url-with-hash js-permalink-replaceable-link btn-sm btn BtnGroup-item"> Blame +</a> </div> + + <div class="d-flex"> + +<div class="ml-1" data-test-selector="edit-dropdown-menu-component"> + <form class="BtnGroup-parent js-update-url-with-hash " data-turbo="false" action="/rlkamalapurkar/bodeplot/edit/main/bodeplot.dtx" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="ogSciVVe3c6UjkSMOdTrooZ3CRariBs60fN-g5VkyVMU__FRgDboEtausap2D3k1WWmBYYtNuzrLhKbxcJNxfQ" autocomplete="off" /> + <button title="Edit this file" data-hotkey="e" data-disable-with="" data-test-selector="edit-icon-button" type="submit" data-view-component="true" class="btn-sm BtnGroup-item btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil"> + <path fill-rule="evenodd" d="M11.013 1.427a1.75 1.75 0 012.474 0l1.086 1.086a1.75 1.75 0 010 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 01-.927-.928l.929-3.25a1.75 1.75 0 01.445-.758l8.61-8.61zm1.414 1.06a.25.25 0 00-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 000-.354l-1.086-1.086zM11.189 6.25L9.75 4.81l-6.286 6.287a.25.25 0 00-.064.108l-.558 1.953 1.953-.558a.249.249 0 00.108-.064l6.286-6.286z"></path> +</svg> +</button></form> + <details class="details-reset details-overlay select-menu BtnGroup-parent d-inline-block position-relative"> + <summary data-disable-invalid="" data-disable-with="" data-dropdown-tracking="{"type":"blob_edit_dropdown.more_options_click","context":{"repository_id":418699104,"actor_id":30264720,"github_dev_enabled":true,"edit_enabled":true,"small_screen":false}}" aria-label="Select additional options" data-view-component="true" class="js-blob-dropdown-click select-menu-button btn-sm btn BtnGroup-item float-none px-2"> +</summary> <div class="SelectMenu right-0"> + <div class="SelectMenu-modal width-full"> + <div class="SelectMenu-list SelectMenu-list--borderless py-2"> + <form class="SelectMenu-item js-update-url-with-hash " data-turbo="false" action="/rlkamalapurkar/bodeplot/edit/main/bodeplot.dtx" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="Z36ugw0Ij6BSb-ME2cRu3lkTalu_y3lfjfAST0cdPlvRhcNb2GC6fBBPFiKWH_xJhg3iLJ8O2V-Xh8o9ouqGdQ" autocomplete="off" /> + <button title="Edit this file" data-test-selector="edit-text-button" type="submit" data-view-component="true" class="btn-invisible btn width-full d-flex flex-justify-between color-fg-default text-normal p-0"> <div class="mr-5">Edit this file</div> + <div class="color-fg-muted">E</div> +</button></form> + <a aria-label="Open this file in github.dev" data-test-selector="github-dev-link" data-dropdown-tracking="{"type":"blob_edit_dropdown.dev_link_click","context":{"repository_id":418699104,"actor_id":30264720,"edit_enabled":true,"small_screen":false}}" href="https://github.dev/" data-view-component="true" class="SelectMenu-item js-github-dev-shortcut js-blob-dropdown-click width-full d-flex flex-justify-between color-fg-default f5 text-normal"> + <div class="mr-5 no-wrap">Open in github.dev</div> + <div class="color-fg-muted">.</div> +</a> + <a data-platforms="windows,mac" data-test-selector="github-desktop-link" aria-label="Open this file in GitHub Desktop" href="x-github-client://openRepo/https://github.com/rlkamalapurkar/bodeplot?branch=main&filepath=bodeplot.dtx" data-view-component="true" class="SelectMenu-item no-wrap js-remove-unless-platform width-full text-normal color-fg-default f5"> + Open in GitHub Desktop +</a> </div> + </div> + </div> + </details> +</div> + + + +<div data-test-selector="remote-clipboard-copy"> + <remote-clipboard-copy class="d-inline-block btn-octicon" style="height: 26px" data-src="/rlkamalapurkar/bodeplot/raw/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.dtx" data-action="click:remote-clipboard-copy#remoteCopy"> + + + <span data-target="remote-clipboard-copy.idle"> <span class="tooltipped tooltipped-nw cursor-pointer" data-hydro-click="{"event_type":"repository.click","payload":{"target":"COPY_RAW_CONTENTS_BUTTON","repository_id":418699104,"originating_url":"https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx","user_id":30264720}}" data-hydro-click-hmac="8f37951dad2d8aa3fb41b1693b2cae724a08266137cfd94460fe3d796b0dcc62" aria-label="Copy raw contents"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy"> + <path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path> +</svg> +</span></span> + <span data-target="remote-clipboard-copy.fetching" hidden="hidden"> <svg style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate"> + <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" /> + <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> +</svg> +</span> + <span data-target="remote-clipboard-copy.success" hidden="hidden"> <span class="tooltipped tooltipped-nw" aria-label="Copied!"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check color-fg-success"> + <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path> +</svg> + </span> +</span> + <span data-target="remote-clipboard-copy.error" hidden="hidden"> <span class="tooltipped tooltipped-nw" aria-label="Something went wrong. Try again."> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert color-fg-attention"> + <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path> +</svg> + </span> +</span> +</remote-clipboard-copy></div> + + + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="inline-form" data-turbo="false" action="/rlkamalapurkar/bodeplot/delete/main/bodeplot.dtx" accept-charset="UTF-8" method="post"><input type="hidden" name="authenticity_token" value="82q89xa2ESvmLsnxxWrIHifQJfEadxnRIqMbSYWd-K4BNgOZnOnoTw7e-aAZAIZvwgWOcZTBYSfPON_62cqDqQ" /> + <button class="btn-octicon btn-octicon-danger tooltipped tooltipped-nw" type="submit" + aria-label="Delete this file" data-disable-with> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash"> + <path fill-rule="evenodd" d="M6.5 1.75a.25.25 0 01.25-.25h2.5a.25.25 0 01.25.25V3h-3V1.75zm4.5 0V3h2.25a.75.75 0 010 1.5H2.75a.75.75 0 010-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75zM4.496 6.675a.75.75 0 10-1.492.15l.66 6.6A1.75 1.75 0 005.405 15h5.19c.9 0 1.652-.681 1.741-1.576l.66-6.6a.75.75 0 00-1.492-.149l-.66 6.6a.25.25 0 01-.249.225h-5.19a.25.25 0 01-.249-.225l-.66-6.6z"></path> +</svg> + </button> +</form> </div> + </div> + + <div class="d-flex hide-lg hide-xl flex-order-2 flex-grow-0"> + <details class="dropdown details-reset details-overlay d-inline-block"> + <summary + class="js-blob-dropdown-click btn-octicon" + aria-haspopup="true" + aria-label="possible actions" + data-test-selector="small-screen-more-options" + data-dropdown-tracking="{"type":"blob_edit_dropdown.more_options_click","context":{"repository_id":418699104,"actor_id":30264720,"github_dev_enabled":true,"edit_enabled":true,"small_screen":true}}" + > + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal"> + <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path> +</svg> + </summary> + + <ul class="dropdown-menu dropdown-menu-sw" style="width: 175px"> + <li> + <a class="dropdown-item tooltipped tooltipped-nw js-remove-unless-platform" + data-platforms="windows,mac" + href="x-github-client://openRepo/https://github.com/rlkamalapurkar/bodeplot?branch=main&filepath=bodeplot.dtx"> + Open with Desktop + </a> + </li> + <li> + <a class="dropdown-item" href="/rlkamalapurkar/bodeplot/raw/main/bodeplot.dtx"> + View raw + </a> + </li> + <li> + <remote-clipboard-copy class="dropdown-item" data-src="/rlkamalapurkar/bodeplot/raw/main/bodeplot.dtx" data-action="click:remote-clipboard-copy#remoteCopy"> + + + <span data-target="remote-clipboard-copy.idle"> <span class="cursor-pointer" data-hydro-click="{"event_type":"repository.click","payload":{"target":"COPY_RAW_CONTENTS_BUTTON","repository_id":418699104,"originating_url":"https://github.com/rlkamalapurkar/bodeplot/blob/main/bodeplot.dtx","user_id":30264720}}" data-hydro-click-hmac="8f37951dad2d8aa3fb41b1693b2cae724a08266137cfd94460fe3d796b0dcc62"> + Copy raw contents +</span></span> + <span data-target="remote-clipboard-copy.fetching" hidden="hidden"> Copy raw contents + <span class="d-inline-block position-relative" style="top: 3px"> + <svg aria-label="fetching contents…" style="box-sizing: content-box; color: var(--color-icon-primary);" width="16" height="16" viewBox="0 0 16 16" fill="none" data-view-component="true" class="anim-rotate"> + <circle cx="8" cy="8" r="7" stroke="currentColor" stroke-opacity="0.25" stroke-width="2" vector-effect="non-scaling-stroke" /> + <path d="M15 8a7.002 7.002 0 00-7-7" stroke="currentColor" stroke-width="2" stroke-linecap="round" vector-effect="non-scaling-stroke" /> +</svg> + </span> +</span> + <span data-target="remote-clipboard-copy.success" hidden="hidden"> Copy raw contents + <svg aria-label="Copied!" role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check color-fg-success"> + <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path> +</svg> +</span> + <span data-target="remote-clipboard-copy.error" hidden="hidden"> Copy raw contents + <svg aria-label="Something went wrong. Try again." role="img" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert color-fg-attention"> + <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path> +</svg> +</span> +</remote-clipboard-copy> </li> + <li> + <a class="dropdown-item" href="/rlkamalapurkar/bodeplot/blame/main/bodeplot.dtx"> + View blame + </a> + </li> + + <li class="dropdown-divider" role="none"></li> + <li> + <a class="dropdown-item" href="/rlkamalapurkar/bodeplot/edit/main/bodeplot.dtx">Edit file</a> + </li> + <li> + <a class="dropdown-item js-github-dev-shortcut js-blob-dropdown-click" data-test-selector="small-screen-github-dev-link" data-dropdown-tracking="{"type":"blob_edit_dropdown.dev_link_click","context":{"repository_id":418699104,"actor_id":30264720,"edit_enabled":true,"small_screen":true}}" href="https://github.dev/">Open with github.dev</a> + </li> + <li> + <a class="dropdown-item menu-item-danger" href="/rlkamalapurkar/bodeplot/delete/main/bodeplot.dtx">Delete file</a> + </li> + </ul> + </details> + </div> +</div> + + + + <div itemprop="text" class="Box-body p-0 blob-wrapper data type-tex gist-border-0"> + + +<div class="js-check-bidi js-blob-code-container blob-code-content"> + + <template class="js-file-alert-template"> + <div data-view-component="true" class="flash flash-warn flash-full d-flex flex-items-center"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> + <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path> +</svg> + + <span> + This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. + <a href="https://github.co/hiddenchars" target="_blank">Learn more about bidirectional Unicode characters</a> + </span> + + + <div data-view-component="true" class="flash-action"> <a href="{{ revealButtonHref }}" data-view-component="true" class="btn-sm btn"> Show hidden characters +</a> +</div> +</div></template> +<template class="js-line-alert-template"> + <span aria-label="This line has hidden Unicode characters" data-view-component="true" class="line-alert tooltipped tooltipped-e"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> + <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path> +</svg> +</span></template> + + <table data-hpc class="highlight tab-size js-file-line-container js-code-nav-container js-tagsearch-file" data-tab-size="8" data-paste-markdown-skip data-tagsearch-lang="TeX" data-tagsearch-path="bodeplot.dtx"> + <tr> + <td id="L1" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1"></td> + <td id="LC1" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \iffalse meta-comment</span></td> + </tr> + <tr> + <td id="L2" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2"></td> + <td id="LC2" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L3" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="3"></td> + <td id="LC3" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Copyright (C) 2021 by Rushikesh Kamalapurkar <rlkamalapurkar@gmail.com></span></td> + </tr> + <tr> + <td id="L4" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="4"></td> + <td id="LC4" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> -----------------------------------------------------------</span></td> + </tr> + <tr> + <td id="L5" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="5"></td> + <td id="LC5" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L6" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="6"></td> + <td id="LC6" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This file may be distributed and/or modified under the conditions of</span></td> + </tr> + <tr> + <td id="L7" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="7"></td> + <td id="LC7" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> the LaTeX Project Public License, either version 1.3c of this license</span></td> + </tr> + <tr> + <td id="L8" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="8"></td> + <td id="LC8" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> or (at your option) any later version. The latest version of this</span></td> + </tr> + <tr> + <td id="L9" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="9"></td> + <td id="LC9" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> license is in:</span></td> + </tr> + <tr> + <td id="L10" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="10"></td> + <td id="LC10" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L11" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="11"></td> + <td id="LC11" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> http://www.latex-project.org/lppl.txt</span></td> + </tr> + <tr> + <td id="L12" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="12"></td> + <td id="LC12" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L13" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="13"></td> + <td id="LC13" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> and version 1.3c or later is part of all distributions of LaTeX</span></td> + </tr> + <tr> + <td id="L14" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="14"></td> + <td id="LC14" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> version 2006/05/20 or later.</span></td> + </tr> + <tr> + <td id="L15" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="15"></td> + <td id="LC15" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L16" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="16"></td> + <td id="LC16" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \fi</span></td> + </tr> + <tr> + <td id="L17" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="17"></td> + <td id="LC17" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L18" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="18"></td> + <td id="LC18" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \iffalse</span></td> + </tr> + <tr> + <td id="L19" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="19"></td> + <td id="LC19" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span><package>\NeedsTeXFormat{LaTeX2e}[2006/05/20]</span></td> + </tr> + <tr> + <td id="L20" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="20"></td> + <td id="LC20" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span><package>\ProvidesPackage{bodeplot}</span></td> + </tr> + <tr> + <td id="L21" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="21"></td> + <td id="LC21" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span><package>\RequirePackage{pdftexcmds}</span></td> + </tr> + <tr> + <td id="L22" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="22"></td> + <td id="LC22" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span><package>\RequirePackage{ifplatform}</span></td> + </tr> + <tr> + <td id="L23" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="23"></td> + <td id="LC23" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span><package>\RequirePackage{environ}</span></td> + </tr> + <tr> + <td id="L24" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="24"></td> + <td id="LC24" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span><package>\RequirePackage{pgfplots}</span></td> + </tr> + <tr> + <td id="L25" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="25"></td> + <td id="LC25" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span><package> \pgfplotsset{compat=1.18}</span></td> + </tr> + <tr> + <td id="L26" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="26"></td> + <td id="LC26" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span><package> \usepgfplotslibrary{groupplots}</span></td> + </tr> + <tr> + <td id="L27" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="27"></td> + <td id="LC27" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L28" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="28"></td> + <td id="LC28" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span><*driver></span></td> + </tr> + <tr> + <td id="L29" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="29"></td> + <td id="LC29" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\documentclass</span>{<span class="pl-c1">ltxdoc</span>}</td> + </tr> + <tr> + <td id="L30" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="30"></td> + <td id="LC30" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>{<span class="pl-c1">cprotect</span>}</td> + </tr> + <tr> + <td id="L31" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="31"></td> + <td id="LC31" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>[<span class="pl-v">declutter</span>]{<span class="pl-c1">bodeplot</span>}</td> + </tr> + <tr> + <td id="L32" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="32"></td> + <td id="LC32" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>[<span class="pl-v">colorlinks</span>]{<span class="pl-c1">hyperref</span>}</td> + </tr> + <tr> + <td id="L33" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="33"></td> + <td id="LC33" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>{<span class="pl-c1">iftex</span>}</td> + </tr> + <tr> + <td id="L34" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="34"></td> + <td id="LC34" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\iftutex</span> <span class="pl-c"><span class="pl-c">%</span> LuaTeX, XeTeX</span></td> + </tr> + <tr> + <td id="L35" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="35"></td> + <td id="LC35" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\usepackage</span>{<span class="pl-c1">fontspec</span>}</td> + </tr> + <tr> + <td id="L36" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="36"></td> + <td id="LC36" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\setmonofont</span>{DejaVuSansMono}[Scale=MatchUppercase]</td> + </tr> + <tr> + <td id="L37" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="37"></td> + <td id="LC37" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span> <span class="pl-c"><span class="pl-c">%</span> old engines</span></td> + </tr> + <tr> + <td id="L38" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="38"></td> + <td id="LC38" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\usepackage</span>[<span class="pl-v">T1</span>]{<span class="pl-c1">fontenc</span>}</td> + </tr> + <tr> + <td id="L39" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="39"></td> + <td id="LC39" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\usepackage</span>{<span class="pl-c1">lmodern</span>}</td> + </tr> + <tr> + <td id="L40" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="40"></td> + <td id="LC40" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\usepackage</span>[<span class="pl-v">scaled</span>]{<span class="pl-c1">DejaVuSansMono</span>}</td> + </tr> + <tr> + <td id="L41" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="41"></td> + <td id="LC41" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L42" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="42"></td> + <td id="LC42" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>{<span class="pl-c1">showexpl</span>}</td> + </tr> + <tr> + <td id="L43" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="43"></td> + <td id="LC43" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\lstset</span>{</td> + </tr> + <tr> + <td id="L44" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="44"></td> + <td id="LC44" class="blob-code blob-code-inner js-file-line"> explpreset={numbers=none},</td> + </tr> + <tr> + <td id="L45" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="45"></td> + <td id="LC45" class="blob-code blob-code-inner js-file-line"> language=[LaTeX]Tex,</td> + </tr> + <tr> + <td id="L46" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="46"></td> + <td id="LC46" class="blob-code blob-code-inner js-file-line"> basicstyle=<span class="pl-c1">\ttfamily\tiny</span>,</td> + </tr> + <tr> + <td id="L47" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="47"></td> + <td id="LC47" class="blob-code blob-code-inner js-file-line"> commentstyle=<span class="pl-c1">\itshape\ttfamily\tiny</span>,</td> + </tr> + <tr> + <td id="L48" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="48"></td> + <td id="LC48" class="blob-code blob-code-inner js-file-line"> showspaces=false,</td> + </tr> + <tr> + <td id="L49" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="49"></td> + <td id="LC49" class="blob-code blob-code-inner js-file-line"> showstringspaces=false,</td> + </tr> + <tr> + <td id="L50" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="50"></td> + <td id="LC50" class="blob-code blob-code-inner js-file-line"> breaklines=true,</td> + </tr> + <tr> + <td id="L51" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="51"></td> + <td id="LC51" class="blob-code blob-code-inner js-file-line"> backgroundcolor=<span class="pl-c1">\color</span>{white!90!black},</td> + </tr> + <tr> + <td id="L52" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="52"></td> + <td id="LC52" class="blob-code blob-code-inner js-file-line"> breakautoindent=true,</td> + </tr> + <tr> + <td id="L53" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="53"></td> + <td id="LC53" class="blob-code blob-code-inner js-file-line"> captionpos=t</td> + </tr> + <tr> + <td id="L54" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="54"></td> + <td id="LC54" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L55" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="55"></td> + <td id="LC55" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>{<span class="pl-c1">geometry</span>}</td> + </tr> + <tr> + <td id="L56" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="56"></td> + <td id="LC56" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\geometry</span>{lmargin=2in,rmargin=1in,tmargin=1in,bmargin=1in}</td> + </tr> + <tr> + <td id="L57" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="57"></td> + <td id="LC57" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\usetikzlibrary</span>{decorations.markings,arrows.meta,spy,backgrounds}</td> + </tr> + <tr> + <td id="L58" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="58"></td> + <td id="LC58" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\usepackage</span>[<span class="pl-v">nottoc</span>]{<span class="pl-c1">tocbibind</span>}</td> + </tr> + <tr> + <td id="L59" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="59"></td> + <td id="LC59" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\sloppy</span></td> + </tr> + <tr> + <td id="L60" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="60"></td> + <td id="LC60" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\EnableCrossrefs</span></td> + </tr> + <tr> + <td id="L61" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="61"></td> + <td id="LC61" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\CodelineIndex</span></td> + </tr> + <tr> + <td id="L62" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="62"></td> + <td id="LC62" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\RecordChanges</span></td> + </tr> + <tr> + <td id="L63" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="63"></td> + <td id="LC63" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">document</span>}</td> + </tr> + <tr> + <td id="L64" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="64"></td> + <td id="LC64" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\DocInput</span>{bodeplot.dtx}</td> + </tr> + <tr> + <td id="L65" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="65"></td> + <td id="LC65" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PrintChanges</span></td> + </tr> + <tr> + <td id="L66" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="66"></td> + <td id="LC66" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PrintIndex</span></td> + </tr> + <tr> + <td id="L67" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="67"></td> + <td id="LC67" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">document</span>}</td> + </tr> + <tr> + <td id="L68" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="68"></td> + <td id="LC68" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></driver></span></td> + </tr> + <tr> + <td id="L69" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="69"></td> + <td id="LC69" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \fi</span></td> + </tr> + <tr> + <td id="L70" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="70"></td> + <td id="LC70" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L71" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="71"></td> + <td id="LC71" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \CheckSum{1726}</span></td> + </tr> + <tr> + <td id="L72" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="72"></td> + <td id="LC72" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L73" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="73"></td> + <td id="LC73" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0}{2021/10/25}{Initial release}</span></td> + </tr> + <tr> + <td id="L74" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="74"></td> + <td id="LC74" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.4}{2021/11/05}{Fixed unintended optional argument macro expansion}</span></td> + </tr> + <tr> + <td id="L75" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="75"></td> + <td id="LC75" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.6}{2021/11/18}{Fixed issue \#3}</span></td> + </tr> + <tr> + <td id="L76" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="76"></td> + <td id="LC76" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.7}{2021/12/02}{Removed unnecessary semicolons}</span></td> + </tr> + <tr> + <td id="L77" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="77"></td> + <td id="LC77" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.7}{2022/01/18}{Updated documentation}</span></td> + </tr> + <tr> + <td id="L78" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="78"></td> + <td id="LC78" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.8}{2022/07/06}{Added a new class option `declutter'}</span></td> + </tr> + <tr> + <td id="L79" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="79"></td> + <td id="LC79" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.1.0}{2022/07/06}{Fixed phase wrapping in gnuplot mode}</span></td> + </tr> + <tr> + <td id="L80" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="80"></td> + <td id="LC80" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.1.1}{2022/07/31}{Enable Hz and rad units}</span></td> + </tr> + <tr> + <td id="L81" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="81"></td> + <td id="LC81" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L82" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="82"></td> + <td id="LC82" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \GetFileInfo{bodeplot.sty}</span></td> + </tr> + <tr> + <td id="L83" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="83"></td> + <td id="LC83" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DoNotIndex{\newcommand,\xdef,\gdef,\def,\edef,\addplot,\approx,\arabic,\opt,\typ,\obj,\else,\if@pgfarg,\if@Hzarg,\if@radarg,\if@declutterarg,\fi,\begin,\end,\feature,\footnotesize,\draw,\detokenize,\DeclareOption,\foreach,\ifdim,\ifodd,\Im,\Re,\let,\newif,\nextgroupplot,\noexpand,\expandafter,\unexpanded,\PackageError,\PackageWarning,\relax,\RequirePackage,\tikzset,\pgfmathsetmacro,\pgfmathtruncatemacro,\ProcessOptions}</span></td> + </tr> + <tr> + <td id="L84" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="84"></td> + <td id="LC84" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L85" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="85"></td> + <td id="LC85" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \title{The \textsf{bodeplot} package\\version 1.1.2}</span></td> + </tr> + <tr> + <td id="L86" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="86"></td> + <td id="LC86" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \author{Rushikesh Kamalapurkar \\ \texttt{rlkamalapurkar@gmail.com}}</span></td> + </tr> + <tr> + <td id="L87" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="87"></td> + <td id="LC87" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L88" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="88"></td> + <td id="LC88" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \maketitle</span></td> + </tr> + <tr> + <td id="L89" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="89"></td> + <td id="LC89" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \tableofcontents</span></td> + </tr> + <tr> + <td id="L90" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="90"></td> + <td id="LC90" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \clearpage</span></td> + </tr> + <tr> + <td id="L91" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="91"></td> + <td id="LC91" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \section{Introduction}</span></td> + </tr> + <tr> + <td id="L92" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="92"></td> + <td id="LC92" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L93" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="93"></td> + <td id="LC93" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Generate Bode, Nyquist, and Nichols plots for transfer functions in the canonical (TF) form \begin{equation}G(s) = e^{-Ts}\frac{b_ms^m+\cdots+b_1s+b_0}{a_ns^n+\cdots+a_1s+a_0}\label{eq:TF}\end{equation} and the zero-pole-gain (ZPK) form \begin{equation}G(s) = Ke^{-Ts}\frac{(s-z_1)(s-z_2)\cdots(s-z_m)}{(s-p_1)(s-p_2)\cdots(s-p_n)}.\label{eq:ZPK}\end{equation} In the equations above, $b_m,\cdots,b_0$ and $a_n,\cdots,a_0$ are real coefficients, $T\geq 0$ is the loop delay, $z_1,\cdots,z_m$ and $p_1,\cdots,p_n$ are complex zeros and poles of the transfer function, respectively, and $K\in \Re$ is the loop gain.</span></td> + </tr> + <tr> + <td id="L94" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="94"></td> + <td id="LC94" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L95" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="95"></td> + <td id="LC95" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> For transfer functions in the ZPK format in (\ref{eq:ZPK}) \emph{with zero delay}, this package also supports linear and asymptotic approximation of Bode plots.</span></td> + </tr> + <tr> + <td id="L96" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="96"></td> + <td id="LC96" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> </span></td> + </tr> + <tr> + <td id="L97" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="97"></td> + <td id="LC97" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> By default, all phase plots use degrees as units. Use the |rad| package option or the optional argument |tikz/{phase unit=rad}| to generate plots in radians. The |phase unit| key accepts either |rad| or |deg| as inputs and needs to be added to the |tikzpicture| environment that contains the plots. </span></td> + </tr> + <tr> + <td id="L98" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="98"></td> + <td id="LC98" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L99" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="99"></td> + <td id="LC99" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> By default, frequency inputs and outputs are in radians per second. Use the |Hz| package option or the optional argument |tikz/{frequency unit=Hz}| to generate plots in hertz. The |frequency unit| key accepts either |rad| or |Hz| as inputs and needs to be added to the |tikzpicture| environment that contains the plots.</span></td> + </tr> + <tr> + <td id="L100" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="100"></td> + <td id="LC100" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{External Dependencies}</span></td> + </tr> + <tr> + <td id="L101" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="101"></td> + <td id="LC101" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> By default, the package uses |gnuplot| to do all the computations. If |gnuplot| is not available, the |pgf| package option can be used to do the calculations using the native |pgf| math engine. Compilation using the |pgf| math engine is typically slower, but the end result should be the identical (other than phase wrapping in the TF form, see limitations below).</span></td> + </tr> + <tr> + <td id="L102" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="102"></td> + <td id="LC102" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\subsection{Directory Structure}</span></td> + </tr> + <tr> + <td id="L103" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="103"></td> + <td id="LC103" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Since version 1.0.8, the |bodeplot| package places all |gnuplot| temporary files in the working directory. The package option |declutter| restores the original behavior where the temporary files are placed in a folder called |gnuplot|.</span></td> + </tr> + <tr> + <td id="L104" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="104"></td> + <td id="LC104" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Limitations} </span></td> + </tr> + <tr> + <td id="L105" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="105"></td> + <td id="LC105" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td> + </tr> + <tr> + <td id="L106" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="106"></td> + <td id="LC106" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item In |pgf| mode, Bode phase plots and Nichols charts in TF form wrap angles so that they are always between 0 and 360$^\circ$ or 0 and $2\pi$ radian. As such, these plots will show phase wrapping discontinuities. Since v1.1.1, in |gnuplot| mode, the package uses the |smooth unwrap| filter to correct wrapping discontinuities. As of now, I have not found a way to do this in |pgf| mode, any merge requests or ideas you may have are welcome!</span></td> + </tr> + <tr> + <td id="L107" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="107"></td> + <td id="LC107" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Use of the |declutter| option with other directory management tools such as a |tikzexternalize| prefix is not recommended.</span></td> + </tr> + <tr> + <td id="L108" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="108"></td> + <td id="LC108" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td> + </tr> + <tr> + <td id="L109" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="109"></td> + <td id="LC109" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \clearpage</span></td> + </tr> + <tr> + <td id="L110" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="110"></td> + <td id="LC110" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \section{TL;DR}</span></td> + </tr> + <tr> + <td id="L111" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="111"></td> + <td id="LC111" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> All Bode plots in this section are for the transfer function (with and without a transport delay)</span></td> + </tr> + <tr> + <td id="L112" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="112"></td> + <td id="LC112" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{equation}</span></td> + </tr> + <tr> + <td id="L113" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="113"></td> + <td id="LC113" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> G(s) = 10\frac{s(s+0.1+0.5\mathrm{i})(s+0.1-0.5\mathrm{i})}{(s+0.5+10\mathrm{i})(s+0.5-10\mathrm{i})} = \frac{s(10s^2+2s+2.6)}{(s^2+s+100.25)}.</span></td> + </tr> + <tr> + <td id="L114" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="114"></td> + <td id="LC114" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{equation}</span></td> + </tr> + <tr> + <td id="L115" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="115"></td> + <td id="LC115" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \iffalse</span></td> + </tr> + <tr> + <td id="L116" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="116"></td> + <td id="LC116" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span><*ignore></span></td> + </tr> + <tr> + <td id="L117" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="117"></td> + <td id="LC117" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \fi</span></td> + </tr> + <tr> + <td id="L118" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="118"></td> + <td id="LC118" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L119" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="119"></td> + <td id="LC119" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L120" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="120"></td> + <td id="LC120" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L121" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="121"></td> + <td id="LC121" class="blob-code blob-code-inner js-file-line">{<span class="pl-c1">\centering</span> Bode plot in ZPK format</td> + </tr> + <tr> + <td id="L122" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="122"></td> + <td id="LC122" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=l,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td> + </tr> + <tr> + <td id="L123" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="123"></td> + <td id="LC123" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\BodeZPK</span>{<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L124" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="124"></td> + <td id="LC124" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td> + </tr> + <tr> + <td id="L125" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="125"></td> + <td id="LC125" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td> + </tr> + <tr> + <td id="L126" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="126"></td> + <td id="LC126" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L127" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="127"></td> + <td id="LC127" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L128" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="128"></td> + <td id="LC128" class="blob-code blob-code-inner js-file-line">{0.01}</td> + </tr> + <tr> + <td id="L129" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="129"></td> + <td id="LC129" class="blob-code blob-code-inner js-file-line">{100}</td> + </tr> + <tr> + <td id="L130" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="130"></td> + <td id="LC130" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L131" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="131"></td> + <td id="LC131" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L132" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="132"></td> + <td id="LC132" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L133" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="133"></td> + <td id="LC133" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L134" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="134"></td> + <td id="LC134" class="blob-code blob-code-inner js-file-line">Same Bode plot over the same frequency range but supplied in Hz, in TF format with arrow decoration, transport delay, unit, and color customization (the phase plot may show wrapping if the |pgf| package option is used)</td> + </tr> + <tr> + <td id="L135" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="135"></td> + <td id="LC135" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=r,width=0.5<span class="pl-c1">\textwidth</span>]</td> + </tr> + <tr> + <td id="L136" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="136"></td> + <td id="LC136" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\BodeTF</span>[<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L137" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="137"></td> + <td id="LC137" class="blob-code blob-code-inner js-file-line"> samples=1000,</td> + </tr> + <tr> + <td id="L138" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="138"></td> + <td id="LC138" class="blob-code blob-code-inner js-file-line"> plot/mag/{blue,thick},</td> + </tr> + <tr> + <td id="L139" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="139"></td> + <td id="LC139" class="blob-code blob-code-inner js-file-line"> plot/ph/{green,thick},</td> + </tr> + <tr> + <td id="L140" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="140"></td> + <td id="LC140" class="blob-code blob-code-inner js-file-line"> tikz/{<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L141" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="141"></td> + <td id="LC141" class="blob-code blob-code-inner js-file-line"> >=latex,</td> + </tr> + <tr> + <td id="L142" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="142"></td> + <td id="LC142" class="blob-code blob-code-inner js-file-line"> phase unit=rad,</td> + </tr> + <tr> + <td id="L143" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="143"></td> + <td id="LC143" class="blob-code blob-code-inner js-file-line"> frequency unit=Hz<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L144" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="144"></td> + <td id="LC144" class="blob-code blob-code-inner js-file-line"> },</td> + </tr> + <tr> + <td id="L145" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="145"></td> + <td id="LC145" class="blob-code blob-code-inner js-file-line"> commands/mag/{</td> + </tr> + <tr> + <td id="L146" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="146"></td> + <td id="LC146" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\draw</span>[->](axis cs:0.1,40) -- (axis cs:{10/(2*pi)},60);</td> + </tr> + <tr> + <td id="L147" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="147"></td> + <td id="LC147" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\node</span> at (axis cs: 0.08,30) {<span class="pl-c1">\tiny</span> Resonant Peak};</td> + </tr> + <tr> + <td id="L148" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="148"></td> + <td id="LC148" class="blob-code blob-code-inner js-file-line"> }<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L149" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="149"></td> + <td id="LC149" class="blob-code blob-code-inner js-file-line">]</td> + </tr> + <tr> + <td id="L150" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="150"></td> + <td id="LC150" class="blob-code blob-code-inner js-file-line">{<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L151" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="151"></td> + <td id="LC151" class="blob-code blob-code-inner js-file-line"> num/{10,2,2.6,0},</td> + </tr> + <tr> + <td id="L152" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="152"></td> + <td id="LC152" class="blob-code blob-code-inner js-file-line"> den/{1,1,100.25}<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L153" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="153"></td> + <td id="LC153" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L154" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="154"></td> + <td id="LC154" class="blob-code blob-code-inner js-file-line">{0.01/(2*pi)}</td> + </tr> + <tr> + <td id="L155" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="155"></td> + <td id="LC155" class="blob-code blob-code-inner js-file-line">{100/(2*pi)}</td> + </tr> + <tr> + <td id="L156" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="156"></td> + <td id="LC156" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L157" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="157"></td> + <td id="LC157" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L158" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="158"></td> + <td id="LC158" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L159" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="159"></td> + <td id="LC159" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\clearpage</span></td> + </tr> + <tr> + <td id="L160" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="160"></td> + <td id="LC160" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L161" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="161"></td> + <td id="LC161" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L162" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="162"></td> + <td id="LC162" class="blob-code blob-code-inner js-file-line">Linear approximation with customization</td> + </tr> + <tr> + <td id="L163" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="163"></td> + <td id="LC163" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=l,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td> + </tr> + <tr> + <td id="L164" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="164"></td> + <td id="LC164" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\BodeZPK</span>[<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L165" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="165"></td> + <td id="LC165" class="blob-code blob-code-inner js-file-line"> plot/mag/{red,thick},</td> + </tr> + <tr> + <td id="L166" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="166"></td> + <td id="LC166" class="blob-code blob-code-inner js-file-line"> plot/ph/{blue,thick},</td> + </tr> + <tr> + <td id="L167" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="167"></td> + <td id="LC167" class="blob-code blob-code-inner js-file-line"> axes/mag/{ytick distance=40},</td> + </tr> + <tr> + <td id="L168" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="168"></td> + <td id="LC168" class="blob-code blob-code-inner js-file-line"> axes/ph/{ytick distance=90},</td> + </tr> + <tr> + <td id="L169" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="169"></td> + <td id="LC169" class="blob-code blob-code-inner js-file-line"> approx/linear<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L170" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="170"></td> + <td id="LC170" class="blob-code blob-code-inner js-file-line">]{<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L171" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="171"></td> + <td id="LC171" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td> + </tr> + <tr> + <td id="L172" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="172"></td> + <td id="LC172" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td> + </tr> + <tr> + <td id="L173" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="173"></td> + <td id="LC173" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L174" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="174"></td> + <td id="LC174" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L175" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="175"></td> + <td id="LC175" class="blob-code blob-code-inner js-file-line">{0.01}</td> + </tr> + <tr> + <td id="L176" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="176"></td> + <td id="LC176" class="blob-code blob-code-inner js-file-line">{100}</td> + </tr> + <tr> + <td id="L177" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="177"></td> + <td id="LC177" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L178" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="178"></td> + <td id="LC178" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L179" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="179"></td> + <td id="LC179" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L180" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="180"></td> + <td id="LC180" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L181" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="181"></td> + <td id="LC181" class="blob-code blob-code-inner js-file-line">Plot with delay and customization</td> + </tr> + <tr> + <td id="L182" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="182"></td> + <td id="LC182" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=r,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td> + </tr> + <tr> + <td id="L183" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="183"></td> + <td id="LC183" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\BodeZPK</span>[<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L184" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="184"></td> + <td id="LC184" class="blob-code blob-code-inner js-file-line"> plot/mag/{blue,thick},</td> + </tr> + <tr> + <td id="L185" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="185"></td> + <td id="LC185" class="blob-code blob-code-inner js-file-line"> plot/ph/{green,thick},</td> + </tr> + <tr> + <td id="L186" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="186"></td> + <td id="LC186" class="blob-code blob-code-inner js-file-line"> axes/mag/ytick distance=40,</td> + </tr> + <tr> + <td id="L187" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="187"></td> + <td id="LC187" class="blob-code blob-code-inner js-file-line"> axes/ph/ytick distance=90<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L188" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="188"></td> + <td id="LC188" class="blob-code blob-code-inner js-file-line">]{<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L189" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="189"></td> + <td id="LC189" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td> + </tr> + <tr> + <td id="L190" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="190"></td> + <td id="LC190" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td> + </tr> + <tr> + <td id="L191" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="191"></td> + <td id="LC191" class="blob-code blob-code-inner js-file-line"> k/10,</td> + </tr> + <tr> + <td id="L192" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="192"></td> + <td id="LC192" class="blob-code blob-code-inner js-file-line"> d/0.01<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L193" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="193"></td> + <td id="LC193" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L194" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="194"></td> + <td id="LC194" class="blob-code blob-code-inner js-file-line">{0.01}</td> + </tr> + <tr> + <td id="L195" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="195"></td> + <td id="LC195" class="blob-code blob-code-inner js-file-line">{100}</td> + </tr> + <tr> + <td id="L196" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="196"></td> + <td id="LC196" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L197" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="197"></td> + <td id="LC197" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L198" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="198"></td> + <td id="LC198" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L199" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="199"></td> + <td id="LC199" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\clearpage</span></td> + </tr> + <tr> + <td id="L200" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="200"></td> + <td id="LC200" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L201" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="201"></td> + <td id="LC201" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L202" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="202"></td> + <td id="LC202" class="blob-code blob-code-inner js-file-line">Individual gain and phase plots with more customization</td> + </tr> + <tr> + <td id="L203" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="203"></td> + <td id="LC203" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L204" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="204"></td> + <td id="LC204" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">minipage</span>}[t]{0.45<span class="pl-c1">\textwidth</span>}</td> + </tr> + <tr> + <td id="L205" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="205"></td> + <td id="LC205" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=t,width=<span class="pl-c1">\columnwidth</span>]</td> + </tr> + <tr> + <td id="L206" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="206"></td> + <td id="LC206" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">BodeMagPlot</span>}[<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L207" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="207"></td> + <td id="LC207" class="blob-code blob-code-inner js-file-line"> axes/{height=2cm,</td> + </tr> + <tr> + <td id="L208" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="208"></td> + <td id="LC208" class="blob-code blob-code-inner js-file-line"> width=4cm}</td> + </tr> + <tr> + <td id="L209" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="209"></td> + <td id="LC209" class="blob-code blob-code-inner js-file-line">]</td> + </tr> + <tr> + <td id="L210" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="210"></td> + <td id="LC210" class="blob-code blob-code-inner js-file-line">{0.01}</td> + </tr> + <tr> + <td id="L211" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="211"></td> + <td id="LC211" class="blob-code blob-code-inner js-file-line">{100}</td> + </tr> + <tr> + <td id="L212" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="212"></td> + <td id="LC212" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addBodeZPKPlots</span>[<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L213" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="213"></td> + <td id="LC213" class="blob-code blob-code-inner js-file-line"> true/{black,thick},</td> + </tr> + <tr> + <td id="L214" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="214"></td> + <td id="LC214" class="blob-code blob-code-inner js-file-line"> linear/{red,dashed,thick},</td> + </tr> + <tr> + <td id="L215" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="215"></td> + <td id="LC215" class="blob-code blob-code-inner js-file-line"> asymptotic/{blue,dotted,thick}<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L216" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="216"></td> + <td id="LC216" class="blob-code blob-code-inner js-file-line"> ]</td> + </tr> + <tr> + <td id="L217" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="217"></td> + <td id="LC217" class="blob-code blob-code-inner js-file-line"> {magnitude}</td> + </tr> + <tr> + <td id="L218" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="218"></td> + <td id="LC218" class="blob-code blob-code-inner js-file-line"> {<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L219" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="219"></td> + <td id="LC219" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td> + </tr> + <tr> + <td id="L220" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="220"></td> + <td id="LC220" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td> + </tr> + <tr> + <td id="L221" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="221"></td> + <td id="LC221" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L222" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="222"></td> + <td id="LC222" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L223" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="223"></td> + <td id="LC223" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">BodeMagPlot</span>}</td> + </tr> + <tr> + <td id="L224" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="224"></td> + <td id="LC224" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L225" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="225"></td> + <td id="LC225" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">minipage</span>}<span class="pl-c1">\hfill</span></td> + </tr> + <tr> + <td id="L226" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="226"></td> + <td id="LC226" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">minipage</span>}[t]{0.45<span class="pl-c1">\textwidth</span>}</td> + </tr> + <tr> + <td id="L227" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="227"></td> + <td id="LC227" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=t,width=<span class="pl-c1">\columnwidth</span>]</td> + </tr> + <tr> + <td id="L228" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="228"></td> + <td id="LC228" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">BodePhPlot</span>}[<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L229" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="229"></td> + <td id="LC229" class="blob-code blob-code-inner js-file-line"> height=2cm,</td> + </tr> + <tr> + <td id="L230" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="230"></td> + <td id="LC230" class="blob-code blob-code-inner js-file-line"> width=4cm,</td> + </tr> + <tr> + <td id="L231" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="231"></td> + <td id="LC231" class="blob-code blob-code-inner js-file-line"> ytick distance=90</td> + </tr> + <tr> + <td id="L232" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="232"></td> + <td id="LC232" class="blob-code blob-code-inner js-file-line">]</td> + </tr> + <tr> + <td id="L233" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="233"></td> + <td id="LC233" class="blob-code blob-code-inner js-file-line">{0.01}</td> + </tr> + <tr> + <td id="L234" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="234"></td> + <td id="LC234" class="blob-code blob-code-inner js-file-line">{100}</td> + </tr> + <tr> + <td id="L235" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="235"></td> + <td id="LC235" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addBodeZPKPlots</span>[<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L236" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="236"></td> + <td id="LC236" class="blob-code blob-code-inner js-file-line"> true/{black,thick},</td> + </tr> + <tr> + <td id="L237" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="237"></td> + <td id="LC237" class="blob-code blob-code-inner js-file-line"> linear/{red,dashed,thick},</td> + </tr> + <tr> + <td id="L238" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="238"></td> + <td id="LC238" class="blob-code blob-code-inner js-file-line"> asymptotic/{blue,dotted,thick}<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L239" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="239"></td> + <td id="LC239" class="blob-code blob-code-inner js-file-line"> ]</td> + </tr> + <tr> + <td id="L240" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="240"></td> + <td id="LC240" class="blob-code blob-code-inner js-file-line"> {phase}</td> + </tr> + <tr> + <td id="L241" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="241"></td> + <td id="LC241" class="blob-code blob-code-inner js-file-line"> {<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L242" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="242"></td> + <td id="LC242" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td> + </tr> + <tr> + <td id="L243" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="243"></td> + <td id="LC243" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td> + </tr> + <tr> + <td id="L244" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="244"></td> + <td id="LC244" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L245" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="245"></td> + <td id="LC245" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L246" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="246"></td> + <td id="LC246" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">BodePhPlot</span>}</td> + </tr> + <tr> + <td id="L247" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="247"></td> + <td id="LC247" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L248" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="248"></td> + <td id="LC248" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">minipage</span>}</td> + </tr> + <tr> + <td id="L249" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="249"></td> + <td id="LC249" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L250" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="250"></td> + <td id="LC250" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L251" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="251"></td> + <td id="LC251" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L252" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="252"></td> + <td id="LC252" class="blob-code blob-code-inner js-file-line">Nichols chart</td> + </tr> + <tr> + <td id="L253" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="253"></td> + <td id="LC253" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=l,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td> + </tr> + <tr> + <td id="L254" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="254"></td> + <td id="LC254" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NicholsZPK</span>[samples=1000]</td> + </tr> + <tr> + <td id="L255" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="255"></td> + <td id="LC255" class="blob-code blob-code-inner js-file-line">{<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L256" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="256"></td> + <td id="LC256" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td> + </tr> + <tr> + <td id="L257" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="257"></td> + <td id="LC257" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td> + </tr> + <tr> + <td id="L258" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="258"></td> + <td id="LC258" class="blob-code blob-code-inner js-file-line"> k/10,</td> + </tr> + <tr> + <td id="L259" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="259"></td> + <td id="LC259" class="blob-code blob-code-inner js-file-line"> d/0.01<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L260" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="260"></td> + <td id="LC260" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L261" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="261"></td> + <td id="LC261" class="blob-code blob-code-inner js-file-line">{0.001}</td> + </tr> + <tr> + <td id="L262" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="262"></td> + <td id="LC262" class="blob-code blob-code-inner js-file-line">{500}</td> + </tr> + <tr> + <td id="L263" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="263"></td> + <td id="LC263" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L264" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="264"></td> + <td id="LC264" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L265" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="265"></td> + <td id="LC265" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L266" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="266"></td> + <td id="LC266" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L267" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="267"></td> + <td id="LC267" class="blob-code blob-code-inner js-file-line">Same Nichols chart in TF format (may show wrapping in |pgf| mode)</td> + </tr> + <tr> + <td id="L268" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="268"></td> + <td id="LC268" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=r,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td> + </tr> + <tr> + <td id="L269" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="269"></td> + <td id="LC269" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NicholsTF</span>[samples=1000]</td> + </tr> + <tr> + <td id="L270" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="270"></td> + <td id="LC270" class="blob-code blob-code-inner js-file-line">{<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L271" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="271"></td> + <td id="LC271" class="blob-code blob-code-inner js-file-line"> num/{10,2,2.6,0},</td> + </tr> + <tr> + <td id="L272" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="272"></td> + <td id="LC272" class="blob-code blob-code-inner js-file-line"> den/{1,1,100.25},</td> + </tr> + <tr> + <td id="L273" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="273"></td> + <td id="LC273" class="blob-code blob-code-inner js-file-line"> d/0.01<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L274" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="274"></td> + <td id="LC274" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L275" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="275"></td> + <td id="LC275" class="blob-code blob-code-inner js-file-line">{0.001}</td> + </tr> + <tr> + <td id="L276" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="276"></td> + <td id="LC276" class="blob-code blob-code-inner js-file-line">{500}</td> + </tr> + <tr> + <td id="L277" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="277"></td> + <td id="LC277" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L278" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="278"></td> + <td id="LC278" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L279" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="279"></td> + <td id="LC279" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L280" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="280"></td> + <td id="LC280" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\clearpage</span></td> + </tr> + <tr> + <td id="L281" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="281"></td> + <td id="LC281" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L282" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="282"></td> + <td id="LC282" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L283" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="283"></td> + <td id="LC283" class="blob-code blob-code-inner js-file-line">Multiple Nichols charts with customization</td> + </tr> + <tr> + <td id="L284" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="284"></td> + <td id="LC284" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=l,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td> + </tr> + <tr> + <td id="L285" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="285"></td> + <td id="LC285" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">NicholsChart</span>}[<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L286" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="286"></td> + <td id="LC286" class="blob-code blob-code-inner js-file-line"> ytick distance=20,</td> + </tr> + <tr> + <td id="L287" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="287"></td> + <td id="LC287" class="blob-code blob-code-inner js-file-line"> xtick distance=30</td> + </tr> + <tr> + <td id="L288" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="288"></td> + <td id="LC288" class="blob-code blob-code-inner js-file-line">]</td> + </tr> + <tr> + <td id="L289" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="289"></td> + <td id="LC289" class="blob-code blob-code-inner js-file-line">{0.001}</td> + </tr> + <tr> + <td id="L290" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="290"></td> + <td id="LC290" class="blob-code blob-code-inner js-file-line">{100}</td> + </tr> + <tr> + <td id="L291" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="291"></td> + <td id="LC291" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addNicholsZPKChart</span> [red,samples=1000] {<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L292" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="292"></td> + <td id="LC292" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td> + </tr> + <tr> + <td id="L293" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="293"></td> + <td id="LC293" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td> + </tr> + <tr> + <td id="L294" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="294"></td> + <td id="LC294" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L295" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="295"></td> + <td id="LC295" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L296" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="296"></td> + <td id="LC296" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addNicholsZPKChart</span> [blue,samples=1000] {<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L297" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="297"></td> + <td id="LC297" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td> + </tr> + <tr> + <td id="L298" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="298"></td> + <td id="LC298" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td> + </tr> + <tr> + <td id="L299" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="299"></td> + <td id="LC299" class="blob-code blob-code-inner js-file-line"> k/5<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L300" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="300"></td> + <td id="LC300" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L301" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="301"></td> + <td id="LC301" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">NicholsChart</span>}</td> + </tr> + <tr> + <td id="L302" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="302"></td> + <td id="LC302" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L303" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="303"></td> + <td id="LC303" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L304" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="304"></td> + <td id="LC304" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L305" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="305"></td> + <td id="LC305" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L306" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="306"></td> + <td id="LC306" class="blob-code blob-code-inner js-file-line">Nyquist plot</td> + </tr> + <tr> + <td id="L307" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="307"></td> + <td id="LC307" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=r,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td> + </tr> + <tr> + <td id="L308" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="308"></td> + <td id="LC308" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NyquistZPK</span>[plot/{red,thick,samples=1000}]</td> + </tr> + <tr> + <td id="L309" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="309"></td> + <td id="LC309" class="blob-code blob-code-inner js-file-line">{<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L310" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="310"></td> + <td id="LC310" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td> + </tr> + <tr> + <td id="L311" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="311"></td> + <td id="LC311" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td> + </tr> + <tr> + <td id="L312" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="312"></td> + <td id="LC312" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L313" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="313"></td> + <td id="LC313" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L314" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="314"></td> + <td id="LC314" class="blob-code blob-code-inner js-file-line">{-30}</td> + </tr> + <tr> + <td id="L315" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="315"></td> + <td id="LC315" class="blob-code blob-code-inner js-file-line">{30}</td> + </tr> + <tr> + <td id="L316" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="316"></td> + <td id="LC316" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L317" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="317"></td> + <td id="LC317" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L318" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="318"></td> + <td id="LC318" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L319" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="319"></td> + <td id="LC319" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L320" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="320"></td> + <td id="LC320" class="blob-code blob-code-inner js-file-line">Nyquist plot in TF format with arrows</td> + </tr> + <tr> + <td id="L321" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="321"></td> + <td id="LC321" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=l,width=0.5<span class="pl-c1">\textwidth</span>]</td> + </tr> + <tr> + <td id="L322" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="322"></td> + <td id="LC322" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NyquistTF</span>[<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L323" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="323"></td> + <td id="LC323" class="blob-code blob-code-inner js-file-line"> plot/{<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L324" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="324"></td> + <td id="LC324" class="blob-code blob-code-inner js-file-line"> samples=1000,</td> + </tr> + <tr> + <td id="L325" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="325"></td> + <td id="LC325" class="blob-code blob-code-inner js-file-line"> postaction=decorate,</td> + </tr> + <tr> + <td id="L326" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="326"></td> + <td id="LC326" class="blob-code blob-code-inner js-file-line"> decoration={<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L327" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="327"></td> + <td id="LC327" class="blob-code blob-code-inner js-file-line"> markings,</td> + </tr> + <tr> + <td id="L328" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="328"></td> + <td id="LC328" class="blob-code blob-code-inner js-file-line"> mark=between positions 0.1 and 0.9 step 5em with {<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L329" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="329"></td> + <td id="LC329" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\arrow</span>{Stealth [length=2mm, blue]}</td> + </tr> + <tr> + <td id="L330" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="330"></td> + <td id="LC330" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L331" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="331"></td> + <td id="LC331" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L332" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="332"></td> + <td id="LC332" class="blob-code blob-code-inner js-file-line"> }<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L333" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="333"></td> + <td id="LC333" class="blob-code blob-code-inner js-file-line">]</td> + </tr> + <tr> + <td id="L334" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="334"></td> + <td id="LC334" class="blob-code blob-code-inner js-file-line">{<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L335" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="335"></td> + <td id="LC335" class="blob-code blob-code-inner js-file-line"> num/{10,2,2.6,0},</td> + </tr> + <tr> + <td id="L336" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="336"></td> + <td id="LC336" class="blob-code blob-code-inner js-file-line"> den/{1,1,100.25}<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L337" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="337"></td> + <td id="LC337" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L338" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="338"></td> + <td id="LC338" class="blob-code blob-code-inner js-file-line">{-30}</td> + </tr> + <tr> + <td id="L339" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="339"></td> + <td id="LC339" class="blob-code blob-code-inner js-file-line">{30}</td> + </tr> + <tr> + <td id="L340" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="340"></td> + <td id="LC340" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L341" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="341"></td> + <td id="LC341" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L342" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="342"></td> + <td id="LC342" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L343" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="343"></td> + <td id="LC343" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\clearpage</span></td> + </tr> + <tr> + <td id="L344" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="344"></td> + <td id="LC344" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L345" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="345"></td> + <td id="LC345" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L346" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="346"></td> + <td id="LC346" class="blob-code blob-code-inner js-file-line">Multiple Nyquist plots with customization</td> + </tr> + <tr> + <td id="L347" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="347"></td> + <td id="LC347" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=r,hsep=20pt,width=0.5<span class="pl-c1">\textwidth</span>]</td> + </tr> + <tr> + <td id="L348" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="348"></td> + <td id="LC348" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">NyquistPlot</span>}{-30}{30}</td> + </tr> + <tr> + <td id="L349" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="349"></td> + <td id="LC349" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addNyquistZPKPlot</span> [red,samples=1000] {<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L350" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="350"></td> + <td id="LC350" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td> + </tr> + <tr> + <td id="L351" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="351"></td> + <td id="LC351" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td> + </tr> + <tr> + <td id="L352" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="352"></td> + <td id="LC352" class="blob-code blob-code-inner js-file-line"> k/10<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L353" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="353"></td> + <td id="LC353" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L354" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="354"></td> + <td id="LC354" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addNyquistZPKPlot</span> [blue,samples=1000] {<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L355" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="355"></td> + <td id="LC355" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td> + </tr> + <tr> + <td id="L356" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="356"></td> + <td id="LC356" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td> + </tr> + <tr> + <td id="L357" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="357"></td> + <td id="LC357" class="blob-code blob-code-inner js-file-line"> k/5<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L358" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="358"></td> + <td id="LC358" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L359" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="359"></td> + <td id="LC359" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">NyquistPlot</span>}</td> + </tr> + <tr> + <td id="L360" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="360"></td> + <td id="LC360" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L361" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="361"></td> + <td id="LC361" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L362" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="362"></td> + <td id="LC362" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L363" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="363"></td> + <td id="LC363" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L364" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="364"></td> + <td id="LC364" class="blob-code blob-code-inner js-file-line">Nyquist plots with additional commands, using two different macros</td> + </tr> + <tr> + <td id="L365" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="365"></td> + <td id="LC365" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L366" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="366"></td> + <td id="LC366" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">minipage</span>}[t]{0.48<span class="pl-c1">\textwidth</span>}</td> + </tr> + <tr> + <td id="L367" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="367"></td> + <td id="LC367" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=t,width=<span class="pl-c1">\columnwidth</span>]</td> + </tr> + <tr> + <td id="L368" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="368"></td> + <td id="LC368" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">NyquistPlot</span>}[<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L369" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="369"></td> + <td id="LC369" class="blob-code blob-code-inner js-file-line"> tikz/{</td> + </tr> + <tr> + <td id="L370" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="370"></td> + <td id="LC370" class="blob-code blob-code-inner js-file-line"> spy using outlines={<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L371" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="371"></td> + <td id="LC371" class="blob-code blob-code-inner js-file-line"> circle,</td> + </tr> + <tr> + <td id="L372" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="372"></td> + <td id="LC372" class="blob-code blob-code-inner js-file-line"> magnification=3, </td> + </tr> + <tr> + <td id="L373" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="373"></td> + <td id="LC373" class="blob-code blob-code-inner js-file-line"> connect spies,</td> + </tr> + <tr> + <td id="L374" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="374"></td> + <td id="LC374" class="blob-code blob-code-inner js-file-line"> size=2cm</td> + </tr> + <tr> + <td id="L375" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="375"></td> + <td id="LC375" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L376" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="376"></td> + <td id="LC376" class="blob-code blob-code-inner js-file-line"> }<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L377" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="377"></td> + <td id="LC377" class="blob-code blob-code-inner js-file-line">]</td> + </tr> + <tr> + <td id="L378" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="378"></td> + <td id="LC378" class="blob-code blob-code-inner js-file-line">{-30}{30}</td> + </tr> + <tr> + <td id="L379" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="379"></td> + <td id="LC379" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addNyquistZPKPlot</span> [blue,samples=1000] {<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L380" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="380"></td> + <td id="LC380" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td> + </tr> + <tr> + <td id="L381" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="381"></td> + <td id="LC381" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td> + </tr> + <tr> + <td id="L382" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="382"></td> + <td id="LC382" class="blob-code blob-code-inner js-file-line"> k/0.5<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L383" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="383"></td> + <td id="LC383" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L384" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="384"></td> + <td id="LC384" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\coordinate</span> (spyon) at (axis cs:0,0);</td> + </tr> + <tr> + <td id="L385" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="385"></td> + <td id="LC385" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\coordinate</span> (spyat) at (axis cs:-22,5);</td> + </tr> + <tr> + <td id="L386" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="386"></td> + <td id="LC386" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\spy</span> [green] on (spyon) in </td> + </tr> + <tr> + <td id="L387" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="387"></td> + <td id="LC387" class="blob-code blob-code-inner js-file-line"> node [fill=white] at (spyat);</td> + </tr> + <tr> + <td id="L388" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="388"></td> + <td id="LC388" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">NyquistPlot</span>}</td> + </tr> + <tr> + <td id="L389" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="389"></td> + <td id="LC389" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L390" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="390"></td> + <td id="LC390" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">minipage</span>}<span class="pl-c1">\hfill</span></td> + </tr> + <tr> + <td id="L391" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="391"></td> + <td id="LC391" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">minipage</span>}[t]{0.48<span class="pl-c1">\textwidth</span>}</td> + </tr> + <tr> + <td id="L392" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="392"></td> + <td id="LC392" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\begin</span>{<span class="pl-smi">LTXexample</span>}[pos=t,width=<span class="pl-c1">\columnwidth</span>]</td> + </tr> + <tr> + <td id="L393" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="393"></td> + <td id="LC393" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NyquistZPK</span>[<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L394" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="394"></td> + <td id="LC394" class="blob-code blob-code-inner js-file-line"> plot/{blue,samples=1000},</td> + </tr> + <tr> + <td id="L395" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="395"></td> + <td id="LC395" class="blob-code blob-code-inner js-file-line"> tikz/{</td> + </tr> + <tr> + <td id="L396" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="396"></td> + <td id="LC396" class="blob-code blob-code-inner js-file-line"> spy using outlines={<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L397" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="397"></td> + <td id="LC397" class="blob-code blob-code-inner js-file-line"> circle,</td> + </tr> + <tr> + <td id="L398" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="398"></td> + <td id="LC398" class="blob-code blob-code-inner js-file-line"> magnification=3, </td> + </tr> + <tr> + <td id="L399" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="399"></td> + <td id="LC399" class="blob-code blob-code-inner js-file-line"> connect spies,</td> + </tr> + <tr> + <td id="L400" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="400"></td> + <td id="LC400" class="blob-code blob-code-inner js-file-line"> size=2cm</td> + </tr> + <tr> + <td id="L401" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="401"></td> + <td id="LC401" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L402" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="402"></td> + <td id="LC402" class="blob-code blob-code-inner js-file-line"> },</td> + </tr> + <tr> + <td id="L403" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="403"></td> + <td id="LC403" class="blob-code blob-code-inner js-file-line"> commands/{</td> + </tr> + <tr> + <td id="L404" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="404"></td> + <td id="LC404" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\coordinate</span> (spyon) at (axis cs:0,0);</td> + </tr> + <tr> + <td id="L405" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="405"></td> + <td id="LC405" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\coordinate</span> (spyat) at (axis cs:-22,5);</td> + </tr> + <tr> + <td id="L406" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="406"></td> + <td id="LC406" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\spy</span> [green] on (spyon) in </td> + </tr> + <tr> + <td id="L407" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="407"></td> + <td id="LC407" class="blob-code blob-code-inner js-file-line"> node [fill=white] at (spyat);</td> + </tr> + <tr> + <td id="L408" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="408"></td> + <td id="LC408" class="blob-code blob-code-inner js-file-line"> }<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L409" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="409"></td> + <td id="LC409" class="blob-code blob-code-inner js-file-line">]</td> + </tr> + <tr> + <td id="L410" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="410"></td> + <td id="LC410" class="blob-code blob-code-inner js-file-line">{<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L411" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="411"></td> + <td id="LC411" class="blob-code blob-code-inner js-file-line"> z/{0,{-0.1,-0.5},{-0.1,0.5}},</td> + </tr> + <tr> + <td id="L412" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="412"></td> + <td id="LC412" class="blob-code blob-code-inner js-file-line"> p/{{-0.5,-10},{-0.5,10}},</td> + </tr> + <tr> + <td id="L413" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="413"></td> + <td id="LC413" class="blob-code blob-code-inner js-file-line"> k/0.5<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L414" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="414"></td> + <td id="LC414" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L415" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="415"></td> + <td id="LC415" class="blob-code blob-code-inner js-file-line">{-30}</td> + </tr> + <tr> + <td id="L416" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="416"></td> + <td id="LC416" class="blob-code blob-code-inner js-file-line">{30}</td> + </tr> + <tr> + <td id="L417" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="417"></td> + <td id="LC417" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">LTXexample</span>}</td> + </tr> + <tr> + <td id="L418" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="418"></td> + <td id="LC418" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\end</span>{<span class="pl-smi">minipage</span>}}</td> + </tr> + <tr> + <td id="L419" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="419"></td> + <td id="LC419" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L420" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="420"></td> + <td id="LC420" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\hrulefill</span></td> + </tr> + <tr> + <td id="L421" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="421"></td> + <td id="LC421" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\clearpage</span></td> + </tr> + <tr> + <td id="L422" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="422"></td> + <td id="LC422" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L423" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="423"></td> + <td id="LC423" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \iffalse</span></td> + </tr> + <tr> + <td id="L424" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="424"></td> + <td id="LC424" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></ignore></span></td> + </tr> + <tr> + <td id="L425" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="425"></td> + <td id="LC425" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \fi</span></td> + </tr> + <tr> + <td id="L426" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="426"></td> + <td id="LC426" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> </span></td> + </tr> + <tr> + <td id="L427" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="427"></td> + <td id="LC427" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \section{Usage}</span></td> + </tr> + <tr> + <td id="L428" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="428"></td> + <td id="LC428" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent In all the macros described here, the frequency limits supplied by the user are assumed to be in |rad/s| unless either the |Hz| package option is used or the optional argument |tikz/{frequency unit=Hz}| is supplied to the |tikzpicture| environment. All phase plots are getenrated in degrees unless either the |rad| package option is used or the optional argument |tikz/{frequency unit=rad}| is supplied to the |tikzpicture| environment.</span></td> + </tr> + <tr> + <td id="L429" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="429"></td> + <td id="LC429" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L430" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="430"></td> + <td id="LC430" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Bode plots}</span></td> + </tr> + <tr> + <td id="L431" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="431"></td> + <td id="LC431" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\BodeZPK}</span></td> + </tr> + <tr> + <td id="L432" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="432"></td> + <td id="LC432" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\BodeZPK| \oarg{obj1/typ1/\marg{opt1},obj2/typ2/\marg{opt2},...}\\</span></td> + </tr> + <tr> + <td id="L433" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="433"></td> + <td id="LC433" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}\\</span></td> + </tr> + <tr> + <td id="L434" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="434"></td> + <td id="LC434" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{min-freq}\marg{max-freq}</span></td> + </tr> + <tr> + <td id="L435" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="435"></td> + <td id="LC435" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L436" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="436"></td> + <td id="LC436" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Plots the Bode plot of a transfer function given in ZPK format using the |groupplot| environment. The three mandatory arguments include: (1) a list of tuples, comprised of the zeros, the poles, the gain, and the transport delay of the transfer function, (2) the lower end of the frequency range for the $x-$axis, and (3) the higher end of the frequency range for the $x-$axis. The zeros and the poles are complex numbers, entered as a comma-separated list of comma-separated lists, of the form |{{real part 1,imaginary part 1},| |{real part 2,imaginary part 2},...}|. If the imaginary part is not provided, it is assumed to be zero.</span></td> + </tr> + <tr> + <td id="L437" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="437"></td> + <td id="LC437" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L438" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="438"></td> + <td id="LC438" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The optional argument is comprised of a comma separated list of tuples, either |obj/typ/{opt}|, or |obj/{opt}|, or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the group, the axes, and the plots according to:</span></td> + </tr> + <tr> + <td id="L439" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="439"></td> + <td id="LC439" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td> + </tr> + <tr> + <td id="L440" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="440"></td> + <td id="LC440" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |obj/typ/{opt}|:</span></td> + </tr> + <tr> + <td id="L441" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="441"></td> + <td id="LC441" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td> + </tr> + <tr> + <td id="L442" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="442"></td> + <td id="LC442" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |plot/typ/{opt}|: modify plot properties by adding options |{opt}| to the |\addplot| macro for the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|.</span></td> + </tr> + <tr> + <td id="L443" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="443"></td> + <td id="LC443" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |axes/typ/{opt}|: modify axis properties by adding options |{opt}| to the |\nextgroupplot| macro for the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|.</span></td> + </tr> + <tr> + <td id="L444" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="444"></td> + <td id="LC444" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |commands/typ/{opt}|: add any valid TikZ commands (including the the parametric function generator macros in this package, such as |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|) to the magnitude plot if |typ| is |mag| and the phase plot if |typ| is |ph|. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual. For example, a TikZ command is used in the description of the |\BodeTF| macro below to mark the gain crossover frequency on the Bode Magnitude plot. </span></td> + </tr> + <tr> + <td id="L445" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="445"></td> + <td id="LC445" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td> + </tr> + <tr> + <td id="L446" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="446"></td> + <td id="LC446" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |obj/{opt}|:</span></td> + </tr> + <tr> + <td id="L447" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="447"></td> + <td id="LC447" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td> + </tr> + <tr> + <td id="L448" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="448"></td> + <td id="LC448" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |plot/{opt}|: adds options |{opt}| to |\addplot| macros for both the magnitude and the phase plots.</span></td> + </tr> + <tr> + <td id="L449" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="449"></td> + <td id="LC449" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |axes/{opt}|: adds options |{opt}| to |\nextgroupplot| macros for both the magnitude and the phase plots.</span></td> + </tr> + <tr> + <td id="L450" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="450"></td> + <td id="LC450" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |group/{opt}|: adds options |{opt}| to the |groupplot| environment.</span></td> + </tr> + <tr> + <td id="L451" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="451"></td> + <td id="LC451" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |tikz/{opt}|: adds options |{opt}| to the |tikzpicture| environment.</span></td> + </tr> + <tr> + <td id="L452" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="452"></td> + <td id="LC452" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |approx/linear|: plots linear approximation.</span></td> + </tr> + <tr> + <td id="L453" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="453"></td> + <td id="LC453" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |approx/asymptotic|: plots asymptotic approximation.</span></td> + </tr> + <tr> + <td id="L454" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="454"></td> + <td id="LC454" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td> + </tr> + <tr> + <td id="L455" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="455"></td> + <td id="LC455" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |{opt}| add all of the supplied options to |\addplot| macros for both the magnitude and the phase plots.</span></td> + </tr> + <tr> + <td id="L456" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="456"></td> + <td id="LC456" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td> + </tr> + <tr> + <td id="L457" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="457"></td> + <td id="LC457" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The options |{opt}| can be any |key=value| options that are supported by the |pgfplots| macros they are added to.</span></td> + </tr> + <tr> + <td id="L458" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="458"></td> + <td id="LC458" class="blob-code blob-code-inner js-file-line"> +</td> + </tr> + <tr> + <td id="L459" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="459"></td> + <td id="LC459" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> For example, given a transfer function \begin{equation}G(s) = 10\frac{s(s+0.1+0.5\mathrm{i})(s+0.1-0.5\mathrm{i})}{(s+0.5+10\mathrm{i})(s+0.5-10\mathrm{i})},\label{eq:ZPKExample}\end{equation} its Bode plot over the frequency range $[0.01,100]$ can be generated using\\</span></td> + </tr> + <tr> + <td id="L460" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="460"></td> + <td id="LC460" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\BodeZPK [blue,thick]|\\</span></td> + </tr> + <tr> + <td id="L461" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="461"></td> + <td id="LC461" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}|\\</span></td> + </tr> + <tr> + <td id="L462" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="462"></td> + <td id="LC462" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {0.01}{100}|\\</span></td> + </tr> + <tr> + <td id="L463" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="463"></td> + <td id="LC463" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> which generates the plot in Figure \ref{simpleBode}. If a delay is not specified, it is assumed to be zero. If a gain is not specified, it is assumed to be 1. By default, each of the axes, excluding ticks and labels, are 5cm wide and 2.5cm high. The width and the height, along with other properties of the plots, the axes, and the group can be customized using native |pgf| keys as shown in the example below.</span></td> + </tr> + <tr> + <td id="L464" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="464"></td> + <td id="LC464" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L465" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="465"></td> + <td id="LC465" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td> + </tr> + <tr> + <td id="L466" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="466"></td> + <td id="LC466" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td> + </tr> + <tr> + <td id="L467" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="467"></td> + <td id="LC467" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \BodeZPK[blue,thick]{z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}{0.01}{100}</span></td> + </tr> + <tr> + <td id="L468" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="468"></td> + <td id="LC468" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{simpleBode}Output of the default |\BodeZPK| macro.}</span></td> + </tr> + <tr> + <td id="L469" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="469"></td> + <td id="LC469" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td> + </tr> + <tr> + <td id="L470" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="470"></td> + <td id="LC470" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td> + </tr> + <tr> + <td id="L471" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="471"></td> + <td id="LC471" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> As demonstrated in this example, if a single comma-separated list of options is passed, it applies to both the magnitude and the phase plots. Without any optional arguments, we gets a thick black Bode plot.</span></td> + </tr> + <tr> + <td id="L472" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="472"></td> + <td id="LC472" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L473" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="473"></td> + <td id="LC473" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> A linear approximation of the Bode plot with customization of the plots, the axes, and the group can be generated using\\</span></td> + </tr> + <tr> + <td id="L474" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="474"></td> + <td id="LC474" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\BodeZPK[plot/mag/{red,thick},plot/ph/{blue,thick},|\\</span></td> + </tr> + <tr> + <td id="L475" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="475"></td> + <td id="LC475" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | axes/mag/{ytick distance=40,xmajorticks=true,|\\</span></td> + </tr> + <tr> + <td id="L476" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="476"></td> + <td id="LC476" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | xlabel={Frequency (rad/s)}},axes/ph/{ytick distance=90},|\\</span></td> + </tr> + <tr> + <td id="L477" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="477"></td> + <td id="LC477" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | group/{group style={group size=2 by 1,horizontal sep=2cm,|\\</span></td> + </tr> + <tr> + <td id="L478" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="478"></td> + <td id="LC478" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | width=4cm,height=2cm}},approx/linear]|\\</span></td> + </tr> + <tr> + <td id="L479" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="479"></td> + <td id="LC479" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}|\\</span></td> + </tr> + <tr> + <td id="L480" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="480"></td> + <td id="LC480" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {0.01}{100}|\\</span></td> + </tr> + <tr> + <td id="L481" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="481"></td> + <td id="LC481" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> which generates the plot in Figure \ref{customBode}.</span></td> + </tr> + <tr> + <td id="L482" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="482"></td> + <td id="LC482" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L483" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="483"></td> + <td id="LC483" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td> + </tr> + <tr> + <td id="L484" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="484"></td> + <td id="LC484" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td> + </tr> + <tr> + <td id="L485" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="485"></td> + <td id="LC485" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \BodeZPK[plot/mag/{red,thick},plot/ph/{blue,thick},axes/mag/{ytick distance=40,xmajorticks=true,xlabel={Frequency (rad/s)}},axes/ph/{ytick distance=90},approx/linear,group/{group style={group size = 2 by 1,horizontal sep=2cm},width=4cm,height=2cm}] {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},g/10} {0.01} {100}</span></td> + </tr> + <tr> + <td id="L486" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="486"></td> + <td id="LC486" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{customBode}Customization of the default |\BodeZPK| macro.}</span></td> + </tr> + <tr> + <td id="L487" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="487"></td> + <td id="LC487" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td> + </tr> + <tr> + <td id="L488" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="488"></td> + <td id="LC488" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td> + </tr> + <tr> + <td id="L489" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="489"></td> + <td id="LC489" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L490" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="490"></td> + <td id="LC490" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\BodeTF}</span></td> + </tr> + <tr> + <td id="L491" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="491"></td> + <td id="LC491" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\BodeTF| \oarg{obj1/typ1/\marg{opt1},obj2/typ2/\marg{opt2},...}\\</span></td> + </tr> + <tr> + <td id="L492" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="492"></td> + <td id="LC492" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}\\</span></td> + </tr> + <tr> + <td id="L493" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="493"></td> + <td id="LC493" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{min-freq}\marg{max-freq} \rmfamily</span></td> + </tr> + <tr> + <td id="L494" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="494"></td> + <td id="LC494" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L495" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="495"></td> + <td id="LC495" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Plots the Bode plot of a transfer function given in TF format. The three mandatory arguments include: (1) a list of tuples comprised of the coefficients in the numerator and the denominator of the transfer function and the transport delay, (2) the lower end of the frequency range for the $x-$ axis, and (3) the higher end of the frequency range for the $x-$axis. The coefficients are entered as a comma-separated list, in order from the highest degree of $s$ to the lowest, with zeros for missing degrees. The optional arguments are the same as |\BodeZPK|, except that linear/asymptotic approximation is not supported, so |approx/...| is ignored.</span></td> + </tr> + <tr> + <td id="L496" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="496"></td> + <td id="LC496" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L497" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="497"></td> + <td id="LC497" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> For example, given the same transfer function as (\ref{eq:ZPKExample}) in TF form and with a small transport delay, \begin{equation}G(s) = e^{-0.01s}\frac{s(10s^2+2s+2.6)}{(s^2+s+100.25)},\label{eq:TFExample}\end{equation} its Bode plot over the frequency range $[0.01,100]$ can be generated using\\</span></td> + </tr> + <tr> + <td id="L498" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="498"></td> + <td id="LC498" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\BodeTF[commands/mag/{\node at (axis cs: 2.1,0) |\\</span></td> + </tr> + <tr> + <td id="L499" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="499"></td> + <td id="LC499" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | [circle,fill,inner sep=0.05cm,label=below:{$\omega_{gc}$}]{};}]|\\</span></td> + </tr> + <tr> + <td id="L500" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="500"></td> + <td id="LC500" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}|\\</span></td> + </tr> + <tr> + <td id="L501" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="501"></td> + <td id="LC501" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {0.01}{100}|\\</span></td> + </tr> + <tr> + <td id="L502" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="502"></td> + <td id="LC502" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> which generates the plot in Figure \ref{simpleBodeTF}. Note the $0$ added to the numerator coefficients to account for the fact that the numerator does not have a constant term in it. Note the semicolon after the TikZ command passed to the |\commands| option.</span></td> + </tr> + <tr> + <td id="L503" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="503"></td> + <td id="LC503" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L504" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="504"></td> + <td id="LC504" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td> + </tr> + <tr> + <td id="L505" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="505"></td> + <td id="LC505" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td> + </tr> + <tr> + <td id="L506" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="506"></td> + <td id="LC506" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \BodeTF[commands/mag/{\node at (axis cs: 2.1,0) [circle,fill,inner sep=0.05cm,label=below:{$\omega_{gc}$}] {};}]{num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}{0.01}{100}</span></td> + </tr> + <tr> + <td id="L507" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="507"></td> + <td id="LC507" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{simpleBodeTF}Output of the |\BodeTF| macro with an optional TikZ command used to mark the gain crossover frequency.}</span></td> + </tr> + <tr> + <td id="L508" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="508"></td> + <td id="LC508" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td> + </tr> + <tr> + <td id="L509" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="509"></td> + <td id="LC509" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td> + </tr> + <tr> + <td id="L510" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="510"></td> + <td id="LC510" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L511" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="511"></td> + <td id="LC511" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeEnv{BodeMagPlot}</span></td> + </tr> + <tr> + <td id="L512" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="512"></td> + <td id="LC512" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\begin{BodeMagPlot}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\</span></td> + </tr> + <tr> + <td id="L513" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="513"></td> + <td id="LC513" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\</span></td> + </tr> + <tr> + <td id="L514" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="514"></td> + <td id="LC514" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}|\addBode...|\\</span></td> + </tr> + <tr> + <td id="L515" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="515"></td> + <td id="LC515" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{1.5em}|\end{BodeMagPlot}|\\</span></td> + </tr> + <tr> + <td id="L516" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="516"></td> + <td id="LC516" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The |BodeMagPlot| environment works in conjunction with the parametric function generator macros |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|, intended to be used for magnitude plots. The optional argument is comprised of a comma separated list of tuples, either |obj/{opt}| or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the axes and the plots according to:</span></td> + </tr> + <tr> + <td id="L517" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="517"></td> + <td id="LC517" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td> + </tr> + <tr> + <td id="L518" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="518"></td> + <td id="LC518" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |obj/{opt}|:</span></td> + </tr> + <tr> + <td id="L519" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="519"></td> + <td id="LC519" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td> + </tr> + <tr> + <td id="L520" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="520"></td> + <td id="LC520" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |tikz/{opt}|: modify picture properties by adding options |{opt}| to the |tikzpicture| environment.</span></td> + </tr> + <tr> + <td id="L521" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="521"></td> + <td id="LC521" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |axes/{opt}|: modify axis properties by adding options |{opt}| to the |semilogaxis| environment.</span></td> + </tr> + <tr> + <td id="L522" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="522"></td> + <td id="LC522" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |commands/{opt}|: add any valid TikZ commands inside |semilogaxis| environment. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual.</span></td> + </tr> + <tr> + <td id="L523" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="523"></td> + <td id="LC523" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td> + </tr> + <tr> + <td id="L524" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="524"></td> + <td id="LC524" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |{opt}| are passed directly to the |semilogaxis| environment.</span></td> + </tr> + <tr> + <td id="L525" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="525"></td> + <td id="LC525" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td> + </tr> + <tr> + <td id="L526" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="526"></td> + <td id="LC526" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The frequency limits are translated to the x-axis limits and the domain of the |semilogaxis| environment. Example usage in the description of |\addBodeZPKPlots|, |\addBodeTFPlot|, and |\addBodeComponentPlot|.</span></td> + </tr> + <tr> + <td id="L527" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="527"></td> + <td id="LC527" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L528" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="528"></td> + <td id="LC528" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\DescribeEnv{BodePhPlot}</span></td> + </tr> + <tr> + <td id="L529" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="529"></td> + <td id="LC529" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\begin{BodePhPlot}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\</span></td> + </tr> + <tr> + <td id="L530" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="530"></td> + <td id="LC530" class="blob-code blob-code-inner js-file-line"> <span class="pl-c"><span class="pl-c">%</span> \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\</span></td> + </tr> + <tr> + <td id="L531" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="531"></td> + <td id="LC531" class="blob-code blob-code-inner js-file-line"> <span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}|\addBode...|\\</span></td> + </tr> + <tr> + <td id="L532" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="532"></td> + <td id="LC532" class="blob-code blob-code-inner js-file-line"> <span class="pl-c"><span class="pl-c">%</span> \hspace*{1.5em}|\end{BodePhPlot}|\\</span></td> + </tr> + <tr> + <td id="L533" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="533"></td> + <td id="LC533" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Intended to be used for phase plots, otherwise same as the |BodeMagPlot| environment</span></td> + </tr> + <tr> + <td id="L534" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="534"></td> + <td id="LC534" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L535" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="535"></td> + <td id="LC535" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addBodeZPKPlots}</span></td> + </tr> + <tr> + <td id="L536" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="536"></td> + <td id="LC536" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addBodeZPKPlots| \oarg{approx1/\marg{opt1},approx2/\marg{opt2},...}\\</span></td> + </tr> + <tr> + <td id="L537" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="537"></td> + <td id="LC537" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{plot-type}\\</span></td> + </tr> + <tr> + <td id="L538" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="538"></td> + <td id="LC538" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}</span></td> + </tr> + <tr> + <td id="L539" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="539"></td> + <td id="LC539" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L540" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="540"></td> + <td id="LC540" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Generates the appropriate parametric functions and supplies them to multiple |\addplot| macros, one for each |approx/{opt}| pair in the optional argument. If no optional argument is supplied, then a single |\addplot| command corresponding to a thick true Bode plot is generated. If an optional argument is supplied, it needs to be one of |true/{opt}|, |linear/{opt}|, or |asymptotic/{opt}|. This macro can be used inside any |semilogaxis| environment as long as a domain for the x-axis is supplied through either the |approx/{opt}| interface or directly in the optional argument of the |semilogaxis| environment. Use with the |BodePlot| environment supplied with this package is recommended. The second mandatory argument, |plot-type| is either |magnitude| or |phase|. If it is not equal to |phase|, it is assumed to be |magnitude|. The last mandatory argument is the same as |\BodeZPK|.</span></td> + </tr> + <tr> + <td id="L541" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="541"></td> + <td id="LC541" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L542" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="542"></td> + <td id="LC542" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> For example, given the transfer function in (\ref{eq:ZPKExample}), its linear, asymptotic, and true Bode plots can be superimposed using</span></td> + </tr> + <tr> + <td id="L543" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="543"></td> + <td id="LC543" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{verbatim}</span></td> + </tr> + <tr> + <td id="L544" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="544"></td> + <td id="LC544" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{BodeMagPlot}[height=2cm,width=4cm] {0.01} {100}</span></td> + </tr> + <tr> + <td id="L545" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="545"></td> + <td id="LC545" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeZPKPlots[%</span></td> + </tr> + <tr> + <td id="L546" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="546"></td> + <td id="LC546" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> true/{black,thick},</span></td> + </tr> + <tr> + <td id="L547" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="547"></td> + <td id="LC547" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> linear/{red,dashed,thick},</span></td> + </tr> + <tr> + <td id="L548" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="548"></td> + <td id="LC548" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> asymptotic/{blue,dotted,thick}]</span></td> + </tr> + <tr> + <td id="L549" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="549"></td> + <td id="LC549" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {magnitude}</span></td> + </tr> + <tr> + <td id="L550" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="550"></td> + <td id="LC550" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}</span></td> + </tr> + <tr> + <td id="L551" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="551"></td> + <td id="LC551" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{BodeMagPlot}</span></td> + </tr> + <tr> + <td id="L552" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="552"></td> + <td id="LC552" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L553" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="553"></td> + <td id="LC553" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{BodePhPlot}[height=2cm, width=4cm, ytick distance=90] {0.01} {100}</span></td> + </tr> + <tr> + <td id="L554" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="554"></td> + <td id="LC554" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeZPKPlots[%</span></td> + </tr> + <tr> + <td id="L555" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="555"></td> + <td id="LC555" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> true/{black,thick},</span></td> + </tr> + <tr> + <td id="L556" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="556"></td> + <td id="LC556" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> linear/{red,dashed,thick},</span></td> + </tr> + <tr> + <td id="L557" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="557"></td> + <td id="LC557" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> asymptotic/{blue,dotted,thick}]</span></td> + </tr> + <tr> + <td id="L558" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="558"></td> + <td id="LC558" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {phase}</span></td> + </tr> + <tr> + <td id="L559" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="559"></td> + <td id="LC559" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}</span></td> + </tr> + <tr> + <td id="L560" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="560"></td> + <td id="LC560" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{BodePhPlot}</span></td> + </tr> + <tr> + <td id="L561" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="561"></td> + <td id="LC561" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{verbatim}</span></td> + </tr> + <tr> + <td id="L562" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="562"></td> + <td id="LC562" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td> + </tr> + <tr> + <td id="L563" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="563"></td> + <td id="LC563" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td> + </tr> + <tr> + <td id="L564" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="564"></td> + <td id="LC564" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{BodeMagPlot}[height=2cm,width=4cm]{0.01}{100}</span></td> + </tr> + <tr> + <td id="L565" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="565"></td> + <td id="LC565" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeZPKPlots[%</span></td> + </tr> + <tr> + <td id="L566" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="566"></td> + <td id="LC566" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> true/{black,thick},</span></td> + </tr> + <tr> + <td id="L567" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="567"></td> + <td id="LC567" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> linear/{red,dashed,thick},</span></td> + </tr> + <tr> + <td id="L568" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="568"></td> + <td id="LC568" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> asymptotic/{blue,dotted,thick}]</span></td> + </tr> + <tr> + <td id="L569" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="569"></td> + <td id="LC569" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {magnitude}</span></td> + </tr> + <tr> + <td id="L570" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="570"></td> + <td id="LC570" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}</span></td> + </tr> + <tr> + <td id="L571" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="571"></td> + <td id="LC571" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{BodeMagPlot}</span></td> + </tr> + <tr> + <td id="L572" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="572"></td> + <td id="LC572" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{BodePhPlot}[height=2cm,width=4cm,ytick distance=90]{0.01}{100}</span></td> + </tr> + <tr> + <td id="L573" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="573"></td> + <td id="LC573" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeZPKPlots[%</span></td> + </tr> + <tr> + <td id="L574" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="574"></td> + <td id="LC574" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> true/{black,thick},</span></td> + </tr> + <tr> + <td id="L575" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="575"></td> + <td id="LC575" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> linear/{red,dashed,thick},</span></td> + </tr> + <tr> + <td id="L576" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="576"></td> + <td id="LC576" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> asymptotic/{blue,dotted,thick}]</span></td> + </tr> + <tr> + <td id="L577" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="577"></td> + <td id="LC577" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {phase}</span></td> + </tr> + <tr> + <td id="L578" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="578"></td> + <td id="LC578" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}</span></td> + </tr> + <tr> + <td id="L579" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="579"></td> + <td id="LC579" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{BodePhPlot}</span></td> + </tr> + <tr> + <td id="L580" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="580"></td> + <td id="LC580" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td> + </tr> + <tr> + <td id="L581" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="581"></td> + <td id="LC581" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \caption{\label{multiBodeZPK}Superimposed approximate and true Bode plots using the \texttt{BodeMagPlot} and \texttt{BodePhPlot} environments and the \texttt{\textbackslash addBodeZPKPlots} macro.}</span></td> + </tr> + <tr> + <td id="L582" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="582"></td> + <td id="LC582" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td> + </tr> + <tr> + <td id="L583" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="583"></td> + <td id="LC583" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> which generates the plot in Figure \ref{multiBodeZPK}.</span></td> + </tr> + <tr> + <td id="L584" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="584"></td> + <td id="LC584" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L585" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="585"></td> + <td id="LC585" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addBodeTFPlot}</span></td> + </tr> + <tr> + <td id="L586" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="586"></td> + <td id="LC586" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addBodeTFPlot|\oarg{plot-options}\\</span></td> + </tr> + <tr> + <td id="L587" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="587"></td> + <td id="LC587" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{plot-type}\\</span></td> + </tr> + <tr> + <td id="L588" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="588"></td> + <td id="LC588" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}</span></td> + </tr> + <tr> + <td id="L589" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="589"></td> + <td id="LC589" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L590" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="590"></td> + <td id="LC590" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Generates a single parametric function for either Bode magnitude or phase plot of a transfer function in TF form. The generated parametric function is passed to the |\addplot| macro. This macro can be used inside any |semilogaxis| environment as long as a domain for the x-axis is supplied through either the |plot-options| interface or directly in the optional argument of the container |semilogaxis| environment. Use with the |BodePlot| environment supplied with this package is recommended. The second mandatory argument, |plot-type| is either magnitude or |phase|. If it is not equal to |phase|, it is assumed to be |magnitude|. The last mandatory argument is the same as |\BodeTF|.</span></td> + </tr> + <tr> + <td id="L591" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="591"></td> + <td id="LC591" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L592" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="592"></td> + <td id="LC592" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addBodeComponentPlot}</span></td> + </tr> + <tr> + <td id="L593" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="593"></td> + <td id="LC593" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addBodeComponentPlot|\oarg{plot-options}\marg{plot-command}</span></td> + </tr> + <tr> + <td id="L594" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="594"></td> + <td id="LC594" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L595" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="595"></td> + <td id="LC595" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Generates a single parametric function corresponding to the mandatory argument |plot-command| and passes it to the |\addplot| macro. The plot command can be any parametric function that uses |t| as the independent variable. The parametric function must be |gnuplot| compatible (or |pgfplots| compatible if the package is loaded using the |pgf| option). The intended use of this macro is to plot the parametric functions generated using the basic component macros described in Section \ref{sec:BasicComponents} below.</span></td> + </tr> + <tr> + <td id="L596" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="596"></td> + <td id="LC596" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L597" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="597"></td> + <td id="LC597" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsubsection{Basic components up to first order\label{sec:BasicComponents}}</span></td> + </tr> + <tr> + <td id="L598" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="598"></td> + <td id="LC598" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L599" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="599"></td> + <td id="LC599" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\TypeFeatureApprox}</span></td> + </tr> + <tr> + <td id="L600" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="600"></td> + <td id="LC600" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\TypeFeatureApprox|\marg{real-part}\marg{imaginary-part}</span></td> + </tr> + <tr> + <td id="L601" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="601"></td> + <td id="LC601" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L602" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="602"></td> + <td id="LC602" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent This entry describes 20 different macros of the form |\TypeFeatureApprox| that take the real part and the imaginary part of a complex number as arguments. The |Type| in the macro name should be replaced by either |Mag| or |Ph| to generate a parametric function corresponding to the magnitude or the phase plot, respectively. The |Feature| in the macro name should be replaced by one of |K|, |Pole|, |Zero|, or |Del|, to generate the Bode plot of a gain, a complex pole, a complex zero, or a transport delay, respectively. If the |Feature| is set to either |K| or |Del|, the |imaginary-part| mandatory argument is ignored. The |Approx| in the macro name should either be removed, or it should be replaced by |Lin| or |Asymp| to generate the true Bode plot, the linear approximation, or the asymptotic approximation, respectively. If the |Feature| is set to |Del|, then |Approx| has to be removed. For example, </span></td> + </tr> + <tr> + <td id="L603" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="603"></td> + <td id="LC603" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td> + </tr> + <tr> + <td id="L604" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="604"></td> + <td id="LC604" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |\MagK{k}{0}| or |\MagK{k}{400}| generates a parametric function for the true Bode magnitude of $ G(s) = k $</span></td> + </tr> + <tr> + <td id="L605" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="605"></td> + <td id="LC605" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |\PhPoleLin{a}{b}| generates a parametric function for the linear approximation of the Bode phase of $ G(s) = \frac{1}{s-a-\mathrm{i}b} $.</span></td> + </tr> + <tr> + <td id="L606" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="606"></td> + <td id="LC606" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |\PhDel{T}{200}| or |\PhDel{T}{0}| generates a parametric function for the Bode phase of $ G(s) = e^{-Ts} $.</span></td> + </tr> + <tr> + <td id="L607" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="607"></td> + <td id="LC607" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td> + </tr> + <tr> + <td id="L608" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="608"></td> + <td id="LC608" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> All 20 of the macros defined by combinations of |Type|, |Feature|, and |Approx|, and any |gnuplot| (or |pgfplot| if the |pgf| class option is loaded) compatible function of the 20 macros can be used as |plot-command| in the |addBodeComponentPlot| macro. This is sufficient to generate the Bode plot of any rational transfer function with delay. For example, the Bode phase plot in Figure \ref{multiBodeZPK} can also be generated using:</span></td> + </tr> + <tr> + <td id="L609" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="609"></td> + <td id="LC609" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{verbatim}</span></td> + </tr> + <tr> + <td id="L610" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="610"></td> + <td id="LC610" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{BodePhPlot}[ytick distance=90]{0.01}{100}</span></td> + </tr> + <tr> + <td id="L611" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="611"></td> + <td id="LC611" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[black,thick]{\PhZero{0}{0} + \PhZero{-0.1}{-0.5} +</span></td> + </tr> + <tr> + <td id="L612" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="612"></td> + <td id="LC612" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \PhZero{-0.1}{0.5} + \PhPole{-0.5}{-10} + \PhPole{-0.5}{10} +</span></td> + </tr> + <tr> + <td id="L613" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="613"></td> + <td id="LC613" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \PhK{10}{0}}</span></td> + </tr> + <tr> + <td id="L614" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="614"></td> + <td id="LC614" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[red,dashed,thick] {\PhZeroLin{0}{0} + </span></td> + </tr> + <tr> + <td id="L615" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="615"></td> + <td id="LC615" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \PhZeroLin{-0.1}{-0.5} + \PhZeroLin{-0.1}{0.5} +</span></td> + </tr> + <tr> + <td id="L616" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="616"></td> + <td id="LC616" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \PhPoleLin{-0.5}{-10} + \PhPoleLin{-0.5}{10} + \PhKLin{10}{20}}</span></td> + </tr> + <tr> + <td id="L617" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="617"></td> + <td id="LC617" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[blue,dotted,thick] {\PhZeroAsymp{0}{0} + </span></td> + </tr> + <tr> + <td id="L618" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="618"></td> + <td id="LC618" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \PhZeroAsymp{-0.1}{-0.5} + \PhZeroAsymp{-0.1}{0.5} + </span></td> + </tr> + <tr> + <td id="L619" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="619"></td> + <td id="LC619" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \PhPoleAsymp{-0.5}{-10} + \PhPoleAsymp{-0.5}{10} + \PhKAsymp{10}{40}}</span></td> + </tr> + <tr> + <td id="L620" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="620"></td> + <td id="LC620" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{BodePhPlot}</span></td> + </tr> + <tr> + <td id="L621" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="621"></td> + <td id="LC621" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{verbatim}</span></td> + </tr> + <tr> + <td id="L622" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="622"></td> + <td id="LC622" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{figure}</span></td> + </tr> + <tr> + <td id="L623" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="623"></td> + <td id="LC623" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td> + </tr> + <tr> + <td id="L624" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="624"></td> + <td id="LC624" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{BodePhPlot}[ytick distance=90]{0.01}{100}</span></td> + </tr> + <tr> + <td id="L625" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="625"></td> + <td id="LC625" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[black,thick] {\PhZero{0}{0} + \PhZero{-0.1}{-0.5} + \PhZero{-0.1}{0.5} + \PhPole{-0.5}{-10} + \PhPole{-0.5}{10} + \PhK{10}{0}}</span></td> + </tr> + <tr> + <td id="L626" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="626"></td> + <td id="LC626" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[red,dashed,thick] {\PhZeroLin{0}{0} + \PhZeroLin{-0.1}{-0.5} + \PhZeroLin{-0.1}{0.5} + \PhPoleLin{-0.5}{-10} + \PhPoleLin{-0.5}{10} + \PhKLin{10}{20}}</span></td> + </tr> + <tr> + <td id="L627" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="627"></td> + <td id="LC627" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[blue,dotted,thick] {\PhZeroAsymp{0}{0} + \PhZeroAsymp{-0.1}{-0.5} + \PhZeroAsymp{-0.1}{0.5} + \PhPoleAsymp{-0.5}{-10} + \PhPoleAsymp{-0.5}{10} + \PhKAsymp{10}{40}}</span></td> + </tr> + <tr> + <td id="L628" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="628"></td> + <td id="LC628" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{BodePhPlot}</span></td> + </tr> + <tr> + <td id="L629" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="629"></td> + <td id="LC629" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td> + </tr> + <tr> + <td id="L630" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="630"></td> + <td id="LC630" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \caption{\label{multiBodeComponents}Superimposed approximate and true Bode Phase plot using the \texttt{BodePhPlot} environment, the \texttt{\textbackslash addBodeComponentPlot} macro, and several macros of the \texttt{\textbackslash TypeFeatureApprox} form.}</span></td> + </tr> + <tr> + <td id="L631" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="631"></td> + <td id="LC631" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{figure}</span></td> + </tr> + <tr> + <td id="L632" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="632"></td> + <td id="LC632" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> which gives us the plot in Figure \ref{multiBodeComponents}.</span></td> + </tr> + <tr> + <td id="L633" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="633"></td> + <td id="LC633" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L634" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="634"></td> + <td id="LC634" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsubsection{Basic components of the second order}</span></td> + </tr> + <tr> + <td id="L635" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="635"></td> + <td id="LC635" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L636" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="636"></td> + <td id="LC636" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\TypeSOFeatureApprox}</span></td> + </tr> + <tr> + <td id="L637" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="637"></td> + <td id="LC637" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\TypeSOFeatureApprox|\marg{a1}\marg{a0}</span></td> + </tr> + <tr> + <td id="L638" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="638"></td> + <td id="LC638" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L639" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="639"></td> + <td id="LC639" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent This entry describes 12 different macros of the form |\TypeSOFeatureApprox| that take the coefficients $ a_1 $ and $ a_0 $ of a general second order system as inputs. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate the Bode plot of $G(s)=\frac{1}{s^2+a_1 s+a_0}$ or $G(s)=s^2+a_1 s+a_0$, respectively. The |Type| in the macro name should be replaced by either |Mag| or |Ph| to generate a parametric function corresponding to the magnitude or the phase plot, respectively. The |Approx| in the macro name should either be removed, or it should be replaced by |Lin| or |Asymp| to generate the true Bode plot, the linear approximation, or the asymptotic approximation, respectively.</span></td> + </tr> + <tr> + <td id="L640" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="640"></td> + <td id="LC640" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> </span></td> + </tr> + <tr> + <td id="L641" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="641"></td> + <td id="LC641" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\MagSOFeaturePeak}</span></td> + </tr> + <tr> + <td id="L642" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="642"></td> + <td id="LC642" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\MagSOFeaturePeak|\oarg{draw-options}\marg{a1}\marg{a0}</span></td> + </tr> + <tr> + <td id="L643" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="643"></td> + <td id="LC643" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L644" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="644"></td> + <td id="LC644" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent This entry describes 2 different macros of the form |\MagSOFeaturePeak| that take the the coefficients $ a_1 $ and $ a_0 $ of a general second order system as inputs, and draw a resonant peak using the |\draw| TikZ macro. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate a peak for poles and a valley for zeros, respectively. For example, the command</span></td> + </tr> + <tr> + <td id="L645" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="645"></td> + <td id="LC645" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{verbatim}</span></td> + </tr> + <tr> + <td id="L646" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="646"></td> + <td id="LC646" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{BodeMagPlot}[xlabel={}]{0.1}{10}</span></td> + </tr> + <tr> + <td id="L647" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="647"></td> + <td id="LC647" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[red,dashed,thick]{\MagSOPoles{0.2}{1}}</span></td> + </tr> + <tr> + <td id="L648" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="648"></td> + <td id="LC648" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[black,thick]{\MagSOPolesLin{0.2}{1}}</span></td> + </tr> + <tr> + <td id="L649" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="649"></td> + <td id="LC649" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \MagSOPolesPeak[thick]{0.2}{1}</span></td> + </tr> + <tr> + <td id="L650" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="650"></td> + <td id="LC650" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{BodeMagPlot}</span></td> + </tr> + <tr> + <td id="L651" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="651"></td> + <td id="LC651" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{verbatim}</span></td> + </tr> + <tr> + <td id="L652" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="652"></td> + <td id="LC652" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> generates the plot in Figure \ref{BodePeak}.</span></td> + </tr> + <tr> + <td id="L653" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="653"></td> + <td id="LC653" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L654" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="654"></td> + <td id="LC654" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td> + </tr> + <tr> + <td id="L655" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="655"></td> + <td id="LC655" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td> + </tr> + <tr> + <td id="L656" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="656"></td> + <td id="LC656" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{BodeMagPlot}[xlabel={}]{0.1}{10}</span></td> + </tr> + <tr> + <td id="L657" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="657"></td> + <td id="LC657" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[red,dashed,thick]{\MagSOPoles{0.2}{1}}</span></td> + </tr> + <tr> + <td id="L658" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="658"></td> + <td id="LC658" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \addBodeComponentPlot[black,thick]{\MagSOPolesLin{0.2}{1}}</span></td> + </tr> + <tr> + <td id="L659" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="659"></td> + <td id="LC659" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \MagSOPolesPeak[very thick]{0.2}{1}</span></td> + </tr> + <tr> + <td id="L660" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="660"></td> + <td id="LC660" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{BodeMagPlot}</span></td> + </tr> + <tr> + <td id="L661" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="661"></td> + <td id="LC661" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td> + </tr> + <tr> + <td id="L662" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="662"></td> + <td id="LC662" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{BodePeak} Resonant peak in asymptotic Bode plot using |\MagSOPolesPeak|.}</span></td> + </tr> + <tr> + <td id="L663" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="663"></td> + <td id="LC663" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td> + </tr> + <tr> + <td id="L664" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="664"></td> + <td id="LC664" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L665" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="665"></td> + <td id="LC665" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\TypeCSFeatureApprox}</span></td> + </tr> + <tr> + <td id="L666" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="666"></td> + <td id="LC666" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\TypeCSFeatureApprox|\marg{zeta}\marg{omega-n}</span></td> + </tr> + <tr> + <td id="L667" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="667"></td> + <td id="LC667" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L668" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="668"></td> + <td id="LC668" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent This entry describes 12 different macros of the form |\TypeCSFeatureApprox| that take the damping ratio, $ \zeta $, and the natural frequency, $ \omega_n $ of a canonical second order system as inputs. The |Type| in the macro name should be replaced by either |Mag| or |Ph| to generate a parametric function corresponding to the magnitude or the phase plot, respectively. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate the Bode plot of $G(s)=\frac{1}{s^2+2\zeta\omega_n s+\omega_n^2}$ or $G(s)=s^2+2\zeta\omega_n s+\omega_n^2$, respectively. The |Approx| in the macro name should either be removed, or it should be replaced by |Lin| or |Asymp| to generate the true Bode plot, the linear approximation, or the asymptotic approximation, respectively.</span></td> + </tr> + <tr> + <td id="L669" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="669"></td> + <td id="LC669" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L670" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="670"></td> + <td id="LC670" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\MagCSFeaturePeak}</span></td> + </tr> + <tr> + <td id="L671" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="671"></td> + <td id="LC671" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\MagCSFeaturePeak|\oarg{draw-options}\marg{zeta}\marg{omega-n}</span></td> + </tr> + <tr> + <td id="L672" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="672"></td> + <td id="LC672" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L673" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="673"></td> + <td id="LC673" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent This entry describes 2 different macros of the form |\MagCSFeaturePeak| that take the damping ratio, $ \zeta $, and the natural frequency, $ \omega_n $ of a canonical second order system as inputs, and draw a resonant peak using the |\draw| TikZ macro. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate a peak for poles and a valley for zeros, respectively.</span></td> + </tr> + <tr> + <td id="L674" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="674"></td> + <td id="LC674" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L675" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="675"></td> + <td id="LC675" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\MagCCFeaturePeak}</span></td> + </tr> + <tr> + <td id="L676" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="676"></td> + <td id="LC676" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\MagCCFeaturePeak|\oarg{draw-options}\marg{real-part}\marg{imaginary-part}</span></td> + </tr> + <tr> + <td id="L677" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="677"></td> + <td id="LC677" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L678" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="678"></td> + <td id="LC678" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent This entry describes 2 different macros of the form |\MagCCFeaturePeak| that take the real and imaginary parts of a pair of complex conjugate poles or zeros as inputs, and draw a resonant peak using the |\draw| TikZ macro. The |Feature| in the macro name should be replaced by either |Poles| or |Zeros| to generate a peak for poles and a valley for zeros, respectively.</span></td> + </tr> + <tr> + <td id="L679" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="679"></td> + <td id="LC679" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L680" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="680"></td> + <td id="LC680" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Nyquist plots}</span></td> + </tr> + <tr> + <td id="L681" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="681"></td> + <td id="LC681" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\NyquistZPK}</span></td> + </tr> + <tr> + <td id="L682" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="682"></td> + <td id="LC682" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NyquistZPK| \oarg{plot/\marg{opt},axes/\marg{opt}}\\</span></td> + </tr> + <tr> + <td id="L683" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="683"></td> + <td id="LC683" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}\\</span></td> + </tr> + <tr> + <td id="L684" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="684"></td> + <td id="LC684" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{min-freq}\marg{max-freq}</span></td> + </tr> + <tr> + <td id="L685" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="685"></td> + <td id="LC685" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L686" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="686"></td> + <td id="LC686" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Plots the Nyquist plot of a transfer function given in ZPK format with a thick red $+$ marking the critical point (-1,0). The mandatory arguments are the same as |\BodeZPK|. Since there is only one plot in a Nyquist diagram, the |\typ| specifier in the optional argument tuples is not needed. As such, the supported optional argument tuples are |plot/{opt}|, which passes |{opt}| to |\addplot|, |axes/{opt}|, which passes |{\opt}| to the |axis| environment, and |tikz/{opt}|, which passes |{\opt}| to the |tikzpicture| environment. Asymptotic/linear approximations are not supported in Nyquist plots. If just |{opt}| is provided as the optional argument, it is interpreted as |plot/{opt}|. Arrows to indicate the direction of increasing $\omega$ can be added by adding |\usetikzlibrary{decorations.markings}| and |\usetikzlibrary{arrows.meta}| to the preamble and then passing a tuple of the form\\</span></td> + </tr> + <tr> + <td id="L687" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="687"></td> + <td id="LC687" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>|plot/{postaction=decorate,decoration={markings,|\\</span></td> + </tr> + <tr> + <td id="L688" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="688"></td> + <td id="LC688" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>| mark=between positions 0.1 and 0.9 step 5em with|\\</span></td> + </tr> + <tr> + <td id="L689" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="689"></td> + <td id="LC689" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>| {\arrow{Stealth| |[length=2mm, blue]}}}}|\\</span></td> + </tr> + <tr> + <td id="L690" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="690"></td> + <td id="LC690" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\textbf{Caution:} with a high number of samples, adding arrows in this way may cause the error message |! Dimension too big|.</span></td> + </tr> + <tr> + <td id="L691" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="691"></td> + <td id="LC691" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L692" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="692"></td> + <td id="LC692" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> For example, the command\\</span></td> + </tr> + <tr> + <td id="L693" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="693"></td> + <td id="LC693" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NyquistZPK[plot/{red,thick,samples=2000},axes/{blue,thick}]|\\</span></td> + </tr> + <tr> + <td id="L694" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="694"></td> + <td id="LC694" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10}|\\</span></td> + </tr> + <tr> + <td id="L695" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="695"></td> + <td id="LC695" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {-30}{30}|\\</span></td> + </tr> + <tr> + <td id="L696" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="696"></td> + <td id="LC696" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> generates the Nyquist plot in Figure \ref{simpleNyquistZPK}.</span></td> + </tr> + <tr> + <td id="L697" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="697"></td> + <td id="LC697" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L698" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="698"></td> + <td id="LC698" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td> + </tr> + <tr> + <td id="L699" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="699"></td> + <td id="LC699" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td> + </tr> + <tr> + <td id="L700" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="700"></td> + <td id="LC700" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \NyquistZPK[plot/{red,thick,samples=2000},axes/{blue,thick}] {z/{0,{-0.1,-0.5},{-0.1,0.5}},p/{{-0.5,-10},{-0.5,10}},k/10} {-30} {30}</span></td> + </tr> + <tr> + <td id="L701" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="701"></td> + <td id="LC701" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{simpleNyquistZPK}Output of the |\NyquistZPK| macro.}</span></td> + </tr> + <tr> + <td id="L702" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="702"></td> + <td id="LC702" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td> + </tr> + <tr> + <td id="L703" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="703"></td> + <td id="LC703" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td> + </tr> + <tr> + <td id="L704" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="704"></td> + <td id="LC704" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L705" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="705"></td> + <td id="LC705" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> % \DescribeMacro{\NyquistTF}</span></td> + </tr> + <tr> + <td id="L706" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="706"></td> + <td id="LC706" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NyquistTF| \oarg{plot/\marg{opt},axes/\marg{opt}}\\</span></td> + </tr> + <tr> + <td id="L707" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="707"></td> + <td id="LC707" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}\\</span></td> + </tr> + <tr> + <td id="L708" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="708"></td> + <td id="LC708" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{min-freq}\marg{max-freq}</span></td> + </tr> + <tr> + <td id="L709" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="709"></td> + <td id="LC709" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L710" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="710"></td> + <td id="LC710" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Nyquist plot of a transfer function given in TF format. Same mandatory arguments as |\BodeTF| and same optional arguments as |\NyquistZPK|. For example, the command\\</span></td> + </tr> + <tr> + <td id="L711" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="711"></td> + <td id="LC711" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NyquistTF[plot/{green,thick,samples=500,postaction=decorate,|\\</span></td> + </tr> + <tr> + <td id="L712" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="712"></td> + <td id="LC712" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | decoration={markings,|\\</span></td> + </tr> + <tr> + <td id="L713" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="713"></td> + <td id="LC713" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | mark=between positions 0.1 and 0.9 step 5em|\\</span></td> + </tr> + <tr> + <td id="L714" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="714"></td> + <td id="LC714" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | with{\arrow{Stealth[length=2mm, blue]}}}}]|\\</span></td> + </tr> + <tr> + <td id="L715" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="715"></td> + <td id="LC715" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {num/{10,2,2.6,0},den/{1,1,100.25}}|\\</span></td> + </tr> + <tr> + <td id="L716" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="716"></td> + <td id="LC716" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {-30}{30}|\\</span></td> + </tr> + <tr> + <td id="L717" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="717"></td> + <td id="LC717" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> generates the Nyquist plot in Figure \ref{simpleNyquistTF}.</span></td> + </tr> + <tr> + <td id="L718" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="718"></td> + <td id="LC718" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L719" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="719"></td> + <td id="LC719" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td> + </tr> + <tr> + <td id="L720" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="720"></td> + <td id="LC720" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td> + </tr> + <tr> + <td id="L721" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="721"></td> + <td id="LC721" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \NyquistTF[plot/{green,thick,samples=500,postaction=decorate,decoration={markings,mark=between positions 0.1 and 0.9 step 5em with {\arrow{Stealth[length=2mm, blue]}}}}] {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01} {-30} {30}</span></td> + </tr> + <tr> + <td id="L722" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="722"></td> + <td id="LC722" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{simpleNyquistTF}Output of the |\NyquistTF| macro with direction arrows. Increasing the number of samples can cause |decorations.markings| to throw errors.}</span></td> + </tr> + <tr> + <td id="L723" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="723"></td> + <td id="LC723" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td> + </tr> + <tr> + <td id="L724" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="724"></td> + <td id="LC724" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td> + </tr> + <tr> + <td id="L725" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="725"></td> + <td id="LC725" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L726" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="726"></td> + <td id="LC726" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeEnv{NyquistPlot}</span></td> + </tr> + <tr> + <td id="L727" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="727"></td> + <td id="LC727" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\begin{NyquistPlot}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\</span></td> + </tr> + <tr> + <td id="L728" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="728"></td> + <td id="LC728" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\</span></td> + </tr> + <tr> + <td id="L729" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="729"></td> + <td id="LC729" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}|\addNyquist...|\\</span></td> + </tr> + <tr> + <td id="L730" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="730"></td> + <td id="LC730" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{1.5em}|\end{NyquistPlot}|\\</span></td> + </tr> + <tr> + <td id="L731" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="731"></td> + <td id="LC731" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The |NyquistPlot| environment works in conjunction with the parametric function generator macros |\addNyquistZPKPlot| and |\addNyquistTFPlot|. The optional argument is comprised of a comma separated list of tuples, either |obj/{opt}| or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the axes and the plots according to:</span></td> + </tr> + <tr> + <td id="L732" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="732"></td> + <td id="LC732" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td> + </tr> + <tr> + <td id="L733" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="733"></td> + <td id="LC733" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |obj/{opt}|:</span></td> + </tr> + <tr> + <td id="L734" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="734"></td> + <td id="LC734" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td> + </tr> + <tr> + <td id="L735" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="735"></td> + <td id="LC735" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |tikz/{opt}|: modify picture properties by adding options |{opt}| to the |tikzpicture| environment.</span></td> + </tr> + <tr> + <td id="L736" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="736"></td> + <td id="LC736" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |axes/{opt}|: modify axis properties by adding options |{opt}| to the |axis| environment.</span></td> + </tr> + <tr> + <td id="L737" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="737"></td> + <td id="LC737" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |commands/{opt}|: add any valid TikZ commands inside |axis| environment. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual.</span></td> + </tr> + <tr> + <td id="L738" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="738"></td> + <td id="LC738" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td> + </tr> + <tr> + <td id="L739" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="739"></td> + <td id="LC739" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |{opt}| are passed directly to the |axis| environment.</span></td> + </tr> + <tr> + <td id="L740" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="740"></td> + <td id="LC740" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td> + </tr> + <tr> + <td id="L741" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="741"></td> + <td id="LC741" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The frequency limits are translated to the x-axis limits and the domain of the |axis| environment.</span></td> + </tr> + <tr> + <td id="L742" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="742"></td> + <td id="LC742" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L743" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="743"></td> + <td id="LC743" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addNyquistZPKPlot}</span></td> + </tr> + <tr> + <td id="L744" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="744"></td> + <td id="LC744" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addNyquistZPKPlot|\oarg{plot-options}\\</span></td> + </tr> + <tr> + <td id="L745" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="745"></td> + <td id="LC745" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}</span></td> + </tr> + <tr> + <td id="L746" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="746"></td> + <td id="LC746" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L747" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="747"></td> + <td id="LC747" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Generates a twp parametric functions for the magnitude and the phase a transfer function in ZPK form. The generated magnitude and phase parametric functions are converted to real and imaginary part parametric functions and passed to the |\addplot| macro. This macro can be used inside any |axis| environment as long as a domain for the x-axis is supplied through either the |plot-options| interface or directly in the optional argument of the container |axis| environment. Use with the |NyquistPlot| environment supplied with this package is recommended. The mandatory argument is the same as |\BodeZPK|.</span></td> + </tr> + <tr> + <td id="L748" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="748"></td> + <td id="LC748" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L749" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="749"></td> + <td id="LC749" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addNyquistTFPlot}</span></td> + </tr> + <tr> + <td id="L750" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="750"></td> + <td id="LC750" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addNyquistTFPlot|\oarg{plot-options}\\</span></td> + </tr> + <tr> + <td id="L751" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="751"></td> + <td id="LC751" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}</span></td> + </tr> + <tr> + <td id="L752" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="752"></td> + <td id="LC752" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L753" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="753"></td> + <td id="LC753" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Similar to |\addNyquistZPKPlot|, with a transfer function input in the TF form.</span></td> + </tr> + <tr> + <td id="L754" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="754"></td> + <td id="LC754" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L755" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="755"></td> + <td id="LC755" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Nichols charts}</span></td> + </tr> + <tr> + <td id="L756" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="756"></td> + <td id="LC756" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\NicholsZPK}</span></td> + </tr> + <tr> + <td id="L757" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="757"></td> + <td id="LC757" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NicholsZPK| \oarg{plot/\marg{opt},axes/\marg{opt}}\\</span></td> + </tr> + <tr> + <td id="L758" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="758"></td> + <td id="LC758" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}\\</span></td> + </tr> + <tr> + <td id="L759" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="759"></td> + <td id="LC759" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{min-freq}\marg{max-freq}</span></td> + </tr> + <tr> + <td id="L760" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="760"></td> + <td id="LC760" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L761" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="761"></td> + <td id="LC761" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Nichols chart of a transfer function given in ZPK format. Same arguments as |\NyquistZPK|.</span></td> + </tr> + <tr> + <td id="L762" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="762"></td> + <td id="LC762" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L763" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="763"></td> + <td id="LC763" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\NicholsTF}</span></td> + </tr> + <tr> + <td id="L764" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="764"></td> + <td id="LC764" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NicholsTF| \oarg{plot/\marg{opt},axes/\marg{opt}}\\</span></td> + </tr> + <tr> + <td id="L765" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="765"></td> + <td id="LC765" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}\\</span></td> + </tr> + <tr> + <td id="L766" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="766"></td> + <td id="LC766" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{min-freq}\marg{max-freq}</span></td> + </tr> + <tr> + <td id="L767" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="767"></td> + <td id="LC767" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L768" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="768"></td> + <td id="LC768" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Nichols chart of a transfer function given in TF format. Same arguments as |\NyquistTF|. For example, the command\\</span></td> + </tr> + <tr> + <td id="L769" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="769"></td> + <td id="LC769" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\NicholsTF[plot/{green,thick,samples=2000}]|\\</span></td> + </tr> + <tr> + <td id="L770" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="770"></td> + <td id="LC770" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01}|\\</span></td> + </tr> + <tr> + <td id="L771" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="771"></td> + <td id="LC771" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> | {0.001}{100}|\\</span></td> + </tr> + <tr> + <td id="L772" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="772"></td> + <td id="LC772" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> generates the Nichols chart in Figure \ref{simpleNicholsTF}.</span></td> + </tr> + <tr> + <td id="L773" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="773"></td> + <td id="LC773" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L774" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="774"></td> + <td id="LC774" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{figure}</span></td> + </tr> + <tr> + <td id="L775" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="775"></td> + <td id="LC775" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{center}</span></td> + </tr> + <tr> + <td id="L776" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="776"></td> + <td id="LC776" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \NicholsTF[plot/{green,thick,samples=2000}] {num/{10,2,2.6,0},den/{1,1,100.25},d/0.01} {0.001} {100}</span></td> + </tr> + <tr> + <td id="L777" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="777"></td> + <td id="LC777" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \cprotect\caption{\label{simpleNicholsTF}Output of the |\NyquistZPK| macro.}</span></td> + </tr> + <tr> + <td id="L778" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="778"></td> + <td id="LC778" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{center}</span></td> + </tr> + <tr> + <td id="L779" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="779"></td> + <td id="LC779" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{figure}</span></td> + </tr> + <tr> + <td id="L780" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="780"></td> + <td id="LC780" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L781" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="781"></td> + <td id="LC781" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L782" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="782"></td> + <td id="LC782" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeEnv{NicholsChart}</span></td> + </tr> + <tr> + <td id="L783" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="783"></td> + <td id="LC783" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\begin{NicholsChart}|\oarg{obj1/\marg{opt1},obj2/\marg{opt2},...}\\</span></td> + </tr> + <tr> + <td id="L784" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="784"></td> + <td id="LC784" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{3em}\marg{min-frequency}\marg{max-frequency}\\</span></td> + </tr> + <tr> + <td id="L785" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="785"></td> + <td id="LC785" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}|\addNichols...|\\</span></td> + </tr> + <tr> + <td id="L786" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="786"></td> + <td id="LC786" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{1.5em}|\end{NicholsChart}|\\</span></td> + </tr> + <tr> + <td id="L787" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="787"></td> + <td id="LC787" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The |NicholsChart| environment works in conjunction with the parametric function generator macros |\addNicholsZPKChart| and |\addNicholsTFChart|. The optional argument is comprised of a comma separated list of tuples, either |obj/{opt}| or just |{opt}|. Each tuple passes options to different |pgfplots| macros that generate the axes and the plots according to:</span></td> + </tr> + <tr> + <td id="L788" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="788"></td> + <td id="LC788" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td> + </tr> + <tr> + <td id="L789" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="789"></td> + <td id="LC789" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |obj/{opt}|:</span></td> + </tr> + <tr> + <td id="L790" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="790"></td> + <td id="LC790" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{itemize}</span></td> + </tr> + <tr> + <td id="L791" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="791"></td> + <td id="LC791" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |tikz/{opt}|: modify picture properties by adding options |{opt}| to the |tikzpicture| environment.</span></td> + </tr> + <tr> + <td id="L792" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="792"></td> + <td id="LC792" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |axes/{opt}|: modify axis properties by adding options |{opt}| to the |axis| environment.</span></td> + </tr> + <tr> + <td id="L793" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="793"></td> + <td id="LC793" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item |commands/{opt}|: add any valid TikZ commands inside |axis| environment. The commands passed to |opt| need to be valid TikZ commands, separated by semicolons as usual.</span></td> + </tr> + <tr> + <td id="L794" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="794"></td> + <td id="LC794" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td> + </tr> + <tr> + <td id="L795" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="795"></td> + <td id="LC795" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \item Tuples of the form |{opt}| are passed directly to the |axis| environment.</span></td> + </tr> + <tr> + <td id="L796" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="796"></td> + <td id="LC796" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{itemize}</span></td> + </tr> + <tr> + <td id="L797" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="797"></td> + <td id="LC797" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> The frequency limits are translated to the x-axis limits and the domain of the |axis| environment.</span></td> + </tr> + <tr> + <td id="L798" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="798"></td> + <td id="LC798" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L799" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="799"></td> + <td id="LC799" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addNicholsZPKChart}</span></td> + </tr> + <tr> + <td id="L800" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="800"></td> + <td id="LC800" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addNicholsZPKChart|\oarg{plot-options}\\</span></td> + </tr> + <tr> + <td id="L801" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="801"></td> + <td id="LC801" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{z/\marg{zeros},p/\marg{poles},k/\marg{gain},d/\marg{delay}}</span></td> + </tr> + <tr> + <td id="L802" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="802"></td> + <td id="LC802" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L803" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="803"></td> + <td id="LC803" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Generates a twp parametric functions for the magnitude and the phase a transfer function in ZPK form. The generated magnitude and phase parametric functions are passed to the |\addplot| macro. This macro can be used inside any |axis| environment as long as a domain for the x-axis is supplied through either the |plot-options| interface or directly in the optional argument of the container |axis| environment. Use with the |NicholsChart| environment supplied with this package is recommended. The mandatory argument is the same as |\BodeZPK|.</span></td> + </tr> + <tr> + <td id="L804" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="804"></td> + <td id="LC804" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L805" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="805"></td> + <td id="LC805" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \DescribeMacro{\addNicholsTFChart}</span></td> + </tr> + <tr> + <td id="L806" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="806"></td> + <td id="LC806" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> |\addNicholsTFChart|\oarg{plot-options}\\</span></td> + </tr> + <tr> + <td id="L807" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="807"></td> + <td id="LC807" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \hspace*{2em}\marg{num/\marg{coeffs},den/\marg{coeffs},d/\marg{delay}}</span></td> + </tr> + <tr> + <td id="L808" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="808"></td> + <td id="LC808" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L809" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="809"></td> + <td id="LC809" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \noindent Similar to |\addNicholsZPKChart|, with a transfer function input in the TF form.</span></td> + </tr> + <tr> + <td id="L810" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="810"></td> + <td id="LC810" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L811" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="811"></td> + <td id="LC811" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \StopEventually{\PrintIndex}</span></td> + </tr> + <tr> + <td id="L812" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="812"></td> + <td id="LC812" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \clearpage</span></td> + </tr> + <tr> + <td id="L813" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="813"></td> + <td id="LC813" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \section{Implementation}</span></td> + </tr> + <tr> + <td id="L814" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="814"></td> + <td id="LC814" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Initialization}</span></td> + </tr> + <tr> + <td id="L815" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="815"></td> + <td id="LC815" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\n@mod}</span></td> + </tr> + <tr> + <td id="L816" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="816"></td> + <td id="LC816" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\n@pow}</span></td> + </tr> + <tr> + <td id="L817" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="817"></td> + <td id="LC817" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{gnuplot@id}</span></td> + </tr> + <tr> + <td id="L818" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="818"></td> + <td id="LC818" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{gnuplot@prefix}</span></td> + </tr> + <tr> + <td id="L819" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="819"></td> + <td id="LC819" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.3}{2021/11/03}{Added jobname to gnuplot prefix}</span></td> + </tr> + <tr> + <td id="L820" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="820"></td> + <td id="LC820" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.8}{2022/07/06}{Fixed issue \#6}</span></td> + </tr> + <tr> + <td id="L821" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="821"></td> + <td id="LC821" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This code is needed to support both |pgfplots| and |gnuplot| simultaneously. New macros are defined for the |pow| and |mod| functions to address differences between the two math engines. We start by processing the class options. </span></td> + </tr> + <tr> + <td id="L822" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="822"></td> + <td id="LC822" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L823" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="823"></td> + <td id="LC823" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\newif</span><span class="pl-k">\if</span>@pgfarg<span class="pl-c1">\@pgfargfalse</span></td> + </tr> + <tr> + <td id="L824" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="824"></td> + <td id="LC824" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\DeclareOption</span>{pgf}{</td> + </tr> + <tr> + <td id="L825" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="825"></td> + <td id="LC825" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\@pgfargtrue</span></td> + </tr> + <tr> + <td id="L826" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="826"></td> + <td id="LC826" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L827" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="827"></td> + <td id="LC827" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\newif</span><span class="pl-k">\if</span>@declutterarg<span class="pl-c1">\@declutterargfalse</span></td> + </tr> + <tr> + <td id="L828" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="828"></td> + <td id="LC828" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\DeclareOption</span>{declutter}{</td> + </tr> + <tr> + <td id="L829" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="829"></td> + <td id="LC829" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\@declutterargtrue</span></td> + </tr> + <tr> + <td id="L830" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="830"></td> + <td id="LC830" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L831" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="831"></td> + <td id="LC831" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\newif</span><span class="pl-k">\if</span>@radarg<span class="pl-c1">\@radargfalse</span></td> + </tr> + <tr> + <td id="L832" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="832"></td> + <td id="LC832" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\DeclareOption</span>{rad}{</td> + </tr> + <tr> + <td id="L833" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="833"></td> + <td id="LC833" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\@radargtrue</span></td> + </tr> + <tr> + <td id="L834" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="834"></td> + <td id="LC834" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L835" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="835"></td> + <td id="LC835" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\newif</span><span class="pl-k">\if</span>@hzarg<span class="pl-c1">\@hzargfalse</span></td> + </tr> + <tr> + <td id="L836" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="836"></td> + <td id="LC836" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\DeclareOption</span>{Hz}{</td> + </tr> + <tr> + <td id="L837" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="837"></td> + <td id="LC837" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\@hzargtrue</span></td> + </tr> + <tr> + <td id="L838" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="838"></td> + <td id="LC838" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L839" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="839"></td> + <td id="LC839" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\ProcessOptions\relax</span></td> + </tr> + <tr> + <td id="L840" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="840"></td> + <td id="LC840" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L841" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="841"></td> + <td id="LC841" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Then, we define two new macros to unify |pgfplots| and |gnuplot|.</span></td> + </tr> + <tr> + <td id="L842" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="842"></td> + <td id="LC842" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L843" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="843"></td> + <td id="LC843" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\n@mod</span>}[2]{(#1)-(floor((#1)/(#2))*(#2))}</td> + </tr> + <tr> + <td id="L844" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="844"></td> + <td id="LC844" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L845" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="845"></td> + <td id="LC845" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\newcommand</span>{<span class="pl-c1">\n@pow</span>}[2]{(#1)^(#2)}</td> + </tr> + <tr> + <td id="L846" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="846"></td> + <td id="LC846" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{</td> + </tr> + <tr> + <td id="L847" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="847"></td> + <td id="LC847" class="blob-code blob-code-inner js-file-line"> trig format plots=rad</td> + </tr> + <tr> + <td id="L848" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="848"></td> + <td id="LC848" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L849" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="849"></td> + <td id="LC849" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L850" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="850"></td> + <td id="LC850" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\newcommand</span>{<span class="pl-c1">\n@pow</span>}[2]{(#1)**(#2)}</td> + </tr> + <tr> + <td id="L851" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="851"></td> + <td id="LC851" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L852" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="852"></td> + <td id="LC852" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Then, we create a counter so that a new data table is generated and for each new plot. If the plot macros have not changed, the tables, once generated, can be reused by |gnuplot|, which reduces compilation time. The |declutter| option is used to enable the |gnuplot| directory to declutter the working directory.</span></td> + </tr> + <tr> + <td id="L853" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="853"></td> + <td id="LC853" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L854" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="854"></td> + <td id="LC854" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\newcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L855" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="855"></td> + <td id="LC855" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\setcounter</span>{gnuplot@id}{0}</td> + </tr> + <tr> + <td id="L856" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="856"></td> + <td id="LC856" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@declutterarg</td> + </tr> + <tr> + <td id="L857" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="857"></td> + <td id="LC857" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\bodeplot@prefix</span>{gnuplot/<span class="pl-c1">\jobname</span>}</td> + </tr> + <tr> + <td id="L858" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="858"></td> + <td id="LC858" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L859" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="859"></td> + <td id="LC859" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\bodeplot@prefix</span>{<span class="pl-c1">\jobname</span>}</td> + </tr> + <tr> + <td id="L860" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="860"></td> + <td id="LC860" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L861" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="861"></td> + <td id="LC861" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\tikzset</span>{</td> + </tr> + <tr> + <td id="L862" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="862"></td> + <td id="LC862" class="blob-code blob-code-inner js-file-line"> gnuplot@prefix/.style={</td> + </tr> + <tr> + <td id="L863" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="863"></td> + <td id="LC863" class="blob-code blob-code-inner js-file-line"> id=<span class="pl-c1">\arabic</span>{gnuplot@id},</td> + </tr> + <tr> + <td id="L864" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="864"></td> + <td id="LC864" class="blob-code blob-code-inner js-file-line"> prefix=<span class="pl-c1">\bodeplot@prefix</span></td> + </tr> + <tr> + <td id="L865" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="865"></td> + <td id="LC865" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L866" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="866"></td> + <td id="LC866" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L867" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="867"></td> + <td id="LC867" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L868" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="868"></td> + <td id="LC868" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> If the operating system is not Windows, and if the |declutter| option is not passed, we create the |gnuplot| folder if it does not already exist. \changes{v1.0.2}{2021/11/01}{Fixed issue \#1}</span></td> + </tr> + <tr> + <td id="L869" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="869"></td> + <td id="LC869" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L870" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="870"></td> + <td id="LC870" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\ifwindows</span><span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L871" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="871"></td> + <td id="LC871" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@declutterarg</td> + </tr> + <tr> + <td id="L872" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="872"></td> + <td id="LC872" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\immediate\write</span>18{mkdir -p gnuplot}</td> + </tr> + <tr> + <td id="L873" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="873"></td> + <td id="LC873" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L874" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="874"></td> + <td id="LC874" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L875" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="875"></td> + <td id="LC875" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L876" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="876"></td> + <td id="LC876" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L877" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="877"></td> + <td id="LC877" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L878" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="878"></td> + <td id="LC878" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L879" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="879"></td> + <td id="LC879" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L880" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="880"></td> + <td id="LC880" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L881" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="881"></td> + <td id="LC881" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{bode@style}</span></td> + </tr> + <tr> + <td id="L882" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="882"></td> + <td id="LC882" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Default axis properties for all plot macros are collected in this |pgf| style.</span></td> + </tr> + <tr> + <td id="L883" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="883"></td> + <td id="LC883" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L884" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="884"></td> + <td id="LC884" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\pgfplotsset</span>{</td> + </tr> + <tr> + <td id="L885" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="885"></td> + <td id="LC885" class="blob-code blob-code-inner js-file-line"> bode@style/.style = {</td> + </tr> + <tr> + <td id="L886" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="886"></td> + <td id="LC886" class="blob-code blob-code-inner js-file-line"> label style={font=<span class="pl-c1">\footnotesize</span>},</td> + </tr> + <tr> + <td id="L887" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="887"></td> + <td id="LC887" class="blob-code blob-code-inner js-file-line"> tick label style={font=<span class="pl-c1">\footnotesize</span>},</td> + </tr> + <tr> + <td id="L888" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="888"></td> + <td id="LC888" class="blob-code blob-code-inner js-file-line"> grid=both,</td> + </tr> + <tr> + <td id="L889" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="889"></td> + <td id="LC889" class="blob-code blob-code-inner js-file-line"> major grid style={color=gray!80},</td> + </tr> + <tr> + <td id="L890" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="890"></td> + <td id="LC890" class="blob-code blob-code-inner js-file-line"> minor grid style={color=gray!20},</td> + </tr> + <tr> + <td id="L891" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="891"></td> + <td id="LC891" class="blob-code blob-code-inner js-file-line"> x label style={at={(ticklabel cs:0.5)},anchor=near ticklabel},</td> + </tr> + <tr> + <td id="L892" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="892"></td> + <td id="LC892" class="blob-code blob-code-inner js-file-line"> y label style={at={(ticklabel cs:0.5)},anchor=near ticklabel},</td> + </tr> + <tr> + <td id="L893" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="893"></td> + <td id="LC893" class="blob-code blob-code-inner js-file-line"> scale only axis,</td> + </tr> + <tr> + <td id="L894" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="894"></td> + <td id="LC894" class="blob-code blob-code-inner js-file-line"> samples=200,</td> + </tr> + <tr> + <td id="L895" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="895"></td> + <td id="LC895" class="blob-code blob-code-inner js-file-line"> width=5cm,</td> + </tr> + <tr> + <td id="L896" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="896"></td> + <td id="LC896" class="blob-code blob-code-inner js-file-line"> log basis x=10</td> + </tr> + <tr> + <td id="L897" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="897"></td> + <td id="LC897" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L898" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="898"></td> + <td id="LC898" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L899" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="899"></td> + <td id="LC899" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L900" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="900"></td> + <td id="LC900" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L901" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="901"></td> + <td id="LC901" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{freq@filter}</span></td> + </tr> + <tr> + <td id="L902" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="902"></td> + <td id="LC902" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{freq@label}</span></td> + </tr> + <tr> + <td id="L903" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="903"></td> + <td id="LC903" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{freq@scale}</span></td> + </tr> + <tr> + <td id="L904" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="904"></td> + <td id="LC904" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{ph@scale}</span></td> + </tr> + <tr> + <td id="L905" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="905"></td> + <td id="LC905" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{ph@x@label}</span></td> + </tr> + <tr> + <td id="L906" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="906"></td> + <td id="LC906" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{ph@y@label}</span></td> + </tr> + <tr> + <td id="L907" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="907"></td> + <td id="LC907" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> These macros handle the |Hz| and |rad| class options and two new |pgf| keys named |frequency unit| and |phase unit| for conversion of frequency and phase units, respectively. \changes{v1.1.1}{2022/07/31}{New macros to enable `Hz' and `rad' units for frequency and phase, respectively}</span></td> + </tr> + <tr> + <td id="L908" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="908"></td> + <td id="LC908" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L909" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="909"></td> + <td id="LC909" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\pgfplotsset</span>{freq@filter/.style = {}}</td> + </tr> + <tr> + <td id="L910" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="910"></td> + <td id="LC910" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\def\freq@scale</span>{1}</td> + </tr> + <tr> + <td id="L911" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="911"></td> + <td id="LC911" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\pgfplotsset</span>{freq@label/.style = {xlabel = {Frequency (rad/s)}}}</td> + </tr> + <tr> + <td id="L912" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="912"></td> + <td id="LC912" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\pgfplotsset</span>{ph@x@label/.style = {xlabel={Phase (deg)}}}</td> + </tr> + <tr> + <td id="L913" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="913"></td> + <td id="LC913" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\pgfplotsset</span>{ph@y@label/.style = {ylabel={Phase (deg)}}}</td> + </tr> + <tr> + <td id="L914" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="914"></td> + <td id="LC914" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\def\ph@scale</span>{180/pi}</td> + </tr> + <tr> + <td id="L915" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="915"></td> + <td id="LC915" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\if</span>@radarg</td> + </tr> + <tr> + <td id="L916" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="916"></td> + <td id="LC916" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{ph@y@label/.style = {ylabel={Phase (rad)}}}</td> + </tr> + <tr> + <td id="L917" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="917"></td> + <td id="LC917" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{ph@x@label/.style = {xlabel={Phase (rad)}}}</td> + </tr> + <tr> + <td id="L918" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="918"></td> + <td id="LC918" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\def\ph@scale</span>{1}</td> + </tr> + <tr> + <td id="L919" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="919"></td> + <td id="LC919" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L920" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="920"></td> + <td id="LC920" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\if</span>@hzarg</td> + </tr> + <tr> + <td id="L921" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="921"></td> + <td id="LC921" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\def\freq@scale</span>{2*pi}</td> + </tr> + <tr> + <td id="L922" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="922"></td> + <td id="LC922" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{freq@label/.style = {xlabel = {Frequency (Hz)}}}</td> + </tr> + <tr> + <td id="L923" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="923"></td> + <td id="LC923" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L924" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="924"></td> + <td id="LC924" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{freq@filter/.style = {x filter/.expression={x-log10(2*pi)}}}</td> + </tr> + <tr> + <td id="L925" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="925"></td> + <td id="LC925" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L926" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="926"></td> + <td id="LC926" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L927" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="927"></td> + <td id="LC927" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\tikzset</span>{</td> + </tr> + <tr> + <td id="L928" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="928"></td> + <td id="LC928" class="blob-code blob-code-inner js-file-line"> phase unit/.initial={deg},</td> + </tr> + <tr> + <td id="L929" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="929"></td> + <td id="LC929" class="blob-code blob-code-inner js-file-line"> phase unit/.default={deg},</td> + </tr> + <tr> + <td id="L930" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="930"></td> + <td id="LC930" class="blob-code blob-code-inner js-file-line"> phase unit/.is choice,</td> + </tr> + <tr> + <td id="L931" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="931"></td> + <td id="LC931" class="blob-code blob-code-inner js-file-line"> phase unit/deg/.code={</td> + </tr> + <tr> + <td id="L932" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="932"></td> + <td id="LC932" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\renewcommand</span>{<span class="pl-c1">\ph@scale</span>}{180/pi}</td> + </tr> + <tr> + <td id="L933" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="933"></td> + <td id="LC933" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{ph@x@label/.style = {xlabel={Phase (deg)}}}</td> + </tr> + <tr> + <td id="L934" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="934"></td> + <td id="LC934" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{ph@y@label/.style = {ylabel={Phase (deg)}}}</td> + </tr> + <tr> + <td id="L935" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="935"></td> + <td id="LC935" class="blob-code blob-code-inner js-file-line"> },</td> + </tr> + <tr> + <td id="L936" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="936"></td> + <td id="LC936" class="blob-code blob-code-inner js-file-line"> phase unit/rad/.code={</td> + </tr> + <tr> + <td id="L937" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="937"></td> + <td id="LC937" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\renewcommand</span>{<span class="pl-c1">\ph@scale</span>}{1}</td> + </tr> + <tr> + <td id="L938" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="938"></td> + <td id="LC938" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{ph@y@label/.style = {ylabel={Phase (rad)}}}</td> + </tr> + <tr> + <td id="L939" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="939"></td> + <td id="LC939" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{ph@x@label/.style = {xlabel={Phase (rad)}}}</td> + </tr> + <tr> + <td id="L940" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="940"></td> + <td id="LC940" class="blob-code blob-code-inner js-file-line"> },</td> + </tr> + <tr> + <td id="L941" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="941"></td> + <td id="LC941" class="blob-code blob-code-inner js-file-line"> frequency unit/.initial={rad},</td> + </tr> + <tr> + <td id="L942" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="942"></td> + <td id="LC942" class="blob-code blob-code-inner js-file-line"> frequency unit/.default={rad},</td> + </tr> + <tr> + <td id="L943" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="943"></td> + <td id="LC943" class="blob-code blob-code-inner js-file-line"> frequency unit/.is choice,</td> + </tr> + <tr> + <td id="L944" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="944"></td> + <td id="LC944" class="blob-code blob-code-inner js-file-line"> frequency unit/Hz/.code={</td> + </tr> + <tr> + <td id="L945" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="945"></td> + <td id="LC945" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\renewcommand</span>{<span class="pl-c1">\freq@scale</span>}{2*pi}</td> + </tr> + <tr> + <td id="L946" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="946"></td> + <td id="LC946" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{freq@label/.style = {xlabel = {Frequency (Hz)}}}</td> + </tr> + <tr> + <td id="L947" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="947"></td> + <td id="LC947" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L948" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="948"></td> + <td id="LC948" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{freq@filter/.style = {x filter/.expression={x-log10(2*pi)}}}</td> + </tr> + <tr> + <td id="L949" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="949"></td> + <td id="LC949" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L950" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="950"></td> + <td id="LC950" class="blob-code blob-code-inner js-file-line"> },</td> + </tr> + <tr> + <td id="L951" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="951"></td> + <td id="LC951" class="blob-code blob-code-inner js-file-line"> frequency unit/rad/.code={</td> + </tr> + <tr> + <td id="L952" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="952"></td> + <td id="LC952" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\renewcommand</span>{<span class="pl-c1">\freq@scale</span>}{1}</td> + </tr> + <tr> + <td id="L953" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="953"></td> + <td id="LC953" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfplotsset</span>{freq@label/.style = {xlabel = {Frequency (rad/s)}}}</td> + </tr> + <tr> + <td id="L954" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="954"></td> + <td id="LC954" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L955" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="955"></td> + <td id="LC955" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L956" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="956"></td> + <td id="LC956" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L957" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="957"></td> + <td id="LC957" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L958" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="958"></td> + <td id="LC958" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L959" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="959"></td> + <td id="LC959" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L960" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="960"></td> + <td id="LC960" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L961" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="961"></td> + <td id="LC961" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L962" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="962"></td> + <td id="LC962" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L963" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="963"></td> + <td id="LC963" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{get@interval@start}</span></td> + </tr> + <tr> + <td id="L964" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="964"></td> + <td id="LC964" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{get@interval@end}</span></td> + </tr> + <tr> + <td id="L965" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="965"></td> + <td id="LC965" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Internal macros to extract start and end frequency limits from domain specifications.\changes{v1.1.1}{2022/07/31}{New macros to enable `Hz' and `rad' units for frequency and phase, respectively}</span></td> + </tr> + <tr> + <td id="L966" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="966"></td> + <td id="LC966" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L967" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="967"></td> + <td id="LC967" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\def\get@interval@start</span>#1:#2<span class="pl-c1">\@nil</span>{#1}</td> + </tr> + <tr> + <td id="L968" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="968"></td> + <td id="LC968" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\def\get@interval@end</span>#1:#2<span class="pl-c1">\@nil</span>{#2}</td> + </tr> + <tr> + <td id="L969" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="969"></td> + <td id="LC969" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L970" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="970"></td> + <td id="LC970" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L971" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="971"></td> + <td id="LC971" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L972" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="972"></td> + <td id="LC972" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Parametric function generators for poles, zeros, gains, and delays.}</span></td> + </tr> + <tr> + <td id="L973" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="973"></td> + <td id="LC973" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> All calculations are carried out assuming that frequeny inputs are in |rad/s|. Magnitude outputs are in |dB| and phase outputs are in degrees or radians, depending on the value of |\ph@scale|.</span></td> + </tr> + <tr> + <td id="L974" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="974"></td> + <td id="LC974" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagK}</span></td> + </tr> + <tr> + <td id="L975" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="975"></td> + <td id="LC975" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagKAsymp}</span></td> + </tr> + <tr> + <td id="L976" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="976"></td> + <td id="LC976" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagKLin}</span></td> + </tr> + <tr> + <td id="L977" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="977"></td> + <td id="LC977" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhK}</span></td> + </tr> + <tr> + <td id="L978" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="978"></td> + <td id="LC978" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhKAsymp}</span></td> + </tr> + <tr> + <td id="L979" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="979"></td> + <td id="LC979" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhKLin}</span></td> + </tr> + <tr> + <td id="L980" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="980"></td> + <td id="LC980" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> True, linear, and asymptotic magnitude and phase parametric functions for a pure gain $G(s)=k+0\mathrm{i}$. The macros take two arguments corresponding to real and imaginary part of the gain to facilitate code reuse between delays, gains, poles, and zeros, but only real gains are supported. The second argument, if supplied, is ignored.</span></td> + </tr> + <tr> + <td id="L981" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="981"></td> + <td id="LC981" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L982" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="982"></td> + <td id="LC982" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagK</span>}[2]{(20*log10(abs(#1)))}</td> + </tr> + <tr> + <td id="L983" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="983"></td> + <td id="LC983" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagKAsymp</span>}{<span class="pl-c1">\MagK</span>}</td> + </tr> + <tr> + <td id="L984" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="984"></td> + <td id="LC984" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagKLin</span>}{<span class="pl-c1">\MagK</span>}</td> + </tr> + <tr> + <td id="L985" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="985"></td> + <td id="LC985" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhK</span>}[2]{((#1<0?-pi:0)*<span class="pl-c1">\ph@scale</span>)}</td> + </tr> + <tr> + <td id="L986" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="986"></td> + <td id="LC986" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhKAsymp</span>}{<span class="pl-c1">\PhK</span>}</td> + </tr> + <tr> + <td id="L987" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="987"></td> + <td id="LC987" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhKLin</span>}{<span class="pl-c1">\PhK</span>}</td> + </tr> + <tr> + <td id="L988" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="988"></td> + <td id="LC988" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L989" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="989"></td> + <td id="LC989" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L990" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="990"></td> + <td id="LC990" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L991" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="991"></td> + <td id="LC991" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L992" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="992"></td> + <td id="LC992" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L993" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="993"></td> + <td id="LC993" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L994" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="994"></td> + <td id="LC994" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L995" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="995"></td> + <td id="LC995" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhKAsymp}</span></td> + </tr> + <tr> + <td id="L996" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="996"></td> + <td id="LC996" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhKLin}</span></td> + </tr> + <tr> + <td id="L997" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="997"></td> + <td id="LC997" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> True magnitude and phase parametric functions for a pure delay $G(s)=e^{-Ts}$. The macros take two arguments corresponding to real and imaginary part of the gain to facilitate code reuse between delays, gains, poles, and zeros, but only real gains are supported. The second argument, if supplied, is ignored.</span></td> + </tr> + <tr> + <td id="L998" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="998"></td> + <td id="LC998" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L999" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="999"></td> + <td id="LC999" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagDel</span>}[2]{0}</td> + </tr> + <tr> + <td id="L1000" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1000"></td> + <td id="LC1000" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhDel</span>}[2]{(-#1*t*<span class="pl-c1">\ph@scale</span>)}</td> + </tr> + <tr> + <td id="L1001" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1001"></td> + <td id="LC1001" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1002" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1002"></td> + <td id="LC1002" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1003" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1003"></td> + <td id="LC1003" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1004" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1004"></td> + <td id="LC1004" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagPole}</span></td> + </tr> + <tr> + <td id="L1005" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1005"></td> + <td id="LC1005" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagPoleAsymp}</span></td> + </tr> + <tr> + <td id="L1006" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1006"></td> + <td id="LC1006" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagPoleLin}</span></td> + </tr> + <tr> + <td id="L1007" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1007"></td> + <td id="LC1007" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhPole}</span></td> + </tr> + <tr> + <td id="L1008" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1008"></td> + <td id="LC1008" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhPoleAsymp}</span></td> + </tr> + <tr> + <td id="L1009" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1009"></td> + <td id="LC1009" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhPoleLin}</span></td> + </tr> + <tr> + <td id="L1010" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1010"></td> + <td id="LC1010" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> These macros are the building blocks for most of the plotting functions provided by this package. We start with Parametric function for the true magnitude of a complex pole.</span></td> + </tr> + <tr> + <td id="L1011" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1011"></td> + <td id="LC1011" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1012" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1012"></td> + <td id="LC1012" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagPole</span>}[2]</td> + </tr> + <tr> + <td id="L1013" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1013"></td> + <td id="LC1013" class="blob-code blob-code-inner js-file-line"> {(-20*log10(sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{t - (#2)}{2})))}</td> + </tr> + <tr> + <td id="L1014" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1014"></td> + <td id="LC1014" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1015" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1015"></td> + <td id="LC1015" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parametric function for linear approximation of the magnitude of a complex pole.</span></td> + </tr> + <tr> + <td id="L1016" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1016"></td> + <td id="LC1016" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1017" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1017"></td> + <td id="LC1017" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagPoleLin</span>}[2]{(t < sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}) ?</td> + </tr> + <tr> + <td id="L1018" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1018"></td> + <td id="LC1018" class="blob-code blob-code-inner js-file-line"> -20*log10(sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2})) :</td> + </tr> + <tr> + <td id="L1019" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1019"></td> + <td id="LC1019" class="blob-code blob-code-inner js-file-line"> -20*log10(t)</td> + </tr> + <tr> + <td id="L1020" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1020"></td> + <td id="LC1020" class="blob-code blob-code-inner js-file-line"> )}</td> + </tr> + <tr> + <td id="L1021" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1021"></td> + <td id="LC1021" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1022" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1022"></td> + <td id="LC1022" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parametric function for asymptotic approximation of the magnitude of a complex pole, same as linear approximation.</span></td> + </tr> + <tr> + <td id="L1023" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1023"></td> + <td id="LC1023" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1024" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1024"></td> + <td id="LC1024" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagPoleAsymp</span>}{<span class="pl-c1">\MagPoleLin</span>}</td> + </tr> + <tr> + <td id="L1025" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1025"></td> + <td id="LC1025" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1026" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1026"></td> + <td id="LC1026" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parametric function for the true phase of a complex pole.</span></td> + </tr> + <tr> + <td id="L1027" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1027"></td> + <td id="LC1027" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1028" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1028"></td> + <td id="LC1028" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhPole</span>}[2]{((#1 > 0 ? (#2 > 0 ?</td> + </tr> + <tr> + <td id="L1029" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1029"></td> + <td id="LC1029" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@mod</span>{-atan2((t - (#2)),-(#1))}{2*pi}) :</td> + </tr> + <tr> + <td id="L1030" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1030"></td> + <td id="LC1030" class="blob-code blob-code-inner js-file-line"> (-atan2((t - (#2)),-(#1)))) :</td> + </tr> + <tr> + <td id="L1031" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1031"></td> + <td id="LC1031" class="blob-code blob-code-inner js-file-line"> (-atan2((t - (#2)),-(#1))))*<span class="pl-c1">\ph@scale</span>)}</td> + </tr> + <tr> + <td id="L1032" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1032"></td> + <td id="LC1032" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1033" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1033"></td> + <td id="LC1033" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parametric function for linear approximation of the phase of a complex pole.</span></td> + </tr> + <tr> + <td id="L1034" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1034"></td> + <td id="LC1034" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1035" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1035"></td> + <td id="LC1035" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhPoleLin</span>}[2]{</td> + </tr> + <tr> + <td id="L1036" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1036"></td> + <td id="LC1036" class="blob-code blob-code-inner js-file-line"> ((abs(#1)+abs(#2) == 0 ? -pi/2 :</td> + </tr> + <tr> + <td id="L1037" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1037"></td> + <td id="LC1037" class="blob-code blob-code-inner js-file-line"> (t < (sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}) /</td> + </tr> + <tr> + <td id="L1038" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1038"></td> + <td id="LC1038" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{10}{sqrt(<span class="pl-c1">\n@pow</span>{#1}{2}/(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}))})) ?</td> + </tr> + <tr> + <td id="L1039" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1039"></td> + <td id="LC1039" class="blob-code blob-code-inner js-file-line"> (-atan2(-(#2),-(#1))) :</td> + </tr> + <tr> + <td id="L1040" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1040"></td> + <td id="LC1040" class="blob-code blob-code-inner js-file-line"> (t >= (sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}) *</td> + </tr> + <tr> + <td id="L1041" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1041"></td> + <td id="LC1041" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{10}{sqrt(<span class="pl-c1">\n@pow</span>{#1}{2}/(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}))})) ?</td> + </tr> + <tr> + <td id="L1042" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1042"></td> + <td id="LC1042" class="blob-code blob-code-inner js-file-line"> (#2>0?(#1>0?3*pi/2:-pi/2):-pi/2) :</td> + </tr> + <tr> + <td id="L1043" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1043"></td> + <td id="LC1043" class="blob-code blob-code-inner js-file-line"> (-atan2(-(#2),-(#1)) + (log10(t/(sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}) /</td> + </tr> + <tr> + <td id="L1044" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1044"></td> + <td id="LC1044" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{10}{sqrt(<span class="pl-c1">\n@pow</span>{#1}{2}/(<span class="pl-c1">\n@pow</span>{#1}{2} +</td> + </tr> + <tr> + <td id="L1045" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1045"></td> + <td id="LC1045" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{#2}{2}))}))))*((#2>0?(#1>0?3*pi/2:-pi/2):-pi/2) + atan2(-(#2),-(#1)))/</td> + </tr> + <tr> + <td id="L1046" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1046"></td> + <td id="LC1046" class="blob-code blob-code-inner js-file-line"> (log10(<span class="pl-c1">\n@pow</span>{10}{sqrt((4*<span class="pl-c1">\n@pow</span>{#1}{2})/</td> + </tr> + <tr> + <td id="L1047" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1047"></td> + <td id="LC1047" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2}))}))))))*<span class="pl-c1">\ph@scale</span>)}</td> + </tr> + <tr> + <td id="L1048" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1048"></td> + <td id="LC1048" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1049" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1049"></td> + <td id="LC1049" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parametric function for asymptotic approximation of the phase of a complex pole.</span></td> + </tr> + <tr> + <td id="L1050" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1050"></td> + <td id="LC1050" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1051" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1051"></td> + <td id="LC1051" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhPoleAsymp</span>}[2]{((t < (sqrt(<span class="pl-c1">\n@pow</span>{#1}{2} + <span class="pl-c1">\n@pow</span>{#2}{2})) ?</td> + </tr> + <tr> + <td id="L1052" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1052"></td> + <td id="LC1052" class="blob-code blob-code-inner js-file-line"> (-atan2(-(#2),-(#1))) :</td> + </tr> + <tr> + <td id="L1053" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1053"></td> + <td id="LC1053" class="blob-code blob-code-inner js-file-line"> (#2>0?(#1>0?3*pi/2:-pi/2):-pi/2))*<span class="pl-c1">\ph@scale</span>)}</td> + </tr> + <tr> + <td id="L1054" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1054"></td> + <td id="LC1054" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1055" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1055"></td> + <td id="LC1055" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1056" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1056"></td> + <td id="LC1056" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1057" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1057"></td> + <td id="LC1057" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1058" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1058"></td> + <td id="LC1058" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1059" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1059"></td> + <td id="LC1059" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1060" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1060"></td> + <td id="LC1060" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1061" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1061"></td> + <td id="LC1061" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagZero}</span></td> + </tr> + <tr> + <td id="L1062" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1062"></td> + <td id="LC1062" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagZeroAsymp}</span></td> + </tr> + <tr> + <td id="L1063" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1063"></td> + <td id="LC1063" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagZeroLin}</span></td> + </tr> + <tr> + <td id="L1064" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1064"></td> + <td id="LC1064" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhZero}</span></td> + </tr> + <tr> + <td id="L1065" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1065"></td> + <td id="LC1065" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhZeroAsymp}</span></td> + </tr> + <tr> + <td id="L1066" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1066"></td> + <td id="LC1066" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhZeroLin}</span></td> + </tr> + <tr> + <td id="L1067" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1067"></td> + <td id="LC1067" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Plots of zeros are defined to be negative of plots of poles. The |0-| is necessary due to a bug in |gnuplot| (fixed in version 5.4, patchlevel 3).</span></td> + </tr> + <tr> + <td id="L1068" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1068"></td> + <td id="LC1068" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1069" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1069"></td> + <td id="LC1069" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagZero</span>}{0-<span class="pl-c1">\MagPole</span>}</td> + </tr> + <tr> + <td id="L1070" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1070"></td> + <td id="LC1070" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagZeroLin</span>}{0-<span class="pl-c1">\MagPoleLin</span>}</td> + </tr> + <tr> + <td id="L1071" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1071"></td> + <td id="LC1071" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagZeroAsymp</span>}{0-<span class="pl-c1">\MagPoleAsymp</span>}</td> + </tr> + <tr> + <td id="L1072" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1072"></td> + <td id="LC1072" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhZero</span>}{0-<span class="pl-c1">\PhPole</span>}</td> + </tr> + <tr> + <td id="L1073" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1073"></td> + <td id="LC1073" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhZeroLin</span>}{0-<span class="pl-c1">\PhPoleLin</span>}</td> + </tr> + <tr> + <td id="L1074" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1074"></td> + <td id="LC1074" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhZeroAsymp</span>}{0-<span class="pl-c1">\PhPoleAsymp</span>}</td> + </tr> + <tr> + <td id="L1075" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1075"></td> + <td id="LC1075" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1076" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1076"></td> + <td id="LC1076" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1077" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1077"></td> + <td id="LC1077" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1078" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1078"></td> + <td id="LC1078" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1079" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1079"></td> + <td id="LC1079" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1080" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1080"></td> + <td id="LC1080" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1081" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1081"></td> + <td id="LC1081" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1082" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1082"></td> + <td id="LC1082" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Second order systems.}</span></td> + </tr> + <tr> + <td id="L1083" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1083"></td> + <td id="LC1083" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Although second order systems can be dealt with using the macros defined so far, the following dedicated macros for second order systems involve less computation. </span></td> + </tr> + <tr> + <td id="L1084" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1084"></td> + <td id="LC1084" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSPoles}</span></td> + </tr> + <tr> + <td id="L1085" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1085"></td> + <td id="LC1085" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSPolesAsymp}</span></td> + </tr> + <tr> + <td id="L1086" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1086"></td> + <td id="LC1086" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSPolesLin}</span></td> + </tr> + <tr> + <td id="L1087" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1087"></td> + <td id="LC1087" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhCSPoles}</span></td> + </tr> + <tr> + <td id="L1088" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1088"></td> + <td id="LC1088" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhCSPolesAsymp}</span></td> + </tr> + <tr> + <td id="L1089" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1089"></td> + <td id="LC1089" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhCSPolesLin}</span></td> + </tr> + <tr> + <td id="L1090" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1090"></td> + <td id="LC1090" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSZeros}</span></td> + </tr> + <tr> + <td id="L1091" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1091"></td> + <td id="LC1091" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSZerosAsymp}</span></td> + </tr> + <tr> + <td id="L1092" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1092"></td> + <td id="LC1092" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSZerosLin}</span></td> + </tr> + <tr> + <td id="L1093" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1093"></td> + <td id="LC1093" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhCSZeros}</span></td> + </tr> + <tr> + <td id="L1094" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1094"></td> + <td id="LC1094" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhCSZerosAsymp}</span></td> + </tr> + <tr> + <td id="L1095" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1095"></td> + <td id="LC1095" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhCSZerosLin}</span></td> + </tr> + <tr> + <td id="L1096" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1096"></td> + <td id="LC1096" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Consider the canonical second order transfer function $G(s) = \frac{1}{s^2 + 2 \zeta w_n s + w_n^2}$. We start with true, linear, and asymptotic magnitude plots for this transfer function.</span></td> + </tr> + <tr> + <td id="L1097" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1097"></td> + <td id="LC1097" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1098" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1098"></td> + <td id="LC1098" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSPoles</span>}[2]{(-20*log10(sqrt(<span class="pl-c1">\n@pow</span>{<span class="pl-c1">\n@pow</span>{#2}{2} </td> + </tr> + <tr> + <td id="L1099" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1099"></td> + <td id="LC1099" class="blob-code blob-code-inner js-file-line"> - <span class="pl-c1">\n@pow</span>{t}{2}}{2} + <span class="pl-c1">\n@pow</span>{2*#1*#2*t}{2})))}</td> + </tr> + <tr> + <td id="L1100" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1100"></td> + <td id="LC1100" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSPolesLin</span>}[2]{(t < #2 ? -40*log10(#2) : - 40*log10(t))}</td> + </tr> + <tr> + <td id="L1101" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1101"></td> + <td id="LC1101" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSPolesAsymp</span>}{<span class="pl-c1">\MagCSPolesLin</span>}</td> + </tr> + <tr> + <td id="L1102" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1102"></td> + <td id="LC1102" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1103" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1103"></td> + <td id="LC1103" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Then, we have true, linear, and asymptotic phase plots for the canonical second order transfer function.</span></td> + </tr> + <tr> + <td id="L1104" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1104"></td> + <td id="LC1104" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1105" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1105"></td> + <td id="LC1105" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhCSPoles</span>}[2]{((-atan2((2*(#1)*(#2)*t),(<span class="pl-c1">\n@pow</span>{#2}{2}</td> + </tr> + <tr> + <td id="L1106" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1106"></td> + <td id="LC1106" class="blob-code blob-code-inner js-file-line"> - <span class="pl-c1">\n@pow</span>{t}{2})))*<span class="pl-c1">\ph@scale</span>)}</td> + </tr> + <tr> + <td id="L1107" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1107"></td> + <td id="LC1107" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhCSPolesLin</span>}[2]{((t < (#2 / (<span class="pl-c1">\n@pow</span>{10}{abs(#1)})) ?</td> + </tr> + <tr> + <td id="L1108" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1108"></td> + <td id="LC1108" class="blob-code blob-code-inner js-file-line"> 0 :</td> + </tr> + <tr> + <td id="L1109" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1109"></td> + <td id="LC1109" class="blob-code blob-code-inner js-file-line"> (t >= (#2 * (<span class="pl-c1">\n@pow</span>{10}{abs(#1)})) ?</td> + </tr> + <tr> + <td id="L1110" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1110"></td> + <td id="LC1110" class="blob-code blob-code-inner js-file-line"> (#1>0 ? -pi : pi) :</td> + </tr> + <tr> + <td id="L1111" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1111"></td> + <td id="LC1111" class="blob-code blob-code-inner js-file-line"> (#1>0 ? (-pi*(log10(t*(<span class="pl-c1">\n@pow</span>{10}{#1})/#2))/(2*#1)) :</td> + </tr> + <tr> + <td id="L1112" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1112"></td> + <td id="LC1112" class="blob-code blob-code-inner js-file-line"> (pi*(log10(t*(<span class="pl-c1">\n@pow</span>{10}{abs(#1)})/#2))/(2*abs(#1))))))*<span class="pl-c1">\ph@scale</span>)}</td> + </tr> + <tr> + <td id="L1113" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1113"></td> + <td id="LC1113" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhCSPolesAsymp</span>}[2]{((#1>0?(t<#2?0:-pi):(t<#2?0:pi))*<span class="pl-c1">\ph@scale</span>)}</td> + </tr> + <tr> + <td id="L1114" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1114"></td> + <td id="LC1114" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1115" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1115"></td> + <td id="LC1115" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Plots of the inverse function $G(s)=s^2+2\zeta\omega_n s+\omega_n^2$ are defined to be negative of plots of poles. The |0-| is necessary due to a bug in |gnuplot| (fixed in version 5.4, patchlevel 3).</span></td> + </tr> + <tr> + <td id="L1116" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1116"></td> + <td id="LC1116" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1117" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1117"></td> + <td id="LC1117" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSZeros</span>}{0-<span class="pl-c1">\MagCSPoles</span>}</td> + </tr> + <tr> + <td id="L1118" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1118"></td> + <td id="LC1118" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSZerosLin</span>}{0-<span class="pl-c1">\MagCSPolesLin</span>}</td> + </tr> + <tr> + <td id="L1119" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1119"></td> + <td id="LC1119" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSZerosAsymp</span>}{0-<span class="pl-c1">\MagCSPolesAsymp</span>}</td> + </tr> + <tr> + <td id="L1120" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1120"></td> + <td id="LC1120" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhCSZeros</span>}{0-<span class="pl-c1">\PhCSPoles</span>}</td> + </tr> + <tr> + <td id="L1121" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1121"></td> + <td id="LC1121" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhCSZerosLin</span>}{0-<span class="pl-c1">\PhCSPolesLin</span>}</td> + </tr> + <tr> + <td id="L1122" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1122"></td> + <td id="LC1122" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhCSZerosAsymp</span>}{0-<span class="pl-c1">\PhCSPolesAsymp</span>}</td> + </tr> + <tr> + <td id="L1123" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1123"></td> + <td id="LC1123" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1124" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1124"></td> + <td id="LC1124" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1125" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1125"></td> + <td id="LC1125" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1126" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1126"></td> + <td id="LC1126" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1127" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1127"></td> + <td id="LC1127" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1128" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1128"></td> + <td id="LC1128" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1129" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1129"></td> + <td id="LC1129" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1130" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1130"></td> + <td id="LC1130" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1131" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1131"></td> + <td id="LC1131" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1132" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1132"></td> + <td id="LC1132" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1133" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1133"></td> + <td id="LC1133" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1134" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1134"></td> + <td id="LC1134" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1135" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1135"></td> + <td id="LC1135" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1136" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1136"></td> + <td id="LC1136" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSPolesPeak}</span></td> + </tr> + <tr> + <td id="L1137" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1137"></td> + <td id="LC1137" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagCSZerosPeak}</span></td> + </tr> + <tr> + <td id="L1138" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1138"></td> + <td id="LC1138" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> These macros are used to add a resonant peak to linear and asymptotic plots of canonical second order poles and zeros. Since the plots are parametric, a separate |\draw| command is needed to add a vertical arrow.</span></td> + </tr> + <tr> + <td id="L1139" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1139"></td> + <td id="LC1139" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1140" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1140"></td> + <td id="LC1140" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSPolesPeak</span>}[3][]{</td> + </tr> + <tr> + <td id="L1141" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1141"></td> + <td id="LC1141" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\draw</span>[#1,->] (axis cs:{#3},{-40*log10(#3)}) -- </td> + </tr> + <tr> + <td id="L1142" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1142"></td> + <td id="LC1142" class="blob-code blob-code-inner js-file-line"> (axis cs:{#3},{-40*log10(#3)-20*log10(2*abs(#2))})</td> + </tr> + <tr> + <td id="L1143" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1143"></td> + <td id="LC1143" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1144" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1144"></td> + <td id="LC1144" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagCSZerosPeak</span>}[3][]{</td> + </tr> + <tr> + <td id="L1145" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1145"></td> + <td id="LC1145" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\draw</span>[#1,->] (axis cs:{#3},{40*log10(#3)}) -- </td> + </tr> + <tr> + <td id="L1146" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1146"></td> + <td id="LC1146" class="blob-code blob-code-inner js-file-line"> (axis cs:{#3},{40*log10(#3)+20*log10(2*abs(#2))})</td> + </tr> + <tr> + <td id="L1147" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1147"></td> + <td id="LC1147" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1148" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1148"></td> + <td id="LC1148" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1149" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1149"></td> + <td id="LC1149" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1150" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1150"></td> + <td id="LC1150" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1151" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1151"></td> + <td id="LC1151" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOPoles}</span></td> + </tr> + <tr> + <td id="L1152" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1152"></td> + <td id="LC1152" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOPolesAsymp}</span></td> + </tr> + <tr> + <td id="L1153" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1153"></td> + <td id="LC1153" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOPolesLin}</span></td> + </tr> + <tr> + <td id="L1154" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1154"></td> + <td id="LC1154" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhSOPoles}</span></td> + </tr> + <tr> + <td id="L1155" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1155"></td> + <td id="LC1155" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhSOPolesAsymp}</span></td> + </tr> + <tr> + <td id="L1156" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1156"></td> + <td id="LC1156" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhSOPolesLin}</span></td> + </tr> + <tr> + <td id="L1157" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1157"></td> + <td id="LC1157" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOZeros}</span></td> + </tr> + <tr> + <td id="L1158" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1158"></td> + <td id="LC1158" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOZerosAsymp}</span></td> + </tr> + <tr> + <td id="L1159" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1159"></td> + <td id="LC1159" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOZerosLin}</span></td> + </tr> + <tr> + <td id="L1160" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1160"></td> + <td id="LC1160" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhSOZeros}</span></td> + </tr> + <tr> + <td id="L1161" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1161"></td> + <td id="LC1161" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhSOZerosAsymp}</span></td> + </tr> + <tr> + <td id="L1162" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1162"></td> + <td id="LC1162" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\PhSOZerosLin}</span></td> + </tr> + <tr> + <td id="L1163" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1163"></td> + <td id="LC1163" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Consider a general second order transfer function $G(s) = \frac{1}{s^2 + a s + b}$. We start with true, linear, and asymptotic magnitude plots for this transfer function.</span></td> + </tr> + <tr> + <td id="L1164" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1164"></td> + <td id="LC1164" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.1.2}{2022/10/29}{Fix scaling bug introduced in v1.1.1}</span></td> + </tr> + <tr> + <td id="L1165" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1165"></td> + <td id="LC1165" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1166" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1166"></td> + <td id="LC1166" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOPoles</span>}[2]{</td> + </tr> + <tr> + <td id="L1167" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1167"></td> + <td id="LC1167" class="blob-code blob-code-inner js-file-line"> (-20*log10(sqrt(<span class="pl-c1">\n@pow</span>{#2 - <span class="pl-c1">\n@pow</span>{t}{2}}{2} + <span class="pl-c1">\n@pow</span>{#1*t}{2})))}</td> + </tr> + <tr> + <td id="L1168" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1168"></td> + <td id="LC1168" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOPolesLin</span>}[2]{</td> + </tr> + <tr> + <td id="L1169" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1169"></td> + <td id="LC1169" class="blob-code blob-code-inner js-file-line"> (t < sqrt(abs(#2)) ? -20*log10(abs(#2)) : - 40*log10(t))}</td> + </tr> + <tr> + <td id="L1170" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1170"></td> + <td id="LC1170" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOPolesAsymp</span>}{<span class="pl-c1">\MagSOPolesLin</span>}</td> + </tr> + <tr> + <td id="L1171" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1171"></td> + <td id="LC1171" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1172" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1172"></td> + <td id="LC1172" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Then, we have true, linear, and asymptotic phase plots for the general second order transfer function.</span></td> + </tr> + <tr> + <td id="L1173" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1173"></td> + <td id="LC1173" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1174" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1174"></td> + <td id="LC1174" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhSOPoles</span>}[2]{((-atan2((#1)*t,((#2) - <span class="pl-c1">\n@pow</span>{t}{2})))*<span class="pl-c1">\ph@scale</span>)}</td> + </tr> + <tr> + <td id="L1175" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1175"></td> + <td id="LC1175" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhSOPolesLin</span>}[2]{((#2>0 ?</td> + </tr> + <tr> + <td id="L1176" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1176"></td> + <td id="LC1176" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PhCSPolesLin</span>{(#1/(2*sqrt(#2)))}{(sqrt(#2))} :</td> + </tr> + <tr> + <td id="L1177" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1177"></td> + <td id="LC1177" class="blob-code blob-code-inner js-file-line"> (#1>0 ? -pi : pi)))}</td> + </tr> + <tr> + <td id="L1178" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1178"></td> + <td id="LC1178" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhSOPolesAsymp</span>}[2]{((#2>0 ?</td> + </tr> + <tr> + <td id="L1179" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1179"></td> + <td id="LC1179" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PhCSPolesAsymp</span>{(#1/(2*sqrt(#2)))}{(sqrt(#2))} :</td> + </tr> + <tr> + <td id="L1180" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1180"></td> + <td id="LC1180" class="blob-code blob-code-inner js-file-line"> (#1>0 ? -pi : pi)))}</td> + </tr> + <tr> + <td id="L1181" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1181"></td> + <td id="LC1181" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1182" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1182"></td> + <td id="LC1182" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Plots of the inverse function $G(s)=s^2+as+b$ are defined to be negative of plots of poles. The |0-| is necessary due to a bug in |gnuplot| (fixed in version 5.4, patchlevel 3).</span></td> + </tr> + <tr> + <td id="L1183" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1183"></td> + <td id="LC1183" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1184" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1184"></td> + <td id="LC1184" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOZeros</span>}{0-<span class="pl-c1">\MagSOPoles</span>}</td> + </tr> + <tr> + <td id="L1185" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1185"></td> + <td id="LC1185" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOZerosLin</span>}{0-<span class="pl-c1">\MagSOPolesLin</span>}</td> + </tr> + <tr> + <td id="L1186" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1186"></td> + <td id="LC1186" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOZerosAsymp</span>}{0-<span class="pl-c1">\MagSOPolesAsymp</span>}</td> + </tr> + <tr> + <td id="L1187" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1187"></td> + <td id="LC1187" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhSOZeros</span>}{0-<span class="pl-c1">\PhSOPoles</span>}</td> + </tr> + <tr> + <td id="L1188" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1188"></td> + <td id="LC1188" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhSOZerosLin</span>}{0-<span class="pl-c1">\PhSOPolesLin</span>}</td> + </tr> + <tr> + <td id="L1189" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1189"></td> + <td id="LC1189" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\PhSOZerosAsymp</span>}{0-<span class="pl-c1">\PhSOPolesAsymp</span>}</td> + </tr> + <tr> + <td id="L1190" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1190"></td> + <td id="LC1190" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1191" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1191"></td> + <td id="LC1191" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1192" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1192"></td> + <td id="LC1192" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1193" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1193"></td> + <td id="LC1193" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1194" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1194"></td> + <td id="LC1194" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1195" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1195"></td> + <td id="LC1195" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1196" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1196"></td> + <td id="LC1196" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1197" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1197"></td> + <td id="LC1197" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1198" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1198"></td> + <td id="LC1198" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1199" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1199"></td> + <td id="LC1199" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1200" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1200"></td> + <td id="LC1200" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1201" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1201"></td> + <td id="LC1201" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1202" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1202"></td> + <td id="LC1202" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1203" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1203"></td> + <td id="LC1203" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOPolesPeak}</span></td> + </tr> + <tr> + <td id="L1204" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1204"></td> + <td id="LC1204" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\MagSOZerosPeak}</span></td> + </tr> + <tr> + <td id="L1205" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1205"></td> + <td id="LC1205" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> These macros are used to add a resonant peak to linear and asymptotic plots of general second order poles and zeros. Since the plots are parametric, a separate |\draw| command is needed to add a vertical arrow.</span></td> + </tr> + <tr> + <td id="L1206" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1206"></td> + <td id="LC1206" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1207" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1207"></td> + <td id="LC1207" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOPolesPeak</span>}[3][]{</td> + </tr> + <tr> + <td id="L1208" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1208"></td> + <td id="LC1208" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\draw</span>[#1,->] (axis cs:{sqrt(abs(#3))},{-20*log10(abs(#3))}) -- </td> + </tr> + <tr> + <td id="L1209" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1209"></td> + <td id="LC1209" class="blob-code blob-code-inner js-file-line"> (axis cs:{sqrt(abs(#3))},{-20*log10(abs(#3)) - </td> + </tr> + <tr> + <td id="L1210" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1210"></td> + <td id="LC1210" class="blob-code blob-code-inner js-file-line"> 20*log10(abs(#2/sqrt(abs(#3))))});</td> + </tr> + <tr> + <td id="L1211" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1211"></td> + <td id="LC1211" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1212" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1212"></td> + <td id="LC1212" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\MagSOZerosPeak</span>}[3][]{</td> + </tr> + <tr> + <td id="L1213" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1213"></td> + <td id="LC1213" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\draw</span>[#1,->] (axis cs:{sqrt(abs(#3))},{20*log10(abs(#3))}) -- </td> + </tr> + <tr> + <td id="L1214" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1214"></td> + <td id="LC1214" class="blob-code blob-code-inner js-file-line"> (axis cs:{sqrt(abs(#3))},{20*log10(abs(#3)) + </td> + </tr> + <tr> + <td id="L1215" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1215"></td> + <td id="LC1215" class="blob-code blob-code-inner js-file-line"> 20*log10(abs(#2/sqrt(abs(#3))))});</td> + </tr> + <tr> + <td id="L1216" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1216"></td> + <td id="LC1216" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1217" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1217"></td> + <td id="LC1217" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1218" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1218"></td> + <td id="LC1218" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1219" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1219"></td> + <td id="LC1219" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1220" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1220"></td> + <td id="LC1220" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Commands for Bode plots}</span></td> + </tr> + <tr> + <td id="L1221" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1221"></td> + <td id="LC1221" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsubsection{User macros}</span></td> + </tr> + <tr> + <td id="L1222" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1222"></td> + <td id="LC1222" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\BodeZPK}</span></td> + </tr> + <tr> + <td id="L1223" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1223"></td> + <td id="LC1223" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This macro takes lists of complex poles and zeros of the form |{re,im}|, and values of gain and delay as inputs and constructs parametric functions for the Bode magnitude and phase plots. This is done by adding together the parametric functions generated by the macros for individual zeros, poles, gain, and delay, described above. The parametric functions are then plotted in a |tikzpicture| environment using the |\addplot| macro. Unless the package is loaded with the option |pgf|, the parametric functions are evaluated using |gnuplot|. \changes{v1.0.1}{2021/10/29}{Pass arbitrary TikZ commands as options.}</span></td> + </tr> + <tr> + <td id="L1224" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1224"></td> + <td id="LC1224" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1225" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1225"></td> + <td id="LC1225" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\BodeZPK</span>}[4][approx/true]{</td> + </tr> + <tr> + <td id="L1226" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1226"></td> + <td id="LC1226" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1227" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1227"></td> + <td id="LC1227" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Most of the work is done by the |\parse@opt| and the |\build@ZPK@plot| macros, described in the 'Internal macros' section. The former is used to parse the optional arguments and the latter to extract poles, zeros, gain, and delay from the first mandatory argument and to generate macros |\func@mag| and |\func@ph| that hold the magnitude and phase parametric functions. The |\noexpand| macros below are needed to so that only the macro |\opt@group| is expanded. \changes{v1.0.3}{2021/11/03}{Added Tikz option}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}</span></td> + </tr> + <tr> + <td id="L1228" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1228"></td> + <td id="LC1228" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1229" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1229"></td> + <td id="LC1229" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@opt</span>{#1}</td> + </tr> + <tr> + <td id="L1230" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1230"></td> + <td id="LC1230" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td> + </tr> + <tr> + <td id="L1231" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1231"></td> + <td id="LC1231" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td> + </tr> + <tr> + <td id="L1232" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1232"></td> + <td id="LC1232" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]}</td> + </tr> + <tr> + <td id="L1233" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1233"></td> + <td id="LC1233" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1234" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1234"></td> + <td id="LC1234" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{<span class="pl-c1">\opt@approx</span>}{#2}</td> + </tr> + <tr> + <td id="L1235" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1235"></td> + <td id="LC1235" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">groupplot</span>}[</td> + </tr> + <tr> + <td id="L1236" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1236"></td> + <td id="LC1236" class="blob-code blob-code-inner js-file-line"> bode@style,</td> + </tr> + <tr> + <td id="L1237" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1237"></td> + <td id="LC1237" class="blob-code blob-code-inner js-file-line"> xmin=#3,</td> + </tr> + <tr> + <td id="L1238" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1238"></td> + <td id="LC1238" class="blob-code blob-code-inner js-file-line"> xmax=#4,</td> + </tr> + <tr> + <td id="L1239" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1239"></td> + <td id="LC1239" class="blob-code blob-code-inner js-file-line"> domain=#3*<span class="pl-c1">\freq@scale</span>:#4*<span class="pl-c1">\freq@scale</span>,</td> + </tr> + <tr> + <td id="L1240" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1240"></td> + <td id="LC1240" class="blob-code blob-code-inner js-file-line"> height=2.5cm,</td> + </tr> + <tr> + <td id="L1241" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1241"></td> + <td id="LC1241" class="blob-code blob-code-inner js-file-line"> xmode=log,</td> + </tr> + <tr> + <td id="L1242" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1242"></td> + <td id="LC1242" class="blob-code blob-code-inner js-file-line"> group style = {group size = 1 by 2,vertical sep=0.25cm},</td> + </tr> + <tr> + <td id="L1243" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1243"></td> + <td id="LC1243" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@group</span></td> + </tr> + <tr> + <td id="L1244" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1244"></td> + <td id="LC1244" class="blob-code blob-code-inner js-file-line"> ]}</td> + </tr> + <tr> + <td id="L1245" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1245"></td> + <td id="LC1245" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1246" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1246"></td> + <td id="LC1246" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1247" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1247"></td> + <td id="LC1247" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> To ensure frequency tick marks on magnitude and the phase plots are always aligned, we use the |groupplot| library. The |\noexpand| and |\unexpanded\expandafter| macros below are used to expand macros in the plot and group optional arguments.</span></td> + </tr> + <tr> + <td id="L1248" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1248"></td> + <td id="LC1248" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1249" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1249"></td> + <td id="LC1249" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@mag@cmd</span>{<span class="pl-c1">\noexpand\nextgroupplot</span> [ylabel={Gain (dB)}, xmajorticks=false, <span class="pl-c1">\optmag@axes</span>]</td> + </tr> + <tr> + <td id="L1250" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1250"></td> + <td id="LC1250" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand\addplot</span> [freq@filter, variable=t, thick, <span class="pl-c1">\optmag@plot</span>]}</td> + </tr> + <tr> + <td id="L1251" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1251"></td> + <td id="LC1251" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@ph@cmd</span>{<span class="pl-c1">\noexpand\nextgroupplot</span> [ph@y@label, freq@label, <span class="pl-c1">\optph@axes</span>]</td> + </tr> + <tr> + <td id="L1252" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1252"></td> + <td id="LC1252" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand\addplot</span> [freq@filter, variable=t, thick, <span class="pl-c1">\optph@plot</span>]}</td> + </tr> + <tr> + <td id="L1253" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1253"></td> + <td id="LC1253" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L1254" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1254"></td> + <td id="LC1254" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@mag@cmd</span> {<span class="pl-c1">\func@mag</span>};</td> + </tr> + <tr> + <td id="L1255" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1255"></td> + <td id="LC1255" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optmag@commands</span></td> + </tr> + <tr> + <td id="L1256" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1256"></td> + <td id="LC1256" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@ph@cmd</span> {<span class="pl-c1">\func@ph</span>};</td> + </tr> + <tr> + <td id="L1257" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1257"></td> + <td id="LC1257" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optph@commands</span></td> + </tr> + <tr> + <td id="L1258" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1258"></td> + <td id="LC1258" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1259" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1259"></td> + <td id="LC1259" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1260" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1260"></td> + <td id="LC1260" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> In |gnuplot| mode, we increment the |gnuplot@id| counter before every plot to make sure that new and reusable |.gnuplot| and |.table| files are generated for every plot. We use |raw gnuplot| to make sure that the tables generated by |gnuplot| use the correct phase and frequency units as supplied by the user.</span></td> + </tr> + <tr> + <td id="L1261" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1261"></td> + <td id="LC1261" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1262" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1262"></td> + <td id="LC1262" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L1263" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1263"></td> + <td id="LC1263" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@mag@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td> + </tr> + <tr> + <td id="L1264" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1264"></td> + <td id="LC1264" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td> + </tr> + <tr> + <td id="L1265" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1265"></td> + <td id="LC1265" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td> + </tr> + <tr> + <td id="L1266" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1266"></td> + <td id="LC1266" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td> + </tr> + <tr> + <td id="L1267" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1267"></td> + <td id="LC1267" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set xrange [#<span class="pl-c1">3</span>*<span class="pl-c1">\freq</span>@scale:#<span class="pl-c1">4</span>*<span class="pl-c1">\freq</span>@scale];</span></td> + </tr> + <tr> + <td id="L1268" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1268"></td> + <td id="LC1268" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td> + </tr> + <tr> + <td id="L1269" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1269"></td> + <td id="LC1269" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot <span class="pl-c1">\func</span>@mag;</span></td> + </tr> + <tr> + <td id="L1270" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1270"></td> + <td id="LC1270" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table "<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table";</span></td> + </tr> + <tr> + <td id="L1271" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1271"></td> + <td id="LC1271" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot "<span class="pl-pds">$</span></span>meta" using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2);</td> + </tr> + <tr> + <td id="L1272" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1272"></td> + <td id="LC1272" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L1273" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1273"></td> + <td id="LC1273" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optmag@commands</span></td> + </tr> + <tr> + <td id="L1274" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1274"></td> + <td id="LC1274" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L1275" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1275"></td> + <td id="LC1275" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@ph@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td> + </tr> + <tr> + <td id="L1276" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1276"></td> + <td id="LC1276" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td> + </tr> + <tr> + <td id="L1277" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1277"></td> + <td id="LC1277" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td> + </tr> + <tr> + <td id="L1278" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1278"></td> + <td id="LC1278" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td> + </tr> + <tr> + <td id="L1279" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1279"></td> + <td id="LC1279" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set xrange [#<span class="pl-c1">3</span>*<span class="pl-c1">\freq</span>@scale:#<span class="pl-c1">4</span>*<span class="pl-c1">\freq</span>@scale];</span></td> + </tr> + <tr> + <td id="L1280" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1280"></td> + <td id="LC1280" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td> + </tr> + <tr> + <td id="L1281" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1281"></td> + <td id="LC1281" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot <span class="pl-c1">\func</span>@ph;</span></td> + </tr> + <tr> + <td id="L1282" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1282"></td> + <td id="LC1282" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table "<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table";</span></td> + </tr> + <tr> + <td id="L1283" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1283"></td> + <td id="LC1283" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot "<span class="pl-pds">$</span></span>meta" using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2);</td> + </tr> + <tr> + <td id="L1284" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1284"></td> + <td id="LC1284" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L1285" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1285"></td> + <td id="LC1285" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optph@commands</span></td> + </tr> + <tr> + <td id="L1286" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1286"></td> + <td id="LC1286" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1287" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1287"></td> + <td id="LC1287" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">groupplot</span>}</td> + </tr> + <tr> + <td id="L1288" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1288"></td> + <td id="LC1288" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{tikzpicture}</td> + </tr> + <tr> + <td id="L1289" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1289"></td> + <td id="LC1289" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1290" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1290"></td> + <td id="LC1290" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1291" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1291"></td> + <td id="LC1291" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1292" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1292"></td> + <td id="LC1292" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\BodeTF}</span></td> + </tr> + <tr> + <td id="L1293" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1293"></td> + <td id="LC1293" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Implementation of this macro is very similar to the |\BodeZPK| macro above. The only difference is the lack of linear and asymptotic plots and slightly different parsing of the mandatory arguments. \changes{v1.0.3}{2021/11/03}{Added Tikz option} \changes{v1.1.0}{2022/07/06}{Fixed phase wrapping in gnuplot mode}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}</span></td> + </tr> + <tr> + <td id="L1294" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1294"></td> + <td id="LC1294" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1295" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1295"></td> + <td id="LC1295" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\BodeTF</span>}[4][]{</td> + </tr> + <tr> + <td id="L1296" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1296"></td> + <td id="LC1296" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@opt</span>{#1}</td> + </tr> + <tr> + <td id="L1297" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1297"></td> + <td id="LC1297" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td> + </tr> + <tr> + <td id="L1298" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1298"></td> + <td id="LC1298" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td> + </tr> + <tr> + <td id="L1299" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1299"></td> + <td id="LC1299" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]}</td> + </tr> + <tr> + <td id="L1300" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1300"></td> + <td id="LC1300" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1301" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1301"></td> + <td id="LC1301" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{#2}</td> + </tr> + <tr> + <td id="L1302" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1302"></td> + <td id="LC1302" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">groupplot</span>}[</td> + </tr> + <tr> + <td id="L1303" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1303"></td> + <td id="LC1303" class="blob-code blob-code-inner js-file-line"> bode@style,</td> + </tr> + <tr> + <td id="L1304" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1304"></td> + <td id="LC1304" class="blob-code blob-code-inner js-file-line"> xmin=#3,</td> + </tr> + <tr> + <td id="L1305" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1305"></td> + <td id="LC1305" class="blob-code blob-code-inner js-file-line"> xmax=#4,</td> + </tr> + <tr> + <td id="L1306" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1306"></td> + <td id="LC1306" class="blob-code blob-code-inner js-file-line"> domain=#3*<span class="pl-c1">\freq@scale</span>:#4*<span class="pl-c1">\freq@scale</span>,</td> + </tr> + <tr> + <td id="L1307" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1307"></td> + <td id="LC1307" class="blob-code blob-code-inner js-file-line"> height=2.5cm,</td> + </tr> + <tr> + <td id="L1308" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1308"></td> + <td id="LC1308" class="blob-code blob-code-inner js-file-line"> xmode=log,</td> + </tr> + <tr> + <td id="L1309" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1309"></td> + <td id="LC1309" class="blob-code blob-code-inner js-file-line"> group style = {group size = 1 by 2,vertical sep=0.25cm},</td> + </tr> + <tr> + <td id="L1310" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1310"></td> + <td id="LC1310" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@group</span></td> + </tr> + <tr> + <td id="L1311" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1311"></td> + <td id="LC1311" class="blob-code blob-code-inner js-file-line"> ]}</td> + </tr> + <tr> + <td id="L1312" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1312"></td> + <td id="LC1312" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1313" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1313"></td> + <td id="LC1313" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@mag@cmd</span>{<span class="pl-c1">\noexpand\nextgroupplot</span> [ylabel={Gain (dB)}, xmajorticks=false, <span class="pl-c1">\optmag@axes</span>]</td> + </tr> + <tr> + <td id="L1314" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1314"></td> + <td id="LC1314" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand\addplot</span> [freq@filter, variable=t, thick, <span class="pl-c1">\optmag@plot</span>]}</td> + </tr> + <tr> + <td id="L1315" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1315"></td> + <td id="LC1315" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@ph@cmd</span>{<span class="pl-c1">\noexpand\nextgroupplot</span> [ph@y@label, freq@label, <span class="pl-c1">\optph@axes</span>]</td> + </tr> + <tr> + <td id="L1316" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1316"></td> + <td id="LC1316" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand\addplot</span> [freq@filter, variable=t, thick, <span class="pl-c1">\optph@plot</span>]}</td> + </tr> + <tr> + <td id="L1317" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1317"></td> + <td id="LC1317" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L1318" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1318"></td> + <td id="LC1318" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@mag@cmd</span> {<span class="pl-c1">\func@mag</span>};</td> + </tr> + <tr> + <td id="L1319" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1319"></td> + <td id="LC1319" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optmag@commands</span></td> + </tr> + <tr> + <td id="L1320" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1320"></td> + <td id="LC1320" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@ph@cmd</span> {<span class="pl-c1">\n@mod</span>{<span class="pl-c1">\func@ph</span>}{2*pi*<span class="pl-c1">\ph@scale</span>}};</td> + </tr> + <tr> + <td id="L1321" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1321"></td> + <td id="LC1321" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optph@commands</span></td> + </tr> + <tr> + <td id="L1322" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1322"></td> + <td id="LC1322" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1323" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1323"></td> + <td id="LC1323" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L1324" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1324"></td> + <td id="LC1324" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@mag@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td> + </tr> + <tr> + <td id="L1325" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1325"></td> + <td id="LC1325" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td> + </tr> + <tr> + <td id="L1326" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1326"></td> + <td id="LC1326" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td> + </tr> + <tr> + <td id="L1327" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1327"></td> + <td id="LC1327" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td> + </tr> + <tr> + <td id="L1328" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1328"></td> + <td id="LC1328" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set xrange [#<span class="pl-c1">3</span>*<span class="pl-c1">\freq</span>@scale:#<span class="pl-c1">4</span>*<span class="pl-c1">\freq</span>@scale];</span></td> + </tr> + <tr> + <td id="L1329" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1329"></td> + <td id="LC1329" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td> + </tr> + <tr> + <td id="L1330" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1330"></td> + <td id="LC1330" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot <span class="pl-c1">\func</span>@mag;</span></td> + </tr> + <tr> + <td id="L1331" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1331"></td> + <td id="LC1331" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table "<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table";</span></td> + </tr> + <tr> + <td id="L1332" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1332"></td> + <td id="LC1332" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot "<span class="pl-pds">$</span></span>meta" using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2);</td> + </tr> + <tr> + <td id="L1333" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1333"></td> + <td id="LC1333" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L1334" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1334"></td> + <td id="LC1334" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optmag@commands</span></td> + </tr> + <tr> + <td id="L1335" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1335"></td> + <td id="LC1335" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L1336" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1336"></td> + <td id="LC1336" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@ph@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td> + </tr> + <tr> + <td id="L1337" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1337"></td> + <td id="LC1337" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td> + </tr> + <tr> + <td id="L1338" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1338"></td> + <td id="LC1338" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td> + </tr> + <tr> + <td id="L1339" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1339"></td> + <td id="LC1339" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td> + </tr> + <tr> + <td id="L1340" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1340"></td> + <td id="LC1340" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set trange [#<span class="pl-c1">3</span>*<span class="pl-c1">\freq</span>@scale:#<span class="pl-c1">4</span>*<span class="pl-c1">\freq</span>@scale];</span></td> + </tr> + <tr> + <td id="L1341" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1341"></td> + <td id="LC1341" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td> + </tr> + <tr> + <td id="L1342" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1342"></td> + <td id="LC1342" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot '+' using (t) : ((<span class="pl-c1">\func</span>@ph)/(<span class="pl-c1">\ph</span>@scale)) smooth unwrap;</span></td> + </tr> + <tr> + <td id="L1343" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1343"></td> + <td id="LC1343" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table "<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table";</span></td> + </tr> + <tr> + <td id="L1344" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1344"></td> + <td id="LC1344" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot "<span class="pl-pds">$</span></span>meta" using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2*<span class="pl-c1">\ph@scale</span>);</td> + </tr> + <tr> + <td id="L1345" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1345"></td> + <td id="LC1345" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L1346" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1346"></td> + <td id="LC1346" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\optph@commands</span></td> + </tr> + <tr> + <td id="L1347" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1347"></td> + <td id="LC1347" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1348" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1348"></td> + <td id="LC1348" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">groupplot</span>}</td> + </tr> + <tr> + <td id="L1349" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1349"></td> + <td id="LC1349" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{tikzpicture}</td> + </tr> + <tr> + <td id="L1350" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1350"></td> + <td id="LC1350" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1351" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1351"></td> + <td id="LC1351" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode} </span></td> + </tr> + <tr> + <td id="L1352" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1352"></td> + <td id="LC1352" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1353" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1353"></td> + <td id="LC1353" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addBodeZPKPlots}</span></td> + </tr> + <tr> + <td id="L1354" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1354"></td> + <td id="LC1354" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This macro is designed to issues multiple |\addplot| macros for the same set of poles, zeros, gain, and delay. All of the work is done by the |\build@ZPK@plot| macro. \changes{v1.0.1}{2021/10/29}{Improved optional argument handling.}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}</span></td> + </tr> + <tr> + <td id="L1355" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1355"></td> + <td id="LC1355" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1356" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1356"></td> + <td id="LC1356" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addBodeZPKPlots</span>}[3][true/{}]{</td> + </tr> + <tr> + <td id="L1357" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1357"></td> + <td id="LC1357" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\approx</span>/<span class="pl-c1">\opt</span> in {#1} {</td> + </tr> + <tr> + <td id="L1358" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1358"></td> + <td id="LC1358" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\plot@macro</span>{}</td> + </tr> + <tr> + <td id="L1359" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1359"></td> + <td id="LC1359" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\temp@macro</span>{}</td> + </tr> + <tr> + <td id="L1360" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1360"></td> + <td id="LC1360" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#2}{phase}=0</td> + </tr> + <tr> + <td id="L1361" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1361"></td> + <td id="LC1361" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\temp@macro</span>}{<span class="pl-c1">\plot@macro</span>}{<span class="pl-c1">\approx</span>}{#3}</td> + </tr> + <tr> + <td id="L1362" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1362"></td> + <td id="LC1362" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1363" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1363"></td> + <td id="LC1363" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\plot@macro</span>}{<span class="pl-c1">\temp@macro</span>}{<span class="pl-c1">\approx</span>}{#3}</td> + </tr> + <tr> + <td id="L1364" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1364"></td> + <td id="LC1364" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1365" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1365"></td> + <td id="LC1365" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td> + </tr> + <tr> + <td id="L1366" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1366"></td> + <td id="LC1366" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L1367" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1367"></td> + <td id="LC1367" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L1368" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1368"></td> + <td id="LC1368" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L1369" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1369"></td> + <td id="LC1369" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand\addplot</span> [freq@filter, domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, thick, <span class="pl-c1">\opt</span>]}</td> + </tr> + <tr> + <td id="L1370" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1370"></td> + <td id="LC1370" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> {<span class="pl-c1">\plot@macro</span>};</td> + </tr> + <tr> + <td id="L1371" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1371"></td> + <td id="LC1371" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1372" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1372"></td> + <td id="LC1372" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L1373" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1373"></td> + <td id="LC1373" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand\addplot</span> [variable=t, thick, <span class="pl-c1">\opt</span>]}</td> + </tr> + <tr> + <td id="L1374" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1374"></td> + <td id="LC1374" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td> + </tr> + <tr> + <td id="L1375" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1375"></td> + <td id="LC1375" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td> + </tr> + <tr> + <td id="L1376" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1376"></td> + <td id="LC1376" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td> + </tr> + <tr> + <td id="L1377" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1377"></td> + <td id="LC1377" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td> + </tr> + <tr> + <td id="L1378" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1378"></td> + <td id="LC1378" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set xrange [<span class="pl-c1">\domain</span>@start*<span class="pl-c1">\freq</span>@scale:<span class="pl-c1">\domain</span>@end*<span class="pl-c1">\freq</span>@scale];</span></td> + </tr> + <tr> + <td id="L1379" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1379"></td> + <td id="LC1379" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td> + </tr> + <tr> + <td id="L1380" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1380"></td> + <td id="LC1380" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot <span class="pl-c1">\plot</span>@macro;</span></td> + </tr> + <tr> + <td id="L1381" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1381"></td> + <td id="LC1381" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table "<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table";</span></td> + </tr> + <tr> + <td id="L1382" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1382"></td> + <td id="LC1382" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot "<span class="pl-pds">$</span></span>meta" using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2);</td> + </tr> + <tr> + <td id="L1383" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1383"></td> + <td id="LC1383" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L1384" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1384"></td> + <td id="LC1384" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1385" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1385"></td> + <td id="LC1385" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1386" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1386"></td> + <td id="LC1386" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1387" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1387"></td> + <td id="LC1387" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1388" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1388"></td> + <td id="LC1388" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td> + </tr> + <tr> + <td id="L1389" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1389"></td> + <td id="LC1389" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addBodeTFPlot}</span></td> + </tr> + <tr> + <td id="L1390" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1390"></td> + <td id="LC1390" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This macro is designed to issues a single |\addplot| macros for the set of coefficients and delay. All of the work is done by the |\build@TF@plot| macro. \changes{v1.1.0}{2022/07/06}{Fixed phase wrapping in gnuplot mode}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}</span></td> + </tr> + <tr> + <td id="L1391" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1391"></td> + <td id="LC1391" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1392" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1392"></td> + <td id="LC1392" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addBodeTFPlot</span>}[3][thick]{</td> + </tr> + <tr> + <td id="L1393" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1393"></td> + <td id="LC1393" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\plot@macro</span>{}</td> + </tr> + <tr> + <td id="L1394" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1394"></td> + <td id="LC1394" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\temp@macro</span>{}</td> + </tr> + <tr> + <td id="L1395" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1395"></td> + <td id="LC1395" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#2}{phase}=0</td> + </tr> + <tr> + <td id="L1396" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1396"></td> + <td id="LC1396" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\temp@macro</span>}{<span class="pl-c1">\plot@macro</span>}{#3}</td> + </tr> + <tr> + <td id="L1397" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1397"></td> + <td id="LC1397" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1398" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1398"></td> + <td id="LC1398" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\plot@macro</span>}{<span class="pl-c1">\temp@macro</span>}{#3}</td> + </tr> + <tr> + <td id="L1399" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1399"></td> + <td id="LC1399" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1400" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1400"></td> + <td id="LC1400" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td> + </tr> + <tr> + <td id="L1401" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1401"></td> + <td id="LC1401" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L1402" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1402"></td> + <td id="LC1402" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L1403" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1403"></td> + <td id="LC1403" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L1404" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1404"></td> + <td id="LC1404" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#2}{phase}=0</td> + </tr> + <tr> + <td id="L1405" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1405"></td> + <td id="LC1405" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [freq@filter, domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1]{<span class="pl-c1">\n@mod</span>{<span class="pl-c1">\plot@macro</span>}{2*pi}};</td> + </tr> + <tr> + <td id="L1406" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1406"></td> + <td id="LC1406" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1407" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1407"></td> + <td id="LC1407" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [freq@filter, domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1]{<span class="pl-c1">\plot@macro</span>};</td> + </tr> + <tr> + <td id="L1408" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1408"></td> + <td id="LC1408" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1409" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1409"></td> + <td id="LC1409" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1410" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1410"></td> + <td id="LC1410" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L1411" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1411"></td> + <td id="LC1411" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#2}{phase}=0</td> + </tr> + <tr> + <td id="L1412" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1412"></td> + <td id="LC1412" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [variable=t, #1] gnuplot [raw gnuplot, gnuplot@prefix]</td> + </tr> + <tr> + <td id="L1413" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1413"></td> + <td id="LC1413" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td> + </tr> + <tr> + <td id="L1414" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1414"></td> + <td id="LC1414" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td> + </tr> + <tr> + <td id="L1415" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1415"></td> + <td id="LC1415" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td> + </tr> + <tr> + <td id="L1416" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1416"></td> + <td id="LC1416" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set trange [<span class="pl-c1">\domain</span>@start*<span class="pl-c1">\freq</span>@scale:<span class="pl-c1">\domain</span>@end*<span class="pl-c1">\freq</span>@scale];</span></td> + </tr> + <tr> + <td id="L1417" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1417"></td> + <td id="LC1417" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td> + </tr> + <tr> + <td id="L1418" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1418"></td> + <td id="LC1418" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot '+' using (t) : ((<span class="pl-c1">\plot</span>@macro)/(<span class="pl-c1">\ph</span>@scale)) smooth unwrap;</span></td> + </tr> + <tr> + <td id="L1419" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1419"></td> + <td id="LC1419" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table "<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table";</span></td> + </tr> + <tr> + <td id="L1420" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1420"></td> + <td id="LC1420" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot "<span class="pl-pds">$</span></span>meta" using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2*<span class="pl-c1">\ph@scale</span>);</td> + </tr> + <tr> + <td id="L1421" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1421"></td> + <td id="LC1421" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L1422" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1422"></td> + <td id="LC1422" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1423" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1423"></td> + <td id="LC1423" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [variable=t, #1] gnuplot [raw gnuplot, gnuplot@prefix]</td> + </tr> + <tr> + <td id="L1424" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1424"></td> + <td id="LC1424" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td> + </tr> + <tr> + <td id="L1425" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1425"></td> + <td id="LC1425" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td> + </tr> + <tr> + <td id="L1426" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1426"></td> + <td id="LC1426" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td> + </tr> + <tr> + <td id="L1427" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1427"></td> + <td id="LC1427" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set xrange [<span class="pl-c1">\domain</span>@start*<span class="pl-c1">\freq</span>@scale:<span class="pl-c1">\domain</span>@end*<span class="pl-c1">\freq</span>@scale];</span></td> + </tr> + <tr> + <td id="L1428" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1428"></td> + <td id="LC1428" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td> + </tr> + <tr> + <td id="L1429" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1429"></td> + <td id="LC1429" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot <span class="pl-c1">\plot</span>@macro;</span></td> + </tr> + <tr> + <td id="L1430" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1430"></td> + <td id="LC1430" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table "<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table";</span></td> + </tr> + <tr> + <td id="L1431" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1431"></td> + <td id="LC1431" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot "<span class="pl-pds">$</span></span>meta" using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2);</td> + </tr> + <tr> + <td id="L1432" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1432"></td> + <td id="LC1432" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L1433" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1433"></td> + <td id="LC1433" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1434" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1434"></td> + <td id="LC1434" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1435" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1435"></td> + <td id="LC1435" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1436" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1436"></td> + <td id="LC1436" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1437" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1437"></td> + <td id="LC1437" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td> + </tr> + <tr> + <td id="L1438" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1438"></td> + <td id="LC1438" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addBodeComponentPlot}</span></td> + </tr> + <tr> + <td id="L1439" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1439"></td> + <td id="LC1439" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This macro is designed to issue a single |\addplot| macro capable of plotting linear combinations of the basic components described in Section \ref{sec:BasicComponents}. The only work to do here is to handle the |pgf| package option.\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}</span></td> + </tr> + <tr> + <td id="L1440" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1440"></td> + <td id="LC1440" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1441" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1441"></td> + <td id="LC1441" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addBodeComponentPlot</span>}[2][thick]{</td> + </tr> + <tr> + <td id="L1442" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1442"></td> + <td id="LC1442" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td> + </tr> + <tr> + <td id="L1443" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1443"></td> + <td id="LC1443" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L1444" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1444"></td> + <td id="LC1444" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L1445" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1445"></td> + <td id="LC1445" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L1446" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1446"></td> + <td id="LC1446" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [freq@filter, domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1] {#2};</td> + </tr> + <tr> + <td id="L1447" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1447"></td> + <td id="LC1447" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1448" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1448"></td> + <td id="LC1448" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L1449" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1449"></td> + <td id="LC1449" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [variable=t, #1] gnuplot [raw gnuplot, gnuplot@prefix]</td> + </tr> + <tr> + <td id="L1450" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1450"></td> + <td id="LC1450" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td> + </tr> + <tr> + <td id="L1451" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1451"></td> + <td id="LC1451" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td> + </tr> + <tr> + <td id="L1452" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1452"></td> + <td id="LC1452" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td> + </tr> + <tr> + <td id="L1453" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1453"></td> + <td id="LC1453" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set xrange [<span class="pl-c1">\domain</span>@start*<span class="pl-c1">\freq</span>@scale:<span class="pl-c1">\domain</span>@end*<span class="pl-c1">\freq</span>@scale];</span></td> + </tr> + <tr> + <td id="L1454" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1454"></td> + <td id="LC1454" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td> + </tr> + <tr> + <td id="L1455" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1455"></td> + <td id="LC1455" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot #<span class="pl-c1">2</span>;</span></td> + </tr> + <tr> + <td id="L1456" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1456"></td> + <td id="LC1456" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table "<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table";</span></td> + </tr> + <tr> + <td id="L1457" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1457"></td> + <td id="LC1457" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot "<span class="pl-pds">$</span></span>meta" using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>/(<span class="pl-c1">\freq</span>@scale)):(<span class="pl-pds">$</span></span>2);</td> + </tr> + <tr> + <td id="L1458" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1458"></td> + <td id="LC1458" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L1459" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1459"></td> + <td id="LC1459" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1460" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1460"></td> + <td id="LC1460" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1461" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1461"></td> + <td id="LC1461" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1462" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1462"></td> + <td id="LC1462" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td> + </tr> + <tr> + <td id="L1463" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1463"></td> + <td id="LC1463" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{environment}{BodePhPlot}</span></td> + </tr> + <tr> + <td id="L1464" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1464"></td> + <td id="LC1464" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> An environment to host phase plot macros that pass parametric functions to |\addplot| macros. Uses the defaults specified in |bode@style| to create a shortcut that includes the |tikzpicture| and |semilogaxis| environments.\changes{v1.1.0}{2022/07/20}{Added separate environments for phase and magnitude plots}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}\changes{v1.1.2}{2022/10/29}{Defined using the `NewEnviron' command from the `environ' package to fix conflicts with externalization}</span></td> + </tr> + <tr> + <td id="L1465" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1465"></td> + <td id="LC1465" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1466" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1466"></td> + <td id="LC1466" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NewEnviron</span>{BodePhPlot}[3][]{</td> + </tr> + <tr> + <td id="L1467" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1467"></td> + <td id="LC1467" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@env@opt</span>{#1}</td> + </tr> + <tr> + <td id="L1468" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1468"></td> + <td id="LC1468" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]</td> + </tr> + <tr> + <td id="L1469" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1469"></td> + <td id="LC1469" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">semilogxaxis</span>}[</td> + </tr> + <tr> + <td id="L1470" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1470"></td> + <td id="LC1470" class="blob-code blob-code-inner js-file-line"> ph@y@label,</td> + </tr> + <tr> + <td id="L1471" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1471"></td> + <td id="LC1471" class="blob-code blob-code-inner js-file-line"> freq@label,</td> + </tr> + <tr> + <td id="L1472" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1472"></td> + <td id="LC1472" class="blob-code blob-code-inner js-file-line"> bode@style,</td> + </tr> + <tr> + <td id="L1473" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1473"></td> + <td id="LC1473" class="blob-code blob-code-inner js-file-line"> xmin={#2},</td> + </tr> + <tr> + <td id="L1474" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1474"></td> + <td id="LC1474" class="blob-code blob-code-inner js-file-line"> xmax={#3},</td> + </tr> + <tr> + <td id="L1475" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1475"></td> + <td id="LC1475" class="blob-code blob-code-inner js-file-line"> domain=#2:#3,</td> + </tr> + <tr> + <td id="L1476" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1476"></td> + <td id="LC1476" class="blob-code blob-code-inner js-file-line"> height=2.5cm,</td> + </tr> + <tr> + <td id="L1477" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1477"></td> + <td id="LC1477" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td> + </tr> + <tr> + <td id="L1478" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1478"></td> + <td id="LC1478" class="blob-code blob-code-inner js-file-line"> ]</td> + </tr> + <tr> + <td id="L1479" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1479"></td> + <td id="LC1479" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1480" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1480"></td> + <td id="LC1480" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1481" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1481"></td> + <td id="LC1481" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\BODY</span></td> + </tr> + <tr> + <td id="L1482" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1482"></td> + <td id="LC1482" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">semilogxaxis</span>}</td> + </tr> + <tr> + <td id="L1483" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1483"></td> + <td id="LC1483" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">tikzpicture</span>}</td> + </tr> + <tr> + <td id="L1484" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1484"></td> + <td id="LC1484" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1485" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1485"></td> + <td id="LC1485" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1486" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1486"></td> + <td id="LC1486" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{environment}</span></td> + </tr> + <tr> + <td id="L1487" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1487"></td> + <td id="LC1487" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{environment}{BodeMagPlot}</span></td> + </tr> + <tr> + <td id="L1488" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1488"></td> + <td id="LC1488" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> An environment to host magnitude plot macros that pass parametric functions to |\addplot| macros. Uses the defaults specified in |bode@style| to create a shortcut that includes the |tikzpicture| and |semilogaxis| environments.\changes{v1.1.0}{2022/07/20}{Added separate environments for phase and magnitude plots}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}\changes{v1.1.2}{2022/10/29}{Defined using the `NewEnviron' command from the `environ' package to fix conflicts with externalization}</span></td> + </tr> + <tr> + <td id="L1489" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1489"></td> + <td id="LC1489" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1490" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1490"></td> + <td id="LC1490" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NewEnviron</span>{BodeMagPlot}[3][]{</td> + </tr> + <tr> + <td id="L1491" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1491"></td> + <td id="LC1491" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@env@opt</span>{#1}</td> + </tr> + <tr> + <td id="L1492" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1492"></td> + <td id="LC1492" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]</td> + </tr> + <tr> + <td id="L1493" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1493"></td> + <td id="LC1493" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">semilogxaxis</span>}[</td> + </tr> + <tr> + <td id="L1494" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1494"></td> + <td id="LC1494" class="blob-code blob-code-inner js-file-line"> bode@style,</td> + </tr> + <tr> + <td id="L1495" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1495"></td> + <td id="LC1495" class="blob-code blob-code-inner js-file-line"> freq@label,</td> + </tr> + <tr> + <td id="L1496" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1496"></td> + <td id="LC1496" class="blob-code blob-code-inner js-file-line"> xmin={#2},</td> + </tr> + <tr> + <td id="L1497" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1497"></td> + <td id="LC1497" class="blob-code blob-code-inner js-file-line"> xmax={#3},</td> + </tr> + <tr> + <td id="L1498" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1498"></td> + <td id="LC1498" class="blob-code blob-code-inner js-file-line"> domain=#2:#3,</td> + </tr> + <tr> + <td id="L1499" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1499"></td> + <td id="LC1499" class="blob-code blob-code-inner js-file-line"> height=2.5cm,</td> + </tr> + <tr> + <td id="L1500" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1500"></td> + <td id="LC1500" class="blob-code blob-code-inner js-file-line"> ylabel={Gain (dB)},</td> + </tr> + <tr> + <td id="L1501" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1501"></td> + <td id="LC1501" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td> + </tr> + <tr> + <td id="L1502" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1502"></td> + <td id="LC1502" class="blob-code blob-code-inner js-file-line"> ]</td> + </tr> + <tr> + <td id="L1503" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1503"></td> + <td id="LC1503" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1504" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1504"></td> + <td id="LC1504" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1505" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1505"></td> + <td id="LC1505" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\BODY</span></td> + </tr> + <tr> + <td id="L1506" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1506"></td> + <td id="LC1506" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">semilogxaxis</span>}</td> + </tr> + <tr> + <td id="L1507" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1507"></td> + <td id="LC1507" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">tikzpicture</span>}</td> + </tr> + <tr> + <td id="L1508" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1508"></td> + <td id="LC1508" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1509" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1509"></td> + <td id="LC1509" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1510" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1510"></td> + <td id="LC1510" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{environment}</span></td> + </tr> + <tr> + <td id="L1511" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1511"></td> + <td id="LC1511" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{environment}{BodePlot}</span></td> + </tr> + <tr> + <td id="L1512" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1512"></td> + <td id="LC1512" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Same as |BodeMagPlot|. The |BodePlot| environment is deprecated as of v1.1.0, please use the |BodePhPlot| and |BodeMagPlot| environments instead.\changes{v1.0.3}{2021/11/03}{Added tikz option to environments}\changes{v1.1.0}{2022/02/20}{Deprecated BodePlot environment}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}\changes{v1.1.2}{2022/10/29}{Defined using the `NewEnviron' command from the `environ' package to fix conflicts with externalization}</span></td> + </tr> + <tr> + <td id="L1513" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1513"></td> + <td id="LC1513" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1514" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1514"></td> + <td id="LC1514" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NewEnviron</span>{BodePlot}[3][]{</td> + </tr> + <tr> + <td id="L1515" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1515"></td> + <td id="LC1515" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@env@opt</span>{#1}</td> + </tr> + <tr> + <td id="L1516" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1516"></td> + <td id="LC1516" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]</td> + </tr> + <tr> + <td id="L1517" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1517"></td> + <td id="LC1517" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">semilogxaxis</span>}[</td> + </tr> + <tr> + <td id="L1518" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1518"></td> + <td id="LC1518" class="blob-code blob-code-inner js-file-line"> bode@style,</td> + </tr> + <tr> + <td id="L1519" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1519"></td> + <td id="LC1519" class="blob-code blob-code-inner js-file-line"> freq@label,</td> + </tr> + <tr> + <td id="L1520" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1520"></td> + <td id="LC1520" class="blob-code blob-code-inner js-file-line"> xmin={#2},</td> + </tr> + <tr> + <td id="L1521" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1521"></td> + <td id="LC1521" class="blob-code blob-code-inner js-file-line"> xmax={#3},</td> + </tr> + <tr> + <td id="L1522" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1522"></td> + <td id="LC1522" class="blob-code blob-code-inner js-file-line"> domain=#2:#3,</td> + </tr> + <tr> + <td id="L1523" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1523"></td> + <td id="LC1523" class="blob-code blob-code-inner js-file-line"> height=2.5cm,</td> + </tr> + <tr> + <td id="L1524" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1524"></td> + <td id="LC1524" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td> + </tr> + <tr> + <td id="L1525" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1525"></td> + <td id="LC1525" class="blob-code blob-code-inner js-file-line"> ]</td> + </tr> + <tr> + <td id="L1526" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1526"></td> + <td id="LC1526" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1527" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1527"></td> + <td id="LC1527" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1528" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1528"></td> + <td id="LC1528" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\BODY</span></td> + </tr> + <tr> + <td id="L1529" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1529"></td> + <td id="LC1529" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">semilogxaxis</span>}</td> + </tr> + <tr> + <td id="L1530" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1530"></td> + <td id="LC1530" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">tikzpicture</span>}</td> + </tr> + <tr> + <td id="L1531" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1531"></td> + <td id="LC1531" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1532" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1532"></td> + <td id="LC1532" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1533" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1533"></td> + <td id="LC1533" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{environment}</span></td> + </tr> + <tr> + <td id="L1534" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1534"></td> + <td id="LC1534" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsubsection{Internal macros}</span></td> + </tr> + <tr> + <td id="L1535" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1535"></td> + <td id="LC1535" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\add@feature}</span></td> + </tr> + <tr> + <td id="L1536" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1536"></td> + <td id="LC1536" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This is an internal macro to add a basic component (pole, zero, gain, or delay), described using one of the macros in Section \ref{sec:BasicComponents} (input |#2|), to a parametric function stored in a global macro (input |#1|). The basic component value (input |#3|) is a complex number of the form |{re,im}|. If the imaginary part is missing, it is assumed to be zero. Implementation made possible by \href{https://tex.stackexchange.com/a/619637/110602}{this StackExchange answer}.</span></td> + </tr> + <tr> + <td id="L1537" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1537"></td> + <td id="LC1537" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1538" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1538"></td> + <td id="LC1538" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>*{<span class="pl-c1">\add@feature</span>}[3]{</td> + </tr> + <tr> + <td id="L1539" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1539"></td> + <td id="LC1539" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifcat</span><span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\detokenize\expandafter</span>{#1}<span class="pl-pds">$</span></span></td> + </tr> + <tr> + <td id="L1540" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1540"></td> + <td id="LC1540" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef</span>#1{<span class="pl-c1">\unexpanded\expandafter</span>{#1 0+#2}}</td> + </tr> + <tr> + <td id="L1541" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1541"></td> + <td id="LC1541" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1542" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1542"></td> + <td id="LC1542" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef</span>#1{<span class="pl-c1">\unexpanded\expandafter</span>{#1+#2}}</td> + </tr> + <tr> + <td id="L1543" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1543"></td> + <td id="LC1543" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1544" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1544"></td> + <td id="LC1544" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\y</span> [count=<span class="pl-c1">\n</span>] in #3 {</td> + </tr> + <tr> + <td id="L1545" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1545"></td> + <td id="LC1545" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef</span>#1{<span class="pl-c1">\unexpanded\expandafter</span>{#1}{<span class="pl-c1">\y</span>}}</td> + </tr> + <tr> + <td id="L1546" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1546"></td> + <td id="LC1546" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\Last@LoopValue</span>{<span class="pl-c1">\n</span>}</td> + </tr> + <tr> + <td id="L1547" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1547"></td> + <td id="LC1547" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1548" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1548"></td> + <td id="LC1548" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\Last@LoopValue</span>=1</td> + </tr> + <tr> + <td id="L1549" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1549"></td> + <td id="LC1549" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef</span>#1{<span class="pl-c1">\unexpanded\expandafter</span>{#1}{0}}</td> + </tr> + <tr> + <td id="L1550" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1550"></td> + <td id="LC1550" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1551" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1551"></td> + <td id="LC1551" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1552" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1552"></td> + <td id="LC1552" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1553" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1553"></td> + <td id="LC1553" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td> + </tr> + <tr> + <td id="L1554" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1554"></td> + <td id="LC1554" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\build@ZPK@plot}</span></td> + </tr> + <tr> + <td id="L1555" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1555"></td> + <td id="LC1555" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This is an internal macro to build parametric Bode magnitude and phase plots by concatenating basic component (pole, zero, gain, or delay) macros (Section \ref{sec:BasicComponents}) to global magnitude and phase macros (inputs |#1| and |#2|). The |\add@feature| macro is used to do the concatenation. The basic component macros are inferred from a |feature/{values}| list, where |feature| is one of |z|,|p|,|k|, and |d|, for zeros, poles, gain, and delay, respectively, and |{values}| is a comma separated list of comma separated lists (complex numbers of the form |{re,im}|). If the imaginary part is missing, it is assumed to be zero.</span></td> + </tr> + <tr> + <td id="L1556" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1556"></td> + <td id="LC1556" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1557" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1557"></td> + <td id="LC1557" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\build@ZPK@plot</span>}[4]{</td> + </tr> + <tr> + <td id="L1558" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1558"></td> + <td id="LC1558" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\feature</span>/<span class="pl-c1">\values</span> in {#4} {</td> + </tr> + <tr> + <td id="L1559" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1559"></td> + <td id="LC1559" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{z}=0</td> + </tr> + <tr> + <td id="L1560" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1560"></td> + <td id="LC1560" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\z</span> in <span class="pl-c1">\values</span> {</td> + </tr> + <tr> + <td id="L1561" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1561"></td> + <td id="LC1561" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{linear}=0</td> + </tr> + <tr> + <td id="L1562" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1562"></td> + <td id="LC1562" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhZeroLin</span>}{<span class="pl-c1">\z</span>}</td> + </tr> + <tr> + <td id="L1563" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1563"></td> + <td id="LC1563" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagZeroLin</span>}{<span class="pl-c1">\z</span>}</td> + </tr> + <tr> + <td id="L1564" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1564"></td> + <td id="LC1564" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1565" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1565"></td> + <td id="LC1565" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{asymptotic}=0</td> + </tr> + <tr> + <td id="L1566" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1566"></td> + <td id="LC1566" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhZeroAsymp</span>}{<span class="pl-c1">\z</span>}</td> + </tr> + <tr> + <td id="L1567" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1567"></td> + <td id="LC1567" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagZeroAsymp</span>}{<span class="pl-c1">\z</span>}</td> + </tr> + <tr> + <td id="L1568" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1568"></td> + <td id="LC1568" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1569" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1569"></td> + <td id="LC1569" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhZero</span>}{<span class="pl-c1">\z</span>}</td> + </tr> + <tr> + <td id="L1570" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1570"></td> + <td id="LC1570" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagZero</span>}{<span class="pl-c1">\z</span>}</td> + </tr> + <tr> + <td id="L1571" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1571"></td> + <td id="LC1571" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1572" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1572"></td> + <td id="LC1572" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1573" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1573"></td> + <td id="LC1573" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1574" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1574"></td> + <td id="LC1574" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1575" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1575"></td> + <td id="LC1575" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{p}=0</td> + </tr> + <tr> + <td id="L1576" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1576"></td> + <td id="LC1576" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\p</span> in <span class="pl-c1">\values</span> {</td> + </tr> + <tr> + <td id="L1577" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1577"></td> + <td id="LC1577" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{linear}=0</td> + </tr> + <tr> + <td id="L1578" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1578"></td> + <td id="LC1578" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhPoleLin</span>}{<span class="pl-c1">\p</span>}</td> + </tr> + <tr> + <td id="L1579" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1579"></td> + <td id="LC1579" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagPoleLin</span>}{<span class="pl-c1">\p</span>}</td> + </tr> + <tr> + <td id="L1580" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1580"></td> + <td id="LC1580" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1581" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1581"></td> + <td id="LC1581" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{asymptotic}=0</td> + </tr> + <tr> + <td id="L1582" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1582"></td> + <td id="LC1582" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhPoleAsymp</span>}{<span class="pl-c1">\p</span>}</td> + </tr> + <tr> + <td id="L1583" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1583"></td> + <td id="LC1583" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagPoleAsymp</span>}{<span class="pl-c1">\p</span>}</td> + </tr> + <tr> + <td id="L1584" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1584"></td> + <td id="LC1584" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1585" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1585"></td> + <td id="LC1585" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhPole</span>}{<span class="pl-c1">\p</span>}</td> + </tr> + <tr> + <td id="L1586" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1586"></td> + <td id="LC1586" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagPole</span>}{<span class="pl-c1">\p</span>}</td> + </tr> + <tr> + <td id="L1587" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1587"></td> + <td id="LC1587" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1588" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1588"></td> + <td id="LC1588" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1589" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1589"></td> + <td id="LC1589" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1590" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1590"></td> + <td id="LC1590" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1591" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1591"></td> + <td id="LC1591" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{k}=0</td> + </tr> + <tr> + <td id="L1592" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1592"></td> + <td id="LC1592" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{linear}=0</td> + </tr> + <tr> + <td id="L1593" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1593"></td> + <td id="LC1593" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhKLin</span>}{<span class="pl-c1">\values</span>}</td> + </tr> + <tr> + <td id="L1594" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1594"></td> + <td id="LC1594" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagKLin</span>}{<span class="pl-c1">\values</span>}</td> + </tr> + <tr> + <td id="L1595" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1595"></td> + <td id="LC1595" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1596" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1596"></td> + <td id="LC1596" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{asymptotic}=0</td> + </tr> + <tr> + <td id="L1597" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1597"></td> + <td id="LC1597" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhKAsymp</span>}{<span class="pl-c1">\values</span>}</td> + </tr> + <tr> + <td id="L1598" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1598"></td> + <td id="LC1598" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagKAsymp</span>}{<span class="pl-c1">\values</span>}</td> + </tr> + <tr> + <td id="L1599" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1599"></td> + <td id="LC1599" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1600" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1600"></td> + <td id="LC1600" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhK</span>}{<span class="pl-c1">\values</span>}</td> + </tr> + <tr> + <td id="L1601" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1601"></td> + <td id="LC1601" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagK</span>}{<span class="pl-c1">\values</span>}</td> + </tr> + <tr> + <td id="L1602" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1602"></td> + <td id="LC1602" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1603" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1603"></td> + <td id="LC1603" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1604" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1604"></td> + <td id="LC1604" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1605" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1605"></td> + <td id="LC1605" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{d}=0</td> + </tr> + <tr> + <td id="L1606" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1606"></td> + <td id="LC1606" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{linear}=0</td> + </tr> + <tr> + <td id="L1607" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1607"></td> + <td id="LC1607" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PackageError</span> {bodeplot} {Linear approximation for pure delays is not</td> + </tr> + <tr> + <td id="L1608" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1608"></td> + <td id="LC1608" class="blob-code blob-code-inner js-file-line"> supported.} {Plot the true Bode plot using `true' instead of `linear'.}</td> + </tr> + <tr> + <td id="L1609" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1609"></td> + <td id="LC1609" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1610" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1610"></td> + <td id="LC1610" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{#3}{asymptotic}=0</td> + </tr> + <tr> + <td id="L1611" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1611"></td> + <td id="LC1611" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PackageError</span> {bodeplot} {Asymptotic approximation for pure delays is not</td> + </tr> + <tr> + <td id="L1612" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1612"></td> + <td id="LC1612" class="blob-code blob-code-inner js-file-line"> supported.} {Plot the true Bode plot using `true' instead of `asymptotic'.}</td> + </tr> + <tr> + <td id="L1613" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1613"></td> + <td id="LC1613" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1614" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1614"></td> + <td id="LC1614" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifdim</span><span class="pl-c1">\values</span> pt < 0pt</td> + </tr> + <tr> + <td id="L1615" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1615"></td> + <td id="LC1615" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\PackageError</span> {bodeplot} {Delay needs to be a positive number.}</td> + </tr> + <tr> + <td id="L1616" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1616"></td> + <td id="LC1616" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1617" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1617"></td> + <td id="LC1617" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#2}{<span class="pl-c1">\PhDel</span>}{<span class="pl-c1">\values</span>}</td> + </tr> + <tr> + <td id="L1618" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1618"></td> + <td id="LC1618" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\add@feature</span>{#1}{<span class="pl-c1">\MagDel</span>}{<span class="pl-c1">\values</span>}</td> + </tr> + <tr> + <td id="L1619" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1619"></td> + <td id="LC1619" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1620" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1620"></td> + <td id="LC1620" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1621" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1621"></td> + <td id="LC1621" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1622" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1622"></td> + <td id="LC1622" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1623" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1623"></td> + <td id="LC1623" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1624" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1624"></td> + <td id="LC1624" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1625" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1625"></td> + <td id="LC1625" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td> + </tr> + <tr> + <td id="L1626" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1626"></td> + <td id="LC1626" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\build@TF@plot}</span></td> + </tr> + <tr> + <td id="L1627" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1627"></td> + <td id="LC1627" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> This is an internal macro to build parametric Bode magnitude and phase functions by computing the magnitude and the phase given numerator and denominator coefficients and delay (input |#3|). The functions are assigned to user-supplied global magnitude and phase macros (inputs |#1| and |#2|). \changes{v1.0.8}{2022/07/05}{Included phase due to delay in wrapping.}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}</span></td> + </tr> + <tr> + <td id="L1628" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1628"></td> + <td id="LC1628" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1629" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1629"></td> + <td id="LC1629" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\build@TF@plot</span>}[3]{</td> + </tr> + <tr> + <td id="L1630" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1630"></td> + <td id="LC1630" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\num@real</span>{0}</td> + </tr> + <tr> + <td id="L1631" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1631"></td> + <td id="LC1631" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\num@im</span>{0}</td> + </tr> + <tr> + <td id="L1632" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1632"></td> + <td id="LC1632" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\den@real</span>{0}</td> + </tr> + <tr> + <td id="L1633" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1633"></td> + <td id="LC1633" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\den@im</span>{0}</td> + </tr> + <tr> + <td id="L1634" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1634"></td> + <td id="LC1634" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\loop@delay</span>{0}</td> + </tr> + <tr> + <td id="L1635" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1635"></td> + <td id="LC1635" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\feature</span>/<span class="pl-c1">\values</span> in {#3} {</td> + </tr> + <tr> + <td id="L1636" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1636"></td> + <td id="LC1636" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{num}=0</td> + </tr> + <tr> + <td id="L1637" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1637"></td> + <td id="LC1637" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\numcoeff</span> [count=<span class="pl-c1">\numpow</span>] in <span class="pl-c1">\values</span> {</td> + </tr> + <tr> + <td id="L1638" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1638"></td> + <td id="LC1638" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\num@degree</span>{<span class="pl-c1">\numpow</span>}</td> + </tr> + <tr> + <td id="L1639" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1639"></td> + <td id="LC1639" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1640" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1640"></td> + <td id="LC1640" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\numcoeff</span> [count=<span class="pl-c1">\numpow</span>] in <span class="pl-c1">\values</span> {</td> + </tr> + <tr> + <td id="L1641" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1641"></td> + <td id="LC1641" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfmathtruncatemacro</span>{<span class="pl-c1">\currentdegree</span>}{<span class="pl-c1">\num@degree</span>-<span class="pl-c1">\numpow</span>}</td> + </tr> + <tr> + <td id="L1642" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1642"></td> + <td id="LC1642" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\currentdegree</span> = 0</td> + </tr> + <tr> + <td id="L1643" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1643"></td> + <td id="LC1643" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\num@real</span>{<span class="pl-c1">\num@real</span>+<span class="pl-c1">\numcoeff</span>}</td> + </tr> + <tr> + <td id="L1644" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1644"></td> + <td id="LC1644" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1645" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1645"></td> + <td id="LC1645" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifodd</span><span class="pl-c1">\currentdegree</span></td> + </tr> + <tr> + <td id="L1646" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1646"></td> + <td id="LC1646" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\num@im</span>{<span class="pl-c1">\num@im</span>+(<span class="pl-c1">\numcoeff</span>*(<span class="pl-c1">\n@pow</span>{-1}{(<span class="pl-c1">\currentdegree</span>-1)/2})*<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L1647" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1647"></td> + <td id="LC1647" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{t}{<span class="pl-c1">\currentdegree</span>}))}</td> + </tr> + <tr> + <td id="L1648" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1648"></td> + <td id="LC1648" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1649" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1649"></td> + <td id="LC1649" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\num@real</span>{<span class="pl-c1">\num@real</span>+(<span class="pl-c1">\numcoeff</span>*(<span class="pl-c1">\n@pow</span>{-1}{(<span class="pl-c1">\currentdegree</span>)/2})*<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L1650" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1650"></td> + <td id="LC1650" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{t}{<span class="pl-c1">\currentdegree</span>}))}</td> + </tr> + <tr> + <td id="L1651" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1651"></td> + <td id="LC1651" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1652" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1652"></td> + <td id="LC1652" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1653" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1653"></td> + <td id="LC1653" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1654" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1654"></td> + <td id="LC1654" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1655" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1655"></td> + <td id="LC1655" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{den}=0</td> + </tr> + <tr> + <td id="L1656" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1656"></td> + <td id="LC1656" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\dencoeff</span> [count=<span class="pl-c1">\denpow</span>] in <span class="pl-c1">\values</span> {</td> + </tr> + <tr> + <td id="L1657" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1657"></td> + <td id="LC1657" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\den@degree</span>{<span class="pl-c1">\denpow</span>}</td> + </tr> + <tr> + <td id="L1658" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1658"></td> + <td id="LC1658" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1659" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1659"></td> + <td id="LC1659" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\dencoeff</span> [count=<span class="pl-c1">\denpow</span>] in <span class="pl-c1">\values</span> {</td> + </tr> + <tr> + <td id="L1660" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1660"></td> + <td id="LC1660" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\pgfmathtruncatemacro</span>{<span class="pl-c1">\currentdegree</span>}{<span class="pl-c1">\den@degree</span>-<span class="pl-c1">\denpow</span>}</td> + </tr> + <tr> + <td id="L1661" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1661"></td> + <td id="LC1661" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\currentdegree</span> = 0</td> + </tr> + <tr> + <td id="L1662" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1662"></td> + <td id="LC1662" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\den@real</span>{<span class="pl-c1">\den@real</span>+<span class="pl-c1">\dencoeff</span>}</td> + </tr> + <tr> + <td id="L1663" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1663"></td> + <td id="LC1663" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1664" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1664"></td> + <td id="LC1664" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifodd</span><span class="pl-c1">\currentdegree</span></td> + </tr> + <tr> + <td id="L1665" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1665"></td> + <td id="LC1665" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\den@im</span>{<span class="pl-c1">\den@im</span>+(<span class="pl-c1">\dencoeff</span>*(<span class="pl-c1">\n@pow</span>{-1}{(<span class="pl-c1">\currentdegree</span>-1)/2})*<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L1666" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1666"></td> + <td id="LC1666" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{t}{<span class="pl-c1">\currentdegree</span>}))}</td> + </tr> + <tr> + <td id="L1667" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1667"></td> + <td id="LC1667" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1668" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1668"></td> + <td id="LC1668" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\den@real</span>{<span class="pl-c1">\den@real</span>+(<span class="pl-c1">\dencoeff</span>*(<span class="pl-c1">\n@pow</span>{-1}{(<span class="pl-c1">\currentdegree</span>)/2})*<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L1669" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1669"></td> + <td id="LC1669" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\n@pow</span>{t}{<span class="pl-c1">\currentdegree</span>}))}</td> + </tr> + <tr> + <td id="L1670" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1670"></td> + <td id="LC1670" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1671" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1671"></td> + <td id="LC1671" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1672" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1672"></td> + <td id="LC1672" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1673" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1673"></td> + <td id="LC1673" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1674" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1674"></td> + <td id="LC1674" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\feature</span>}{d}=0</td> + </tr> + <tr> + <td id="L1675" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1675"></td> + <td id="LC1675" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\loop@delay</span>{<span class="pl-c1">\values</span>}</td> + </tr> + <tr> + <td id="L1676" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1676"></td> + <td id="LC1676" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1677" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1677"></td> + <td id="LC1677" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1678" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1678"></td> + <td id="LC1678" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef</span>#2{((atan2((<span class="pl-c1">\num@im</span>),(<span class="pl-c1">\num@real</span>))-atan2((<span class="pl-c1">\den@im</span>),<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L1679" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1679"></td> + <td id="LC1679" class="blob-code blob-code-inner js-file-line"> (<span class="pl-c1">\den@real</span>))-<span class="pl-c1">\loop@delay</span>*t)*(<span class="pl-c1">\ph@scale</span>))}</td> + </tr> + <tr> + <td id="L1680" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1680"></td> + <td id="LC1680" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef</span>#1{(20*log10(sqrt((<span class="pl-c1">\n@pow</span>{<span class="pl-c1">\num@real</span>}{2})+(<span class="pl-c1">\n@pow</span>{<span class="pl-c1">\num@im</span>}{2})))-<span class="pl-c"><span class="pl-c">%</span></span></td> + </tr> + <tr> + <td id="L1681" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1681"></td> + <td id="LC1681" class="blob-code blob-code-inner js-file-line"> 20*log10(sqrt((<span class="pl-c1">\n@pow</span>{<span class="pl-c1">\den@real</span>}{2})+(<span class="pl-c1">\n@pow</span>{<span class="pl-c1">\den@im</span>}{2}))))}</td> + </tr> + <tr> + <td id="L1682" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1682"></td> + <td id="LC1682" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1683" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1683"></td> + <td id="LC1683" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1684" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1684"></td> + <td id="LC1684" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td> + </tr> + <tr> + <td id="L1685" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1685"></td> + <td id="LC1685" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\parse@opt}</span></td> + </tr> + <tr> + <td id="L1686" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1686"></td> + <td id="LC1686" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parses options supplied to the main Bode macros. A |for| loop over tuples of the form |\obj/\typ/\opt| with a long list of nested if-else statements does the job. If the input |\obj| is |plot|, |axes|, |group|, |approx|, or |tikz| the corresponding |\opt| are passed, unexpanded, to the |\addplot| macro, the |\nextgroupplot| macro, the |groupplot| environment, the |\build@ZPK@plot| macro, and the |tikzpicture| environment, respectively. If |\obj| is |commands|, the corresponding |\opt| are stored, unexpanded, in the macros |\optph@commands| and |\optmag@commands|, to be executed in appropriate |axis| environments. \changes{v1.0.3}{2021/11/03}{Added Tikz option} \changes{v1.0.5}{2021/11/15}{Fixed a bug}</span></td> + </tr> + <tr> + <td id="L1687" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1687"></td> + <td id="LC1687" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1688" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1688"></td> + <td id="LC1688" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\parse@opt</span>}[1]{</td> + </tr> + <tr> + <td id="L1689" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1689"></td> + <td id="LC1689" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\optmag@axes</span>{}</td> + </tr> + <tr> + <td id="L1690" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1690"></td> + <td id="LC1690" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\optph@axes</span>{}</td> + </tr> + <tr> + <td id="L1691" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1691"></td> + <td id="LC1691" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\optph@plot</span>{}</td> + </tr> + <tr> + <td id="L1692" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1692"></td> + <td id="LC1692" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\optmag@plot</span>{}</td> + </tr> + <tr> + <td id="L1693" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1693"></td> + <td id="LC1693" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@group</span>{}</td> + </tr> + <tr> + <td id="L1694" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1694"></td> + <td id="LC1694" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@approx</span>{}</td> + </tr> + <tr> + <td id="L1695" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1695"></td> + <td id="LC1695" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\optph@commands</span>{}</td> + </tr> + <tr> + <td id="L1696" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1696"></td> + <td id="LC1696" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\optmag@commands</span>{}</td> + </tr> + <tr> + <td id="L1697" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1697"></td> + <td id="LC1697" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@tikz</span>{}</td> + </tr> + <tr> + <td id="L1698" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1698"></td> + <td id="LC1698" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\obj</span>/<span class="pl-c1">\typ</span>/<span class="pl-c1">\opt</span> in {#1} {</td> + </tr> + <tr> + <td id="L1699" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1699"></td> + <td id="LC1699" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{plot}=0</td> + </tr> + <tr> + <td id="L1700" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1700"></td> + <td id="LC1700" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\typ</span>}}{mag}=0</td> + </tr> + <tr> + <td id="L1701" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1701"></td> + <td id="LC1701" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optmag@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1702" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1702"></td> + <td id="LC1702" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1703" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1703"></td> + <td id="LC1703" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\typ</span>}}{ph}=0</td> + </tr> + <tr> + <td id="L1704" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1704"></td> + <td id="LC1704" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optph@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1705" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1705"></td> + <td id="LC1705" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1706" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1706"></td> + <td id="LC1706" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optmag@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1707" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1707"></td> + <td id="LC1707" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optph@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1708" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1708"></td> + <td id="LC1708" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1709" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1709"></td> + <td id="LC1709" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1710" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1710"></td> + <td id="LC1710" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1711" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1711"></td> + <td id="LC1711" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{axes}=0</td> + </tr> + <tr> + <td id="L1712" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1712"></td> + <td id="LC1712" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\typ</span>}}{mag}=0</td> + </tr> + <tr> + <td id="L1713" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1713"></td> + <td id="LC1713" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optmag@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1714" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1714"></td> + <td id="LC1714" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1715" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1715"></td> + <td id="LC1715" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\typ</span>}}{ph}=0</td> + </tr> + <tr> + <td id="L1716" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1716"></td> + <td id="LC1716" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optph@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1717" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1717"></td> + <td id="LC1717" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1718" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1718"></td> + <td id="LC1718" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optmag@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1719" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1719"></td> + <td id="LC1719" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optph@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1720" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1720"></td> + <td id="LC1720" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1721" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1721"></td> + <td id="LC1721" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1722" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1722"></td> + <td id="LC1722" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1723" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1723"></td> + <td id="LC1723" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{group}=0</td> + </tr> + <tr> + <td id="L1724" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1724"></td> + <td id="LC1724" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@group</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1725" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1725"></td> + <td id="LC1725" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1726" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1726"></td> + <td id="LC1726" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{approx}=0</td> + </tr> + <tr> + <td id="L1727" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1727"></td> + <td id="LC1727" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@approx</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1728" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1728"></td> + <td id="LC1728" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1729" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1729"></td> + <td id="LC1729" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{commands}=0</td> + </tr> + <tr> + <td id="L1730" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1730"></td> + <td id="LC1730" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\typ</span>}}{ph}=0</td> + </tr> + <tr> + <td id="L1731" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1731"></td> + <td id="LC1731" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optph@commands</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1732" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1732"></td> + <td id="LC1732" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1733" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1733"></td> + <td id="LC1733" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optmag@commands</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1734" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1734"></td> + <td id="LC1734" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1735" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1735"></td> + <td id="LC1735" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1736" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1736"></td> + <td id="LC1736" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{tikz}=0</td> + </tr> + <tr> + <td id="L1737" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1737"></td> + <td id="LC1737" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@tikz</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1738" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1738"></td> + <td id="LC1738" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1739" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1739"></td> + <td id="LC1739" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optmag@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\optmag@plot</span>},</td> + </tr> + <tr> + <td id="L1740" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1740"></td> + <td id="LC1740" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}</td> + </tr> + <tr> + <td id="L1741" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1741"></td> + <td id="LC1741" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\optph@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\optph@plot</span>},</td> + </tr> + <tr> + <td id="L1742" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1742"></td> + <td id="LC1742" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}</td> + </tr> + <tr> + <td id="L1743" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1743"></td> + <td id="LC1743" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1744" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1744"></td> + <td id="LC1744" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1745" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1745"></td> + <td id="LC1745" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1746" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1746"></td> + <td id="LC1746" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1747" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1747"></td> + <td id="LC1747" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1748" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1748"></td> + <td id="LC1748" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1749" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1749"></td> + <td id="LC1749" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1750" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1750"></td> + <td id="LC1750" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1751" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1751"></td> + <td id="LC1751" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1752" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1752"></td> + <td id="LC1752" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td> + </tr> + <tr> + <td id="L1753" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1753"></td> + <td id="LC1753" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\parse@env@opt}</span></td> + </tr> + <tr> + <td id="L1754" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1754"></td> + <td id="LC1754" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parses options supplied to the Bode, Nyquist, and Nichols environments. A |for| loop over tuples of the form |\obj/\opt|, processed using nested if-else statements does the job. The input |\obj| should either be |axes| or |tikz|, and the corresponding |\opt| are passed, unexpanded, to the |axis| environment and the |tikzpicture| environment, respectively. \changes{v1.0.3}{2021/11/03}{Added tikz option to environments}</span></td> + </tr> + <tr> + <td id="L1755" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1755"></td> + <td id="LC1755" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1756" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1756"></td> + <td id="LC1756" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\parse@env@opt</span>}[1]{</td> + </tr> + <tr> + <td id="L1757" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1757"></td> + <td id="LC1757" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@axes</span>{}</td> + </tr> + <tr> + <td id="L1758" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1758"></td> + <td id="LC1758" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@tikz</span>{}</td> + </tr> + <tr> + <td id="L1759" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1759"></td> + <td id="LC1759" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\obj</span>/<span class="pl-c1">\opt</span> in {#1} {</td> + </tr> + <tr> + <td id="L1760" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1760"></td> + <td id="LC1760" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{axes}=0</td> + </tr> + <tr> + <td id="L1761" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1761"></td> + <td id="LC1761" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1762" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1762"></td> + <td id="LC1762" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1763" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1763"></td> + <td id="LC1763" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{tikz}=0</td> + </tr> + <tr> + <td id="L1764" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1764"></td> + <td id="LC1764" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@tikz</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1765" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1765"></td> + <td id="LC1765" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1766" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1766"></td> + <td id="LC1766" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>},</td> + </tr> + <tr> + <td id="L1767" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1767"></td> + <td id="LC1767" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}</td> + </tr> + <tr> + <td id="L1768" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1768"></td> + <td id="LC1768" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1769" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1769"></td> + <td id="LC1769" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1770" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1770"></td> + <td id="LC1770" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1771" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1771"></td> + <td id="LC1771" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1772" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1772"></td> + <td id="LC1772" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1773" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1773"></td> + <td id="LC1773" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1774" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1774"></td> + <td id="LC1774" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Nyquist plots}</span></td> + </tr> + <tr> + <td id="L1775" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1775"></td> + <td id="LC1775" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsubsection{User macros}</span></td> + </tr> + <tr> + <td id="L1776" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1776"></td> + <td id="LC1776" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\NyquistZPK}</span></td> + </tr> + <tr> + <td id="L1777" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1777"></td> + <td id="LC1777" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Converts magnitude and phase parametric functions built using |\build@ZPK@plot| into real part and imaginary part parametric functions. A plot of these is the Nyquist plot. The parametric functions are then plotted in a |tikzpicture| environment using the |\addplot| macro. Unless the package is loaded with the option |pgf|, the parametric functions are evaluated using |gnuplot|. A large number of samples is typically needed to get a smooth plot because frequencies near 0 result in plot points that are very close to each other. Linear frequency sampling is unnecessarily fine near zero and very coarse for large $\omega$. Logarithmic sampling makes it worse, perhaps inverse logarithmic sampling will help, pull requests to fix that are welcome! \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}</span></td> + </tr> + <tr> + <td id="L1778" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1778"></td> + <td id="LC1778" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1779" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1779"></td> + <td id="LC1779" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\NyquistZPK</span>}[4][]{</td> + </tr> + <tr> + <td id="L1780" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1780"></td> + <td id="LC1780" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@N@opt</span>{#1}</td> + </tr> + <tr> + <td id="L1781" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1781"></td> + <td id="LC1781" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td> + </tr> + <tr> + <td id="L1782" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1782"></td> + <td id="LC1782" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td> + </tr> + <tr> + <td id="L1783" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1783"></td> + <td id="LC1783" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]}</td> + </tr> + <tr> + <td id="L1784" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1784"></td> + <td id="LC1784" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1785" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1785"></td> + <td id="LC1785" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{}{#2}</td> + </tr> + <tr> + <td id="L1786" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1786"></td> + <td id="LC1786" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">axis</span>}[</td> + </tr> + <tr> + <td id="L1787" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1787"></td> + <td id="LC1787" class="blob-code blob-code-inner js-file-line"> bode@style,</td> + </tr> + <tr> + <td id="L1788" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1788"></td> + <td id="LC1788" class="blob-code blob-code-inner js-file-line"> domain=#3*<span class="pl-c1">\freq@scale</span>:#4*<span class="pl-c1">\freq@scale</span>,</td> + </tr> + <tr> + <td id="L1789" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1789"></td> + <td id="LC1789" class="blob-code blob-code-inner js-file-line"> height=5cm,</td> + </tr> + <tr> + <td id="L1790" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1790"></td> + <td id="LC1790" class="blob-code blob-code-inner js-file-line"> xlabel={<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\Re</span><span class="pl-pds">$</span></span>},</td> + </tr> + <tr> + <td id="L1791" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1791"></td> + <td id="LC1791" class="blob-code blob-code-inner js-file-line"> ylabel={<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\Im</span><span class="pl-pds">$</span></span>},</td> + </tr> + <tr> + <td id="L1792" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1792"></td> + <td id="LC1792" class="blob-code blob-code-inner js-file-line"> samples=500,</td> + </tr> + <tr> + <td id="L1793" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1793"></td> + <td id="LC1793" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td> + </tr> + <tr> + <td id="L1794" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1794"></td> + <td id="LC1794" class="blob-code blob-code-inner js-file-line"> ]}</td> + </tr> + <tr> + <td id="L1795" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1795"></td> + <td id="LC1795" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1796" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1796"></td> + <td id="LC1796" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [only marks,mark=+,thick,red] (-1 , 0);</td> + </tr> + <tr> + <td id="L1797" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1797"></td> + <td id="LC1797" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand\addplot</span> [variable=t, thick, <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@plot</span>}]}</td> + </tr> + <tr> + <td id="L1798" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1798"></td> + <td id="LC1798" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L1799" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1799"></td> + <td id="LC1799" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> ( {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))},</td> + </tr> + <tr> + <td id="L1800" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1800"></td> + <td id="LC1800" class="blob-code blob-code-inner js-file-line"> {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))} );</td> + </tr> + <tr> + <td id="L1801" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1801"></td> + <td id="LC1801" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td> + </tr> + <tr> + <td id="L1802" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1802"></td> + <td id="LC1802" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1803" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1803"></td> + <td id="LC1803" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L1804" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1804"></td> + <td id="LC1804" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> gnuplot [parametric, gnuplot@prefix] {</td> + </tr> + <tr> + <td id="L1805" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1805"></td> + <td id="LC1805" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>)),</td> + </tr> + <tr> + <td id="L1806" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1806"></td> + <td id="LC1806" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))</td> + </tr> + <tr> + <td id="L1807" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1807"></td> + <td id="LC1807" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L1808" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1808"></td> + <td id="LC1808" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td> + </tr> + <tr> + <td id="L1809" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1809"></td> + <td id="LC1809" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1810" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1810"></td> + <td id="LC1810" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">axis</span>}</td> + </tr> + <tr> + <td id="L1811" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1811"></td> + <td id="LC1811" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{tikzpicture}</td> + </tr> + <tr> + <td id="L1812" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1812"></td> + <td id="LC1812" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1813" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1813"></td> + <td id="LC1813" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1814" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1814"></td> + <td id="LC1814" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1815" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1815"></td> + <td id="LC1815" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\NyquistTF}</span></td> + </tr> + <tr> + <td id="L1816" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1816"></td> + <td id="LC1816" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Implementation of this macro is very similar to the |\NyquistZPK| macro above. The only difference is a slightly different parsing of the mandatory arguments via |\build@TF@plot|. \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}</span></td> + </tr> + <tr> + <td id="L1817" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1817"></td> + <td id="LC1817" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1818" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1818"></td> + <td id="LC1818" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\NyquistTF</span>}[4][]{</td> + </tr> + <tr> + <td id="L1819" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1819"></td> + <td id="LC1819" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@N@opt</span>{#1}</td> + </tr> + <tr> + <td id="L1820" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1820"></td> + <td id="LC1820" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td> + </tr> + <tr> + <td id="L1821" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1821"></td> + <td id="LC1821" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td> + </tr> + <tr> + <td id="L1822" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1822"></td> + <td id="LC1822" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]}</td> + </tr> + <tr> + <td id="L1823" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1823"></td> + <td id="LC1823" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1824" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1824"></td> + <td id="LC1824" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{#2}</td> + </tr> + <tr> + <td id="L1825" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1825"></td> + <td id="LC1825" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">axis</span>}[</td> + </tr> + <tr> + <td id="L1826" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1826"></td> + <td id="LC1826" class="blob-code blob-code-inner js-file-line"> bode@style,</td> + </tr> + <tr> + <td id="L1827" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1827"></td> + <td id="LC1827" class="blob-code blob-code-inner js-file-line"> domain=#3*<span class="pl-c1">\freq@scale</span>:#4*<span class="pl-c1">\freq@scale</span>,</td> + </tr> + <tr> + <td id="L1828" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1828"></td> + <td id="LC1828" class="blob-code blob-code-inner js-file-line"> height=5cm,</td> + </tr> + <tr> + <td id="L1829" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1829"></td> + <td id="LC1829" class="blob-code blob-code-inner js-file-line"> xlabel={<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\Re</span><span class="pl-pds">$</span></span>},</td> + </tr> + <tr> + <td id="L1830" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1830"></td> + <td id="LC1830" class="blob-code blob-code-inner js-file-line"> ylabel={<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\Im</span><span class="pl-pds">$</span></span>},</td> + </tr> + <tr> + <td id="L1831" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1831"></td> + <td id="LC1831" class="blob-code blob-code-inner js-file-line"> samples=500,</td> + </tr> + <tr> + <td id="L1832" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1832"></td> + <td id="LC1832" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td> + </tr> + <tr> + <td id="L1833" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1833"></td> + <td id="LC1833" class="blob-code blob-code-inner js-file-line"> ]}</td> + </tr> + <tr> + <td id="L1834" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1834"></td> + <td id="LC1834" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1835" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1835"></td> + <td id="LC1835" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [only marks, mark=+, thick, red] (-1 , 0);</td> + </tr> + <tr> + <td id="L1836" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1836"></td> + <td id="LC1836" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand\addplot</span> [variable=t, thick, <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@plot</span>}]}</td> + </tr> + <tr> + <td id="L1837" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1837"></td> + <td id="LC1837" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L1838" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1838"></td> + <td id="LC1838" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> ( {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))},</td> + </tr> + <tr> + <td id="L1839" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1839"></td> + <td id="LC1839" class="blob-code blob-code-inner js-file-line"> {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))} );</td> + </tr> + <tr> + <td id="L1840" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1840"></td> + <td id="LC1840" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td> + </tr> + <tr> + <td id="L1841" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1841"></td> + <td id="LC1841" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1842" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1842"></td> + <td id="LC1842" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L1843" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1843"></td> + <td id="LC1843" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> gnuplot [parametric, gnuplot@prefix] {</td> + </tr> + <tr> + <td id="L1844" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1844"></td> + <td id="LC1844" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>)),</td> + </tr> + <tr> + <td id="L1845" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1845"></td> + <td id="LC1845" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))</td> + </tr> + <tr> + <td id="L1846" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1846"></td> + <td id="LC1846" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L1847" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1847"></td> + <td id="LC1847" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td> + </tr> + <tr> + <td id="L1848" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1848"></td> + <td id="LC1848" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1849" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1849"></td> + <td id="LC1849" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">axis</span>}</td> + </tr> + <tr> + <td id="L1850" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1850"></td> + <td id="LC1850" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{tikzpicture}</td> + </tr> + <tr> + <td id="L1851" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1851"></td> + <td id="LC1851" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1852" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1852"></td> + <td id="LC1852" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1853" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1853"></td> + <td id="LC1853" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1854" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1854"></td> + <td id="LC1854" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addNyquistZPKPlot}</span></td> + </tr> + <tr> + <td id="L1855" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1855"></td> + <td id="LC1855" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Adds Nyquist plot of a transfer function in ZPK form. This macro is designed to pass two parametric function to an |\addplot| macro. The parametric functions for phase (|\func@ph|) and magnitude (|\func@mag|) are built using the |\build@ZPK@plot| macro, converted to real and imaginary parts and passed to |\addplot| commands.\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}</span></td> + </tr> + <tr> + <td id="L1856" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1856"></td> + <td id="LC1856" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1857" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1857"></td> + <td id="LC1857" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addNyquistZPKPlot</span>}[2][]{</td> + </tr> + <tr> + <td id="L1858" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1858"></td> + <td id="LC1858" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td> + </tr> + <tr> + <td id="L1859" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1859"></td> + <td id="LC1859" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td> + </tr> + <tr> + <td id="L1860" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1860"></td> + <td id="LC1860" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{}{#2}</td> + </tr> + <tr> + <td id="L1861" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1861"></td> + <td id="LC1861" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td> + </tr> + <tr> + <td id="L1862" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1862"></td> + <td id="LC1862" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L1863" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1863"></td> + <td id="LC1863" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L1864" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1864"></td> + <td id="LC1864" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L1865" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1865"></td> + <td id="LC1865" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1] ( {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))},</td> + </tr> + <tr> + <td id="L1866" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1866"></td> + <td id="LC1866" class="blob-code blob-code-inner js-file-line"> {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))} );</td> + </tr> + <tr> + <td id="L1867" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1867"></td> + <td id="LC1867" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1868" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1868"></td> + <td id="LC1868" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L1869" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1869"></td> + <td id="LC1869" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1] gnuplot [parametric, gnuplot@prefix] {</td> + </tr> + <tr> + <td id="L1870" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1870"></td> + <td id="LC1870" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>)),</td> + </tr> + <tr> + <td id="L1871" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1871"></td> + <td id="LC1871" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))</td> + </tr> + <tr> + <td id="L1872" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1872"></td> + <td id="LC1872" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L1873" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1873"></td> + <td id="LC1873" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1874" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1874"></td> + <td id="LC1874" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1875" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1875"></td> + <td id="LC1875" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1876" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1876"></td> + <td id="LC1876" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td> + </tr> + <tr> + <td id="L1877" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1877"></td> + <td id="LC1877" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addNyquistTFPlot}</span></td> + </tr> + <tr> + <td id="L1878" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1878"></td> + <td id="LC1878" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Adds Nyquist plot of a transfer function in TF form. This macro is designed to pass two parametric function to an |\addplot| macro. The parametric functions for phase (|\func@ph|) and magnitude (|\func@mag|) are built using the |\build@TF@plot| macro, converted to real and imaginary parts and passed to |\addplot| commands.\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}</span></td> + </tr> + <tr> + <td id="L1879" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1879"></td> + <td id="LC1879" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1880" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1880"></td> + <td id="LC1880" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addNyquistTFPlot</span>}[2][]{</td> + </tr> + <tr> + <td id="L1881" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1881"></td> + <td id="LC1881" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td> + </tr> + <tr> + <td id="L1882" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1882"></td> + <td id="LC1882" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td> + </tr> + <tr> + <td id="L1883" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1883"></td> + <td id="LC1883" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{#2}</td> + </tr> + <tr> + <td id="L1884" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1884"></td> + <td id="LC1884" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td> + </tr> + <tr> + <td id="L1885" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1885"></td> + <td id="LC1885" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L1886" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1886"></td> + <td id="LC1886" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L1887" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1887"></td> + <td id="LC1887" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L1888" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1888"></td> + <td id="LC1888" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1] ( {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))},</td> + </tr> + <tr> + <td id="L1889" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1889"></td> + <td id="LC1889" class="blob-code blob-code-inner js-file-line"> {<span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))} );</td> + </tr> + <tr> + <td id="L1890" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1890"></td> + <td id="LC1890" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1891" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1891"></td> + <td id="LC1891" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L1892" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1892"></td> + <td id="LC1892" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, variable=t, #1] gnuplot [parametric, gnuplot@prefix]{</td> + </tr> + <tr> + <td id="L1893" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1893"></td> + <td id="LC1893" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*cos((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>)),</td> + </tr> + <tr> + <td id="L1894" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1894"></td> + <td id="LC1894" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\n@pow</span>{10}{((<span class="pl-c1">\func@mag</span>)/20)}*sin((<span class="pl-c1">\func@ph</span>)/(<span class="pl-c1">\ph@scale</span>))</td> + </tr> + <tr> + <td id="L1895" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1895"></td> + <td id="LC1895" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L1896" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1896"></td> + <td id="LC1896" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1897" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1897"></td> + <td id="LC1897" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1898" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1898"></td> + <td id="LC1898" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1899" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1899"></td> + <td id="LC1899" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td> + </tr> + <tr> + <td id="L1900" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1900"></td> + <td id="LC1900" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\begin{macro}{NyquistPlot}</span></td> + </tr> + <tr> + <td id="L1901" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1901"></td> + <td id="LC1901" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> An environment to host |\addNyquist...| macros that pass parametric functions to |\addplot|. Uses the defaults specified in |bode@style| to create a shortcut that includes the |tikzpicture| and |axis| environments. \changes{v1.0.3}{2021/11/03}{Added tikz option to environments}\changes{v1.1.2}{2022/10/29}{Defined using the `NewEniron' command from the `environ' package to fix conflicts with externalization}</span></td> + </tr> + <tr> + <td id="L1902" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1902"></td> + <td id="LC1902" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1903" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1903"></td> + <td id="LC1903" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NewEnviron</span>{NyquistPlot}[3][]{</td> + </tr> + <tr> + <td id="L1904" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1904"></td> + <td id="LC1904" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@env@opt</span>{#1}</td> + </tr> + <tr> + <td id="L1905" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1905"></td> + <td id="LC1905" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]</td> + </tr> + <tr> + <td id="L1906" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1906"></td> + <td id="LC1906" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">axis</span>}[</td> + </tr> + <tr> + <td id="L1907" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1907"></td> + <td id="LC1907" class="blob-code blob-code-inner js-file-line"> bode@style,</td> + </tr> + <tr> + <td id="L1908" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1908"></td> + <td id="LC1908" class="blob-code blob-code-inner js-file-line"> height=5cm,</td> + </tr> + <tr> + <td id="L1909" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1909"></td> + <td id="LC1909" class="blob-code blob-code-inner js-file-line"> domain=#2:#3,</td> + </tr> + <tr> + <td id="L1910" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1910"></td> + <td id="LC1910" class="blob-code blob-code-inner js-file-line"> xlabel={<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\Re</span><span class="pl-pds">$</span></span>},</td> + </tr> + <tr> + <td id="L1911" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1911"></td> + <td id="LC1911" class="blob-code blob-code-inner js-file-line"> ylabel={<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">\Im</span><span class="pl-pds">$</span></span>},</td> + </tr> + <tr> + <td id="L1912" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1912"></td> + <td id="LC1912" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td> + </tr> + <tr> + <td id="L1913" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1913"></td> + <td id="LC1913" class="blob-code blob-code-inner js-file-line"> ]</td> + </tr> + <tr> + <td id="L1914" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1914"></td> + <td id="LC1914" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1915" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1915"></td> + <td id="LC1915" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1916" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1916"></td> + <td id="LC1916" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [only marks,mark=+,thick,red] (-1 , 0);</td> + </tr> + <tr> + <td id="L1917" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1917"></td> + <td id="LC1917" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\BODY</span></td> + </tr> + <tr> + <td id="L1918" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1918"></td> + <td id="LC1918" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">axis</span>}</td> + </tr> + <tr> + <td id="L1919" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1919"></td> + <td id="LC1919" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">tikzpicture</span>}</td> + </tr> + <tr> + <td id="L1920" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1920"></td> + <td id="LC1920" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1921" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1921"></td> + <td id="LC1921" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1922" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1922"></td> + <td id="LC1922" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span>\end{macro}</span></td> + </tr> + <tr> + <td id="L1923" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1923"></td> + <td id="LC1923" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsubsection{Internal commands\label{sec:NInternal}}</span></td> + </tr> + <tr> + <td id="L1924" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1924"></td> + <td id="LC1924" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\parse@N@opt}</span></td> + </tr> + <tr> + <td id="L1925" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1925"></td> + <td id="LC1925" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> Parses options supplied to the main Nyquist and Nichols macros. A |for| loop over tuples of the form |\obj/\opt|, processed using nested if-else statements does the job. If the input |\obj| is |plot|, |axes|, or |tikz| then the corresponding |\opt| are passed, unexpanded, to the |\addplot| macro, the |axis| environment, and the |tikzpicture| environment, respectively. \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}</span></td> + </tr> + <tr> + <td id="L1926" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1926"></td> + <td id="LC1926" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1927" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1927"></td> + <td id="LC1927" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\parse@N@opt</span>}[1]{</td> + </tr> + <tr> + <td id="L1928" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1928"></td> + <td id="LC1928" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@axes</span>{}</td> + </tr> + <tr> + <td id="L1929" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1929"></td> + <td id="LC1929" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@plot</span>{}</td> + </tr> + <tr> + <td id="L1930" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1930"></td> + <td id="LC1930" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@commands</span>{}</td> + </tr> + <tr> + <td id="L1931" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1931"></td> + <td id="LC1931" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\opt@tikz</span>{}</td> + </tr> + <tr> + <td id="L1932" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1932"></td> + <td id="LC1932" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\foreach</span> <span class="pl-c1">\obj</span>/<span class="pl-c1">\opt</span> in {#1} {</td> + </tr> + <tr> + <td id="L1933" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1933"></td> + <td id="LC1933" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{axes}=0</td> + </tr> + <tr> + <td id="L1934" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1934"></td> + <td id="LC1934" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@axes</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1935" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1935"></td> + <td id="LC1935" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1936" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1936"></td> + <td id="LC1936" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{plot}=0</td> + </tr> + <tr> + <td id="L1937" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1937"></td> + <td id="LC1937" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1938" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1938"></td> + <td id="LC1938" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1939" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1939"></td> + <td id="LC1939" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{commands}=0</td> + </tr> + <tr> + <td id="L1940" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1940"></td> + <td id="LC1940" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@commands</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1941" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1941"></td> + <td id="LC1941" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1942" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1942"></td> + <td id="LC1942" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\ifnum</span><span class="pl-c1">\pdf@strcmp</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}{tikz}=0</td> + </tr> + <tr> + <td id="L1943" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1943"></td> + <td id="LC1943" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@tikz</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt</span>}}</td> + </tr> + <tr> + <td id="L1944" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1944"></td> + <td id="LC1944" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1945" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1945"></td> + <td id="LC1945" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\xdef\opt@plot</span>{<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@plot</span>},</td> + </tr> + <tr> + <td id="L1946" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1946"></td> + <td id="LC1946" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\obj</span>}}</td> + </tr> + <tr> + <td id="L1947" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1947"></td> + <td id="LC1947" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1948" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1948"></td> + <td id="LC1948" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1949" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1949"></td> + <td id="LC1949" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1950" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1950"></td> + <td id="LC1950" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L1951" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1951"></td> + <td id="LC1951" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L1952" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1952"></td> + <td id="LC1952" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L1953" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1953"></td> + <td id="LC1953" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L1954" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1954"></td> + <td id="LC1954" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L1955" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1955"></td> + <td id="LC1955" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \subsection{Nichols charts}</span></td> + </tr> + <tr> + <td id="L1956" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1956"></td> + <td id="LC1956" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\NicholsZPK}</span></td> + </tr> + <tr> + <td id="L1957" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1957"></td> + <td id="LC1957" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}</span></td> + </tr> + <tr> + <td id="L1958" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1958"></td> + <td id="LC1958" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\NicholsTF}</span></td> + </tr> + <tr> + <td id="L1959" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1959"></td> + <td id="LC1959" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}</span></td> + </tr> + <tr> + <td id="L1960" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1960"></td> + <td id="LC1960" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{NicholsChart}</span></td> + </tr> + <tr> + <td id="L1961" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1961"></td> + <td id="LC1961" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \changes{v1.0.3}{2021/11/03}{Added tikz option to environments}\changes{v1.1.2}{2022/10/29}{Defined using the `NewEniron' command from the `environ' package to fix conflicts with externalization}</span></td> + </tr> + <tr> + <td id="L1962" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1962"></td> + <td id="LC1962" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addNicholsZPKChart}</span></td> + </tr> + <tr> + <td id="L1963" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1963"></td> + <td id="LC1963" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macro}{\addNicholsTFChart}</span></td> + </tr> + <tr> + <td id="L1964" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1964"></td> + <td id="LC1964" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> These macros and the |NicholsChart| environment generate Nichols charts, and they are implemented similar to their Nyquist counterparts.\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively}</span></td> + </tr> + <tr> + <td id="L1965" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1965"></td> + <td id="LC1965" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \begin{macrocode}</span></td> + </tr> + <tr> + <td id="L1966" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1966"></td> + <td id="LC1966" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\NicholsZPK</span>}[4][]{</td> + </tr> + <tr> + <td id="L1967" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1967"></td> + <td id="LC1967" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@N@opt</span>{#1}</td> + </tr> + <tr> + <td id="L1968" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1968"></td> + <td id="LC1968" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td> + </tr> + <tr> + <td id="L1969" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1969"></td> + <td id="LC1969" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td> + </tr> + <tr> + <td id="L1970" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1970"></td> + <td id="LC1970" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]}</td> + </tr> + <tr> + <td id="L1971" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1971"></td> + <td id="LC1971" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1972" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1972"></td> + <td id="LC1972" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{}{#2}</td> + </tr> + <tr> + <td id="L1973" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1973"></td> + <td id="LC1973" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">axis</span>}[</td> + </tr> + <tr> + <td id="L1974" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1974"></td> + <td id="LC1974" class="blob-code blob-code-inner js-file-line"> ph@x@label,</td> + </tr> + <tr> + <td id="L1975" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1975"></td> + <td id="LC1975" class="blob-code blob-code-inner js-file-line"> bode@style,</td> + </tr> + <tr> + <td id="L1976" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1976"></td> + <td id="LC1976" class="blob-code blob-code-inner js-file-line"> domain=#3*<span class="pl-c1">\freq@scale</span>:#4*<span class="pl-c1">\freq@scale</span>,</td> + </tr> + <tr> + <td id="L1977" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1977"></td> + <td id="LC1977" class="blob-code blob-code-inner js-file-line"> height=5cm,</td> + </tr> + <tr> + <td id="L1978" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1978"></td> + <td id="LC1978" class="blob-code blob-code-inner js-file-line"> ylabel={Gain (dB)},</td> + </tr> + <tr> + <td id="L1979" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1979"></td> + <td id="LC1979" class="blob-code blob-code-inner js-file-line"> samples=500,</td> + </tr> + <tr> + <td id="L1980" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1980"></td> + <td id="LC1980" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td> + </tr> + <tr> + <td id="L1981" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1981"></td> + <td id="LC1981" class="blob-code blob-code-inner js-file-line"> ]}</td> + </tr> + <tr> + <td id="L1982" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1982"></td> + <td id="LC1982" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L1983" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1983"></td> + <td id="LC1983" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand\addplot</span> [variable=t,thick,<span class="pl-c1">\opt@plot</span>]}</td> + </tr> + <tr> + <td id="L1984" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1984"></td> + <td id="LC1984" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L1985" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1985"></td> + <td id="LC1985" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> ( {<span class="pl-c1">\func@ph</span>} , {<span class="pl-c1">\func@mag</span>} );</td> + </tr> + <tr> + <td id="L1986" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1986"></td> + <td id="LC1986" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td> + </tr> + <tr> + <td id="L1987" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1987"></td> + <td id="LC1987" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L1988" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1988"></td> + <td id="LC1988" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L1989" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1989"></td> + <td id="LC1989" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td> + </tr> + <tr> + <td id="L1990" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1990"></td> + <td id="LC1990" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td> + </tr> + <tr> + <td id="L1991" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1991"></td> + <td id="LC1991" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td> + </tr> + <tr> + <td id="L1992" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1992"></td> + <td id="LC1992" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td> + </tr> + <tr> + <td id="L1993" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1993"></td> + <td id="LC1993" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td> + </tr> + <tr> + <td id="L1994" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1994"></td> + <td id="LC1994" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set trange [#<span class="pl-c1">3</span>*<span class="pl-c1">\freq</span>@scale:#<span class="pl-c1">4</span>*<span class="pl-c1">\freq</span>@scale];</span></td> + </tr> + <tr> + <td id="L1995" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1995"></td> + <td id="LC1995" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot '+' using (<span class="pl-c1">\func</span>@mag) : ((<span class="pl-c1">\func</span>@ph)/(<span class="pl-c1">\ph</span>@scale));</span></td> + </tr> + <tr> + <td id="L1996" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1996"></td> + <td id="LC1996" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> unset logscale x;</span></td> + </tr> + <tr> + <td id="L1997" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1997"></td> + <td id="LC1997" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table "<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table";</span></td> + </tr> + <tr> + <td id="L1998" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1998"></td> + <td id="LC1998" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot "<span class="pl-pds">$</span></span>meta" using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">2</span>*<span class="pl-c1">\ph</span>@scale):(<span class="pl-pds">$</span></span>1);</td> + </tr> + <tr> + <td id="L1999" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="1999"></td> + <td id="LC1999" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L2000" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2000"></td> + <td id="LC2000" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td> + </tr> + <tr> + <td id="L2001" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2001"></td> + <td id="LC2001" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L2002" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2002"></td> + <td id="LC2002" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">axis</span>}</td> + </tr> + <tr> + <td id="L2003" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2003"></td> + <td id="LC2003" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{tikzpicture}</td> + </tr> + <tr> + <td id="L2004" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2004"></td> + <td id="LC2004" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L2005" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2005"></td> + <td id="LC2005" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\NicholsTF</span>}[4][]{</td> + </tr> + <tr> + <td id="L2006" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2006"></td> + <td id="LC2006" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@N@opt</span>{#1}</td> + </tr> + <tr> + <td id="L2007" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2007"></td> + <td id="LC2007" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td> + </tr> + <tr> + <td id="L2008" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2008"></td> + <td id="LC2008" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td> + </tr> + <tr> + <td id="L2009" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2009"></td> + <td id="LC2009" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]}</td> + </tr> + <tr> + <td id="L2010" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2010"></td> + <td id="LC2010" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L2011" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2011"></td> + <td id="LC2011" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{#2}</td> + </tr> + <tr> + <td id="L2012" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2012"></td> + <td id="LC2012" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">axis</span>}[</td> + </tr> + <tr> + <td id="L2013" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2013"></td> + <td id="LC2013" class="blob-code blob-code-inner js-file-line"> ph@x@label,</td> + </tr> + <tr> + <td id="L2014" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2014"></td> + <td id="LC2014" class="blob-code blob-code-inner js-file-line"> bode@style,</td> + </tr> + <tr> + <td id="L2015" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2015"></td> + <td id="LC2015" class="blob-code blob-code-inner js-file-line"> domain=#3*<span class="pl-c1">\freq@scale</span>:#4*<span class="pl-c1">\freq@scale</span>,</td> + </tr> + <tr> + <td id="L2016" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2016"></td> + <td id="LC2016" class="blob-code blob-code-inner js-file-line"> height=5cm,</td> + </tr> + <tr> + <td id="L2017" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2017"></td> + <td id="LC2017" class="blob-code blob-code-inner js-file-line"> ylabel={Gain (dB)},</td> + </tr> + <tr> + <td id="L2018" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2018"></td> + <td id="LC2018" class="blob-code blob-code-inner js-file-line"> samples=500,</td> + </tr> + <tr> + <td id="L2019" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2019"></td> + <td id="LC2019" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td> + </tr> + <tr> + <td id="L2020" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2020"></td> + <td id="LC2020" class="blob-code blob-code-inner js-file-line"> ]}</td> + </tr> + <tr> + <td id="L2021" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2021"></td> + <td id="LC2021" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L2022" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2022"></td> + <td id="LC2022" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand\addplot</span> [variable=t,thick, <span class="pl-c1">\opt@plot</span>]}</td> + </tr> + <tr> + <td id="L2023" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2023"></td> + <td id="LC2023" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L2024" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2024"></td> + <td id="LC2024" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> ( {<span class="pl-c1">\n@mod</span>{<span class="pl-c1">\func@ph</span>}{2*pi*<span class="pl-c1">\ph@scale</span>}} , {<span class="pl-c1">\func@mag</span>} );</td> + </tr> + <tr> + <td id="L2025" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2025"></td> + <td id="LC2025" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td> + </tr> + <tr> + <td id="L2026" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2026"></td> + <td id="LC2026" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L2027" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2027"></td> + <td id="LC2027" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L2028" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2028"></td> + <td id="LC2028" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span> gnuplot [raw gnuplot, gnuplot@prefix]</td> + </tr> + <tr> + <td id="L2029" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2029"></td> + <td id="LC2029" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta<span class="pl-c1">1</span>;</span></td> + </tr> + <tr> + <td id="L2030" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2030"></td> + <td id="LC2030" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td> + </tr> + <tr> + <td id="L2031" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2031"></td> + <td id="LC2031" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td> + </tr> + <tr> + <td id="L2032" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2032"></td> + <td id="LC2032" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td> + </tr> + <tr> + <td id="L2033" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2033"></td> + <td id="LC2033" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set trange [#<span class="pl-c1">3</span>*<span class="pl-c1">\freq</span>@scale:#<span class="pl-c1">4</span>*<span class="pl-c1">\freq</span>@scale];</span></td> + </tr> + <tr> + <td id="L2034" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2034"></td> + <td id="LC2034" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot '+' using (<span class="pl-c1">\func</span>@mag) : ((<span class="pl-c1">\func</span>@ph)/(<span class="pl-c1">\ph</span>@scale));</span></td> + </tr> + <tr> + <td id="L2035" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2035"></td> + <td id="LC2035" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> unset logscale x;</span></td> + </tr> + <tr> + <td id="L2036" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2036"></td> + <td id="LC2036" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table <span class="pl-pds">$</span></span>meta2;</td> + </tr> + <tr> + <td id="L2037" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2037"></td> + <td id="LC2037" class="blob-code blob-code-inner js-file-line"> plot <span class="pl-ii">"$meta1"</span> using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>):(<span class="pl-pds">$</span></span>2) smooth unwrap;</td> + </tr> + <tr> + <td id="L2038" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2038"></td> + <td id="LC2038" class="blob-code blob-code-inner js-file-line"> set table <span class="pl-ii">"\bodeplot@prefix\arabic{gnuplot@id}.table"</span>;</td> + </tr> + <tr> + <td id="L2039" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2039"></td> + <td id="LC2039" class="blob-code blob-code-inner js-file-line"> plot <span class="pl-ii">"$meta2"</span> using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">2</span>*<span class="pl-c1">\ph</span>@scale):(<span class="pl-pds">$</span></span>1);</td> + </tr> + <tr> + <td id="L2040" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2040"></td> + <td id="LC2040" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L2041" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2041"></td> + <td id="LC2041" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\opt@commands</span></td> + </tr> + <tr> + <td id="L2042" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2042"></td> + <td id="LC2042" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L2043" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2043"></td> + <td id="LC2043" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">axis</span>}</td> + </tr> + <tr> + <td id="L2044" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2044"></td> + <td id="LC2044" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{tikzpicture}</td> + </tr> + <tr> + <td id="L2045" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2045"></td> + <td id="LC2045" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L2046" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2046"></td> + <td id="LC2046" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\NewEnviron</span>{NicholsChart}[3][]{</td> + </tr> + <tr> + <td id="L2047" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2047"></td> + <td id="LC2047" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\parse@env@opt</span>{#1}</td> + </tr> + <tr> + <td id="L2048" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2048"></td> + <td id="LC2048" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\temp@cmd</span>{<span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">tikzpicture</span>} [<span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@tikz</span>}]</td> + </tr> + <tr> + <td id="L2049" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2049"></td> + <td id="LC2049" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\noexpand</span><span class="pl-c1">\begin</span>{<span class="pl-smi">axis</span>}[</td> + </tr> + <tr> + <td id="L2050" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2050"></td> + <td id="LC2050" class="blob-code blob-code-inner js-file-line"> ph@x@label,</td> + </tr> + <tr> + <td id="L2051" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2051"></td> + <td id="LC2051" class="blob-code blob-code-inner js-file-line"> bode@style,</td> + </tr> + <tr> + <td id="L2052" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2052"></td> + <td id="LC2052" class="blob-code blob-code-inner js-file-line"> domain=#2:#3,</td> + </tr> + <tr> + <td id="L2053" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2053"></td> + <td id="LC2053" class="blob-code blob-code-inner js-file-line"> height=5cm,</td> + </tr> + <tr> + <td id="L2054" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2054"></td> + <td id="LC2054" class="blob-code blob-code-inner js-file-line"> ylabel={Gain (dB)},</td> + </tr> + <tr> + <td id="L2055" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2055"></td> + <td id="LC2055" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\unexpanded\expandafter</span>{<span class="pl-c1">\opt@axes</span>}</td> + </tr> + <tr> + <td id="L2056" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2056"></td> + <td id="LC2056" class="blob-code blob-code-inner js-file-line"> ]</td> + </tr> + <tr> + <td id="L2057" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2057"></td> + <td id="LC2057" class="blob-code blob-code-inner js-file-line"> }</td> + </tr> + <tr> + <td id="L2058" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2058"></td> + <td id="LC2058" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\temp@cmd</span></td> + </tr> + <tr> + <td id="L2059" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2059"></td> + <td id="LC2059" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\BODY</span></td> + </tr> + <tr> + <td id="L2060" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2060"></td> + <td id="LC2060" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">axis</span>}</td> + </tr> + <tr> + <td id="L2061" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2061"></td> + <td id="LC2061" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\end</span>{<span class="pl-smi">tikzpicture</span>}</td> + </tr> + <tr> + <td id="L2062" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2062"></td> + <td id="LC2062" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L2063" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2063"></td> + <td id="LC2063" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addNicholsZPKChart</span>}[2][]{</td> + </tr> + <tr> + <td id="L2064" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2064"></td> + <td id="LC2064" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td> + </tr> + <tr> + <td id="L2065" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2065"></td> + <td id="LC2065" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td> + </tr> + <tr> + <td id="L2066" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2066"></td> + <td id="LC2066" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@ZPK@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{}{#2}</td> + </tr> + <tr> + <td id="L2067" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2067"></td> + <td id="LC2067" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td> + </tr> + <tr> + <td id="L2068" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2068"></td> + <td id="LC2068" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L2069" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2069"></td> + <td id="LC2069" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L2070" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2070"></td> + <td id="LC2070" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L2071" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2071"></td> + <td id="LC2071" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [variable=t, domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, #1] ( {<span class="pl-c1">\func@ph</span>} , {<span class="pl-c1">\func@mag</span>} );</td> + </tr> + <tr> + <td id="L2072" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2072"></td> + <td id="LC2072" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L2073" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2073"></td> + <td id="LC2073" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L2074" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2074"></td> + <td id="LC2074" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [#1] gnuplot [raw gnuplot, gnuplot@prefix]</td> + </tr> + <tr> + <td id="L2075" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2075"></td> + <td id="LC2075" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta;</span></td> + </tr> + <tr> + <td id="L2076" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2076"></td> + <td id="LC2076" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td> + </tr> + <tr> + <td id="L2077" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2077"></td> + <td id="LC2077" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td> + </tr> + <tr> + <td id="L2078" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2078"></td> + <td id="LC2078" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td> + </tr> + <tr> + <td id="L2079" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2079"></td> + <td id="LC2079" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set trange [<span class="pl-c1">\domain</span>@start*<span class="pl-c1">\freq</span>@scale:<span class="pl-c1">\domain</span>@end*<span class="pl-c1">\freq</span>@scale];</span></td> + </tr> + <tr> + <td id="L2080" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2080"></td> + <td id="LC2080" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot '+' using (<span class="pl-c1">\func</span>@mag) : ((<span class="pl-c1">\func</span>@ph)/(<span class="pl-c1">\ph</span>@scale));</span></td> + </tr> + <tr> + <td id="L2081" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2081"></td> + <td id="LC2081" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> unset logscale x;</span></td> + </tr> + <tr> + <td id="L2082" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2082"></td> + <td id="LC2082" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table "<span class="pl-c1">\bodeplot</span>@prefix<span class="pl-c1">\arabic</span>{gnuplot@id}.table";</span></td> + </tr> + <tr> + <td id="L2083" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2083"></td> + <td id="LC2083" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot "<span class="pl-pds">$</span></span>meta" using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">2</span>*<span class="pl-c1">\ph</span>@scale):(<span class="pl-pds">$</span></span>1);</td> + </tr> + <tr> + <td id="L2084" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2084"></td> + <td id="LC2084" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L2085" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2085"></td> + <td id="LC2085" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L2086" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2086"></td> + <td id="LC2086" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L2087" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2087"></td> + <td id="LC2087" class="blob-code blob-code-inner js-file-line"><span class="pl-k">\newcommand</span>{<span class="pl-c1">\addNicholsTFChart</span>}[2][]{</td> + </tr> + <tr> + <td id="L2088" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2088"></td> + <td id="LC2088" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@mag</span>{}</td> + </tr> + <tr> + <td id="L2089" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2089"></td> + <td id="LC2089" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\gdef\func@ph</span>{}</td> + </tr> + <tr> + <td id="L2090" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2090"></td> + <td id="LC2090" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\build@TF@plot</span>{<span class="pl-c1">\func@mag</span>}{<span class="pl-c1">\func@ph</span>}{#2}</td> + </tr> + <tr> + <td id="L2091" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2091"></td> + <td id="LC2091" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\supplied@domain</span>{<span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/domain}}</td> + </tr> + <tr> + <td id="L2092" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2092"></td> + <td id="LC2092" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@start</span>{<span class="pl-c1">\expandafter\get@interval@start\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L2093" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2093"></td> + <td id="LC2093" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\edef\domain@end</span>{<span class="pl-c1">\expandafter\get@interval@end\supplied@domain\@nil</span>}</td> + </tr> + <tr> + <td id="L2094" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2094"></td> + <td id="LC2094" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\if</span>@pgfarg</td> + </tr> + <tr> + <td id="L2095" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2095"></td> + <td id="LC2095" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [variable=t, domain=<span class="pl-c1">\domain@start</span>*<span class="pl-c1">\freq@scale</span>:<span class="pl-c1">\domain@end</span>*<span class="pl-c1">\freq@scale</span>, #1] ( {<span class="pl-c1">\n@mod</span>{<span class="pl-c1">\func@ph</span>}{2*pi*<span class="pl-c1">\ph@scale</span>}} , {<span class="pl-c1">\func@mag</span>} );</td> + </tr> + <tr> + <td id="L2096" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2096"></td> + <td id="LC2096" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\else</span></td> + </tr> + <tr> + <td id="L2097" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2097"></td> + <td id="LC2097" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\stepcounter</span>{gnuplot@id}</td> + </tr> + <tr> + <td id="L2098" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2098"></td> + <td id="LC2098" class="blob-code blob-code-inner js-file-line"> <span class="pl-c1">\addplot</span> [#1] gnuplot [raw gnuplot, gnuplot@prefix]</td> + </tr> + <tr> + <td id="L2099" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2099"></td> + <td id="LC2099" class="blob-code blob-code-inner js-file-line"> { set table <span class="pl-s"><span class="pl-pds">$</span>meta<span class="pl-c1">1</span>;</span></td> + </tr> + <tr> + <td id="L2100" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2100"></td> + <td id="LC2100" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set logscale x <span class="pl-c1">10</span>;</span></td> + </tr> + <tr> + <td id="L2101" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2101"></td> + <td id="LC2101" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set dummy t;</span></td> + </tr> + <tr> + <td id="L2102" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2102"></td> + <td id="LC2102" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set samples <span class="pl-c1">\pgfkeysvalueof</span>{/pgfplots/samples};</span></td> + </tr> + <tr> + <td id="L2103" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2103"></td> + <td id="LC2103" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set trange [<span class="pl-c1">\domain</span>@start*<span class="pl-c1">\freq</span>@scale:<span class="pl-c1">\domain</span>@end*<span class="pl-c1">\freq</span>@scale];</span></td> + </tr> + <tr> + <td id="L2104" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2104"></td> + <td id="LC2104" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> plot '+' using (<span class="pl-c1">\func</span>@mag) : ((<span class="pl-c1">\func</span>@ph)/(<span class="pl-c1">\ph</span>@scale));</span></td> + </tr> + <tr> + <td id="L2105" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2105"></td> + <td id="LC2105" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> unset logscale x;</span></td> + </tr> + <tr> + <td id="L2106" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2106"></td> + <td id="LC2106" class="blob-code blob-code-inner js-file-line"><span class="pl-s"> set table <span class="pl-pds">$</span></span>meta2;</td> + </tr> + <tr> + <td id="L2107" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2107"></td> + <td id="LC2107" class="blob-code blob-code-inner js-file-line"> plot <span class="pl-ii">"$meta1"</span> using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">1</span>):(<span class="pl-pds">$</span></span>2) smooth unwrap;</td> + </tr> + <tr> + <td id="L2108" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2108"></td> + <td id="LC2108" class="blob-code blob-code-inner js-file-line"> set table <span class="pl-ii">"\bodeplot@prefix\arabic{gnuplot@id}.table"</span>;</td> + </tr> + <tr> + <td id="L2109" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2109"></td> + <td id="LC2109" class="blob-code blob-code-inner js-file-line"> plot <span class="pl-ii">"$meta2"</span> using (<span class="pl-s"><span class="pl-pds">$</span><span class="pl-c1">2</span>*<span class="pl-c1">\ph</span>@scale):(<span class="pl-pds">$</span></span>1);</td> + </tr> + <tr> + <td id="L2110" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2110"></td> + <td id="LC2110" class="blob-code blob-code-inner js-file-line"> };</td> + </tr> + <tr> + <td id="L2111" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2111"></td> + <td id="LC2111" class="blob-code blob-code-inner js-file-line"> <span class="pl-k">\fi</span></td> + </tr> + <tr> + <td id="L2112" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2112"></td> + <td id="LC2112" class="blob-code blob-code-inner js-file-line">}</td> + </tr> + <tr> + <td id="L2113" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2113"></td> + <td id="LC2113" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macrocode}</span></td> + </tr> + <tr> + <td id="L2114" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2114"></td> + <td id="LC2114" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L2115" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2115"></td> + <td id="LC2115" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L2116" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2116"></td> + <td id="LC2116" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L2117" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2117"></td> + <td id="LC2117" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L2118" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2118"></td> + <td id="LC2118" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \end{macro}</span></td> + </tr> + <tr> + <td id="L2119" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2119"></td> + <td id="LC2119" class="blob-code blob-code-inner js-file-line"><span class="pl-c"><span class="pl-c">%</span> \Finale</span></td> + </tr> + <tr> + <td id="L2120" class="blob-num js-line-number js-code-nav-line-number js-blob-rnum" data-line-number="2120"></td> + <td id="LC2120" class="blob-code blob-code-inner js-file-line"><span class="pl-c1">\endinput</span></td> + </tr> + </table> +</div> + + <details class="details-reset details-overlay BlobToolbar position-absolute js-file-line-actions dropdown d-none" aria-hidden="true"> + <summary class="btn-octicon ml-0 px-2 p-0 color-bg-default border color-border-default rounded-2" aria-label="Inline file action toolbar"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal"> + <path d="M8 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zM1.5 9a1.5 1.5 0 100-3 1.5 1.5 0 000 3zm13 0a1.5 1.5 0 100-3 1.5 1.5 0 000 3z"></path> +</svg> + </summary> + <details-menu> + + <ul class="BlobToolbar-dropdown dropdown-menu dropdown-menu-se ml-2 mt-2" + style="width:185px" + > + <li> + <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-lines" style="cursor:pointer;" aria-label="Copy lines"> + Copy lines + </clipboard-copy> + </li> + <li> + <clipboard-copy role="menuitem" class="dropdown-item" id="js-copy-permalink" style="cursor:pointer;" aria-label="Copy permalink"> + Copy permalink + </clipboard-copy> + </li> + <li><a class="dropdown-item js-update-url-with-hash" id="js-view-git-blame" role="menuitem" href="/rlkamalapurkar/bodeplot/blame/3746d1613a5eea9f1e26d4cf5bcce954068463f3/bodeplot.dtx">View git blame</a></li> + <li><a class="dropdown-item" id="js-new-issue" role="menuitem" href="/rlkamalapurkar/bodeplot/issues/new">Reference in new issue</a></li> + </ul> + </details-menu> + </details> + + </div> + + </div> + + + + + <details class="details-reset details-overlay details-overlay-dark" id="jumpto-line-details-dialog"> + <summary data-hotkey="l" aria-label="Jump to line"></summary> + <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast linejump" aria-label="Jump to line"> + <!-- '"` --><!-- </textarea></xmp> --></option></form><form class="js-jump-to-line-form Box-body d-flex" data-turbo="false" action="" accept-charset="UTF-8" method="get"> + <input class="form-control flex-auto mr-3 linejump-input js-jump-to-line-field" type="text" placeholder="Jump to line…" aria-label="Jump to line" autofocus> + <button data-close-dialog="" type="submit" data-view-component="true" class="btn"> Go +</button> +</form> </details-dialog> + </details> + + + +</div> + + </div> + + + </div> + + </turbo-frame> + + + </main> + </div> + + </div> + + <footer class="footer width-full container-xl p-responsive"> + <h2 class='sr-only'>Footer</h2> + + <div class="position-relative d-flex flex-items-center pb-2 f6 color-fg-muted border-top color-border-muted flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap mt-6 pt-6"> + <div class="list-style-none d-flex flex-wrap col-0 col-lg-2 flex-justify-start flex-lg-justify-between mb-2 mb-lg-0"> + <div class="mt-2 mt-lg-0 d-flex flex-items-center"> + <a aria-label="Homepage" title="GitHub" class="footer-octicon mr-2" href="https://github.com"> + <svg aria-hidden="true" height="24" viewBox="0 0 16 16" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github"> + <path fill-rule="evenodd" d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z"></path> +</svg> +</a> <span> + © 2022 GitHub, Inc. + </span> + </div> + </div> + + <nav aria-label='footer' class="col-12 col-lg-8"> + <h3 class='sr-only' id='sr-footer-heading'>Footer navigation</h3> + <ul class="list-style-none d-flex flex-wrap col-12 flex-justify-center flex-lg-justify-between mb-2 mb-lg-0" aria-labelledby='sr-footer-heading'> + <li class="mr-3 mr-lg-0"><a href="https://docs.github.com/en/github/site-policy/github-terms-of-service" data-analytics-event="{"category":"Footer","action":"go to terms","label":"text:terms"}">Terms</a></li> + <li class="mr-3 mr-lg-0"><a href="https://docs.github.com/en/github/site-policy/github-privacy-statement" data-analytics-event="{"category":"Footer","action":"go to privacy","label":"text:privacy"}">Privacy</a></li> + <li class="mr-3 mr-lg-0"><a data-analytics-event="{"category":"Footer","action":"go to security","label":"text:security"}" href="https://github.com/security">Security</a></li> + <li class="mr-3 mr-lg-0"><a href="https://www.githubstatus.com/" data-analytics-event="{"category":"Footer","action":"go to status","label":"text:status"}">Status</a></li> + <li class="mr-3 mr-lg-0"><a data-ga-click="Footer, go to help, text:Docs" href="https://docs.github.com">Docs</a></li> + <li class="mr-3 mr-lg-0"><a href="https://support.github.com?tags=dotcom-footer" data-analytics-event="{"category":"Footer","action":"go to contact","label":"text:contact"}">Contact GitHub</a></li> + <li class="mr-3 mr-lg-0"><a href="https://github.com/pricing" data-analytics-event="{"category":"Footer","action":"go to Pricing","label":"text:Pricing"}">Pricing</a></li> + <li class="mr-3 mr-lg-0"><a href="https://docs.github.com" data-analytics-event="{"category":"Footer","action":"go to api","label":"text:api"}">API</a></li> + <li class="mr-3 mr-lg-0"><a href="https://services.github.com" data-analytics-event="{"category":"Footer","action":"go to training","label":"text:training"}">Training</a></li> + <li class="mr-3 mr-lg-0"><a href="https://github.blog" data-analytics-event="{"category":"Footer","action":"go to blog","label":"text:blog"}">Blog</a></li> + <li><a data-ga-click="Footer, go to about, text:about" href="https://github.com/about">About</a></li> + </ul> + </nav> + </div> + + <div class="d-flex flex-justify-center pb-6"> + <span class="f6 color-fg-muted"></span> + </div> +</footer> + + + + + <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> + <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path> +</svg> + <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> + <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path> +</svg> + </button> + You can’t perform that action at this time. + </div> + + <div class="js-stale-session-flash flash flash-warn flash-banner" hidden + > + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> + <path fill-rule="evenodd" d="M8.22 1.754a.25.25 0 00-.44 0L1.698 13.132a.25.25 0 00.22.368h12.164a.25.25 0 00.22-.368L8.22 1.754zm-1.763-.707c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0114.082 15H1.918a1.75 1.75 0 01-1.543-2.575L6.457 1.047zM9 11a1 1 0 11-2 0 1 1 0 012 0zm-.25-5.25a.75.75 0 00-1.5 0v2.5a.75.75 0 001.5 0v-2.5z"></path> +</svg> + <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a href="">Reload</a> to refresh your session.</span> + <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a href="">Reload</a> to refresh your session.</span> + </div> + <template id="site-details-dialog"> + <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open> + <summary role="button" aria-label="Close dialog"></summary> + <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal"> + <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> + <path fill-rule="evenodd" d="M3.72 3.72a.75.75 0 011.06 0L8 6.94l3.22-3.22a.75.75 0 111.06 1.06L9.06 8l3.22 3.22a.75.75 0 11-1.06 1.06L8 9.06l-3.22 3.22a.75.75 0 01-1.06-1.06L6.94 8 3.72 4.78a.75.75 0 010-1.06z"></path> +</svg> + </button> + <div class="octocat-spinner my-6 js-details-dialog-spinner"></div> + </details-dialog> + </details> +</template> + + <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;" tabindex="0"> + <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;"> + </div> +</div> + + <template id="snippet-clipboard-copy-button"> + <div class="zeroclipboard-container position-absolute right-0 top-0"> + <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0 tooltipped-no-delay" data-copy-feedback="Copied!" data-tooltip-direction="w"> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2"> + <path fill-rule="evenodd" d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 010 1.5h-1.5a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-1.5a.75.75 0 011.5 0v1.5A1.75 1.75 0 019.25 16h-7.5A1.75 1.75 0 010 14.25v-7.5z"></path><path fill-rule="evenodd" d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0114.25 11h-7.5A1.75 1.75 0 015 9.25v-7.5zm1.75-.25a.25.25 0 00-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 00.25-.25v-7.5a.25.25 0 00-.25-.25h-7.5z"></path> +</svg> + <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2"> + <path fill-rule="evenodd" d="M13.78 4.22a.75.75 0 010 1.06l-7.25 7.25a.75.75 0 01-1.06 0L2.22 9.28a.75.75 0 011.06-1.06L6 10.94l6.72-6.72a.75.75 0 011.06 0z"></path> +</svg> + </clipboard-copy> + </div> +</template> + + + <style> + .user-mention[href$="/rlkamalapurkar"] { + color: var(--color-user-mention-fg); + background-color: var(--color-user-mention-bg); + border-radius: 2px; + margin-left: -2px; + margin-right: -2px; + padding: 0 2px; } - \fi - \ifnum\pdf@strcmp{\feature}{d}=0 - \xdef\loop@delay{\values} - \fi - } - \xdef#2{((atan2((\num@im),(\num@real))-atan2((\den@im),% - (\den@real))-\loop@delay*t)*(\ph@scale))} - \xdef#1{(20*log10(sqrt((\n@pow{\num@real}{2})+(\n@pow{\num@im}{2})))-% - 20*log10(sqrt((\n@pow{\den@real}{2})+(\n@pow{\den@im}{2}))))} -} -% \end{macrocode} -%\end{macro} -% \begin{macro}{\parse@opt} -% Parses options supplied to the main Bode macros. A |for| loop over tuples of the form |\obj/\typ/\opt| with a long list of nested if-else statements does the job. If the input |\obj| is |plot|, |axes|, |group|, |approx|, or |tikz| the corresponding |\opt| are passed, unexpanded, to the |\addplot| macro, the |\nextgroupplot| macro, the |groupplot| environment, the |\build@ZPK@plot| macro, and the |tikzpicture| environment, respectively. If |\obj| is |commands|, the corresponding |\opt| are stored, unexpanded, in the macros |\optph@commands| and |\optmag@commands|, to be executed in appropriate |axis| environments. \changes{v1.0.3}{2021/11/03}{Added Tikz option} \changes{v1.0.5}{2021/11/15}{Fixed a bug} -% \begin{macrocode} -\newcommand{\parse@opt}[1]{ - \gdef\optmag@axes{} - \gdef\optph@axes{} - \gdef\optph@plot{} - \gdef\optmag@plot{} - \gdef\opt@group{} - \gdef\opt@approx{} - \gdef\optph@commands{} - \gdef\optmag@commands{} - \gdef\opt@tikz{} - \foreach \obj/\typ/\opt in {#1} { - \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{plot}=0 - \ifnum\pdf@strcmp{\unexpanded\expandafter{\typ}}{mag}=0 - \xdef\optmag@plot{\unexpanded\expandafter{\opt}} - \else - \ifnum\pdf@strcmp{\unexpanded\expandafter{\typ}}{ph}=0 - \xdef\optph@plot{\unexpanded\expandafter{\opt}} - \else - \xdef\optmag@plot{\unexpanded\expandafter{\opt}} - \xdef\optph@plot{\unexpanded\expandafter{\opt}} - \fi - \fi - \else - \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{axes}=0 - \ifnum\pdf@strcmp{\unexpanded\expandafter{\typ}}{mag}=0 - \xdef\optmag@axes{\unexpanded\expandafter{\opt}} - \else - \ifnum\pdf@strcmp{\unexpanded\expandafter{\typ}}{ph}=0 - \xdef\optph@axes{\unexpanded\expandafter{\opt}} - \else - \xdef\optmag@axes{\unexpanded\expandafter{\opt}} - \xdef\optph@axes{\unexpanded\expandafter{\opt}} - \fi - \fi - \else - \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{group}=0 - \xdef\opt@group{\unexpanded\expandafter{\opt}} - \else - \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{approx}=0 - \xdef\opt@approx{\unexpanded\expandafter{\opt}} - \else - \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{commands}=0 - \ifnum\pdf@strcmp{\unexpanded\expandafter{\typ}}{ph}=0 - \xdef\optph@commands{\unexpanded\expandafter{\opt}} - \else - \xdef\optmag@commands{\unexpanded\expandafter{\opt}} - \fi - \else - \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{tikz}=0 - \xdef\opt@tikz{\unexpanded\expandafter{\opt}} - \else - \xdef\optmag@plot{\unexpanded\expandafter{\optmag@plot}, - \unexpanded\expandafter{\obj}} - \xdef\optph@plot{\unexpanded\expandafter{\optph@plot}, - \unexpanded\expandafter{\obj}} - \fi - \fi - \fi - \fi - \fi - \fi - } -} -% \end{macrocode} -%\end{macro} -% \begin{macro}{\parse@env@opt} -% Parses options supplied to the Bode, Nyquist, and Nichols environments. A |for| loop over tuples of the form |\obj/\opt|, processed using nested if-else statements does the job. The input |\obj| should either be |axes| or |tikz|, and the corresponding |\opt| are passed, unexpanded, to the |axis| environment and the |tikzpicture| environment, respectively. \changes{v1.0.3}{2021/11/03}{Added tikz option to environments} -% \begin{macrocode} -\newcommand{\parse@env@opt}[1]{ - \gdef\opt@axes{} - \gdef\opt@tikz{} - \foreach \obj/\opt in {#1} { - \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{axes}=0 - \xdef\opt@axes{\unexpanded\expandafter{\opt}} - \else - \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{tikz}=0 - \xdef\opt@tikz{\unexpanded\expandafter{\opt}} - \else - \xdef\opt@axes{\unexpanded\expandafter{\opt@axes}, - \unexpanded\expandafter{\obj}} - \fi - \fi - } -} -% \end{macrocode} -% \end{macro} -% \subsection{Nyquist plots} -% \subsubsection{User macros} -% \begin{macro}{\NyquistZPK} -% Converts magnitude and phase parametric functions built using |\build@ZPK@plot| into real part and imaginary part parametric functions. A plot of these is the Nyquist plot. The parametric functions are then plotted in a |tikzpicture| environment using the |\addplot| macro. Unless the package is loaded with the option |pgf|, the parametric functions are evaluated using |gnuplot|. A large number of samples is typically needed to get a smooth plot because frequencies near 0 result in plot points that are very close to each other. Linear frequency sampling is unnecessarily fine near zero and very coarse for large $\omega$. Logarithmic sampling makes it worse, perhaps inverse logarithmic sampling will help, pull requests to fix that are welcome! \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\newcommand{\NyquistZPK}[4][]{ - \parse@N@opt{#1} - \gdef\func@mag{} - \gdef\func@ph{} - \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]} - \temp@cmd - \build@ZPK@plot{\func@mag}{\func@ph}{}{#2} - \edef\temp@cmd{\noexpand\begin{axis}[ - bode@style, - domain=#3*\freq@scale:#4*\freq@scale, - height=5cm, - xlabel={$\Re$}, - ylabel={$\Im$}, - samples=500, - \unexpanded\expandafter{\opt@axes} - ]} - \temp@cmd - \addplot [only marks,mark=+,thick,red] (-1 , 0); - \edef\temp@cmd{\noexpand\addplot [variable=t, thick, \unexpanded\expandafter{\opt@plot}]} - \if@pgfarg - \temp@cmd ( {\n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale))}, - {\n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale))} ); - \opt@commands - \else - \stepcounter{gnuplot@id} - \temp@cmd gnuplot [parametric, gnuplot@prefix] { - \n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale)), - \n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale)) - }; - \opt@commands - \fi - \end{axis} - \end{tikzpicture} -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\NyquistTF} -% Implementation of this macro is very similar to the |\NyquistZPK| macro above. The only difference is a slightly different parsing of the mandatory arguments via |\build@TF@plot|. \changes{v1.0.3}{2021/11/03}{Added commands and tikz options}\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\newcommand{\NyquistTF}[4][]{ - \parse@N@opt{#1} - \gdef\func@mag{} - \gdef\func@ph{} - \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]} - \temp@cmd - \build@TF@plot{\func@mag}{\func@ph}{#2} - \edef\temp@cmd{\noexpand\begin{axis}[ - bode@style, - domain=#3*\freq@scale:#4*\freq@scale, - height=5cm, - xlabel={$\Re$}, - ylabel={$\Im$}, - samples=500, - \unexpanded\expandafter{\opt@axes} - ]} - \temp@cmd - \addplot [only marks, mark=+, thick, red] (-1 , 0); - \edef\temp@cmd{\noexpand\addplot [variable=t, thick, \unexpanded\expandafter{\opt@plot}]} - \if@pgfarg - \temp@cmd ( {\n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale))}, - {\n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale))} ); - \opt@commands - \else - \stepcounter{gnuplot@id} - \temp@cmd gnuplot [parametric, gnuplot@prefix] { - \n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale)), - \n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale)) - }; - \opt@commands - \fi - \end{axis} - \end{tikzpicture} -} -% \end{macrocode} -% \end{macro} -% \begin{macro}{\addNyquistZPKPlot} -% Adds Nyquist plot of a transfer function in ZPK form. This macro is designed to pass two parametric function to an |\addplot| macro. The parametric functions for phase (|\func@ph|) and magnitude (|\func@mag|) are built using the |\build@ZPK@plot| macro, converted to real and imaginary parts and passed to |\addplot| commands.\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\newcommand{\addNyquistZPKPlot}[2][]{ - \gdef\func@mag{} - \gdef\func@ph{} - \build@ZPK@plot{\func@mag}{\func@ph}{}{#2} - \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}} - \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil} - \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil} - \if@pgfarg - \addplot [domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1] ( {\n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale))}, - {\n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale))} ); - \else - \stepcounter{gnuplot@id} - \addplot [domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1] gnuplot [parametric, gnuplot@prefix] { - \n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale)), - \n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale)) - }; - \fi -} -% \end{macrocode} -%\end{macro} -% \begin{macro}{\addNyquistTFPlot} -% Adds Nyquist plot of a transfer function in TF form. This macro is designed to pass two parametric function to an |\addplot| macro. The parametric functions for phase (|\func@ph|) and magnitude (|\func@mag|) are built using the |\build@TF@plot| macro, converted to real and imaginary parts and passed to |\addplot| commands.\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\newcommand{\addNyquistTFPlot}[2][]{ - \gdef\func@mag{} - \gdef\func@ph{} - \build@TF@plot{\func@mag}{\func@ph}{#2} - \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}} - \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil} - \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil} - \if@pgfarg - \addplot [domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1] ( {\n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale))}, - {\n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale))} ); - \else - \stepcounter{gnuplot@id} - \addplot [domain=\domain@start*\freq@scale:\domain@end*\freq@scale, variable=t, #1] gnuplot [parametric, gnuplot@prefix]{ - \n@pow{10}{((\func@mag)/20)}*cos((\func@ph)/(\ph@scale)), - \n@pow{10}{((\func@mag)/20)}*sin((\func@ph)/(\ph@scale)) - }; - \fi -} -% \end{macrocode} -%\end{macro} -%\begin{macro}{NyquistPlot} -% An environment to host |\addNyquist...| macros that pass parametric functions to |\addplot|. Uses the defaults specified in |bode@style| to create a shortcut that includes the |tikzpicture| and |axis| environments. \changes{v1.0.3}{2021/11/03}{Added tikz option to environments} -% \begin{macrocode} -\newenvironment{NyquistPlot}[3][]{ - \parse@env@opt{#1} - \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}] - \noexpand\begin{axis}[ - bode@style, - height=5cm, - domain=#2:#3, - xlabel={$\Re$}, - ylabel={$\Im$}, - \unexpanded\expandafter{\opt@axes} - ] - } - \temp@cmd - \addplot [only marks,mark=+,thick,red] (-1 , 0); -}{ - \end{axis} - \end{tikzpicture} -} -% \end{macrocode} -%\end{macro} -% \subsubsection{Internal commands\label{sec:NInternal}} -% \begin{macro}{\parse@N@opt} -% Parses options supplied to the main Nyquist and Nichols macros. A |for| loop over tuples of the form |\obj/\opt|, processed using nested if-else statements does the job. If the input |\obj| is |plot|, |axes|, or |tikz| then the corresponding |\opt| are passed, unexpanded, to the |\addplot| macro, the |axis| environment, and the |tikzpicture| environment, respectively. \changes{v1.0.3}{2021/11/03}{Added commands and tikz options} -% \begin{macrocode} -\newcommand{\parse@N@opt}[1]{ - \gdef\opt@axes{} - \gdef\opt@plot{} - \gdef\opt@commands{} - \gdef\opt@tikz{} - \foreach \obj/\opt in {#1} { - \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{axes}=0 - \xdef\opt@axes{\unexpanded\expandafter{\opt}} - \else - \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{plot}=0 - \xdef\opt@plot{\unexpanded\expandafter{\opt}} - \else - \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{commands}=0 - \xdef\opt@commands{\unexpanded\expandafter{\opt}} - \else - \ifnum\pdf@strcmp{\unexpanded\expandafter{\obj}}{tikz}=0 - \xdef\opt@tikz{\unexpanded\expandafter{\opt}} - \else - \xdef\opt@plot{\unexpanded\expandafter{\opt@plot}, - \unexpanded\expandafter{\obj}} - \fi - \fi - \fi - \fi - } -} -% \end{macrocode} -% \end{macro} -% \subsection{Nichols charts} -% \begin{macro}{\NicholsZPK} -% \changes{v1.0.3}{2021/11/03}{Added commands and tikz options} -% \begin{macro}{\NicholsTF} -% \changes{v1.0.3}{2021/11/03}{Added commands and tikz options} -% \begin{macro}{NicholsChart} -% \changes{v1.0.3}{2021/11/03}{Added tikz option to environments} -% \begin{macro}{\addNicholsZPKChart} -% \begin{macro}{\addNicholsTFChart} -% These macros and the |NicholsChart| environment generate Nichols charts, and they are implemented similar to their Nyquist counterparts.\changes{v1.1.1}{2022/07/31}{Enabled `Hz' and `rad' units for frequency and phase, respectively} -% \begin{macrocode} -\newcommand{\NicholsZPK}[4][]{ - \parse@N@opt{#1} - \gdef\func@mag{} - \gdef\func@ph{} - \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]} - \temp@cmd - \build@ZPK@plot{\func@mag}{\func@ph}{}{#2} - \edef\temp@cmd{\noexpand\begin{axis}[ - ph@x@label, - bode@style, - domain=#3*\freq@scale:#4*\freq@scale, - height=5cm, - ylabel={Gain (dB)}, - samples=500, - \unexpanded\expandafter{\opt@axes} - ]} - \temp@cmd - \edef\temp@cmd{\noexpand\addplot [variable=t,thick,\opt@plot]} - \if@pgfarg - \temp@cmd ( {\func@ph} , {\func@mag} ); - \opt@commands - \else - \stepcounter{gnuplot@id} - \temp@cmd gnuplot [raw gnuplot, gnuplot@prefix] - { set table $meta; - set logscale x 10; - set dummy t; - set samples \pgfkeysvalueof{/pgfplots/samples}; - set trange [#3*\freq@scale:#4*\freq@scale]; - plot '+' using (\func@mag) : ((\func@ph)/(\ph@scale)); - unset logscale x; - set table "\bodeplot@prefix\arabic{gnuplot@id}.table"; - plot "$meta" using ($2*\ph@scale):($1); - }; - \opt@commands - \fi - \end{axis} - \end{tikzpicture} -} -\newcommand{\NicholsTF}[4][]{ - \parse@N@opt{#1} - \gdef\func@mag{} - \gdef\func@ph{} - \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}]} - \temp@cmd - \build@TF@plot{\func@mag}{\func@ph}{#2} - \edef\temp@cmd{\noexpand\begin{axis}[ - ph@x@label, - bode@style, - domain=#3*\freq@scale:#4*\freq@scale, - height=5cm, - ylabel={Gain (dB)}, - samples=500, - \unexpanded\expandafter{\opt@axes} - ]} - \temp@cmd - \edef\temp@cmd{\noexpand\addplot [variable=t,thick, \opt@plot]} - \if@pgfarg - \temp@cmd ( {\n@mod{\func@ph}{2*pi*\ph@scale}} , {\func@mag} ); - \opt@commands - \else - \stepcounter{gnuplot@id} - \temp@cmd gnuplot [raw gnuplot, gnuplot@prefix] - { set table $meta1; - set logscale x 10; - set dummy t; - set samples \pgfkeysvalueof{/pgfplots/samples}; - set trange [#3*\freq@scale:#4*\freq@scale]; - plot '+' using (\func@mag) : ((\func@ph)/(\ph@scale)); - unset logscale x; - set table $meta2; - plot "$meta1" using ($1):($2) smooth unwrap; - set table "\bodeplot@prefix\arabic{gnuplot@id}.table"; - plot "$meta2" using ($2*\ph@scale):($1); - }; - \opt@commands - \fi - \end{axis} - \end{tikzpicture} -} -\newenvironment{NicholsChart}[3][]{ - \parse@env@opt{#1} - \edef\temp@cmd{\noexpand\begin{tikzpicture} [\unexpanded\expandafter{\opt@tikz}] - \noexpand\begin{axis}[ - ph@x@label, - bode@style, - domain=#2:#3, - height=5cm, - ylabel={Gain (dB)}, - \unexpanded\expandafter{\opt@axes} - ] - } - \temp@cmd -}{ - \end{axis} - \end{tikzpicture} -} -\newcommand{\addNicholsZPKChart}[2][]{ - \gdef\func@mag{} - \gdef\func@ph{} - \build@ZPK@plot{\func@mag}{\func@ph}{}{#2} - \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}} - \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil} - \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil} - \if@pgfarg - \addplot [variable=t, domain=\domain@start*\freq@scale:\domain@end*\freq@scale, #1] ( {\func@ph} , {\func@mag} ); - \else - \stepcounter{gnuplot@id} - \addplot [#1] gnuplot [raw gnuplot, gnuplot@prefix] - { set table $meta; - set logscale x 10; - set dummy t; - set samples \pgfkeysvalueof{/pgfplots/samples}; - set trange [\domain@start*\freq@scale:\domain@end*\freq@scale]; - plot '+' using (\func@mag) : ((\func@ph)/(\ph@scale)); - unset logscale x; - set table "\bodeplot@prefix\arabic{gnuplot@id}.table"; - plot "$meta" using ($2*\ph@scale):($1); - }; - \fi -} -\newcommand{\addNicholsTFChart}[2][]{ - \gdef\func@mag{} - \gdef\func@ph{} - \build@TF@plot{\func@mag}{\func@ph}{#2} - \edef\supplied@domain{\pgfkeysvalueof{/pgfplots/domain}} - \edef\domain@start{\expandafter\get@interval@start\supplied@domain\@nil} - \edef\domain@end{\expandafter\get@interval@end\supplied@domain\@nil} - \if@pgfarg - \addplot [variable=t, domain=\domain@start*\freq@scale:\domain@end*\freq@scale, #1] ( {\n@mod{\func@ph}{2*pi*\ph@scale}} , {\func@mag} ); - \else - \stepcounter{gnuplot@id} - \addplot [#1] gnuplot [raw gnuplot, gnuplot@prefix] - { set table $meta1; - set logscale x 10; - set dummy t; - set samples \pgfkeysvalueof{/pgfplots/samples}; - set trange [\domain@start*\freq@scale:\domain@end*\freq@scale]; - plot '+' using (\func@mag) : ((\func@ph)/(\ph@scale)); - unset logscale x; - set table $meta2; - plot "$meta1" using ($1):($2) smooth unwrap; - set table "\bodeplot@prefix\arabic{gnuplot@id}.table"; - plot "$meta2" using ($2*\ph@scale):($1); - }; - \fi -} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \Finale -\endinput
\ No newline at end of file + </style> + + + </body> +</html> + |