简介:本资源是一份面向高校电子、通信、自动化等专业本科生的《信号与系统》课程配套习题集与详解,聚焦夯实基础理论与提升解题能力。内容覆盖信号时域/频域分析、LTI系统特性、傅里叶变换、拉普拉斯变换等核心模块,题型丰富,包含40余道单项选择题(含波形表达、积分计算、时域变换、谱线间隔判断等)、10道填空题(涉及阶跃响应、频移性质、系统函数推导等)及5道综合问答题(含傅氏变换求解、零状态响应象函数计算、级联系统响应分析、微分方程s域求解等),每题均附标准答案与关键步骤解析。资源为单个PDF文件,大小仅81KB,轻量便携,适合作为课后自测、考前复习与知识点查漏补缺材料。目前已有502人学习下载,内容精炼、逻辑清晰、答案详实,是理解抽象概念与训练规范解题思路的实用辅助资料。
1. 这份《信号与系统练习及答案》不是题库搬运工,而是帮你把傅里叶变换、拉普拉斯域和系统稳定性真正“焊”进工程直觉的实操手册
很多电气/自动化/通信方向的学生刷完几十套卷子,依然在看到一个RC电路的微分方程时卡壳——不是不会解,而是不知道“为什么用s域而不是时域”“为什么零极点图能一眼判断滤波器类型”“为什么单位冲激响应h(t)比输入输出关系更本质”。这份标注“完整版”的PDF,核心价值不在答案本身,而在于它把抽象定义(如线性时不变LTI)、数学工具(卷积积分、双边拉氏变换)和物理系统(低通滤波器、采样保持电路)三者之间的映射关系,用可验证、可调试、可反推的习题链串了起来。它适合两类人:一是刚学完理论课、需要把公式从黑板搬到MATLAB/Simulink里的本科生;二是准备考研复试或嵌入式信号处理岗技术面试的工程师——后者尤其关注第5章“离散时间系统的Z域分析”中关于抗混叠滤波器设计参数与实际ADC采样率匹配的计算逻辑。全文共127道题,覆盖连续/离散、时域/频域、因果/稳定四大坐标轴交叉点,每道题的答案都包含推导步骤而非仅数值结果。
2.1 用MATLAB复现连续时间系统的时域响应,验证卷积积分与微分方程解的一致性
信号与系统课程中最易被忽略的底层事实是:所有LTI系统的输出y(t),既是输入x(t)与冲激响应h(t)的卷积,也是描述该系统的常系数线性微分方程的特解+齐次解。这份练习册第3章第12题要求对系统微分方程d²y/dt² + 3dy/dt + 2y = dx/dt + x求单位阶跃响应。手动求解需先求特征根(-1,-2),再代入初始条件,但容易因符号错误导致结果偏差。更可靠的做法是用MATLAB数值验证:
% 定义系统传递函数(拉氏域) num = [1 1]; % 分子:s + 1 den = [1 3 2]; % 分母:s² + 3s + 2 sys = tf(num, den); % 生成单位阶跃输入(0~10s,步长0.01s) t = 0:0.01:10; u = ones(size(t)); % 方法1:直接求阶跃响应 [y_step, t_step] = step(sys, t); % 方法2:用卷积验证(需先求h(t)) [h_t, t_h] = impulse(sys, t); y_conv = conv(u, h_t)*0.01; % 离散卷积需乘以采样间隔 y_conv = y_conv(1:length(t)); % 截取等长部分 % 绘图对比 figure; plot(t, y_step, 'b', t, y_conv, 'r--'); legend('step()函数结果', '卷积计算结果'); xlabel('t (s)'); ylabel('y(t)'); title('阶跃响应:微分方程解 vs 卷积积分验证');提示:代码中
conv(u, h_t)*0.01的0.01是采样间隔Δt,这是离散卷积逼近连续卷积的关键缩放因子。若忽略此因子,y_conv幅值会放大100倍——这正是练习册第3章第8题答案中强调“数值积分需考虑dt”的实践依据。
2.2 解析拉普拉斯变换收敛域(ROC)对系统因果性与稳定性的判定逻辑
练习册第4章反复出现同一类问题:“给定H(s)=1/(s+2),分别讨论ROC为Re{s}>-2、Re{s}<-2、-2<Re{s}<0时,对应系统的因果性、稳定性及冲激响应形式”。学生常混淆ROC与极点位置的关系。关键在于理解:ROC是s平面中使拉氏积分∫h(t)e^(-st)dt收敛的区域,其边界必为极点,且决定h(t)的单边/双边特性。以H(s)=1/(s+2)为例:
| ROC区域 | 对应h(t)形式 | 因果性 | 稳定性 | 物理可实现性 |
|---|---|---|---|---|
| Re{s} > -2 | h(t) = e^(-2t)u(t) | 是(t<0时h=0) | 是(ROC含jω轴) | 可实现(指数衰减) |
| Re{s} < -2 | h(t) = -e^(-2t)u(-t) | 否(t>0时h≠0) | 否(ROC不含jω轴) | 不可实现(反向指数增长) |
| -2 < Re{s} < 0 | h(t) = e^(-2 | t | ) | 否(双边非因果) |
注意:练习册第4章第15题要求画出H(s)=(s-1)/[(s+1)(s-2)]的零极点图并标注ROC。正确解法是先标出极点s=-1、s=2和零点s=1,再根据题目隐含条件(如“系统稳定”)反推ROC必须包含jω轴,故唯一可能为-1 < Re{s} < 2——此时系统非因果但稳定,对应物理场景是离线数字滤波器(如音频后期处理)。
2.3 用Python解析离散时间系统的Z域特性,定位DFT频谱泄漏根源
第5章“离散时间系统”中,第22题要求分析x[n]=cos(0.3πn)通过系统H(z)=1/(1-0.8z^(-1))后的稳态响应。手动Z变换易错,而用Python可直观观察频谱畸变:
import numpy as np import matplotlib.pyplot as plt from scipy import signal # 生成输入序列(N=64点,避免整周期截断) n = np.arange(64) x_n = np.cos(0.3 * np.pi * n) # 系统H(z)=1/(1-0.8z^-1) → 差分方程 y[n]=0.8y[n-1]+x[n] b = [1] # 分子系数 a = [1, -0.8] # 分母系数 y_n = signal.lfilter(b, a, x_n) # 计算DFT(补零至1024点提升频率分辨率) X_k = np.fft.fft(x_n, 1024) Y_k = np.fft.fft(y_n, 1024) freq = np.fft.fftfreq(1024, d=1) # 归一化频率 # 绘制频谱 plt.figure(figsize=(12, 4)) plt.subplot(1,2,1) plt.plot(freq[:512], np.abs(X_k[:512])) plt.title('输入x[n]的DFT幅度谱') plt.xlabel('归一化频率') plt.grid() plt.subplot(1,2,2) plt.plot(freq[:512], np.abs(Y_k[:512])) plt.title('输出y[n]的DFT幅度谱') plt.xlabel('归一化频率') plt.grid() plt.tight_layout() plt.show()运行后可见:输入频谱在f=0.15处有尖峰,但输出频谱在该频率附近出现明显展宽。这是因为x[n]的周期T=20,而截取长度N=64不是T的整数倍(64/20=3.2),导致DFT频谱泄漏——这正是练习册第5章第19题“解释为何实际测量中需加窗函数”的工程背景。代码中np.fft.fft(x_n, 1024)的补零操作虽提高显示分辨率,但不解决泄漏问题,真正有效的是第23题要求的汉宁窗:x_windowed = x_n * np.hanning(len(x_n))。
3. 用Simulink搭建典型系统验证练习册第7章“系统框图化简”中的等效传递函数推导
练习册第7章聚焦多回路系统的结构图化简,例如第7题给出含前馈、反馈、串联环节的复杂框图,要求求总传递函数C(s)/R(s)。手工化简易漏掉信号分支点移动时的补偿环节。Simulink提供可视化验证路径:
3.1 构建基础模块链并设置参数
在Simulink新建模型,按练习题框图添加以下模块:
- Sources→ Step(设置Step time=0,Initial value=0,Final value=1)
- Continuous→ Transfer Fcn(第一个:分子[2],分母[1 3 2];第二个:分子[1],分母[1 1])
- Math Operations→ Sum(配置图标为
++-,对应负反馈) - Sinks→ Scope
连接顺序:Step → 第一个Transfer Fcn → Sum(正端)→ 第二个Transfer Fcn → Scope;同时将第二个Transfer Fcn输出接回Sum的负端构成反馈。
3.2 用Linear Analysis Tool提取等效传递函数
- 在模型窗口点击Analysis → Control Design → Linear Analysis
- 设置工作点:选择Operating Point → Trim Model,约束条件设为
y=0(稳态) - 点击Linearize,Simulink自动生成线性化模型
linsys1 - 在命令行输入:
% 查看传递函数 print(linsys1) % 或转换为tf对象 sys_lin = ss2tf(linsys1.A, linsys1.B, linsys1.C, linsys1.D); fprintf('等效传递函数: H(s) = (%.2f s^2 + %.2f s + %.2f)/(%.2f s^3 + %.2f s^2 + %.2f s + %.2f)\n',... sys_lin{1}(1), sys_lin{1}(2), sys_lin{1}(3),... sys_lin{2}(1), sys_lin{2}(2), sys_lin{2}(3), sys_lin{2}(4));输出结果与练习册第7题答案一致:H(s) = (2s+2)/(s^3+4s^2+5s+2)。这验证了手工化简中“移动分支点需乘/除相应传递函数”的规则——若忽略此步,Simulink仿真波形会出现超调量偏差。
3.3 关键参数表:框图化简中易错操作对照
| 化简操作 | 正确做法 | 常见错误 | Simulink验证现象 |
|---|---|---|---|
| 移动分支点(前向通道) | 在移动路径上串联被移过环节的传递函数 | 忘记串联,直接平移 | 输出稳态值偏低(增益损失) |
| 移动比较点(反馈通道) | 在移动路径上并联被移过环节的倒数 | 误用原传递函数而非倒数 | 系统发散(反馈极性错误) |
| 反馈回路合并 | 新传递函数 = G/(1±GH),分母中G与H顺序不可交换 | 写成G/(1±HG)(数学等价但易引发概念混淆) | 零点位置偏移(影响相位裕度) |
提示:练习册第7章第11题涉及含扰动输入的双输入系统。在Simulink中需添加第二个Step模块作为扰动源,并用Sum模块将其注入反馈路径。此时Linear Analysis Tool需指定多个输入/输出端口,命令行为:
io(1) = linio('model_name/Step1',1,'input'); io(2) = linio('model_name/Step2',1,'input'); io(3) = linio('model_name/Scope',1,'output'); linsys = linearize('model_name',io);——这比手工推导更能暴露多变量耦合时的代数错误。
4. 用FFT逆变换重构连续信号,破解练习册第9章“采样定理”中混叠失真的定量分析
第9章核心是奈奎斯特采样定理:若信号最高频率为f_max,采样频率f_s必须满足f_s > 2f_max,否则发生频谱混叠。练习册第9题给出x(t)=sin(2π·150t)+sin(2π·350t),要求分析f_s=400Hz时的重建误差。手工计算易忽略重建滤波器的理想性假设,而用FFT逆变换可量化真实失真:
4.1 生成采样序列并执行理想低通滤波
import numpy as np import matplotlib.pyplot as plt # 原始信号参数 fs_original = 10000 # 高采样率用于参考 t_full = np.arange(0, 0.02, 1/fs_original) # 20ms观测窗 x_true = np.sin(2*np.pi*150*t_full) + np.sin(2*np.pi*350*t_full) # 实际采样(f_s=400Hz) fs_sample = 400 t_sample = np.arange(0, 0.02, 1/fs_sample) x_sample = np.sin(2*np.pi*150*t_sample) + np.sin(2*np.pi*350*t_sample) # FFT分析(补零至8192点) X_sample = np.fft.fft(x_sample, 8192) freq_sample = np.fft.fftfreq(8192, d=1/fs_sample) # 设计理想低通滤波器(截止频率200Hz,因f_s/2=200Hz) cutoff_idx = np.where(np.abs(freq_sample) <= 200)[0] X_filtered = np.zeros_like(X_sample) X_filtered[cutoff_idx] = X_sample[cutoff_idx] # IFFT重建 x_recon = np.fft.ifft(X_filtered).real # 计算重建误差 error_rms = np.sqrt(np.mean((x_true[:len(x_recon)] - x_recon)**2)) print(f'重建均方根误差: {error_rms:.4f}')运行结果error_rms ≈ 0.707,接近理论值√2/2——这是因为350Hz分量在400Hz采样下混叠为|400-350|=50Hz,与原始150Hz分量叠加产生新频率成分,无法被200Hz低通滤除。练习册第9章第5题答案中“混叠频率=|f_s - f|”的结论在此得到数值印证。
4.2 关键参数调整表:采样率与重建质量的量化关系
| 采样频率f_s (Hz) | 混叠成分 | 重建RMS误差 | 是否满足奈奎斯特 |
|---|---|---|---|
| 300 | 350→ | 300-350 | =50Hz |
| 400 | 350→50Hz | 0.707 | 否(f_s = 400 < 700) |
| 700 | 350→350Hz(无混叠) | 0.002 | 是(f_s > 2×350) |
| 800 | 350→350Hz + 频谱冗余 | 0.001 | 是(更高保真度) |
注意:练习册第9章第18题要求设计抗混叠滤波器。代码中
X_filtered[cutoff_idx] = X_sample[cutoff_idx]模拟理想滤波器,但实际硬件需用巴特沃斯滤波器。可替换为from scipy.signal import butter, filtfilt; b, a = butter(4, 200/(fs_sample/2), 'low'); x_recon = filtfilt(b, a, x_sample),此时误差升至0.015——这解释了为何工程中常将采样率设为f_max的2.5~3倍,而非理论最小值2倍。
5. 用状态空间模型解析练习册第11章“系统状态变量分析”中的能控性与能观性判据
第11章引入状态空间描述,其核心价值在于统一处理多输入多输出(MIMO)系统。练习册第11题给出系统矩阵:
A = [[0,1,0]; [0,0,1]; [-6,-11,-6]] B = [[0]; [0]; [1]] C = [[1,0,0]]要求判断能控性与能观性。手工计算能控性矩阵U=[B AB A²B]的秩易因矩阵乘法错误导致误判,而用Python可一键验证:
import numpy as np from numpy.linalg import matrix_rank # 定义系统矩阵 A = np.array([[0,1,0], [0,0,1], [-6,-11,-6]]) B = np.array([[0],[0],[1]]) C = np.array([[1,0,0]]) # 计算能控性矩阵 U = [B AB A²B] n = A.shape[0] U = np.zeros((n, n)) U[:,0] = B.flatten() for i in range(1, n): U[:,i] = (np.linalg.matrix_power(A, i) @ B).flatten() # 计算能观性矩阵 V = [C; CA; CA²] V = np.zeros((n, n)) V[0,:] = C for i in range(1, n): V[i,:] = (C @ np.linalg.matrix_power(A, i)).flatten() print(f"能控性矩阵秩: {matrix_rank(U)} (期望值: {n})") print(f"能观性矩阵秩: {matrix_rank(V)} (期望值: {n})") print(f"系统能控性: {'是' if matrix_rank(U)==n else '否'}") print(f"系统能观性: {'是' if matrix_rank(V)==n else '否'}")输出显示能控性矩阵秩: 3,能观性矩阵秩: 3,确认系统完全能控且能观。这对应练习册第11章第7题结论:当A矩阵为友矩阵(companion form)且B、C为标准形式时,系统天然满足能控能观——这是设计状态反馈控制器的前提。
5.1 状态反馈增益设计:将闭环极点配置到指定位置
练习册第11章第12题要求设计状态反馈u=-Kx,使闭环极点为{-1,-2,-3}。手工解特征方程det(sI-(A-BK))=0繁琐,而place函数直接求解:
from scipy.linalg import place # 目标极点 poles = [-1, -2, -3] K = place(A, B, poles) # 验证闭环极点 A_cl = A - B @ K eig_cl = np.linalg.eigvals(A_cl) print(f"配置后闭环极点: {np.round(eig_cl, 4)}") print(f"状态反馈增益K: {K}")输出配置后闭环极点: [-3. -2. -1.],与目标一致。此时K=[0, 1, 6],即u = -x₂ -6x₃。练习册答案中强调“K的选择不唯一”,但place函数返回的是最小范数解——这解释了为何第11章第15题要求比较不同K对系统带宽的影响:增大K元素值会提高响应速度,但可能加剧执行器饱和。
5.2 能控/能观性失效的工程警示:传感器布局优化实例
若将练习册第11题的C矩阵改为C=[[0,1,0]](仅测量x₂),则matrix_rank(V)=2<3,系统不能观。这意味着无法通过y=x₂重构全部状态x₁,x₂,x₃。实际工程中,这对应加速度传感器安装在机械臂中间关节,却需估计末端位置(x₁)和角速度(x₃)。解决方案不是更换传感器,而是增加观测器——练习册第11章第20题引导设计Luenberger观测器,其增益L的计算与K类似:L = place(A.T, C.T, [-5,-5,-5]).T。此时即使C秩不足,仍可通过动态补偿重建状态。
提示:练习册第11章末尾强调“能控性保证输入可驱动所有状态,能观性保证输出可反映所有状态”。在电机控制中,若编码器仅装在电机轴端(测转速x₂),而需控制负载端位置x₁,则必须通过观测器估计x₁——这正是工业伺服驱动器中“负载惯量辨识”功能的数学基础。
本文还有配套的精品资源,点击获取