简介:这是一份信号与系统课程的实验报告文档,以电阻、电感、电容串联电路为对象,分析其在单位阶跃信号和单位冲激信号作用下的响应规律,适合电子信息类本科生或需要掌握仿真时域测量方法的初学者参考。文档先梳理微分电路与二阶电路模型,再说明欠阻尼、临界、过阻尼三种状态的判别依据,同时给出上升时间、峰值时间、调节时间、最大超调量等动态指标的定义与测量方法。内容包含实验目的、原理推导、操作步骤、不同电阻值下的仿真数据表格(例如电阻为一百三十五欧、六百三十二欧、九百八十五欧时的波形参数)以及结果分析,既能帮助读者理解元件参数对响应状态的影响,也可用作实验报告撰写时的结构模板。压缩包内仅一个文档文件,大小不足四百千字节,已有六千余人学习浏览。
1. 阶跃与冲激响应实验资源:这份doc到底能帮你省多少事
信号与系统课程里,RLC串联电路的阶跃响应与冲激响应实验,几乎是绕不开的一次动手。手头这份实验报告doc,核心价值不是原理复述,而是给了三组可以直接照抄的仿真参数:C=100nF、L=10mH,电阻分别取R=135Ω(欠阻尼)、R=632Ω(临界)、R=985Ω(过阻尼),并把欠阻尼状态下的信号最大幅度A=1.45、上升时间0.06ms、峰值时间0.1ms、调节时间0.8ms、最大超调量45%全部标好。拿到这份资源,你要做的不是重新发明一遍RLC理论,而是照着参数搭模型、跑仿真、标波形,再写结果分析。它适合正在赶实验报告、需要快速出图的学生,也适合想确认三组阻尼状态边界和动态指标测量口径的工程师。
2. 先把理论算明白:特征根、临界电阻与四个动态指标
2.1 特征根判据
RLC串联电路,输入单位阶跃电压,输出取电容两端电压,基尔霍夫电压定律直接写出微分方程:
LC·vc'' + RC·vc' + vc = vi
特征方程是LC·s² + RC·s + 1 = 0,两个特征根为:
s₁,₂ = (-RC ± √((RC)² - 4LC)) / (2LC)
整个实验的判断核心就在根号里那一项。令(RC)² - 4LC = 0,得到临界电阻:
R_c = 2·√(L/C)
代入L=10mH、C=100nF,R_c = 2×√(0.01 / 1e-7) = 632.46Ω。报告里取632Ω,正是这个数。
三种状态的判据用阻尼比ζ更好记。对二阶系统,ζ = (R/2)·√(C/L),R=135Ω时ζ≈0.214,R=632Ω时ζ≈1.0,R=985Ω时ζ≈1.56。ζ<1是一对共轭复根,阶跃响应振荡衰减,就是欠阻尼;ζ=1是二重实根,单调无振荡,临界;ζ>1是两个负实根,响应更缓慢地单调上升,过阻尼。
经常有人把临界状态写成「共轭虚根」,那是无阻尼振荡,只有当R=0时才可能出现,实际电路里见不到。报告摘要里那句「共轭虚根」表述不准,做实验时以ζ=1的二重根理解为准,这一点我在第4章排查里还会再提。
| 状态 | R取值 | ζ | 特征根形态 | 阶跃响应波形特征 |
|---|---|---|---|---|
| 欠阻尼 | 135Ω | 0.214 | 共轭复根 | 振荡衰减,有过冲 |
| 临界 | 632Ω | 1.0 | 二重负实根 | 无振荡,最快逼近稳态 |
| 过阻尼 | 985Ω | 1.56 | 两个负实根 | 无振荡,上升变缓 |
2.2 阶跃响应的四个动态指标
报告要求欠阻尼状态标注A、上升时间、峰值时间、调节时间、最大超调量五个量。前四个定义都是相对稳态值1V来说的:
- 上升时间tr:从0到第一次到达稳态值1所需时间
- 峰值时间tp:从0上升到峰值所需时间
- 调节时间ts:振荡包络线进入稳态值±5%误差带且不再出来所需时间
- 最大超调量Mp:峰值超出稳态值的百分比,(A-1)/1×100%
用ζ=0.214、ωn=1/√(LC)≈31623rad/s估算,ωd=ωn·√(1-ζ²)≈30893rad/s,理论值:
tr = (π - arccosζ) / ωd ≈ 0.0578ms tp = π / ωd ≈ 0.102ms ts = -ln(0.05·√(1-ζ²)) / (ζ·ωn) ≈ 0.45ms Mp = e^(-πζ/√(1-ζ²)) ≈ 50%
对照报告实测:tr=0.06ms、tp=0.1ms完全对得上;ts报告写0.8ms,比理论估算偏大,这是用包络线目测读数时常见的偏差,工程上可接受;Mp报告写45%,理论理想二阶模型约50%,仿真实测读数略低也不奇怪。重点是量级一致,说明这套RLC参数确实落在欠阻尼区。
2.3 为什么一定要用微分电路凑一个“假冲激”
实验里冲激响应的激励信号,不是理想冲激函数,而是单位阶跃先过RC微分电路得到的尖顶脉冲。原因很现实:理想冲激δ(t)幅度无穷大、宽度无穷窄,任何物理信号源都产生不了,示波器也没法直接观测。
RC微分电路的输出电压近似为v_o ≈ RC·(dv_i/dt)。阶跃信号变化沿是无穷陡的,输入阶跃后,输出就是一个衰减极快的尖顶脉冲。要让这个「假冲激」足够接近理想冲激,RC乘积必须取小,工程上常见做法是让微分时间常数τ=RC远小于RLC电路的固有周期。
RLC固有周期约0.2ms,我一般会把微分电路的时间常数压到固有周期的1/50以下,比如R_d=100Ω、C_d=1nF,τ=0.1μs,得到的尖顶脉冲宽度只有零点几微秒,对RLC来说已经很接近理想冲激了。
这里还有个理论连接点:冲激响应h(t)和阶跃响应s(t)是一阶导数关系,h(t)=ds(t)/dt。第5章的进阶验证里,我会用数值微分直接检验这个关系,跑出来的曲线重合度能说明实验模型搭得对不对。
3. 在Simulink里搭出三种状态:建模步骤与三组电阻参数
3.1 方案选择:Transfer Fcn还是Simscape
R2020a里搭RLC电路有两种常见路线:一是Simscape Electrical拖实际电阻、电感、电容元件,二是直接用Continuous库的Transfer Fcn传递函数模块。实际做实验仿真,我一般用Transfer Fcn,理由是实验关注的是输出响应波形和参数,不是电源内阻、元件寄生参数这些细节;传递函数从微分方程直接来,参数改起来也快,不会出现Simscape里初始状态不收敛的问题。
输入是理想单位阶跃,幅度1V,输出取电容电压,传递函数为:
H(s) = 1 / (LC·s² + RC·s + 1)
分母三个系数依次是LC、RC、1,代入L=10mH、C=100nF:LC=1e-9,RC=R×1e-7。R=135Ω时分母就是[1e-9, 1.35e-5, 1]。
3.2 建模步骤与模块参数
打开Matlab R2020a,主页点Simulink,新建Blank Model,然后按下面步骤搭:
- 从Sources库拖入Step模块,双击设置:Step time=0,Initial value=0,Final value=1,Sample time=0。Sample time填0表示连续信号,不能填离散步长,否则阶跃会有量化误差。
- 从Continuous库拖入Transfer Fcn模块,Numerator coefficients填[1],Denominator coefficients填[1e-9 1.35e-5 1]。
- 从Sinks库拖入Scope模块,把Step输出接到Transfer Fcn输入,Transfer Fcn输出接到Scope。
- 打开仿真配置,Solver选变步长ode45,Max step size设为1e-6,Stop time设为0.002。这里Stop time是秒,欠阻尼状态下调节时间大约0.45ms,2ms足够看到完整衰减过程;Max step size不设小的话,Scope曲线会缺峰值。
- 运行仿真,Scope里右键选择自动缩放,就能看到典型的欠阻尼振荡衰减波形。
| 模块名 | 参数项 | 取值 | 说明 |
|---|---|---|---|
| Step | Final value | 1 | 单位阶跃,幅度1V |
| Transfer Fcn | Numerator | [1] | 输出是电容电压 |
| Transfer Fcn | Denominator | [1e-9 1.35e-5 1] | R=135Ω时 |
| Solver | Stop time | 0.002 | 2ms,足够看完整衰减 |
| Solver | Max step size | 1e-6 | 保证峰值采样准确 |
跑完第一步,Scope里看到的波形峰值大约1.45V,稳态停在1V,振荡衰减,这就是欠阻尼状态。把波形数据导出,后面第4章才能按报告要求逐项标注。
3.3 三组典型电阻的替换方法
三组电阻对应三组分母系数,R=135Ω时分母是[1e-9, 1.35e-5, 1],R=632Ω时是[1e-9, 6.32e-5, 1],R=985Ω时是[1e-9, 9.85e-5, 1]。每换一组电阻就手动改一次分母系数,跑一次Scope,这种操作虽然直接,但三条曲线放在一起对比时,肉眼记忆很不靠谱。
我更推荐直接用MATLAB脚本做对比,不打开Simulink也能复现实验:
R_list = [135 632 985]; L = 10e-3; % 10mH C = 100e-9; % 100nF figure; hold on; for k = 1:3 sys = tf([1], [L*C R_list(k)*C 1]); % 分母系数 [LC, RC, 1] step(sys, 2e-3); % 仿真2ms end legend('欠阻尼 R=135', '临界 R=632', '过阻尼 R=985'); grid on; xlabel('时间 (s)'); ylabel('输出电压 (V)');这段脚本里,tf第一个参数是分子系数[1],第二个参数是分母系数数组。R_list(k)C算的是RC项,LC算的是二次项系数,注意数量级:L*C=1e-9,RC大约是10⁻⁵,数值差四个数量级,Simulink和tf都能处理,但你要是手动在GUI里填分母,必须用科学计数法,别写成[0.000000001 0.0000135 1]这种,容易数错零。
同一张图上三条曲线出来后,能直观看到:R=135Ω过冲明显、振荡衰减;R=632Ω没有过冲但上升最快;R=985Ω上升更迟钝。这就是报告实验结果分析那段「随着R增大,阶跃响应波形逐渐平缓」的由来。
3.4 冲激响应模型:把阶跃先过一遍微分电路
冲激响应不是直接对RLC模型加理想冲激,而是让单位阶跃先过RC微分电路,再接RLC传递函数。在Simulink里的做法,是在Step模块和RLC的Transfer Fcn之间,再插一个微分电路的Transfer Fcn:
H_diff(s) = RC·s / (RC·s + 1)
分子填[RdCd 0],分母填[RdCd 1]。我按2.3节的思路取R_d=100Ω、C_d=1nF,τ=0.1μs,分子就是[1e-7 0],分母是[1e-7 1]。
整个信号链是:Step(1V) → 微分电路 → 尖顶脉冲 → RLC传函 → Scope。尖顶脉冲的幅度接近1V,宽度很窄,对RLC电路来说等效于一个强度约等于τ的近似冲激。换三组R值跑出来,欠阻尼状态下冲激响应是一个从零冲起、衰减振荡的波形,临界和过阻尼状态则没有负向振荡。
这里需要注意一个取样问题:微分电路输出脉冲宽度只有零点几微秒,Scope的Max step size如果还保持1e-6,可能会错过脉冲顶部。我一般会把冲激响应分支的Max step size改成1e-8,代价是仿真时间长一点,但波形不会失真。
4. 参数测量与常见问题排查:从波形读数到定义陷阱
4.1 欠阻尼波形的读数与标注
Scope里看到振荡波形后,用自带的Cursor Measurements或者在MATLAB里导数据手动读,都可以。手动导出数据再算,比肉眼读数稳得多,也能避免Scope窗口刻度小导致的估读误差:
R = 135; L = 10e-3; C = 100e-9; sys = tf([1], [L*C R*C 1]); [y, t] = step(sys, 2e-3); % 按报告定义:上升时间=从0到第一次到达稳态值1 idx_tr = find(y >= 1, 1, 'first'); tr = t(idx_tr); % 峰值时间与最大超调量 [peak, idx_tp] = max(y); tp = t(idx_tp); Mp = (peak - 1) / 1 * 100; % 调节时间:从后往前找最后一次离开±5%误差带的点 idx_out = find(abs(y - 1) >= 0.05, 1, 'last'); ts = t(idx_out); fprintf('tr=%.4f ms, tp=%.4f ms, ts=%.4f ms, Mp=%.1f%%\n', ... tr*1e3, tp*1e3, ts*1e3, Mp);这段脚本的逻辑:find(y >= 1, 'first')找第一次等于1的点作为上升时间;max(y)同时给出峰值和峰值位置;Mp按(峰值-稳态值)/稳态值×100%算;调节时间从后往前找最后一个超出±5%带的点,用它对应的时间作为ts。整个判定逻辑严格按报告定义走。
跑出来的结果大约是tr=0.058ms、tp=0.102ms、Mp≈50%,ts在0.45ms附近。这和报告里的0.06ms、0.1ms、45%、0.8ms在同一个量级,偏差来自理想模型与仿真读取差异,属于正常范围。用这段脚本得到的数据标注在波形图上,报告里那几个参数就齐了。
4.2 临界和过阻尼状态下标什么
报告要求临界和过阻尼状态只标A和上升时间。临界和过阻尼都没有振荡,峰值时间、最大超调量没有意义,因为峰值就是稳态值本身,超调量为0。
但这里有个隐藏坑:临界和过阻尼的阶跃响应在数学上是渐近逼近稳态值的,欠阻尼定义里「第一次到达1」的判定在临界和过阻尼下不存在,响应永远达不到1,只是无限接近。所以临界和过阻尼的上升时间,我按工程惯例取10%~90%上升时间,这个用stepinfo直接读就行:
Rc = 632; Rd = 985; for R = [Rc Rd] sys = tf([1], [L*C R*C 1]); info = stepinfo(sys); fprintf('R=%d, A=1, 10-90%%上升时间=%.4f ms\n', R, info.RiseTime*1e3); endR=632Ω时10%~90%上升时间大约0.11ms,R=985Ω时大约0.23ms。报告表1-1里临界和过阻尼状态A都记1,正是稳态值,上升时间按这个口径补上就不会出错。
4.3 常见问题与排查记录
以下是这个实验里最容易翻车的几个问题,按现象、原因、解决三步说清楚。
现象一:Scope里只有一条水平直线,或者波形糊成一条竖线。原因是仿真时间设置不合理,RLC固有周期约0.2ms,衰减过程不到1ms,默认Stop time是10秒,肯定看不见;反过来Max step size太大,采样点落不到峰值附近。解决:Stop time设0.002~0.005,Max step size设1e-6,欠阻尼和过阻尼都能看清整段波形。
现象二:stepinfo读出来的RiseTime和实验报告对不上。原因是定义不同,stepinfo默认算10%~90%上升时间,而报告里的上升时间是0到第一次到达稳态值1,两个口径数值差不少。解决:按报告定义手动用find(y>=1, 'first')读取,不要直接搬stepinfo结果。
现象三:把临界状态理解成共轭虚根,跑出来的波形持续等幅振荡不衰减。原因是用错理论模型,临界阻尼是二重负实根,ζ=1,等幅振荡是ζ=0才会出现的现象。解决:先算ζ,R=632Ω时ζ=1,看到单调上升无过冲才对。
现象四:冲激响应波形全是毛刺,或幅度异常大。原因是理想冲激在连续仿真里数值上很难处理,直接用impulse函数对窄脉冲系统容易出数值毛刺。解决:按3.4节用微分电路生成尖顶脉冲,Max step size设到1e-8这个量级。
现象五:tf传函分母系数填错,仿真直接报错或输出NaN。原因是LC=1e-9这个系数数量级太小,手填时漏一位就变成全零。解决:分母统一写成[LC RC 1]让Matlab自己算,别手输十进制小数。
5. 进阶验证:把R当变量扫描,再看h(t)与s'(t)重合
5.1 扫描脚本:观察超调量随R消失的过程
前面第3章只是对比三组离散电阻,实际上把R从100Ω一路扫到1000Ω,能更清楚地看到超调量怎么随阻尼变化消失的。临界电阻R_c=632.46Ω,扫描范围跨越它两侧,规律一目了然:
L = 10e-3; C = 100e-9; R_list = 100:50:1000; Mp_list = zeros(size(R_list)); tr_list = zeros(size(R_list)); for k = 1:length(R_list) sys = tf([1], [L*C R_list(k)*C 1]); info = stepinfo(sys); Mp_list(k) = info.Overshoot; tr_list(k) = info.RiseTime; end figure; subplot(2,1,1); plot(R_list, Mp_list, 'o-'); grid on; xlabel('电阻 R (Ω)'); ylabel('超调量 (%)'); xline(2*sqrt(L/C), 'r--', '临界R=632.5'); subplot(2,1,2); plot(R_list, tr_list*1e3, 's-'); grid on; xlabel('电阻 R (Ω)'); ylabel('10-90%上升时间 (ms)');超调量那一条曲线在R接近632Ω时迅速掉到0,之后一直是0;上升时间曲线则在临界点附近取到最小值。这个趋势和实验报告「随着R的增大,阶跃响应的波形增大到幅度以后逐渐平缓」的描述完全对应。xline是R2020a支持的画竖线函数,临界电阻值直接标在图上,报告「分析实验结果」那段直接引这张图就够了。
5.2 用数值微分验证冲激响应与阶跃导数
理论说h(t)=ds(t)/dt,这是检验整个实验建模是否正确的好办法。冲激响应那条链路如果搭对了,数值微分阶跃响应得到的曲线和impulse函数得到的曲线应该几乎重合:
R = 135; sys_rlc = tf([1], [L*C R*C 1]); dt = 1e-7; t = 0:dt:2e-3; [y_step, t] = step(sys_rlc, t); dy = diff(y_step) / dt; t_diff = t(1:end-1); [y_imp, t_imp] = impulse(sys_rlc, t); figure; plot(t_diff, dy, 'b-', t_imp, y_imp, 'r--'); legend('阶跃响应数值微分', '冲激响应'); grid on; xlabel('时间 (s)'); ylabel('幅度');两条曲线在欠阻尼状态下几乎完全重叠,只在起始点附近有微小偏差,那是数值微分在阶跃跳变沿的固有误差,dt取更小可以进一步缩小。这个验证做完,报告里「利用微分电路由单位阶跃信号近似获得尖顶脉冲信号来近似单位冲激信号」这句话就有了量化支撑。
从那以后,我每次搭这类二阶动态电路仿真,都会先按R_c=2√(L/C)把临界电阻算出来再动手,三组参数一选定就顺手把特征根和ζ也打印出来,做到心里有数,基本没再翻车。希望帮到你。
本文还有配套的精品资源,点击获取