我是一名使用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()
以某種方式沿時間軸切割數據並插入一些附加數據。 這是從哪裏來的?我錯過了什麼嗎?