
简介这份资源是面向通信工程、电子信息工程等专业本科生与研究生的信号与系统综合实验报告围绕连续时间LTI系统展开时域与频域分析及滤波器设计。内容涵盖稳定系统的零极点设计、直接/级联/并联三种实现结构的信号流图与仿真对比、参数微扰下零极点与稳定性敏感度分析、周期信号频谱特性、LTI滤波器设计及音频信号获取与频谱分析并配有完整Matlab代码与结果讨论。资源包共1个docx文件约2.62MB为实验报告正文含实验目的、原理推导、步骤与结果分析可直接用于课堂教学或自主学习。已有1303人学习下载适合希望借助Matlab深入理解系统函数、频率特性与滤波特性的读者参考帮助掌握从理论建模到仿真验证的完整流程。1. 连续时间LTI系统综合实验为什么频域分析总在滤波器设计时翻车很多同学做连续时间LTI系统实验时时域卷积算得飞快一到频域分析就懵最后设计滤波器更是直接翻车。这个综合实验的核心是把信号通过LTI系统的时域响应、频域响应、滤波器设计串成一条线而不是三个孤立的Matlab脚本。它解决的是“为什么我算出来的输出和仿真对不上”“截止频率设了但衰减不够”这类真实问题。适合正在学信号与系统、要做课程设计或者想用Matlab把理论落地到滤波器参数上的本科生和初级工程师。我一般会先跑通一个RC低通再回头补频域这样时域和频域才能对上号。2. 时域卷积和频域相乘两条路必须走到同一个结果2.1 为什么先做时域卷积再验证频域连续时间LTI系统的核心性质是时域卷积等价于频域相乘。但很多实验报告只写公式不验证数值一致性导致后面设计滤波器时对频域理解是虚的。我一般会先构造一个简单的输入信号比如指数衰减信号再定义一个已知冲激响应的系统比如一阶RC低通然后分别用时域卷积和频域相乘算输出最后对比两条曲线。如果对不上说明采样间隔、频率分辨率或者FFT点数有问题。具体操作上Matlab里连续时间信号要用离散点近似时间步长dt要足够小一般取信号最高频率对应周期的1/20以下。频率分辨率df由总时长T决定df1/T。这两个参数直接决定后面频域分析的精度。% 连续时间LTI系统时域与频域一致性验证 dt 0.001; % 时间步长需小于最高频率周期的1/20 t 0:dt:10; % 时间轴总时长10秒 x exp(-2*t).*heaviside(t); % 输入信号指数衰减 h exp(-5*t).*heaviside(t); % 系统冲激响应一阶RC低通 % 时域卷积 y_time dt * conv(x, h, full); y_time y_time(1:length(t)); % 截取与t等长 % 频域相乘 N length(t); X fft(x) * dt; % 近似连续时间傅里叶变换 H fft(h) * dt; Y_freq ifft(X .* H) / dt; % 反变换回时域 Y_freq real(Y_freq); % 对比 figure; plot(t, y_time, b, t, Y_freq, r--); legend(时域卷积, 频域相乘); xlabel(时间 t); ylabel(输出 y(t)); title(时域与频域结果对比);这段代码里conv后面的dt是卷积的数值积分权重不能漏。fft后乘dt是近似连续时间傅里叶变换的缩放因子。ifft后除dt是反变换的对应缩放。如果两条曲线不重合先检查dt是否太大再检查fft点数是否等于信号长度。常见坑是直接对conv结果不做截取导致长度对不上。2.2 频域分析的三个必调参数频域分析能不能用取决于三个参数采样频率fs、频率分辨率df、以及FFT点数N。fs必须大于信号最高频率的两倍这是奈奎斯特条件但实际工程里我一般取5到10倍留足余量。df由总时长T决定df1/T如果df太大低频细节会丢失滤波器的过渡带就看不清楚。N一般取2的幂次方便FFT计算但也要保证N*dt覆盖整个信号。fs 1000; % 采样频率取信号最高频率的10倍 T_total 10; % 总时长 df 1/T_total; % 频率分辨率 N 2^nextpow2(fs*T_total); % FFT点数取2的幂次 f (-N/2:N/2-1)*(fs/N); % 频率轴这里f是双边频率轴画图时通常只看正频率部分。如果要做滤波器设计频率轴要对应到实际物理频率不能直接用归一化频率否则截止频率会设错。2.3 用冲激响应和阶跃响应判断系统稳定性时域分析里冲激响应绝对可积是BIBO稳定的充要条件。但数值上判断绝对可积不能只看积分值还要看衰减趋势。我一般会画冲激响应的包络如果包络不趋近于零系统就是临界稳定或不稳定。阶跃响应则用来观察稳态误差和上升时间这两个指标直接对应滤波器的通带和过渡带。% 稳定性判断冲激响应绝对积分 energy sum(abs(h)) * dt; if energy inf h(end) 1e-6 disp(系统稳定); else disp(系统可能不稳定或临界稳定); end % 阶跃响应 step_resp dt * cumsum(h); plot(t, step_resp); xlabel(时间 t); ylabel(阶跃响应); title(系统阶跃响应);cumsum是累积求和近似积分。h(end)判断末端是否衰减到零这个阈值1e-6要根据信号幅度调整不能死记。3. 从频域指标到滤波器参数巴特沃斯和切比雪夫怎么选3.1 滤波器设计的三步走指标、原型、实现滤波器设计不是直接调butter函数就完事。第一步是把实际需求翻译成频域指标通带截止频率wp、阻带截止频率ws、通带最大衰减Rp、阻带最小衰减Rs。第二步是选原型巴特沃斯通带最平坦但过渡带最宽切比雪夫过渡带窄但有纹波椭圆滤波器过渡带最窄但通带阻带都有纹波。第三步才是用Matlab函数实现。% 滤波器指标 wp 2*pi*100; % 通带截止频率 100 Hz ws 2*pi*200; % 阻带截止频率 200 Hz Rp 1; % 通带最大衰减 1 dB Rs 40; % 阻带最小衰减 40 dB % 巴特沃斯设计 [N_butter, wn_butter] buttord(wp, ws, Rp, Rs, s); [b_butter, a_butter] butter(N_butter, wn_butter, s); % 切比雪夫I型设计 [N_cheby, wn_cheby] cheb1ord(wp, ws, Rp, Rs, s); [b_cheby, a_cheby] cheby1(N_cheby, Rp, wn_cheby, s);buttord返回的是满足指标的最小阶数和自然频率。s表示模拟滤波器不是数字滤波器。如果要做数字实现后面还要用bilinear做双线性变换。这里wp和ws单位是rad/s不是Hz很多人在这里翻车。3.2 巴特沃斯和切比雪夫的阶数对比同样指标下巴特沃斯阶数通常比切比雪夫高。比如上面例子巴特沃斯可能要6阶切比雪夫只要4阶。阶数越高计算量越大相位非线性越严重。如果对相位要求高选巴特沃斯或贝塞尔如果对过渡带要求高选切比雪夫或椭圆。滤波器类型通带特性过渡带宽度相位线性典型阶数巴特沃斯最平坦最宽较好高切比雪夫I型等纹波较窄一般中切比雪夫II型最平坦较窄一般中椭圆等纹波最窄差低选型时先看指标能不能满足再看相位和实现复杂度。我一般先用巴特沃斯跑通再根据过渡带需求换切比雪夫。3.3 用freqs看模拟滤波器的频率响应设计完滤波器必须用freqs看幅频和相频响应确认通带衰减和阻带衰减是否达标。freqs的输入是分子分母系数和频率向量输出是复数响应。% 频率响应 w logspace(0, 4, 1000); % 10^0 到 10^4 rad/s H_butter freqs(b_butter, a_butter, w); H_cheby freqs(b_cheby, a_cheby, w); % 幅频响应 dB mag_butter 20*log10(abs(H_butter)); mag_cheby 20*log10(abs(H_cheby)); semilogx(w/(2*pi), mag_butter, b, w/(2*pi), mag_cheby, r--); xlabel(频率 Hz); ylabel(幅度 dB); legend(巴特沃斯, 切比雪夫I型); grid on;logspace生成对数间隔频率点适合看宽频带响应。20*log10转dB。w/(2*pi)把rad/s转Hz。如果通带边缘衰减超过Rp说明阶数不够要回去调buttord或cheb1ord。4. 避坑与排查五个让实验对不上的常见问题4.1 时域卷积结果长度不对现象conv出来的长度是length(x)length(h)-1直接画图时横轴对不上。原因没有截取有效部分。解决用same选项或者手动截取前length(t)个点。注意same返回的是中心部分和直接截取前段不一样要看具体需求。4.2 频域相乘后反变换出现虚部现象ifft结果有微小虚部画图时报错。原因数值误差导致频域乘积不满足共轭对称。解决取real或者先做fftshift再处理。如果虚部很大说明频域操作破坏了对称性要检查是否对负频率做了错误处理。4.3 滤波器截止频率设了但衰减不够现象buttord算出的阶数很低阻带衰减不达标。原因wp和ws单位搞错把Hz当rad/s传进去了。解决统一用rad/s或者用2*pi*f转换。另一个原因是Rp和Rs设得太宽松实际需求更严格。4.4 双线性变换后频率畸变现象数字滤波器截止频率和模拟滤波器对不上。原因双线性变换有频率预畸变wp和ws要先做2*fs*tan(pi*f/fs)预畸变。解决用bilinear时传入预畸变后的频率或者直接用butter的数字版本让Matlab内部处理。4.5 阶跃响应稳态误差不为零现象系统阶跃响应最终不趋近于1。原因系统不是I型系统或者直流增益不是1。解决检查h的积分是否等于1如果不等于归一化h或者调整增益。对于低通滤波器直流增益应该为1否则通带会有衰减。5. 进阶技巧用零极点分布预判滤波器行为设计完滤波器除了看幅频响应还可以画零极点图。零极点位置直接决定滤波器的选频特性极点靠近虚轴谐振峰越尖锐零点在虚轴上对应频率被完全抑制。我一般会用roots求分子分母的根然后画在复平面上。% 零极点图 z_butter roots(b_butter); p_butter roots(a_butter); figure; plot(real(z_butter), imag(z_butter), o, real(p_butter), imag(p_butter), x); xlabel(实部); ylabel(虚部); title(巴特沃斯滤波器零极点分布); grid on; axis equal;roots返回多项式根。o表示零点x表示极点。巴特沃斯滤波器没有有限零点所以z_butter为空。切比雪夫I型也没有有限零点切比雪夫II型和椭圆有。如果极点都在左半平面系统稳定。如果极点靠近虚轴过渡带会变窄但阶跃响应会有振铃。另一个技巧是用impulse和step函数直接看模拟滤波器的时域响应不用手动做反变换。impulse(b, a)画冲激响应step(b, a)画阶跃响应。这两个函数对模拟滤波器直接可用对数字滤波器要指定采样时间。% 模拟滤波器时域响应 figure; subplot(2,1,1); impulse(b_butter, a_butter); title(巴特沃斯冲激响应); subplot(2,1,2); step(b_butter, a_butter); title(巴特沃斯阶跃响应);冲激响应的衰减速度反映系统带宽衰减越快带宽越宽。阶跃响应的上升时间与带宽成反比超调量反映相位裕度。如果超调太大说明极点太靠近虚轴实际实现时容易振荡。我自己的习惯是每次设计完滤波器先看零极点图确认稳定性再看幅频响应确认指标最后看阶跃响应确认时域行为。这三步走完基本不会翻车。还有一点血泪经验buttord和cheb1ord返回的wn是自然频率不是截止频率直接拿去画图会偏。要用freqs验证实际-3dB点如果偏了手动微调wn。这个坑我踩过好几次后来养成习惯每次都用freqs扫一遍确认-3dB点落在设计频率上。希望帮到你。本文还有配套的精品资源点击获取