6

我有一个从 NI-DAQ 获得的两列数据矩阵。第一列是电动发电机组(带驱动器)的输出数据,第二列是输入数据(方波)。我想在tfest没有 Simulink 的情况下找到传递函数。可能吗?我有系统识别工具箱

如何将 .mat 文件附加到此帖子?我关于 gist 的数据https://gist.github.com/anonymous/6484844

4

1 回答 1

7

你已经有了正确的想法,我不知道你卡在哪里了。这是解决您问题的代码,我对其进行了测试,它工作正常。请注意,更简单的输入可能会为您带来更好的结果,这意味着例如单步而不是方波。

% load your data (text file with your two columns)
load data.txt;

% sample index, reducing of input to get single step instead of square wave
x = 1:1:length(data);
data(x > 2900,:)=[];
x(x > 2900)=[];

% plot data
figure(1)
plot(x,data(:,1)); hold on
plot(x,data(:,2)); hold off

% prepare data for tftest, 100 is a random chosen sampling time
tfdata = iddata(data(:,1),data(:,2),100);

% estimate system, factor 5 -> number of poles (variable as desired)
sys = tfest(tfdata,5);

% plot step response (factor 5 comes from input)
figure(2)
step(5*sys)

编辑:极数 np=5 的输出:

sys =


  From input "u1" to output "y1":
    -3.337e-05 s^4 + 1.326e-07 s^3 + 1.639e-11 s^2 + 1.221e-14 s + 1.064e-19
  ----------------------------------------------------------------------------
  s^5 + 0.005287 s^4 + 1.516e-06 s^3 + 4.517e-10 s^2 + 2.896e-14 s + 2.037e-19

编辑#2:在你之前的问题中,你问的是使用它是否会更好,idfrd或者iddata- 但你真的有频率响应数据吗?如果您选择的极数足够高,我实际上认为这不会有太大的不同。只需尝试对您更有效的方法。解决方法是相同的。

于 2013-09-08T15:04:38.027 回答