系统频率特性测试实战:波特图绘制、测量与误差排查

📅 发布时间:2026/9/19 2:46:35
系统频率特性测试实战:波特图绘制、测量与误差排查
简介东南大学自动控制原理实验四“系统频率特性的测试”完整实验报告适合自动化、控制类专业本科生在完成频域实验或撰写实验报告时参考。报告按实验目的、原理、设备、线路图、操作步骤、数据记录与分析展开详细介绍了幅频特性与相频特性曲线的测量意义以及双踪信号比较法和李沙育图形法的具体应用并基于实测数据绘制Bode图、利用拐点求取系统传递函数。内容覆盖从接线到数据处理的完整流程附有频率-幅值-相位差数据表及典型波形记录对于理解开环频率特性、辨识建模和控制系统分析具有直接帮助。压缩包内共1个Word文档约237KB便于文档查看与打印。目前已收获129人次学习下载适合正在开展自动控制原理实验、需要对照操作步骤或整理实验报告的学生使用。1 系统频率特性测试先把波特图的形状说清楚你大概率不是在考场上第一次遇到“频率特性”。但当实验台上那台信号发生器开始扫频时你关心的问题就变了那个带通滤波器在 2kHz 处是不是真的能放大 20dB那台伺服系统在哪个频率会先跑到 90° 相位滞后系统频率特性测试就是做这件事——用一组幅值恒定、频率可变的正弦信号扫过目标频带测出增益与相位随频率的变化画成波特图。东南大学自动控制原理课程的实验四以这套流程为骨架但它背后的工程动作远不止写报告环路增益在哪掉到 0dB、相位裕度还剩多少直接决定控制器带宽敢不敢往上推。下面的内容会从理论基线讲到激励源选型、采样参数设置、相位差计算和典型误差排查新手能照着一个最小方案跑通熟手也可以在边界参数上找到可继续抠的空间。2 从传递函数到Bode图频域测试的理论基线2.1 正弦稳态频率特性能被测出来的前提线性时不变系统有一个重要性质输入一个固定频率的正弦信号等瞬态过程消隐之后输出必然是同频率的正弦幅值和相位都变了但频率不变。这个“正弦稳态”假设是整套频率特性测量的数学基础。实验里常见的错误是把激励幅值调得过大让放大器进入饱和区输出波形变成平顶谐波分量随之暴涨此时读到的基波幅值和相位已经不能代表原系统了。常见的做法是先把幅值调小到输出无明显失真再做正式测量。如果被测对象本身包含继电器、滞环或者开关非线性单频正弦法就不再适用要换伪随机噪声加相关分析的思路。2.2 幅频、相频与Bode图里的关键指标Bode图用两张曲线描述系统上半张是增益dB随角频率的对数变化下半张是相位度随角频率的对数变化。频率特性测试报告里最常读的五个位置我整理成一张速查表指标定义实测里怎么找0dB 穿越频率幅频曲线增益等于 0dB 的频率用插值求幅频曲线与 0dB 线的交点相位裕度穿越频率处相位与 -180° 的差值读出穿越频率处的相角后取差幅值裕度相位为 -180° 时的增益倒数先找相位穿越 -180° 的频率再读增益谐振峰值幅频曲线的局部最大增益扫描结果里取幅频最大值带宽增益相对低频基准下降 -3dB 的频率从高频方向找 -3dB 点相位裕度和幅值裕度决定闭环系统稳定与否这个结论在控制理论课上反复强调实际操作中必须自己算一遍才有体感。0dB 穿越频率附近相位曲线的斜率变化往往比单个指标更能反映系统的阻尼特性。2.3 最小相位系统为什么不能只测幅频最小相位系统的相频特性可由幅频特性唯一确定理论上只测幅值就能反推相位。但实际被测对象只要带一个很小的延迟哪怕是一拍数字控制的零阶保持器相位滞后就会比最小相位系统更大单看幅频曲线根本看不出端倪。非最小相位系统的典型特征是相位滞后偏大而且幅频响应和相频响应不再一一对应。正因为如此实验中必须把相位测量当作标准动作不要因为省事只记录幅值。很多学生在实验四里栽跟头不是测不准而是只测了幅频后用软件补了一条理论相位曲线结果完全对不上。2.4 用Python画出理论Bode图作为测量对照实验开始前先算一条理论曲线后面实测数据才有比对基准。用 Scipy 可以快速得到任意传递函数的 Bode 图import numpy as np from scipy import signal import matplotlib.pyplot as plt # 被测系统G(s) 1 / (0.01s^2 0.1s 1)典型二阶低通 sys signal.TransferFunction([1], [0.01, 0.1, 1]) w np.logspace(1, 4, 500) # 角频率轴10^1 到 10^4 rad/s _, mag_db, phase_deg signal.bode(sys, w) fig, (ax1, ax2) plt.subplots(2, 1, sharexTrue) ax1.semilogx(w, mag_db) ax1.set_ylabel(Gain (dB)) ax2.semilogx(w, phase_deg) ax2.set_ylabel(Phase (deg)) ax2.set_xlabel(Frequency (rad/s)) plt.savefig(bode_theory.png, dpi150)signal.bode返回角频率、增益dB和相位度频率点由np.logspace生成对数均匀序列。参数里TransferFunction的分子分母系数严格对应该验用开环传函的形式实际做理论对照时把实验台被测系统的零极点代入这两行系数即可。画出的理论波特图保存下来和后面实测曲线画在同一张图上叠对比是最直接的验证手段。3 激励信号与测量链路把一个正弦扫频送进系统3.1 三种激励方案怎么选频率特性测试的第一步是决定激励信号。常见方案有三种单频正弦逐点测量、扫频正弦连续测量、伪随机噪声相关测量。单频正弦是最古老也最准确的方式每个频率点都要等稳态建立再记录测量时长随频点数线性增长适合低频段细节验证。扫频正弦效率高一次扫描覆盖整个频带但扫频速率必须受限于系统响应时间。白噪声相关法抗噪声能力强适合在线辨识但设备要求高且对频谱泄漏敏感。实验四这类课程项目通常在单频逐点和扫频之间二选一两者的精度差异在高 Q 值谐振峰附近才会明显体现方案单频正弦对数扫频伪随机噪声相关相对精度很高高中测量速度慢快最快抗噪声能力好中很强设备门槛信号发生器双通道示波器任意波形发生器同步采集卡计算3.2 最小硬件链路与接线注意事项最小可用链路只包含三台设备任意波形发生器负责输出正弦激励被测试系统实验箱里的模拟对象居中双通道示波器同时观察输入和输出。示波器 CH1 接信号源输出端CH2 接系统输出端两个通道用相同电压档位和时基便于后续对比。接线时要注意共地——信号发生器、实验箱、示波器三者的参考地必须接在一起否则看到的波形会是噪声叠真实信号的混合体。我一般会让输入端走 BNC 线输出端也走 BNC 线避免长裸线悬空引入工频干扰。3.3 生成对数扫频信号的Python代码扫频方式里对数扫频最常用因为可以直接按十倍频程均匀分配测量时间。生成对数扫频信号的代码如下import numpy as np def log_sweep(f0, f1, T_total, fs100_000, amp5.0): 生成对数扫频正弦信号 f0: 起始频率 Hz f1: 终止频率 Hz T_total: 扫描总时长 s fs: 采样率 Hz amp: 信号幅值 V N int(T_total * fs) t np.arange(N) / fs k np.log(f1 / f0) / T_total phase 2 * np.pi * f0 / k * (np.exp(k * t) - 1) x amp * np.sin(phase) return x, t对数扫频的瞬时频率按 f(t) f0·e^(kt) 指数变化相位是瞬时频率对时间的积分。参数上最关键的是 T_total它必须不小于被测试系统最小时间常数的 5 到 10 倍。对一阶惯性系统 T1s 来说扫描 10s 勉强够用如果扫得太快低频段还没进入稳态测量得到的幅值会比真实值偏小相位滞后也会被低估。3.4 采样率与采集时间参数速查采样率不足是所有频域测量误差中最隐蔽的一个。我习惯按最高激励频率的 20 倍取采样率最低不低于 10 倍相位测量对采样率更敏感差 1/4 采样周期就会产生系统性的相位误差。下面是最低可用的参考值最高激励频率 fmax最低采样率建议采样率最短采集时间1kHz10kHz20kHz1s10kHz100kHz200kHz0.2s100kHz1MHz2MHz0.1s采集时间直接决定频率分辨率 Δf 1/T。想分辨 5Hz 以下的频率细节采集时间至少 0.2s。扫频测量里频率分辨率还要和扫频速率联调这段内容留到后面的误差部分细讲。4 实测数据处理从原始波形到幅相特性曲线4.1 一次完整的频率特性测试流程整个实验可以按固定动作拆开。先确认被测系统处于开环状态断开反馈通路必要的时候在输入端并联一个 50 欧姆匹配电阻。然后设置信号源为对数扫频模式起始频率 1Hz、终止频率 1kHz、时长 10s、幅值 1V。触发输出后示波器记录输入输出波形数据存成 CSV。最后用 Python 离线处理画出实测 Bode 图初级版本。整个流程里最容易出错的一步是忘记确认系统是否稳定——如果开环状态下系统自己都在振荡任何测量结果都没有意义。4.2 单频点幅值比和相位差的互相关提取逐点测量时每个频点都有一段等幅正弦激励和响应。从这段数据里提取幅值比和相位差我一般用互相关法而不用直接 FFTdef extract_mag_phase(meas, ref, fs, freq): 从被测系统输出 meas 中提取频率 freq 处的幅值和相位 ref: 输入参考信号仅用于序列对齐 t np.arange(len(ref)) / fs # 本振分别取正弦和余弦做积分得到 I/Q 分量 I 2.0 / len(t) * np.trapz(meas * np.sin(2 * np.pi * freq * t), t) Q 2.0 / len(t) * np.trapz(meas * np.cos(2 * np.pi * freq * t), t) mag np.hypot(I, Q) phase np.arctan2(Q, I) return mag, phaseI和Q是正交解调后的同相与正交分量幅值等于两者的向量长度相位由arctan2得到。这段代码的关键在于本振频率必须和激励频率严格一致如果信号源有细小的频率偏差积分结果会被周期性的拍频污染。使用互相关法的好处是等效于一个中心频率为 freq 的窄带滤波器不需要整周期截断对非整数周期的数据同样有效。4.3 对数扫频数据的批量切段处理扫频模式下信号频率随时间连续变化需要把整段数据切成短时间窗口每个窗口近似认为频率固定然后调用上面的提取函数迭代处理。我习惯把频率轴按对数均匀分成 200 个点再按频率点逐步切段freqs np.logspace(np.log10(1), np.log10(1000), 200) mags [] phases [] seg_len int(fs * 0.1) # 100ms 一段 for i, f in enumerate(freqs): start int(i * seg_len) if start seg_len len(x): break segment_in x[start:start seg_len] segment_out y[start:start seg_len] mag, phase extract_mag_phase(segment_out, segment_in, fs, f) mags.append(mag) phases.append(phase)这里有个容易被忽略的细节段长和分析窗口的位置不能随意定。扫频速率快时一个窗口内的瞬时频率变化可能超过一个频率分辨率单位互相关结果会被“模糊”掉幅值被压低。此时要么降低扫频速率要么减小窗口长度但窗口缩短又会降低频率分辨率所以必须折中。我的经验是窗口内的频率变化控制在中心频率的 2% 以内否则测量结果直接报废。4.4 从实测曲线读穿越频率与相位裕度幅值和相位都算出来后先画图再读参数。0dB 穿越频率不能简单地取幅频曲线最近点因为离散频点的步长会带来明显误差要做线性插值import numpy as np mag_db 20 * np.log10(np.array(mags) 1e-12) for i in range(len(mag_db) - 1): if mag_db[i] * mag_db[i 1] 0: f_cross freqs[i] (0 - mag_db[i]) / (mag_db[i1] - mag_db[i]) * (freqs[i1] - freqs[i]) phase_cross np.interp(f_cross, freqs, phases) pm phase_cross - (-180.0) print(f穿越频率 {f_cross:.2f} Hz, 相位裕度 {pm:.1f} deg)这段代码遍历相邻频点在幅频曲线穿越 0dB 的位置做线性插值再用np.interp在该频点读相位。用这样的方式读出的相位裕度比直接取点更稳。如果实验系统是二阶环节还可以顺带记录谐振峰值的频率和理论公式预测的阻尼比对照能反过来验证实验台参数是否正确。4.5 数据异常排查速查表现象直接原因先查参数高频段幅值持续低于理论值采样率不够或输出通道带宽受限采样率是否大于 20 倍 fmax相位曲线无规律跳变激励扫频过快未进入稳态扫描时长是否够 5 倍时间常数输出波形明显削顶激励幅值过大进入非线性区减小幅值到输出无失真幅频曲线上有等间隔波纹地环路或电源纹波注入检查共地、换短线、加屏蔽这张表是我在实际调试中反复使用的第一排查清单。出现异常时先别急着怀疑代码按照表里的顺序检查采样率和接线往往几分钟就能定位问题。5 让测量结果站得住的五个边界技巧5.1 判断系统是否真的进入稳态实验里最常见的假象是“波形看起来稳定了但曲线整体往下偏”。判断稳态不能只看示波器画面要看输出波形包络是否随时间为常数。固定激励频率时切换示波器到滚动时间模式观察 3 到 5 个时间常数后包络不再变化才记录。对二阶系统调整到阻尼比 0.7 附近时稳定等待时间约为峰值时间的 4 到 6 倍。5.2 扫频速率和时间常数的匹配规则对数扫频下每个十倍频程的持续时长要单独检查。一阶惯性环节如果在转角频率附近停留时间不足 5 倍时间常数幅频曲线会在转角处出现明显的下凹相位滞后也比理论值小。常见修正是把 T_total 从 10s 增加到 30s代价只是数据处理量变大但曲线形状能贴近理论值。5.3 泄漏、窗函数与整周期截断FFT 直接测量对非整数周期截断极其敏感幅值误差可达 15% 以上。如果非要用 FFT 做快速预览给数据加 Hanning 窗再变换能显著压低旁瓣泄漏。互相关法本身等效窄带滤波器不依赖整周期截断这也是实验四数据处理里我更推荐它的原因。加窗后的曲线注意幅度要按窗函数有效带宽修正否则增益读数会系统性偏低。5.4 用理论曲线做合理性校验把实测幅相曲线和实验前算好的理论 Bode 图叠在一张图里如果中频段增益差超过 2dB 或相位差超过 10°先检查激励幅值是否有谐波失真再检查输入输出两个通道是否在同一示波器上同步采样。相位曲线如果在某个频点出现突然上翘优先怀疑两个通道之间存在时间偏斜100kHz 时只要差 10μs 就是 36° 相位误差足以把相位裕度从稳定判成不稳定。这个时间偏斜可以直接在前端给两个通道同时接同一个信号来标定做一次差分测量就能把它扣掉。本文还有配套的精品资源点击获取