如何通过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
相关产品推荐
相关产品推荐

