You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过MATLAB从Simulink框图获取数据并绘制传递函数?

Simulink数据提取与传递函数构建解决方法

问题根源

你直接用tf(res.simout.data,res.in.data)创建传递函数失败,是因为tf()函数不支持直接用输入输出的时域数据生成传递函数——它需要的是系统分子分母的多项式系数,或者通过系统辨识方法从时域数据中推导。

正确操作步骤

  • 先确认Simulink模型配置
    确保模型里的输入、输出信号都连接了Outport模块,或者用Workspace I/O模块(比如simout、in)把数据输出到MATLAB工作区,且仿真时数据记录功能正常启用。

  • 方法一:通过系统辨识从仿真数据生成传递函数
    用系统辨识工具箱的函数处理时域数据,步骤如下:

    res = sim("Test.slx");
    % 创建辨识数据集,第三个参数是采样间隔,从仿真结果中获取
    data = iddata(res.simout.data, res.in.data, res.simout.SamplingInterval);
    % 估计传递函数,这里指定分子阶数为2、分母阶数为2,可根据实际调整
    G_est = tfest(data, 2, 2);
    % 查看并绘制传递函数特性
    disp(G_est);
    bode(G_est); % 绘制频域响应
    compare(data, G_est); % 对比原始仿真数据与辨识模型的响应
    
  • 方法二:直接从线性Simulink模型提取传递函数
    如果你的模型是线性系统,不用跑仿真也能直接提取:

    load_system("Test.slx");
    % 指定输入端口编号和输出端口编号,比如输入是Port 1,输出是Port 2
    sys_mat = getlinmod("Test.slx", 1, 2);
    G_tf = tf(sys_mat); % 转换为传递函数对象
    disp(G_tf);
    

注意点

  • 仿真输入信号尽量用脉冲、阶跃或伪随机信号,这类信号包含足够的频率信息,能让辨识结果更准确。
  • 若用getlinmod,模型里不能有非线性模块,否则提取的线性化模型会失真。

内容的提问来源于stack exchange,提问作者Dario

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 03:19:57