用途:当 Simulink 模型无法干净地线性化(含 PWM、开关、继电器、量化器等硬不连续环节,linearize 结果为 0 或 NaN),或需要用仿真线性化验证线性模型时,通过仿真估计频率响应。若模型可干净线性化应改用 simulink-linearize;若只有实测数据无 Simulink 模型,应使用 System Identification Toolbox。
工作流:定义 I/O(linio)→ 选择扰动信号(PRBS/Sinestream)→ 配置约束 → 估计(frestimate)→ 可选拟合(tfest)。
主要能力与用法:
- 定义 I/O 点:linio 必须引用模块输出端口;若候选模块无输出端口(Outport、Terminator、Scope),需用 model_read 向上游追溯源模块。无法确定 I/O 时不要猜测,应询问用户。
- 选择信号:默认用 frest.PRBS 单次仿真估计全频段;需要特定频率精确幅相时用 frest.Sinestream(连续)或 frest.createFixedTsSinestream(离散)。离散模型用 createFixedTsSinestream 时必须用元胞语法 {wmin, wmax},不可传显式频率向量。
- 配置:PRBS 示例 in = frest.PRBS(Ts=Ts, Amplitude=0.01, Order=10, NumPeriods=2);Sinestream 需满足 NumPeriods - SettlingPeriods >= 3(滤波开启时)。用 getSimulationTime 检查信号时长。
- 估计:sysest = frestimate(mdl, op, io, in, opts),结果为 frd 对象。
- 可选拟合:sysFit = tfest(sysest, np, nz)。
关键限制:时变源模块(Step、Ramp、Signal Generator 等)会把模型推离稳态工作点,导致估计不可靠且不报错,需用 frest.findSources 识别并设置 opts.BlocksToHoldConstant 保持恒定。不要用 replace_block 绕过零线性化。I/O 点采样时间须与扰动信号速率匹配。扰动幅值应小(约工作范围 1-5%)以保持局部线性。
关键函数:frestimate、frest.findSources、frestimateOptions、frest.PRBS、frest.Sinestream、frest.createFixedTsSinestream、getSimulationTime、tfest、ssest。