就个人而言,我重视文档的美观性和一致性,因此我尽可能使用 Latex。不过,如果我赶时间,我会使用 Inkscape。
我发现 pgfplots 包(建立在 tikz 之上)大大减少了编写绘图所需的时间,特别是一旦你掌握了它。作为一个简单的示例,以下过滤器响应:

使用以下 Latex 代码生成:
\documentclass{standalone}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
height=5cm, width=7cm, xlabel={$f$}, ylabel={Filter A},
xmin=0, xmax=300, ymin=0, ymax=1.6, no markers,
xtick={100,175,250}, ytick={0.25,0.5,0.75,1},
axis lines=middle
]
\addplot coordinates {(0,1) (100,1) (250,0)};
\addplot[black,dotted] coordinates {(0,0.5) (175,0.5) (175,0)};
\end{axis}
\end{tikzpicture}
\end{document}
不包括样板(可以在绘图之间重用),这只是两行“真实”代码(\addplot
行)。好处是通常的乳胶质量,以及与文档其余部分的字体/样式/大小一致性。
作为另一个例子,我尝试了问题中最后一个情节的(简化)版本:

这需要更多的代码:
\documentclass{standalone}
\usepackage{pgfplots}
\usepgfplotslibrary{fillbetween}
\begin{document}
\begin{tikzpicture}
\begin{axis} [
height=5cm,width=9cm,xlabel={$f$},axis lines=middle,
xmin=-120,xmax=200,ymin=0,ymax=1.8,no markers,
xtick={80,160},xticklabels={$\frac{f_s}{2}$,$f_s=\frac{1}{T}$},
ytick={0},yticklabels={},ylabel={$S_s(f)$}
]
\addplot[black] coordinates {(-100,0) (-20,1) (0,0)};
\addplot[black] coordinates {(0,0) (20,1) (100,0)};
\addplot[black,name path=A] coordinates {(60,0) (140,1) (160,0)};
\addplot[black,dashed,name path=B] coordinates {(80,0) (80,1.5)};
\addplot[blue] fill between[of=A and B,soft clip={domain=60:80}];
\end{axis}
\end{tikzpicture}
\end{document}
生成这些图确实需要时间。在处理最琐碎的情节之外的任何事情时,我经常需要参考手册和 tex.stackexchange.com。我认为上面的例子表明 pgfplots 包消除了一些痛苦;一旦你练习了最常用的命令,创建漂亮的绘图应该不会花费太长时间。
最后一点:虽然我(还)没有一个程序来自动生成频谱图,但它应该不会太难做。我确实有一个脚本可以从 Matlab/Octave 生成 pgfplots 脚本,你可以在这里看到。该脚本采用两个或多个 Matlab 数组和一个绘图描述,写入一个 Latex 文件,并在其上运行 pdflatex。虽然费力,但编码并不是特别困难。应该可以对其进行修改以获取频谱描述(可能是滤波器设计命令的edges
格式amplitudes
)并自动生成图。