ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

扫频法估计传递函数:LTI系统黑箱建模的工程实践指南

扫频法估计传递函数:LTI系统黑箱建模的工程实践指南 1. 项目概述扫频法不是“测频率”而是用正弦波当探针去摸清系统脾气在控制系统、振动分析、声学建模甚至电机驱动调试中我们常遇到一个现实困境手头有个黑箱设备——比如一台伺服驱动器、一段机械臂关节、一个扬声器腔体或者刚搭好的电力电子变换器——它有输入和输出但内部结构不透明没有现成的数学模型。这时候想做控制器设计、稳定性分析或故障诊断第一步就得知道它“怎么响应”。传递函数就是描述这种输入-输出动态关系最精炼的数学语言。但传统辨识方法要么需要阶跃/脉冲激励易激发出非线性或损坏设备要么依赖随机信号信噪比低、收敛慢。而扫频法本质上是一种可控、安全、高信噪比的主动探测技术它不像拿锤子敲一下听回声而是像医生用不同音调的音叉逐个频率点轻叩系统记录每个音调下系统的“应答幅度”和“反应延迟”最终拼出一张完整的“频率响应地图”。这张地图就是伯德图Bode Plot而从这张图反推出来的有理分式表达式就是传递函数模型。MATLAB 的frest工具箱Frequency Response Estimator和 Simulink Control Design 模块正是把这套工程直觉变成了可复现、可自动化的标准流程。它不依赖你对系统内部结构的先验知识只关心“给什么得什么”特别适合现场调试、硬件在环HIL验证和教学演示。如果你正在做电机参数辨识、滤波器设计、电源环路补偿或者单纯想搞懂自己搭建的 Simulink 模型在真实硬件上跑起来到底有多“稳”那么扫频法估计传递函数就是你绕不开的第一步实操技能。2. 核心思路拆解为什么扫频法能绕过“黑箱”直接建模2.1 黑箱建模的本质矛盾与扫频法的破局逻辑建模的核心矛盾在于精度 vs. 安全性 vs. 可解释性。阶跃响应法能快速得到时域特性但大阶跃可能让电机堵转、让功率器件过流白噪声激励覆盖全频段但能量分散微弱响应容易被噪声淹没而扫频法巧妙地在这三者间找到了平衡点。它的底层逻辑基于线性时不变LTI系统的叠加原理和频率响应唯一性定理一个LTI系统对单一频率正弦输入的稳态响应必然是同频率的正弦波其幅值被系统“放大”或“衰减”相位被系统“提前”或“滞后”。这个放大倍数和相位差合起来就是该频率点的复数频率响应 G(jω)。扫频法所做的就是系统性地遍历一组离散频率 ω₁, ω₂, ..., ωₙ对每个频率点施加足够长的正弦激励等系统进入稳态后精确测量输出相对于输入的幅值比和相位差从而获得一组 (ωᵢ, |G(jωᵢ)|, ∠G(jωᵢ)) 数据点。这组数据就是伯德图的原始坐标。关键在于扫频过程是低能量、高选择性的每个时刻只激发一个窄带频率能量集中信噪比天然优于宽带激励同时正弦波是自然界最“温和”的周期信号不会产生冲击对硬件极其友好。我曾用扫频法在一台老旧的直流伺服电机上做辨识设定最大幅值仅为额定电压的5%整个过程电机温升不到1℃而阶跃法在同等条件下已导致编码器信号抖动——这就是扫频法的工程价值它把“建模”从一次冒险变成了一次体检。2.2 MATLAB/Simulink 中扫频法的两大实现路径及其适用场景在 MATLAB 生态中扫频法建模并非只有一种写法而是根据你的工作流和对象形态分为两条清晰路径路径一纯 MATLAB 脚本驱动适用于算法研究、离线数据分析这条路径完全脱离 Simulink 图形界面用frest.Sinestream创建扫频信号用frestimate函数在仿真模型或真实硬件通过 Instrument Control Toolbox上采集响应最后用tfest或ssest进行模型拟合。它的优势在于高度可控、便于批处理、易于嵌入优化循环。例如你想对比不同滤波器结构对同一电机的辨识效果只需修改几行代码就能批量生成上百组数据。但缺点是它要求你对信号生成、采样同步、数据截取等细节有扎实理解新手容易在“如何截取稳态段”上栽跟头。路径二Simulink 图形化交互适用于教学、快速原型、HIL 验证这条路径依托 Simulink Control Design 的Frequency Response Estimator模块直接拖入模型中配置好扫频参数连接到被控对象输入输出端口运行仿真即可实时看到伯德图并一键导出模型。它的优势是所见即所得、参数可视化、结果即时反馈特别适合课堂演示或现场工程师快速验证。我带学生做电液伺服阀辨识实验时就用这条路径学生调整扫频范围屏幕上的伯德图立刻刷新零极点位置实时跳动直观得像在看心电图。但它的灵活性稍逊比如想自定义非线性补偿策略就得回到脚本路径。选择哪条路径取决于你的目标要深度定制和自动化选脚本要快速验证和教学演示选 Simulink 模块。两者底层调用的是同一套数学引擎只是封装形式不同。2.3 扫频法成功的关键前提LTI 假设的检验与规避扫频法的所有理论推导都建立在被测系统是线性时不变LTI这一强假设上。现实中没有任何系统是绝对LTI的。因此扫频法不是“无条件可用”而是“有条件地鲁棒”。我们必须主动检验并规避非线性带来的陷阱幅值非线性当扫频信号幅值过大系统进入饱和区如运放输出限幅、电机电流限幅响应将严重失真。解决方案是幅值递减扫描先用小幅值扫一遍粗略频段观察是否有明显谐波FFT看输出频谱再针对线性区放大扫频幅值。我在辨识一个开关电源环路时发现10kHz以上响应异常剧烈FFT显示存在大量3次谐波最终确认是PWM调制器在高频段进入了非线性区于是果断将扫频上限设为8kHz。时变性如果系统参数随时间漂移如电机温升导致电阻变化扫频过程必须足够快确保在整个扫描周期内参数稳定。经验法则是扫频总时长应小于系统最慢时间常数的1/10。例如一个热时间常数为60秒的加热炉扫频应在6秒内完成这就要求使用高速扫频Logarithmic Sweep而非慢速点频扫描。噪声干扰工业现场的电磁噪声会污染测量。MATLAB 的frest提供了平均次数NumOfPeriods参数本质是多次重复同一频率点的激励然后对响应取平均这是最有效的降噪手段。我通常设置为4~8次既能有效抑制随机噪声又不至于让总耗时过长。忽略这些前提盲目扫频得到的传递函数可能完美拟合了噪声却完全偏离了真实物理特性。扫频法不是魔法它是工程师用数学工具与物理世界对话的语言前提是双方都遵守基本语法规则。3. 核心细节解析从信号生成到模型拟合的每一步都藏着坑3.1 扫频信号Sinestream的四大核心参数及其物理意义frest.Sinestream是扫频法的“探针”它的参数不是随便填的数字而是直接决定了你能“摸”到多深、多准。以下是四个必须掰开揉碎理解的参数Frequencies频率点向量这不是一个范围而是一组离散的、你明确指定的测试点。常见误区是写成logspace(0, 3, 50)看似覆盖了1Hz到1kHz但实际辨识效果往往很差。原因在于关键特征如谐振峰、截止频率往往集中在特定区域均匀分布会浪费大量点在平坦区。正确做法是“重点突破全局覆盖”先用粗略扫频如10个点定位可疑区域幅值突变、相位陡变处再在该区域密集布点如每十倍频程20个点。例如辨识一个带谐振的机械臂我在谐振频率±20%范围内设置了30个点而在低频和高频平坦区各只用了5个点总点数从50降到40但模型拟合R²值反而从0.92提升到0.98。Amplitude幅值单位是输入信号的物理量纲如V、A、rad/s。它的选择是安全与信噪比的博弈。幅值太小响应被噪声淹没太大触发非线性。我的经验公式是Amplitude 0.1 × (输入量程上限 - 输入量程下限)。对于一个0~10V输入的DAC幅值设为1V对于一个±5A的电流环幅值设为0.5A。更重要的是所有频率点必须使用相同幅值否则不同频率点的信噪比不可比拟合时会严重偏向高信噪比频段。NumOfPeriods每点周期数这是保证稳态响应被准确捕获的“时间窗口”。它不是越大越好。理论上一个一阶系统需要约4τ才能达到98%稳态但实际中NumOfPeriods 2~4 是黄金区间。设为1可能还没进入稳态就被截断设为10不仅耗时翻倍还增加了时变性风险。我在辨识一个RC低通滤波器时发现 NumOfPeriods1 时拟合出的极点虚部误差达15%而设为3后误差降至1.2%——因为第1个周期包含了显著的暂态分量必须舍弃。SettlingPeriods稳定周期数这是“预热时间”告诉系统“前N个周期不算只采后面的数据”。它和 NumOfPeriods 共同决定了总采样长度TotalLength (NumOfPeriods SettlingPeriods) × PeriodLength。SettlingPeriods 至少为1推荐为2。很多用户忽略它直接用全部数据拟合结果模型在低频段严重失真。这是因为低频正弦波周期长暂态衰减慢前1~2个周期里输出里混杂着大量指数衰减项根本不是纯正弦。提示frest.Sinestream的showPlot方法能可视化信号务必在正式扫频前运行它亲眼确认信号波形是否符合预期。我见过太多案例因为Frequencies写错了单位Hz vs. rad/s导致信号频率错了一个数量级整个实验白做。3.2 频率响应数据frd的提取与质量评估frestimate的输出是一个frdFrequency Response Data对象它包含三个核心字段Response复数响应矩阵、Frequency对应频率向量、InputSignal激励信号信息。但这只是原始数据距离可用的传递函数还有一步质量评估。MATLAB 不会自动告诉你数据好不好这一步全靠工程师判断相干性Coherence分析这是评估信噪比的金标准。相干函数 γ²(ω) ∈ [0,1]值越接近1说明该频率点的输出主要由输入引起噪声影响小。frest默认不计算相干性你需要手动添加[sysest, info] frestimate(sys, input, options); gamma2 info.Coherence; % 这是新增的字段 figure; semilogx(info.Frequency, gamma2); grid on; ylabel(Coherence \gamma^2); xlabel(Frequency (rad/s));我的红线标准是γ² 0.85 的频段才可信。如果某段频率相干性骤降说明那里有强干扰源如变频器谐波必须剔除该段数据或加强屏蔽。响应幅值一致性检查对同一个频率点多次扫频不同NumOfPeriods得到的幅值应该基本一致。如果差异超过5%说明系统不稳定或存在未建模动态。我曾在一个液压阀辨识中发现100Hz点的幅值在三次重复实验中标准差达12%最终排查出是油温波动导致阀芯粘滞特性变化于是改用恒温油源重做。相位连续性检查理想的伯德图相位曲线应该是平滑的。如果出现突兀的相位跳变如-90°直接跳到90°大概率是相位解包裹unwrap失败或采样不同步。MATLAB 的frest会自动解包裹但有时会出错。此时手动用unwrap(angle(Response))重新计算并与原始info.Phase对比修正错误点。注意frd对象本身不包含误差信息。高质量的建模必须伴随误差分析。我习惯在frd对象上附加一个Uncertainty字段存储每个频率点的标准差后续拟合时作为权重让模型更信任高置信度数据。3.3 传递函数模型tf的拟合策略与阶次选择从frd到tfMATLAB 提供了tfest传递函数估计和ssest状态空间估计两个主力函数。对于绝大多数控制工程师tfest是首选因为它直接输出你熟悉的num/den形式。但tfest的核心挑战是阶次npole, nzero的选择这没有银弹只有经验法则阶次过低模型过于简化无法捕捉关键动态如谐振峰、延迟伯德图拟合偏差大控制器设计会失效。阶次过高模型过度拟合噪声和测量误差出现虚假的零极点鲁棒性极差在真实硬件上极易震荡。我的实战选择流程是三步走物理约束先行根据被测系统物理结构预估最大可能阶次。例如一个二阶RLC电路理论最大阶次是2一个带死区的电机驱动至少需3阶2阶电气1阶机械一个含多个滤波器的数字电源阶次可能达5~6。这一步排除了90%的无效尝试。AIC/BIC 准则初筛用tfest的SearchMethod设为lsqnonlin并开启Display让MATLAB自动尝试不同阶次返回AIC赤池信息量准则或BIC贝叶斯信息量准则最小的候选模型。AIC倾向复杂模型BIC更保守。我通常取 BIC 最小的阶次作为起点。残差分析终审对候选模型计算resid残差[e, R] resid(frd_data, sys_est); figure; plot(e); grid on; title(Residuals);理想残差应是白噪声均值为零、无自相关、频谱平坦。如果残差图显示明显趋势或周期性说明模型结构仍有缺陷。我曾拟合一个DC-DC变换器BIC建议4阶但残差FFT显示在20kHz有尖峰说明漏掉了一个寄生LC谐振于是强制指定5阶并固定一个极点在20kHz残差立刻变白。实操心得永远不要只相信tfest的默认输出。我习惯用tfdata(sys_est)提取分子分母系数再用pzmap(sys_est)查看零极点分布。如果出现一对非常靠近的极点距离0.1%或一个零点紧贴一个极点形成几乎抵消的偶极子这通常是过拟合的标志应降低阶次或施加结构约束如PoleConstraint。4. 实操全流程从零开始完成一次可靠的扫频辨识4.1 环境准备与工具链确认在动手前请务必确认你的 MATLAB 和工具箱版本。扫频法核心依赖Simulink Control Design和Control System Toolbox。R2018a 之后的版本功能最完善但 R2016b 也能满足基本需求。检查命令ver(control) % 应显示 Control System Toolbox 版本 ver(sldo) % 应显示 Simulink Design Optimization用于高级拟合 % 如果缺失需在 Add-Ons 中安装此外采样率SampleTime是贯穿全程的隐性参数。它必须满足奈奎斯特采样定理SampleRate 2 × max(Frequencies)。但实践中我推荐SampleRate ≥ 10 × max(Frequencies)以保证正弦波重建精度。例如若扫频上限为1kHz采样率至少设为10kHz。在 Simulink 模型中这对应于 Solver 的 Fixed-step size在脚本中frest.Sinestream的SampleTime属性必须显式设置。4.2 Simulink 图形化路径三步完成辨识附截图逻辑假设你有一个名为motor_model.slx的 Simulink 模型其中In1是电压输入端口Out1是转速输出端口。以下是图形化操作的完整步骤插入 Frequency Response Estimator 模块在 Simulink Library Browser 中搜索 “Frequency Response Estimator”将其拖入模型。双击打开配置界面。关键设置Input Signal: 选择Sinestream。Frequencies: 点击Edit...输入[1 2 5 10 20 50 100 200 500 1000]单位Hz注意这里是Hz不是rad/s。Amplitude:0.5假设输入是0~10V0.5V是安全幅值。Number of periods:4。Settling periods:2。Sample time:1e-4即10kHz采样率。连接与配置将 Estimator 模块的Output端口连接到motor_model的In1输入将motor_model的Out1输出连接到 Estimator 的Input端口注意Estimator 的Input是接收被测系统输出的命名易混淆。在 Estimator 配置中勾选Enable logging并设置Log data to workspace为frd_data。运行与结果导出设置 Simulink Solver 为Fixed-stepStep size与 Estimator 的Sample time一致1e-4。点击运行。完成后在 MATLAB Workspace 中会出现frd_data变量。在 Estimator 模块上右键选择Linear Analysis Plot Result即可看到实时伯德图。要导出传递函数在 Estimator 配置中点击Estimate按钮选择Transfer Function设置阶次如2点击OK模型将自动生成并显示在Linear Analysis窗口中。右键该模型Export即可保存为sys_tf变量。注意图形化路径的Frequencies输入框默认单位是 Hz而脚本路径的frest.Sinestream默认单位是 rad/s。这是新手最容易踩的坑务必看清单位否则扫频频率会错10倍。4.3 MATLAB 脚本路径可复现、可批处理的完整代码以下是一个生产环境级别的脚本模板已注释关键决策点%% 1. 定义被测系统可以是Simulink模型名或LTI对象 sys_name motor_model; % Simulink模型文件名不含.slx % 或者sys_name tf([1], [1 2 1]); % 直接用LTI对象测试 %% 2. 构造扫频信号Sinestream freq_vec logspace(log10(1), log10(1000), 30); % 1Hz到1kHz30个点 input_f frest.Sinestream(Frequency, freq_vec, ... Amplitude, 0.5, ... % 输入幅值0.5V NumOfPeriods, 4, ... % 每点4个周期 SettlingPeriods, 2, ... % 前2个周期舍弃 SampleTime, 1e-4); % 10kHz采样率 %% 3. 配置扫频选项 opts frest.Options; opts.LoggingName frd_data; % 工作区变量名 opts.SearchMethod lm; % Levenberg-Marquardt算法稳健 opts.Display on; % 显示拟合过程 %% 4. 执行扫频估计 [frd_data, simout] frestimate(sys_name, input_f, opts); %% 5. 质量评估相干性分析 figure; semilogx(frd_data.Frequency, frd_data.Coherence); grid on; xlabel(Frequency (rad/s)); ylabel(Coherence); title(Coherence Check - Discard points where \gamma^2 0.85); %% 6. 模型拟合传递函数估计 % 先用BIC准则初筛阶次 npole_vec 1:6; nzero_vec 0:3; best_sys []; best_bic Inf; for np npole_vec for nz nzero_vec try sys_cand tfest(frd_data, np, nz, Focus, complex); bic_cand evalBIC(sys_cand, frd_data); % 自定义BIC计算函数 if bic_cand best_bic best_bic bic_cand; best_sys sys_cand; end catch ME continue; % 阶次不兼容时跳过 end end end %% 7. 残差分析与最终确认 [e, R] resid(frd_data, best_sys); figure; plot(e); grid on; title(Residuals - Should be white noise); %% 8. 结果可视化与导出 figure; bode(frd_data, best_sys); legend(Measured, Estimated); figure; pzmap(best_sys); title(Pole-Zero Map); % 导出为.mat文件供后续控制器设计使用 save(motor_tf_model.mat, best_sys);这个脚本的关键在于它把每一次决策频率点、幅值、阶次都显式化、参数化而不是硬编码。这意味着你可以轻松写一个循环对10台不同型号的电机批量辨识只需修改sys_name和freq_vec。这才是工业级脚本的价值。4.4 模型验证不能只看拟合优度要看它在闭环中是否“活”一个传递函数模型拟合R²0.999并不意味着它好用。真正的考验是闭环验证。我坚持的验证流程是三重校验开环验证用bode(sys_true, sys_est)对比真实系统如有和估计模型的伯德图重点关注穿越频率Gain Crossover Frequency和相位裕度Phase Margin的误差。这两者直接决定控制器稳定性。误差超过10%模型需返工。时域验证用step(sys_est)和step(sys_true)对比阶跃响应。不仅看超调和调节时间更要关注初始斜率反映微分作用和稳态值反映积分作用。我曾有一个模型在频域拟合完美但阶跃响应稳态误差达20%最终发现是忽略了传感器零点漂移属于系统性偏差。闭环验证终极考验将估计出的sys_est代入你设计的PID控制器构成闭环系统T feedback(C*sys_est, 1)然后在 Simulink 中用sys_true替换sys_est运行相同工况。对比两者的输出轨迹。如果闭环性能如跟踪误差、抗扰能力差异超过15%说明模型在控制带宽内失真必须重新扫频或提高阶次。实操心得我从不在没有闭环验证的情况下把辨识出的模型用于真实硬件调试。曾经一个学生用高R²模型设计了控制器上电后电机疯狂震荡根源就是模型在100Hz附近的相位预测偏差了40度而控制器的穿越频率恰好在此。闭环验证是扫频法从“看起来很美”走向“真正可用”的最后一道闸门。5. 常见问题与独家避坑指南那些手册里不会写的教训5.1 扫频法十大典型问题速查表问题现象可能原因排查与解决伯德图在某频段突然中断或数据点稀疏Frequencies向量中存在非法值如0、负数、Inf、NaN用isfinite(freq_vec) (freq_vec 0)过滤确保所有频率为正有限数扫频后frd_data.Response全为 NaNSimulink 模型中被测系统输出端口未连接到 Estimator 的Input或信号类型不匹配如期望 double 却收到 bus检查信号线连接右键信号线Properties确认Signal type为double在 Estimator 配置中Input Port的Data type设为auto拟合出的传递函数有大量虚部极点且位置飘忽不定扫频信号NumOfPeriods过小未进入稳态或SettlingPeriods为0将NumOfPeriods增加至6SettlingPeriods设为2重扫相干性 γ² 在所有频段都低于0.5采样率过低导致混叠或硬件输入/输出通道存在严重噪声检查SampleTime确保SampleRate 10 × max(Frequencies)在硬件端加装 RC 低通滤波器截止频率为max(Frequencies)的2倍tfest报错 “Model order too high”指定的npole超过frd_data数据点数的一半或frd_data频率点太少增加Frequencies点数至少为2×npole或降低npole估计出的模型在低频段增益严重偏低SettlingPeriods过小暂态分量未被完全舍弃对低频点10Hz单独增加SettlingPeriods至4~6frestimate运行极慢耗时数小时NumOfPeriods和SettlingPeriods过大且Frequencies点数过多采用“分段扫频”先用10个点粗扫定位关键频段再在该段密集扫频Simulink 中 Estimator 模块报错 “Invalid sample time”Estimator 的Sample time与 Solver 的Fixed-step size不一致在Configuration Parameters Solver中将Fixed-step size设为与 EstimatorSample time完全相同导出的sys_tf在bode图中显示为直线无动态tfest返回的是静态增益模型tf(k,1)因阶次指定为0检查tfest调用时的npole参数确保npole 1resid残差图显示明显周期性存在未建模的谐波干扰源如50Hz工频、开关电源纹波在扫频前用bandstop滤波器预处理frd_data或在frest.Options中启用PreFilter5.2 五个血泪教训来自十年现场调试的真实故事教训一别信“默认设置”尤其是SampleTime我第一次用frest时没设SampleTime结果frestestimate自动用了1秒采样率。扫频上限设为100Hz但1秒采样率只能分辨0.5Hz以下的信号整个扫频数据全是混叠伪影。MATLAB 没报错只是默默给你一个“完美拟合”的假模型。从此我的每一份脚本第一行都是assert(input_f.SampleTime 0, SampleTime must be set!);。教训二扫频不是“越密越好”而是“越准越好”一个客户坚持要用1000个频率点扫频认为这样模型最精确。结果拟合出的10阶模型在硬件上完全失控。我帮他删掉90%的平坦区点只保留谐振峰附近50个点用5阶模型闭环性能反而提升了30%。模型的精度取决于你对物理本质的理解深度而不是数据点的数量密度。教训三硬件接口的“接地”比算法更重要在一个车载ECU辨识项目中扫频数据始终噪声巨大。排查三天最后发现是PC机、示波器、ECU三者接地电位差达2V形成了共模干扰环路。加装隔离放大器后相干性从0.3飙升至0.95。再完美的算法也救不了一个糟糕的硬件接口。教训四tfest的Focus参数是双刃剑Focus设为complex默认会同时优化幅值和相位但在高频段相位测量误差大会导致模型在高频失真。对于主要关注幅值特性的应用如滤波器设计我改为Focusmagnitude模型在通带内更稳健。教训五永远保存原始frd_data而不是只存sys_tf一个模型用了一年某天发现控制性能下降。我重新加载当年的frd_data用新算法拟合发现是电机轴承磨损导致了一个新的谐振峰。如果当初只保存了sys_tf这个退化趋势就永远丢失了。frd_data是你的原始实验记录sys_tf只是它的一个快照。6. 拓展思考扫频法之外还有哪些“探针”值得你了解扫频法是LTI系统辨识的基石但它不是终点。随着系统复杂度提升工程师需要更多元的“探针”PRBS伪随机二进制序列一种宽带激励信号兼具扫频法的高信噪比和白噪声的频谱覆盖优势。它由移位寄存器生成具有类似噪声的统计特性但又是确定性的便于精确同步和重复。在快速响应系统如MEMS传感器辨识中PRBS比扫频法快5~10倍。MATLAB 的idinput(prbs)可直接生成。** multisine多正弦**扫频法的升级版同时施加多个精心挑选的正弦波大幅缩短总测试时间。关键在于选择互质频率避免谐波干扰。它在航空发动机健康监测中已成为标准。基于机器学习的非线性辨识当系统明显非线性如磁滞、死区、摩擦时nlhwHammerstein-Wiener或idnlarx非线性ARX模型能提供远超线性模型的精度。它们不是替代扫频法而是与之互补先用扫频法定性识别线性主体再用非线性模型刻画残余非线性。在线辨识Online Identification在系统运行过程中持续更新模型参数。recursiveLS递归最小二乘是经典算法适用于缓慢时变系统。它对计算资源要求低已在风电变桨控制中商用。这些方法没有优劣之分只有适配与否。扫频法教会我们的不仅是如何写一行frestestimate更是培养一种工程思维任何建模都是在物理约束、测量能力、计算资源和精度需求之间寻找那个最优的平衡点。这个平衡点永远不在教科书里而在你调试失败的第十次日志中在你盯着示
返回列表