我是一名使用Matlab/Simulink的初学者,需要做一些系统分析。 因为我需要测试不同系统和信号条件下的分析算法 我决定为数据生成创建一个简化但合适的simulink模型,而不是做几个“真正的”实验。 在get_data()
函数中调用此模型,并按预期将数据返回到变量d
。创建iddata对象似乎将数据沿时间轴移动
因为我需要估计给定系统的传递函数,所以我必须创建一个iddata
对象以提供合适数据类型的数据 。 从simulink中获取的时间步骤存储在data_time
中,系统的输入和输出数据分别为data_in
和data_in
。 data_out
。 然后将这三个变量传递给iddata()
以创建传递函数估计所需的iddata对象data_measured
。此代码段如下所示:
% get data from simulink simulation executed in get_data function
d = get_data();
% extract data into variables
data_time = d.time;
data_in = d.data(:, 1);
data_out = d.data(:, 2);
% generate a time-domain data object (sample time given from simulink's noise generation)
data_measured = iddata(data_out, data_in, 0.1);
在进一步的编码和数据分析我发现,如在 data_time
给出
any(data_measured.sa == data_time)
的IDDATA对象data_measured
的时间数据是不一样的打印0
表示没有元素是1
,并且给定的数组不相同。
由于any()
上面的调用并没有提高对不平等的矩阵尺寸的任何错误,我决定用
subplot(3, 1, 1)
plot(data_time, data_in);
title('Data retrieved from simulink')
subplot(3, 1, 2)
plot(data_measured.sa, data_measured.u);
title('Data as in iddata-object')
subplot(3, 1, 3)
plot(data_time, data_in, data_measured.sa, data_measured.u);
title('Data comparison')
情节来绘制两个data_in
与它 相应时间的数据data_time
和data_measured.u
与data_measured.sa
下面给出:
正如你看到的,有间错位恕我直言不应该在那里的两块地块。 由于在信号上升之前有一个很小的区域,而非噪声,所以时间的这种转换似乎并不从数据开始。然而,simulink正在给整个信号增加噪音,正如你从中间给出的图中看到的那样。
总而言之,似乎将数据传递给iddata()
以某种方式沿时间轴切割数据并插入一些附加数据。 这是从哪里来的?我错过了什么吗?