MATLAB信号与系统实验:从时域波形到频域与零极点分析 简介这份《信号与系统》实验报告面向广东工业大学信息工程学院电子信息类学生及正在学习信号与系统课程的学习者可用于课程实验对照、MATLAB仿真练习与实验报告整理参考。文档围绕连续与离散时间信号处理展开覆盖基本信号生成、卷积运算、连续与离散LTI系统时域分析以及周期信号傅里叶级数、傅里叶变换、系统频率特性、拉普拉斯变换等实验模块并配有实验目的、实验内容、MATLAB代码和结果图便于理解理论计算与仿真验证之间的对应关系。资源包为1个docx文件约1.68MB篇幅较完整目录按实验与章节组织检索方便目前已有1257人学习。对需要复盘实验流程、补充代码实现或核对波形结果的学生而言具有较高的课程参考价值。1. 信号与系统实验一张从 MATLAB 波形到频域分析的知识地图《信号与系统》这门课最劝退的地方是纸上的公式和屏幕上的波形对不上号。实验报告真正有价值的部分不是那些已经跑通的代码而是把「连续与离散、时域与频域、变换与系统」串成一条能自洽的线。这份报告按实验一至实验四推进覆盖连续时间信号的 MATLAB 表示与时移反褶尺度变换、连续卷积与连续 LTI 时域分析、周期信号傅里叶级数与傅里叶变换性质、连续系统的频率特性、拉普拉斯变换与零极点分析一直到离散时间信号的表示运算、离散 LTI 时域分析和 Z 域分析。梳理下来会发现整份报告其实只回答一个问题给定一个信号或一个系统怎么在 MATLAB 里把它「看得见」再用变换把它「算得动」。适合正在做实验、准备实验考试或者期末想把整门课重新捋一遍的人。2. 连续时间信号表示、运算与波形绘制这一部分是整份报告的基础实验一和实验二的大部分内容都在这里。很多人以为它简单无非是plot一条曲线但真正卡住人的恰恰是这里信号写对了、代码没错画出来的波形却是错的或者形状对、坐标范围不对或者坐标对、物理含义又说不清。下面按「信号怎么在 MATLAB 里落地」和「运算怎么不出错」两条线梳理。2.1 基本信号的 MATLAB 表达方式连续时间信号在 MATLAB 里没有真正的「连续」靠的是足够密的采样点向量加逐点运算。所以每一个信号的画法本质是三件事定义时间向量、写出幅度表达式、用点运算保证逐元素计算。信号类型数学形式MATLAB 写法要点常见坑正弦型2cos(3tπ/4)2*cos(3*tpi/4)忘写点乘、相位用角度制指数衰减乘阶跃(2−e^(−t))u(t)(1-exp(-t)).*(t0)用heaviside与自定义阶跃混用门函数型t[u(t)−u(t−1)]t.*((t0)-(t1))减出来是逻辑值必须转数值参与乘截断余弦[1cos(πt)][u(t)−u(t−2)](1cos(pi*t)).*((t0)-(t2))时间范围取窄了看不到完整两段报告里 2.3.1 的四道小题正好把这四种类型都覆盖了。第一题的代码t -pi/12:0.01:2*pi; y 2*cos(3*tpi/4); plot(t,y); grid on; axis([-pi/12,2*pi,-2.2,2.2])是标准的正弦画法注意axis里纵轴给了 ±2.2比振幅 2 略宽这是为了让波形不贴边。这个习惯值得保留axis的范围永远比理论幅值留一点余量否则曲线会顶在边框上看不出峰值。第三题和第四题都用到(t0)-(t1)这种写法构造矩形窗。这里的关键是MATLAB 里t0返回的是逻辑数组两个逻辑数组相减得到的是 double 型的 0/1可以直接和信号相乘。这是本报告最值得记住的一个技巧比调用heaviside更可控因为可以任意指定窗口起止点。很多人翻车在于写成t0 t1结果得到逻辑值参与运算后维度或类型出问题减法写法在数值上等价但更稳。复信号那部分2.3.2用的是subplot(2,2,n)四联图分别画real(y)、imag(y)、abs(y)、angle(y)。这里有个容易被忽略的细节角度用angle返回的是弧度范围在 [−π, π]画出来会有跳变报告里给axis([-5,10,-1,1])的纵轴范围其实是把这个跳变压掉了。如果要做严谨的相位分析应该用unwrap展开相位否则看到的锯齿是数学上的主值折叠不是信号本身的特性。周期矩形脉冲用的是square(2*pi*t,50)第二个参数 50 是占空比百分数对应 0.5 的占空比。这里有个陷阱square的周期由第一个参数里的系数决定2*pi*t对应周期 1如果把系数写成t周期就变成 2π画出来完全对不上题目要求的「周期为 1」。2.2 时移、反褶、尺度变换的复合顺序实验二的 3.3.2 是整份报告里最容易出错的一组题给一个分段函数functl要求画f(t−1)、f(2−t)、f(2t1)、f(4−t/2)、[f(t)f(−t)]u(t)。表面上是五个画图题实质是在考「变换顺序」这件事。报告的functl.m写法是把分段函数写成若干「斜线 × 窗口」的叠加function f functl(t) % 分段线性信号用 窗口相减 构造每段的支撑区间 f (t1).*((t-2)-(t-1)) ... % 第一段斜率 1区间 [-2,-1) 1 .*((t-1)-(t0)) ... % 第二段常值 1区间 [-1,0) 2 .*((t0)-(t1)) ... % 第三段常值 2区间 [0,1) (-t2).*((t1)-(t2)); % 第四段斜率 -1区间 [1,2] end这个写法的好处是函数体只依赖t不依赖全局变量所以可以直接把变换后的自变量喂进去functl(t-1)就是右移functl(2-t)就是先反褶再移位functl(2*t1)就是先压缩再左移。这里必须强调一条血泪经验复合变换不要试图在函数外面手动改时间轴一律把变换写进函数调用里。因为f(2−t)这种形式如果先反褶再移位和先移位再反褶得到的中间结果完全不同手算很容易搞反。把2-t整体交给函数让t向量去扫波形自然就对了。报告里 3.3.2 的几道题全部采用这个套路y functl(2-t)一行解决这是最不容易翻车的写法。第五小题[f(t)f(−t)]u(t)是求偶部再截半边报告写作[functl(t)functl(-t)].*(t0)。注意这里是先加后乘窗顺序不能反先乘窗再加会导致f(−t)在 t0 部分被错误截断。2.3 奇偶分解与 fliplr 的适用边界3.3.3 要求画信号的偶分量和奇分量报告用了fliplrt -3:0.01:3; y (t0).*(t2).*(1-t); % 只在 [0,2] 有值的信号 y1 fliplr(y); % 时间反转 ye (y y1)/2; % 偶分量 yo (y - y1)/2; % 奇分量fliplr是左右翻转数组在时间轴关于原点对称的前提下它等价于f(−t)。这里的隐含条件是t从 −3 到 3 且步长均匀翻转后索引对应关系才成立。如果时间向量不对称比如 −0.2 到 1.2fliplr得到的结果就不是f(−t)而是关于数组中心的镜像画出来的偶分量会整体偏移。所以用fliplr做反褶前提必须自己检查一遍t(1) -t(end)是否成立步长是否一致。不成立就老老实实写functl(-t)那种形式。这个细节报告里没写但它是这批题里最容易踩的坑因为代码跑起来不报错图看上去也「像那么回事」。还有一点奇分量yo的理论值应该满足yo(0)0如果原点在采样点上画完图可以用这个性质自查。偶分量在原点处等于原信号值。这种「用性质反查图对不对」的习惯比盯着波形看好用得多。3. 卷积与连续 LTI 系统时域分析的三个层次卷积是《信号与系统》的第一个分水岭。实验二的第四章「连续时间信号的卷积运算」和第五章「连续时间 LTI 系统的时域分析」看上去是两块内容实际上是一条链卷积是工具LTI 是对象冲激响应是桥梁。这一章按「卷积怎么算对」「系统响应怎么解释」「零极点怎么读」三层来梳理。3.1 连续卷积的数值实现与离散化误差连续卷积在 MATLAB 里只能用离散求和近似% 数值卷积y(t) x(t) * h(t) dt 0.01; % 采样间隔决定精度 t -2:dt:4; x (t0) - (t1); % 输入单位矩形脉冲 h exp(-t).*(t0); % 系统冲激响应 y conv(x, h) * dt; % 乘 dt 还原连续卷积的量纲 ty (0:length(y)-1)*dt t(1) t(1); % 卷积结果的时间轴 plot(ty, y);这段代码有三个必须讲清的点。第一conv算的是离散求和sum x[k]h[n−k]而连续卷积是积分∫x(τ)h(t−τ)dτ。二者差一个dt因子所以必须乘dt才能对上理论幅值。这是最常见的翻车点不乘dt波形形状对、幅值差 100 倍然后怀疑自己公式记错了。第二卷积结果的长度是length(x)length(h)-1时间轴不能沿用t必须重建。上面用(0:length(y)-1)*dt t(1) t(1)是把起点对齐到两个信号起点之和。更稳妥的写法是先算t_start t(1)t(1)再线性展开避免t本身不对称时算错。第三dt的选择直接决定精度。dt0.01时误差在百分之一量级用来画图足够如果要和解析结果对比数值dt要降到 0.001 甚至更小。但dt太小会让conv的计算量按平方增长报告里的题目用 0.01 是合理的工程折中。3.2 LTI 系统的时域响应与卷积的物理含义LTI 系统的时域分析核心就是一句话系统对任意输入的响应等于输入与冲激响应的卷积。这句话在纸上是公式在实验里要能「看出来」。卷积的图解法四个步骤——反褶、平移、相乘、积分——在 MATLAB 里对应的是「翻转h、逐点滑动、点乘求和」。理解这一步之后很多性质就不用背了卷积的交换律对应「输入和系统角色可以互换」所以conv(x,h)和conv(h,x)结果一样卷积与冲激函数卷积等于原信号对应系统是「直通」卷积与阶跃函数卷积等于积分对应系统的冲激响应是阶跃时输出是输入的累积。报告里连续 LTI 时域分析部分要求设计不同输入、计算卷积响应并画图验证本质上是在做「公式 → 波形 → 物理解释」的三重对照。这里容易忽略的是卷积结果的支撑区间如果x在 [0,1] 非零、h在 [0,2] 非零那么卷积结果只可能在 [0,3] 非零图上一看超出这个范围还有值就说明时间轴算错了。这个检查比核对幅值更快。3.3 从时域到 s 域零极点如何决定系统行为实验四的第十一章「连续时间 LTI 系统的零极点分析」是整份报告里信息密度最高的一节。拉普拉斯变换把微分方程变成代数方程系统函数H(s)的零极点位置直接决定了时域波形长什么样。极点位置时域对应项稳定性直观表现左半平面实极点e^(−at)a0稳定单调衰减右半平面实极点e^(at)a0不稳定单调发散左半平面共轭极点e^(−at)sin(ωtφ)稳定衰减振荡虚轴上单极点常数或等幅振荡临界不衰减虚轴上重极点t 的幂次增长不稳定幅度线性增长这张表的用法是反查给出一个H(s)先因式分解找极点落在哪个区域就对应哪种波形不用解微分方程。实验里画零极点图用的是pzmap或者手动plot(real(p), imag(p), x)配合impulse或step看时域响应两边一对照稳定性判断就不靠死记了。提示判断稳定性只看极点不看零点。零点影响的是响应的幅度和相位分布不改变收敛性。这是考试里最爱设的陷阱之一。零极点分析还有一个常被忽略的用途部分分式展开的验证。residue函数给出的留数对应时域各项的系数极点对应指数项的频率把residue的结果和pzmap的图对照能快速确认展开有没有算错。报告里没展开讲这部分但它是把 s 域和时域连起来的关键一环。4. 频域分析傅里叶级数、傅里叶变换与系统频率特性从时域转到频域是这门课第二次认知跳跃。实验三的第六、七、八章依次是周期信号的傅里叶级数及频谱、傅里叶变换及其性质、连续 LTI 系统的频率特性。三章的顺序不是随意的级数处理周期信号变换推广到非周期频率特性则是把变换用到系统上。这一章按这条线梳理重点是「谱长什么样」和「性质怎么用」。4.1 周期信号的频谱离散谱的三条规律周期信号的傅里叶级数展开后频谱是离散的谱线谱线间隔等于基频ω0 2π/T。实验里画频谱通常用stem而不是plot因为离散谱线用连续曲线画会产生误导。T 1; % 周期 t -2:0.001:2; x square(2*pi*t/T, 50); % 占空比 50% 的矩形波 N 20; % 取前 20 次谐波 n -N:N; cn zeros(size(n)); for k 1:length(n) cn(k) trapz(t, x.*exp(-1j*n(k)*2*pi/T*t))/T; % 数值求系数 end stem(n*2*pi/T, abs(cn)); % 幅度谱横轴是角频率 xlabel(角频率); ylabel(|cn|);这段代码的关键是trapz做数值积分/T归一化。实际手算时更常用闭式表达式但数值法能验证闭式推导对不对。周期信号频谱有三条规律值得记牢谱线只出现在基频整数倍处幅度谱是偶对称、相位谱是奇对称实信号周期越大谱线越密、包络不变。第三条是理解「周期信号取极限变非周期信号、离散谱变连续谱」的钥匙也是傅里叶变换的直观来源。4.2 傅里叶变换性质把难算的题变成查表题傅里叶变换的性质线性、时移、频移、尺度、卷积、微分、对称看起来是七条并列的公式其实是一套「化简工具」。实验七要求验证这些性质最有价值的做法不是逐条背而是拿一个算起来麻烦的信号用性质把它拆成几个已知变换的信号的组合。性质数学表达典型用途易错点时移f(t−t0) ↔ F(jω)e^(−jωt0)把延迟信号转成相位因子相位符号写反频移f(t)e^(jω0t) ↔ F(j(ω−ω0))调制、搬移频谱搬移方向搞反尺度f(at) ↔ (1/|a|)F(jω/a)压缩展宽漏掉 1/|a| 因子卷积f*g ↔ F·G时域卷积变频域相乘把乘法和卷积混用微分f(t) ↔ jωF(jω)微分方程转代数方程忽略初始条件项这张表里最容易忽略的是尺度性质里的1/|a|。a为负时既有幅度的缩放又有反褶符号处理错一步结果就全错。另外时移和频移的对称性值得专门对照记一遍时域移位对应频域乘相位频域移位对应时域乘复指数两者形式对称但作用域不同考前花五分钟画个对照能省掉考场上的犹豫。卷积定理是这一节的枢纽。它把时域里最麻烦的卷积积分变成频域里的乘法同时解释了为什么 LTI 系统可以用「输入频谱 × 频率响应」直接算输出频谱。这条链打通之后第 3 章的时域卷积和第 4 章的频域相乘就是同一件事的两种语言。4.3 频率特性从 H(jω) 读出系统的滤波行为实验八的「连续 LTI 系统的频率特性及频域分析」把前面所有工具汇到一起。系统函数H(jω)的幅频特性决定哪些频率能通过、哪些被压制相频特性决定各频率分量的延迟。% 一阶低通系统的频率特性 w logspace(-1, 3, 500); % 对数频率轴覆盖三个数量级 H 1 ./ (1 1j*w/100); % 截止角频率 100 rad/s 的一阶低通 subplot(2,1,1); semilogx(w, 20*log10(abs(H))); % 幅频特性用 dB grid on; ylabel(幅度 (dB)); subplot(2,1,2); semilogx(w, angle(H)*180/pi); % 相频特性用度 grid on; ylabel(相位 (度)); xlabel(角频率 (rad/s));这段代码有两处工程习惯值得学频率轴用logspace而不是线性向量因为频域分析关心的是数量级跨度幅度用20*log10转 dB因为 dB 下幅频曲线的渐近线是直线斜率一眼能读出来。一阶低通在截止频率处幅度下降 3 dB、相位滞后 45 度这两个数字是判断滤波器阶数和类型的基准点。频率特性这一节的重点不是会画图而是会从图上读系统通带宽度、过渡带陡峭程度、阻带衰减量、相位是否线性。线性相位意味着所有频率延迟相同波形不失真这是通信系统里比幅频更硬的指标。报告里没强调这一点但它是频域分析从「会算」到「会用」的分界。5. 离散时间信号与 Z 域分析从采样到系统函数实验二的第十二、十三章和实验四的第十四章构成第三大块离散时间信号的表示及运算、离散 LTI 系统的时域分析、Z 变换及 Z 域分析。这部分和连续部分结构高度平行但有两个连续部分没有的坑采样带来的频谱搬移以及 Z 变换收敛域对结果的影响。5.1 离散信号的表示与序列运算离散信号在 MATLAB 里是向量时间轴通常是整数索引向量。和连续信号最大的区别是离散信号的「时间」必须显式给出不能靠采样间隔隐含。n -5:10; % 离散时间索引必须显式 x (n0) - (n3); % 长度 3 的单位矩形序列 stem(n, x, filled); % 离散序列用 stem不用 plot axis([-5, 10, -0.2, 1.2]);stem和plot的区别不是审美问题离散信号的谱线、序列值都只在整数点有定义用plot连线会让人误以为中间有值。这个习惯在做离散卷积和 Z 变换的零极点图时同样适用。序列的基本运算和连续信号一一对应移位x(n−n0)对应索引平移、反褶x(−n)对应fliplr、相加相乘是逐元素。但离散序列多了一个连续信号没有的操作抽取与插值下采样和上采样它对应采样率变换也是理解采样定理的实操入口。5.2 离散卷积与差分方程离散卷积是求和而非积分conv直接可用不需要乘dtn 0:20; x (n0) - (n5); % 输入长度 5 的矩形序列 h 0.8.^n; % 系统冲激响应指数衰减 y conv(x, h); % 离散卷积无需缩放因子 ny 0:(length(y)-1); % 卷积结果索引从 0 开始 stem(ny, y, filled);注意ny的起点如果x从 0 开始、h从 0 开始卷积结果从 0 开始长度是length(x)length(h)-1。这和连续卷积的时间轴重建是同一个道理只是离散情况下没有dt因子来干扰。离散 LTI 系统的另一种描述是差分方程y(n) Σa_k y(n−k) Σb_m x(n−m)。它和连续系统的微分方程对应但求解时可以用递推比连续系统的微分方程求解更「可编程」。实验里常用filter(b, a, x)直接算响应b是输入侧系数、a是输出侧系数符号顺序别搞反。5.3 Z 变换与收敛域最容易被忽略的一半答案Z 变换X(z) Σx(n)z^(−n)在形式上就是离散信号的幂级数。实验里用ztrans做符号计算或者用residue/tf2zp做有理函数分解。这里必须点出一个最容易被忽略的点Z 变换的答案必须带收敛域ROC。同一个代数表达式1/(1−az^(−1))ROC 是|z||a|时对应右边序列a^n u(n)ROC 是|z||a|时对应左边序列−a^n u(−n−1)。少了 ROC答案不唯一。序列类型ROC 形式稳定性判据右边序列圆外区域 |z|r极点全在单位圆内左边序列圆内区域 |z|r极点全在单位圆外双边序列环状 r1|z|r2环包含单位圆有限长序列全平面可能除 0 或 ∞恒稳定绝对可和离散系统的稳定性判据是「单位圆在 ROC 内」等价于「所有极点在单位圆内」。这和连续系统「虚轴在 ROC 内、极点全在左半平面」完全平行。把这两张判据表并排放着记比分开背省一半力气。零极点图在离散情况下还有个额外信息单位圆。画zplane(b, a)会自动画出单位圆极点落在圆内还是圆外一眼可判。报告第十四章的 Z 域分析题画完零极点图再看一眼单位圆比算半天收敛域快得多。6. 查漏补缺一份能直接跑一遍的复习清单把整份报告走完真正拉开差距的不是记住多少公式而是有没有一套「自查机制」。下面这份清单是我在复盘时固定走的流程从代码层到概念层每一步都能独立验证。第 1 章那个「波形对不上」的问题绝大多数都能在这里被拦下来。6.1 代码层的三查第一查采样间隔与时间范围。连续信号画图前先问t的范围够不够覆盖信号的非零区间dt够不够密正弦信号一个周期至少取 20 个点否则波形会出现明显的折线感。报告里 2.3.1 用 0.01 的步长、范围取到2*pi属于保守但不浪费的设置。第二查点运算。凡涉及两个向量相乘、相除、乘方一律先想需不需要.。信号与系统的表达式几乎全是逐元素运算漏点乘是最高频的报错来源而且报错信息往往指向不明确的行。第三查卷积的时间轴和量纲。连续卷积乘dt离散卷积不乘结果长度是两者之和减一起点是两者起点之和。这三条每次都在纸上写一遍再敲代码比事后调图快。6.2 概念层的四个自问这个变换的收敛域是什么没写 ROC 的 Z 变换、没写收敛条件的拉普拉斯变换答案都是不完整的。这个系统的稳定性看哪里连续看左半平面离散看单位圆内只看极点不看零点。时域和频域是不是对得上时域卷积对应频域相乘时域相乘对应频域卷积两边的「难度」是互补的哪边好算走哪边。图的物理含义说得出来吗每画完一张图用一句话解释它表示什么说不出来就说明这一步只是「跑通了」而没有「理解」。6.3 一份 30 分钟能跑完的自测脚本把下面这段贴进 MATLAB 跑一遍能同时验证复数运算、卷积量纲、离散索引和零极点判断四件事% 自测连续卷积量纲 离散系统稳定性 dt 0.01; t 0:dt:5; x (t0) - (t1); % 矩形脉冲 h exp(-2*t).*(t0); % 一阶系统冲激响应 y conv(x, h) * dt; % 连续卷积必须乘 dt assert(abs(max(y) - (1-exp(-2))/2) 0.05, 卷积幅值异常); % 理论峰值校验 b [1]; a [1, -0.5]; % 离散系统极点 z 0.5 p roots(a); assert(all(abs(p) 1), 系统不稳定); % 单位圆判据 disp(自测通过量纲与稳定性均正确);前两句assert是最有价值的部分第一句把卷积峰值和解析值(1−e^(−2))/2对比容差给 0.05能抓出「忘乘 dt」这类错误第二句用abs(p)1复核稳定性把「单位圆内」这个判据变成可执行代码。这种把概念写成断言的习惯我从做这份实验报告开始一直保留到现在因为图可以骗眼睛断言不会。6.4 复习顺序建议如果时间紧按「连续信号表示 → 卷积 → 傅里叶变换性质 → 拉普拉斯零极点 → 离散信号与 Z 变换」这条线走每一段只做两件事手画一张波形对理论、跑一段代码对量纲。频域性质那张表和零极点判据表必须能默写其余内容靠这两张表反推。最容易忽略的永远是收敛域和量纲这两件事——它们不体现在波形形状上所以看图看不出来但考试和实际计算里错一次就全错。从那以后我每次写完变换结果都强制走一遍「ROC 写了吗、dt 乘了吗、时间轴对了吗」这三问比反复检查公式本身有效得多。希望帮到你。本文还有配套的精品资源点击获取