信号与系统习题答案工程:结构化、机器校验与可检索PDF
简介《信号与系统》课后答案PDF面向电子、通信等专业学习信号与系统分析的学生尤其适合对照南京邮电大学课程习题进行复习与自测。内容围绕信号的基本概念展开涵盖连续与离散信号的周期性判断、基本周期求解、周期信号合成的证明、连续信号均匀抽样及离散序列波形分析并对能量信号、功率信号与非能非功信号的判别给出步骤化解答。压缩包共1个PDF文件大小约1.12MB便于在电脑或平板上直接查阅。已有3934人学习适合在课后作业、章节复习和考前查漏补缺时使用可帮助读者理解周期性与抽样等核心题型的推导过程核对答案并梳理第一章知识脉络。1. 一份信号与系统课后答案 PDF真正稀缺的是可复现的推导链某实验室的群里每到期末前两周就会重复出现同一句话谁有《信号与系统》课后答案的 PDF。拿到的人往往两小时后就放弃了——扫描件里公式糊成一团第 3 章的拉普拉斯反变换只写结果不写留数怎么凑想搜「部分分式」却发现整本都是图片一个字都搜不出来。我在带新人做习题归档时踩过这个坑答案本身不稀缺稀缺的是从题干走到结果之间那条别人能照着复现的推导链以及一份公式可复制、书签可跳转、结论能被机器校验、错了还能改的 PDF。这一章先把目标说清楚我们要做的不是到处找一份现成答案而是把自己手算过的信号与系统习题做成结构化、可检索、可校验、可增量维护的文档最后编译成 PDF。它适合两类人正在备考、需要一份自己信得过的错题与解法合集的学生以及要给新人做信号处理入门的工程师——后者更需要一套能反复讲解、能随时改错的内部讲义。2. 把解题过程变成流水线从题干结构化到机器校验一份靠手写拍照拼起来的答案最大的问题不是字丑而是不可 diff、不可检索、不可校验。改一个符号要重新拍照贴图错了也看不出来。所以第一件事不是排版是把每道题先写成一条带字段的记录让答案从「一张图」变成「一行可比较的数据」。2.1 每道题先写成一条带字段的记录我一般用 Markdown 的列表加 YAML 键值对来存题一个文件一章文件名带章节号方便后面拼目录。字段不在多关键是能覆盖「给定什么、求什么、走哪条路、结果是什么、怎么证明这个结果没错」这五件事。下面是一条完整记录的样板可以直接拿去改成自己的格式- id: SS-03-014 chapter: 3 topic: 拉普拉斯反变换 given: F(s) 1 / (s*(s2)), 收敛域 Re(s) 0 ask: 求 f(t), t 0 method: 部分分式展开 常用变换对 steps: - 1/(s*(s2)) A/s B/(s2) - A 0.5, B -0.5 - f(t) 0.5*u(t) - 0.5*e^(-2t)*u(t) result: f(t) 0.5*(1 - e^(-2t))*u(t) check: - 初值: f(0) 0 与 sF(s)|s-inf 0 一致 - 终值: f(inf) 0.5 与 sF(s)|s-0 0.5 一致 note: 因果信号, 收敛域在最右极点右侧id用「章节-序号」三段式后面写勘误表和索引全指望它定位given必须把收敛域一并抄进去信号与系统里没写收敛域的变换题答案基本等于没做method是给未来的自己看的两周后你只会记得「这题好像用过分式」不会记得具体怎么拆steps只写关键中间量不要抄全过程抄全过程会让文件膨胀到没法看check这一栏是整条记录的价值所在写不出校验方式的题说明你其实没把握。note记因果性、稳定性这类附加条件考试里扣分最多的地方就在这里。把这一层做好后面所有事都变简单答案可以 grep可以批量跑校验可以一键渲染成 PDF改错只需要改一行文本。2.2 用 SymPy 把可机算的部分算一遍不是所有题都值得开机算但凡是变换、卷积、部分分式、留数这类有确定算法的用 SymPy 复核一遍成本极低收益极高。下面这段脚本覆盖了连续卷积、拉普拉斯正反变换、部分分式和离散求和四个高频动作import sympy as sp t, tau, s, n, z sp.symbols(t tau s n z, realTrue) f sp.exp(-2 * t) * sp.Heaviside(t) h sp.Heaviside(t) # 1) 连续卷积: y(t) f(t) * h(t) y sp.integrate(f.subs(t, tau) * h.subs(t, t - tau), (tau, -sp.oo, sp.oo)) print(conv:, sp.simplify(y)) # 2) 拉普拉斯正变换, nocondsTrue 表示丢掉收敛域条件 F sp.laplace_transform(f, t, s, nocondsTrue) print(L{f}:, sp.simplify(F)) # 3) 部分分式展开, 再反变换 F2 1 / (s * (s 2)) print(apart:, sp.apart(F2, s)) print(inverse:, sp.inverse_laplace_transform(F2, s, t)) # 4) 离散求和验证 z 变换: x[n] a^n u[n] - z/(z-a) a sp.Symbol(a, positiveTrue) X sp.summation(a**n * z**(-n), (n, 0, sp.oo)) print(z-transform:, sp.simplify(X))sp.integrate做卷积时把被积变量换成tau、把h里的自变量换成t - tau这一步对应手算里的「翻转平移」写成别的形式容易算出错误结果。nocondsTrue很关键默认它会返回一堆Abs(s) 0之类的条件打印出来没法看但代价是收敛域信息被丢掉了所以收敛域必须由人在given字段里写清楚机器不管这件事。sp.apart默认按s展开遇到重极点要显式加fullTrue或者手动指定s的幂次。第四段求和能算出结果但 SymPy 对收敛域的处理很弱常常给出一个不带条件的闭式解这时候要自己补上|z| |a|否则因果性和稳定性判断会全错。跑完这批脚本我一般会把输出直接粘到check字段里作为「机算已复核」的凭据。半年后回头看一眼就知道这条结果是被验证过的还是当时拍脑袋写的。2.3 手算和机算对不上的三处高发区机算结果和手算结果不一致九成不是谁算错了而是三处约定没对齐。第一处是收敛域SymPy 默认返回值手算默认因果同一个1/(s2)在Re(s) -2和Re(s) -2下对应两个完全不同的时域信号只对数值不对收敛域等于没对。第二处是离散下标起点教材里u[n]从n0开始summation如果不写(n, 0, oo)而写了(n, -oo, oo)双边 z 变换的结果会多出n0的部分和答案差一个常数因子。第三处是冲激函数在t0的取值Heaviside(0)在 SymPy 里默认是1/2而大多数教材按u(0)1处理涉及初值定理的题会因此差一个0.5。我的做法是固定一张对照表把这三处的约定写在文件头部每次校验前先看一眼项目手算惯例SymPy 默认处理方式收敛域必须显式写出有noconds时丢弃在given字段手写离散起点n 0起求和上下限由你给显式写(n, 0, oo)u(0)常取 1Heaviside(0) 1/2初值题单独核差异本身不可怕可怕的是不知道差异在哪。把这三条写进文件头团队里两个人算同一道题结果才有可能对得上。3. 排版生成 PDFLaTeX 加 Pandoc 的公式工程到了这一步源文件已经是干净的文本剩下的问题是怎么把它变成一份翻起来舒服、公式不糊、还能被搜索的 PDF。这里最容易犯的错是走回截图的老路——把公式截成图片贴进 Word再导出 PDF结果是文件体积翻十倍、文字搜不到、放大就模糊。公式必须留在 LaTeX 源里这是后面一切检索能力的前提。3.1 公式走 LaTeX 源不只是为了好看公式用$...$和$$...$$写在 Markdown 里有几个立刻能感知的好处改一个下标只改一个字符同一道题的行内符号和独立公式共用一套宏不会出现「前面写F(s)后面写Fs」的全半角混乱编译出来的 PDF 里公式是可选中文本复制到聊天窗口不会变成一张图。更重要的是可检索——pdfgrep 只能搜到文本层图片里的公式对它来说是不存在的这一点在下一章会展开。代价是你要忍受编译报错。LaTeX 报错信息一向不友好但排查路径很固定先看行号再看是不是少了大括号最后看是不是用了没引入的宏包。中文文档还要多一步确认ctex宏包或ctexart文档类被正确加载否则中文会整段消失而且不报错。3.2 一条 pandoc 命令编译出带书签的中文 PDF我常用的是 Pandoc 加 XeLaTeX 的组合中文用ctexart文档类字体交给系统里已有的思源宋体或 Noto Serif CJK。命令本身不长参数值得逐个说清楚pandoc ch1.md ch2.md ch3.md \ -o signals-answers.pdf \ --pdf-enginexelatex \ --toc --toc-depth3 \ --number-sections \ -V documentclassctexart \ -V CJKmainfontNoto Serif CJK SC \ -V geometry:margin2.2cm \ -V fontsize11pt \ --metadata title信号与系统习题解答自建版 \ -H header.tex把多个章节文件按顺序排在一起输出就是一本完整的册子--pdf-enginexelatex是中文排版的必须项换pdflatex会遇到字体编码问题--toc --toc-depth3生成三级目录对应到「章 — 题型 — 单题」正好--number-sections让章节自动编号省得手动维护-V documentclassctexart是中文支持的核心它同时解决了字体和断行geometry:margin我一般给 2.2cm太窄公式会溢出边界太宽一页放不下两道题-H header.tex引入一个自定义头文件用来加amsmath、amssymb和页眉页脚。header.tex里我固定放这么几行主要是为了数学符号和中文字体回退\usepackage{amsmath,amssymb} \usepackage{booktabs} \usepackage[hidelinks]{hyperref} \hypersetup{ bookmarksnumberedtrue, bookmarksopentrue, pdftitle{信号与系统习题解答自建版} }hyperref是书签的来源bookmarksnumberedtrue让书签带上章节号bookmarksopentrue让 PDF 打开时目录是展开的翻到第 3 章不用点五次。hidelinks去掉那圈难看的红框打印出来干净很多。booktabs是给三线表用的后面做索引表会用到。提示字体名必须和系统里fc-list看到的完全一致多一个空格都会导致编译失败报错信息还不会直说字体找不到。3.3 目录、编号与交叉引用让第 3 章第 14 题能被直接跳到PDF 好不好用差别常常不在内容而在导航。我要求每一章的第一行就是章标题每一道题的一级标题带上题号这样 Pandoc 生成的目录和书签才能对应到单题粒度。如果一道题只用一个###标题就写成### 3.14 部分分式展开求反变换数字和id字段保持一致。交叉引用靠id和锚点在 Markdown 里写成[见 3.14](#ss-03-014)配合 Pandoc 的自动标识符编译后点一下就跳过去。这一条在写「本题用到 2.7 的卷积结论」时特别有用读者不用来回翻页。编译完成后一定要验一遍书签结构不要只看正文# 校验 PDF 结构完整性 qpdf --check signals-answers.pdf # 查看书签树, 确认章节层级正确 mutool show signals-answers.pdf outlineqpdf --check会告诉你文件有没有结构性损坏、有没有非法对象邮件发给别人前跑一次能省掉「打不开」的尴尬。mutool show ... outline打印的是书签树层级错乱一眼就能看出来——比如所有题都挂在同一级说明标题级别用错了回去把###改成##或者反过来。4. 检索与索引让这份 PDF 变成能查的资料一份几百页的答案册最大的使用场景不是从头读而是「我记得见过一道这种题在哪一页」。这一章解决的就是定位问题先建表再建索引最后给答案留一个能改错的入口。4.1 三列索引表题型、方法、页码索引表放在正文最前面三列就够题型、首选方法、页码。列多了没人看列少了不好用。我一般按「变换域」和「时域」两张大表分开每张表二十行左右超出的部分归到「综合题」。题型首选方法校验点页码连续卷积图解法 / 积分法支撑区间端点12拉氏反变换部分分式 留数初值终值定理27z 反变换幂级数 / 部分分式收敛域边界41系统稳定性极点位置判定收敛域含单位圆55表格里的「校验点」这一列是给学生看的复习时先想校验点再想方法比死记步骤有用。页码这一列要手工维护改版后容易错位所以我在每章末尾留一个!-- page: xx --注释编译后统一回填避免逐页去找。4.2 用 pdfgrep 和书签把 PDF 当数据库查公式留在文本层的红利在这里兑现。想找所有讲「部分分式」的题一条命令就够# 按关键词搜, 显示行号和所在页 pdfgrep -n --page-number 部分分式 signals-answers.pdf # 忽略大小写搜英文符号, 找所有出现 H(s) 的地方 pdfgrep -i -n H\(s\) signals-answers.pdf # 提取全文再配合 grep 做上下文检索 pdftotext -layout signals-answers.pdf - | grep -n -A3 收敛域--page-number直接给出页码省得自己数-n显示匹配行配合pdftotext -layout能保留原排版看上下文时不会乱成一团。-layout这个参数别省不加的话多栏和公式会被拆成碎行grep -A3拿到的上下文基本没法读。再配合书签跳转实际使用体验是先pdfgrep定位到第 41 页再从书签树里点「第 4 章 z 变换」直接跳过去两秒钟找到题。这套动作熟练之后翻纸质书的效率完全没法比。4.3 勘误表与版本号给答案留一颗后悔药答案册一定会出错问题是有没有留改错的通道。我的做法是在文件末尾固定一节「勘误」每条按「编号 — 位置 — 原文 — 更正 — 日期」五列记同时在文件头的元数据里写版本号和修订日期version: 1.3 updated: 第 3 章 3.14 修正终值计算版本号用「大版本.小版本」改错只动小版本改结构才动大版本。源文件放 Git 里每次改完写一句提交信息指向具体的id比如fix: SS-03-014 终值应为 0.5。半年后有人问「这题答案怎么和书上不一样」git log -- SS-03-014一查就知道是哪次改的、为什么改。这套机制看着笨但它解决的是最实际的问题一份不能改错的答案用久了就没人敢信了。5. 避坑与排查这类答案 PDF 最容易翻车的五个地方下面五条是我在实际整理中反复遇到的每条按现象、原因、解决写遇到时可以直接拿原因去对。5.1 编译出来中文全变方框现象是 PDF 里所有汉字显示成方块或者干脆消失公式却正常。原因是xelatex没找到CJKmainfont指定的字体或者字体名里带了系统不认的后缀。先跑fc-list :langzh看系统里到底有哪些中文字体把名字原样抄进-V CJKmainfont注意不要带.ttf、.otf这样的扩展名。还不行就换成-V documentclassctexart加-V CJKmainfont双保险。5.2 公式里的中文和英文混排错位现象是$$公式块里夹中文说明时行距突然变大或者字重叠。原因是数学模式默认按西文字体排版中文没有对应的数学字体会回退到正文行距。解决是把中文说明挪出公式环境写成公式下面的一行正文非要在公式里加文字就用\text{}包起来并确认amsmath已加载。5.3 pdfgrep 搜不到明明存在的词现象是肉眼能看到「卷积」两个字pdfgrep却返回空。原因八成是这一页来自扫描图片或者截图粘贴没有文本层。处理办法是回到源文件把那段截图换成 LaTeX 公式或者纯文本已经成册的用 OCR 补一层文本层但公式 OCR 出来基本不可用不如重排。这也是前面强调公式必须走 LaTeX 源的原因——省下的排版时间后面会以十倍代价还回来。5.4 书签层级错乱或者全挤在一级现象是打开 PDF书签里所有题都平铺在第一层翻起来比没有书签还累。原因是 Markdown 里标题级别用错##和###混着来或者同一章里跳级用了####。Pandoc 按标题级别建书签级别乱则树乱。解决办法是全文只保留两级标题##给章###给单题编译前用grep -c ^##数一下每章的题数对不对。5.5 页码和索引表对不上现象是索引表写着第 41 页翻过去是第 39 页。原因是改稿后页数变了索引表没跟着更新。这类错最影响信任度读者按表翻两次找不到东西就不再用表了。解决是把页码回填当成编译流程的最后一步编译完先pdfinfo看总页数再用pdfgrep --page-number批量定位关键词把页码一次性刷进表格最后重新编译。手工一页页对早晚会漏。6. 把一份答案册拆成题面版和答案版答案册用久了会有一个副作用翻答案翻得太顺做题的时候手会不自觉地往答案那边跑看着都会合上就不会。我后来的做法是同一份源文件编译两遍一遍带答案一遍只有题面和校验点中间靠一个过滤脚本切换做题时用题面版对答案时再翻完整版。实现起来不复杂在 Markdown 里把解答部分包进一个带 class 的 fenced div编译题面版时用一个几十行的 Lua 过滤器把它整段删掉### 3.14 部分分式展开求反变换 给定 $$F(s) \frac{1}{s(s2)}$$收敛域 $$\mathrm{Re}(s) 0$$求 $$f(t)$$。 ::: {.answer} 拆成 $$A/s B/(s2)$$得 $$A 0.5$$、$$B -0.5$$ 故 $$f(t) 0.5(1 - e^{-2t})u(t)$$。 :::-- drop_answer.lua: 过滤掉 class 含 answer 的 div function Div(el) if el.classes:includes(answer) then return {} end end编译完整版时不加过滤器编译题面版时加--lua-filterdrop_answer.luareturn {}表示把这个块整个替换成空公式和文字一起消失不会留下空行。同一个源文件、同一套编号两份 PDF 的页码不会完全一致所以索引表只对完整版维护题面版只用来做题。真正让我改掉「对着答案刷题」这个习惯的是一次把答案版发给别人、自己只剩题面版的经历那两天做题速度掉了一半但卡住的地方记得特别牢。后来我把这个动作固化成流程——新整理的一章先编题面版自己做一遍做错的题才允许写进答案版并且必须在check字段里写清楚错在哪一步。这样存下来的不是答案是一份自己的错误记录。如果你也在整理信号与系统的习题建议别从找现成 PDF 开始从一道题写一条带校验的记录开始先把流水线跑通剩下的都是体力活。希望帮到你。本文还有配套的精品资源点击获取