你真的知道传递函数吗?在 Simulink 中是否正确实现?然后错误表明您没有为 from 工作区块分配正确的变量名称,您只是保留了默认的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
我帮不了你了,反正这是一个家庭作业,对吧?所以剩下的就看你了。老实说,手动计算!会更准确!