# Creating iddata from data in tables

40 views (last 30 days)
Bill Tubbs on 22 Mar 2020
Commented: Bill Tubbs on 27 Mar 2020
I guess iddata won't accept data from a table.
>> dataTable(1:5,:)
ans =
5×5 table
Time H1 H2 T1 T2
____ __ __ _____ _____
0 0 0 21.23 21.23
1 0 0 21.55 21.55
2 0 0 21.55 21.55
3 0 0 21.87 21.55
4 0 0 21.55 21.23
>> dataSet = iddata(dataTable(:,4:5),dataTable(:,2:3));
Error using iddata (line 193)
The value of the "OutputData" property must be a double matrix or a cell array of such matrices.
Is this the only or best solution?
>> inputData = table2array(dataTable(:,2:3));
>> outputData = table2array(dataTable(:,4:5));
>> dataSet = iddata(outputData,inputData);

Sourabh Kondapaka on 27 Mar 2020
Hi,
Instead of indexing based on paranthesis “()” you can use curly braces “{}” to
extract the cell array within the table.
inputData = table2array(dataTable(:,2:3));
outputData = table2array(dataTable(:,4:5));
dataSet = iddata(outputData,inputData);
% You can do something much simpler:
dataSet = iddata( dataTable{:,4:5}, dataTable{:,2:3} );
Here is a sample table which demonstrates the same thing as above:
t = table;
t.Time = (0:1:100)';
t.H1 = zeros(101,1);
t.H2 = zeros(101,1);
t.T1 = zeros(101, 1) + 23.25;
t.T2 = zeros(101, 1) + 21.53;
dataset = iddata(t{:,4:5}, t{:,2:3});
A similar question has been answered here
Bill Tubbs on 27 Mar 2020
Evidently I don't understand MATLAB indexing... Thanks for the links!