我想从Simulnik文件model.mdl中绘制一个传递函数,我使用块来自Workspace(simin)和To Workspace(simou)从Matlab开始模拟。
现在出现了问题。我简直找不到在Matlab中运行这个Simulink模型的方法。
这是我的代码;
sim('model');
h=simout/simin;
[H,omega]=freqz(h);
%plot
我得到了这个错误;
Error evaluating parameter 'VariableName' in 'model/From
Workspace'
Caused by:
Error using sigma (line 8)
Undefined function or variable 'simin'.
我做错了什么?
这是我的模特:
非常感谢你。
答案 0 :(得分:2)
你真的知道转移功能吗?在Simulink中正确实现?然后错误表明您没有为您的工作区块分配正确的变量名称,您只保留默认的VariableName
。对于频率响应,您需要使用tf
在Simulink外部定义传输函数,然后使用bodeplot
绘制它。
(看看这些答案的结尾)
但在我看来,你有一些 inputdata 和一些 outputdata ,你想估算传递函数,最后获得该传递函数的频率响应。 Simulink没有必要这样做。找到传输函数后,您可以使用Transfer function
块将其实现到Simulink中,使用From Workspace
块提供模拟,并使用Scope
显示结果。但首先你需要转移功能。
假设您有变量inputdata
和outputdata
,首先需要创建传递函数数据集:
% prepare data for tftest, 100 is a random chosen sampling time
tfdata = iddata(data(:,1),data(:,2),100);
然后您可以使用tfest
估算具有选定极数的传递函数:
N = 5; % Number of poles
sys = tfest(tfdata,N);
您获得的频率响应,例如与bodeplot
:
bodeplot(sys)
您打算使用的函数FREQZ
仅用于数字滤波器,而不用于传递函数。
最后,您可以使用Simulink测试您的模型:
Transfer Fcn
阻止的分子是sys.num{1}
,分母sys.den{1}
(我的例子)。
如果Scope
中显示的图表(请注意,您应该在范围设置中禁用“限制数据指向持续5000”)与您的outputdata
类似,估算成功。
我为你的模型做了一个测试:(固定步骤求解器,没有连续状态,0.0001步进时间。)
然后是以下代码:
tfdata = iddata(inputdata,outputdata,0.0001);
N = 5;
sys = tfest(tfdata,N);
bodeplot(sys)
返回:
sys =
From input "u1" to output "y1":
-2068 s^4 + 2.89e06 s^3 + 7.017e10 s^2 + 5.205e13 s - 8.931e15
-------------------------------------------------------
s^5 + 1.034e04 s^4 + 4.552e07 s^3 + 1.114e11 s^2 + 8.337e13 s + 8.931e15
和
或将其转换为离散:
sysd = c2d(sys,0.0001)
sysd =
From input "u1" to output "y1":
-0.0995 z^-1 + 0.4644 z^-2 - 0.7491 z^-3 + 0.5061 z^-4 - 0.1219 z^-5
-------------------------------------------------------
1 - 4.042 z^-1 + 6.554 z^-2 - 5.332 z^-3 + 2.176 z^-4 - 0.3556 z^-5
我无法帮助你,无论如何这是一个功课,对吧?所以其余的由你决定。老实说,手工计算吧!它将更精确!
答案 1 :(得分:2)
嗯,错误消息应该是不言自明的:您还没有在基础工作区中定义变量simin
。定义它(作为时间的函数),然后你的模型就会运行。
dlinmod
,正如其他人已经指出的那样,或linearize
如果你有Simulink控制设计。您的方法容易产生噪音而且不够稳健。它还依赖于您输入的所有频率成分,这是不太可能的。 Simulink Control Design还提供frestimate
来估计模型的频率响应函数。
答案 2 :(得分:1)
查看dlinmod:围绕工作点(来自Simulink
模型)提取离散时间线性状态空间模型。