Правильно определить размерность для временной серии скаляров - PullRequest
0 голосов
/ 06 сентября 2018

Я хочу прочитать данные из файла мата в Simulink. Для создания файла данных и шины я использую объекты временных рядов.

dt   = 0.1;
tend = 24;
t    = 0:dt:24;
tk   = size( t, 2 );

matrix_in = repmat( eye(3), 1, 1, tk );

scalar_in = t;

vector_in = randn( 3, tk );
vector_in_1 = vector_in;
vector_in_2 = vector_in;
vector_in_1( vector_in_1 <= 0.5 ) = 1;
vector_in_1( vector_in_1 > 0.5 ) = 0;
vector_in_2( vector_in_2 >= -0.5 ) = 1;
vector_in_2( vector_in_2 < -0.5 ) = 0;
vector_in = vector_in_1 + vector_in_2;

matrix_ts = timeseries( matrix_in, t, 'name', 'matrix_data' );
vector_ts = timeseries( vector_in, t, 'name', 'vector_data' );
scalar_ts = timeseries( scalar_in, t, 'name', 'scalar_data' );

matrix_ts = delsample( matrix_ts, 'Value', t(  t >= 10 & t <= 15  ) );
vector_ts = delsample( vector_ts, 'Value', t(  t >= 18 & t <= 20  ) );
scalar_ts = delsample( scalar_ts, 'Value', t(   t >= 7 & t <= 11  ) );

data_struct = struct( 'matrix_in', matrix_ts, ...
                      'vector_in', vector_ts, ...
                      'scalar_in', scalar_ts );

save 'my_data' 'data_struct' -v7.3;

my_bus = Simulink.Bus.createObject( data_struct );

Тогда я хочу прочитать это в Simulink. Итак, у меня есть матрица, вектор и скаляр. У меня проблема в том, что скаляр имеет размерность [1 1], а не 1, и поэтому Simulink рассматривает его как матрицу / вектор, а Simulink не позволяет мне выполнять некоторые операции. Поэтому мой вопрос заключается в том, как я могу установить размер для скаляра равным 1, а не [1 1].

Файл Simulink находится здесь в MATLAB Central. Сначала запустите приведенный выше код, а затем файл Simulink.

EDIT

Я получил ответ, данные должны быть сжаты.

scalar_ts.Data = squeeze(scalar_ts.Data);
...