Копирование внешних данных в формат MAT-файлов с автономными программами

Обзор matimport.c Пример

В этой теме показано, как создать автономную программу, matimport, для копирования данных из внешнего источника в MAT-файл. Формат данных пользовательский, то есть он не является одним из форматов файлов, поддерживаемых MATLAB®.

The matimport.c пример:

  • Создает переменные для чтения внешних данных.

  • Копирует данные в mxArray переменные.

  • Присваивает имя переменной каждому mxArray. Используйте эти имена переменных в рабочем пространстве MATLAB.

  • Запись mxArray переменные и связанные имена переменных с MAT-файлом.

Чтобы использовать данные в MATLAB:

В следующих разделах подробно описываются эти шаги. Чтобы увидеть код, откройте файл в РЕДАКТОРА MATLAB. Операторы C в этих разделах являются фрагментами кода, показанными для иллюстрации задачи. Операторы в разделах не обязательно являются последовательными в исходном файле.

Объявление переменных для внешних данных

Существует два значения внешних данных: строка и массив типов double. В следующей таблице показана связь между переменными в этом примере.

Внешние данныеПеременная для чтения внешних данныхПеременная mxArrayИмя переменного MATLAB
Массив типов doubleextDatapVarNuminputArray
СтрокаextStringpVarChartitleString

Следующие операторы объявляют тип и размер переменных extString и extData.

#define BUFSIZE 256
char extString[BUFSIZE];
double extData[9];

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

const char *extString = "Data from External Device";
double extData[9] = { 1.0, 4.0, 7.0, 2.0, 5.0, 8.0, 3.0, 6.0, 9.0 };

Создайте переменные mxArray

Функции в MAT-File API используют указатели типа mxArray для ссылки на данные MATLAB. Эти операторы заявляют pVarNum и pVarChar как указатели на массив любого размера или типа.

/*Pointer to the mxArray to read variable extData */
mxArray *pVarNum;
/*Pointer to the mxArray to read variable extString */
mxArray *pVarChar;

Чтобы создать переменную соответствующего размера и типа, выберите одну из mxCreate* функции из библиотеки MX Matrix Library.

Размер extData является 9, который пример копирует в 3-by- 3 матрица. Используйте mxCreateDoubleMatrix функция для создания двумерного, с двойной точностью, с плавающей точностью mxArray инициализировано в 0.

pVarNum = mxCreateDoubleMatrix(3,3,mxREAL);

Используйте mxCreateString функция для создания mxArray переменная для extString.

pVarChar = mxCreateString(extString);

Создайте имена переменного MATLAB

matimport.c присваивает имена переменных inputArray и titleString на mxArray данные. Используйте эти имена в рабочем пространстве MATLAB. Для получения дополнительной информации смотрите Просмотр содержимого MAT-файла.

const char *myDouble = "inputArray";
const char *myString = "titleString";

Чтение внешних данных в данные mxArray

Скопируйте данные из внешнего источника в каждый mxArray.

Осциллограф C memcpy функция копирует блоки памяти. Эта функция требует указателей на переменные extData и pVarNum. Указатель на extData является (void *)extData. Чтобы получить указатель на pVarNum, используйте один из mxGet* функции из Matrix API. Поскольку данные содержат только вещественные значения типа double, этот пример использует mxGetPr функция.

memcpy((void *)(mxGetPr(pVarNum)), (void *)extData, sizeof(extData));

Следующий оператор инициализирует pVarChar переменная с содержимым extString.

pVarChar = mxCreateString(extString);

Переменные pVarNum и pVarChar теперь содержат внешние данные.

Создайте и откройте MAT-файл

matOpen функция создает указатель на файл типа MATFile. Следующие операторы создают указатель на файл pmat, назовите файл matimport.matи откройте его для письма.

	MATFile *pmat;
	const char *myFile = "matimport.mat";
	pmat = matOpen(myFile, "w");

Запись данных mxArray в файл

matPutVariable функция записывает mxArray и имя переменной в файл.

	status = matPutVariable(pmat, myDouble, pVarNum);
	status = matPutVariable(pmat, myString, pVarChar);

Очистка

Чтобы закрыть файл:

matClose(pmat);

Чтобы освободить память:

mxDestroyArray(pVarNum);
mxDestroyArray(pVarChar);

Создайте приложение

Чтобы создать приложение, используйте mex функция со -client engine опция.

copyfile(fullfile(matlabroot,'extern','examples','eng_mat',matimport.c'),'.','f')
mex -v -client engine matimport.c

Создайте MAT-файл

Выполняйте matimport для создания файла matimport.mat. Либо вызовите программу из командной строки системы, либо в командной строке MATLAB введите:

!matimport

Импорт данных в MATLAB

Любой пользователь с совместимой версией MATLAB может прочитать matimport.mat файл. Запустите MATLAB и используйте load команда для импорта данных в рабочую область.

load matimport.mat

Чтобы отобразить переменные, введите:

whos
  Name             Size            Bytes  Class

  inputArray       3x3                72  double
  titleString      1x43               86  char  

Похожие темы