Загрузка данных для таблицы поиска Simulink из файла

Я построил модель Matlab/Simulink, которую я использую, чтобы имитировать производительность подводного роботизированного транспортного средства, которое использует акустику для различных ключевых функций навигации и локализации.

Поскольку характеристики океана меняются в зависимости от сезонности и геолокации, я хотел бы, чтобы эти данные динамически загружались в модель из файла данных ASCII (данные, разделенные пробелами, организованные в строки и столбцы).

Simulink имеет несколько наборов блоков таблицы поиска, но ни один из них, похоже, не предоставляет опцию "чтение из файла" напрямую. Необходимость использования редактора таблиц приведет модель в неправильном направлении.

Есть ли другой способ, возможно, с помощью Matlab, чтобы загрузить данные в Blockset из файла?

Для 1-D таблицы я ищу что-то похожее на команды Matlab

A = load(filename)
A(:,1)  % for the index
A(:,2)  % for the table values

AKE

2 ответа

Решение

Если я правильно понимаю, похоже, что вы хотите иметь блок "Таблица поиска" с индексом и значениями таблицы, которые можно динамически обновлять в ходе моделирования. Я полагаю, что вы можете сделать это, используя блок From File, блок Demux и динамический блок Lookup Table. Допустим, у вас есть файл.mat, содержащий массив следующей формы:

[  time_1   time_2   time_3 ...;  %# Time stamps
 index1_1 index1_2 index1_3 ...;  %# Index 1 for all time stamps
 index2_1 index2_2 index2_3 ...;  %# Index 2 for all time stamps
 ...
 indexN_1 indexN_2 indexN_3 ...;  %# Index N for all time stamps
 value1_1 value1_2 value1_3 ...;  %# Table value 1 for all time stamps
 value2_1 value2_2 value2_3 ...;  %# Table value 2 for all time stamps
 ...
 valueN_1 valueN_2 valueN_3 ...]  %# Table value N for all time stamps

Для каждого столбца есть отметка времени, N элементы для индексов таблицы поиска и N элементы для табличных значений. После загрузки с использованием блока From File, вывод длины 2*N может быть разделен на два выхода каждый длиной N (т.е. индексы и табличные значения) с использованием блока Demux. Эти два массива могут быть использованы для xdat а также ydat вводит данные в динамический блок "Таблица поиска", создавая, таким образом, справочную таблицу, индексы и значения которой можно обновлять из файла по мере выполнения моделирования.

Ответ на комментарий от AKE...

Отметки времени присутствуют в приведенном выше массиве, потому что у меня сложилось впечатление, что вы хотите изменить данные таблицы поиска как функцию времени моделирования (например, использовать один набор индексов и значений таблицы в течение от 0 до 10 секунд, а затем другой набор на 10-20 секунд). Если вы хотите сделать это, потребуется определенное время, в которое данные будут изменены.

Однако, если вы хотите загрузить только один набор табличных данных из файла в начале симуляции, тогда вашему файлу.mat необходим только один столбец с отметкой времени 0. Ваши примеры данных в A могут быть легко изменены соответственно:

A = load(yourDataFile);  %# Load your data 
A = [0; A(:)];           %# Convert it to a column vector and add a time stamp
save(yourMatFile,'A');   %# Save A to a .mat file for the From File block

Что касается вашей озабоченности по поводу блока Demux, вам на самом деле не нужно указывать N, Вам нужно только указать, что он будет иметь 2 выхода, и, таким образом, он разделит входной сигнал пополам. Например, если вход представляет собой вектор из 10 элементов, и для блока указано два выхода, в качестве выходных данных вы получите два вектора из 5 элементов.

Табличные данные могут быть переменной в рабочем пространстве MATLAB, и вы можете заполнить рабочее пространство, загрузив любой файл, который вы хотите, перед запуском моделирования. Так что в вашем примере переменная A может использоваться в качестве данных таблицы.

Напишите сценарий запуска, чтобы заполнить ваше рабочее пространство перед запуском симуляции, в этом сценарии вы можете загрузить данные из любого файла с матами, который вам нужен.

Другие вопросы по тегам