Armadillo читая MAT файл ошибки

В настоящее время я выполняю кросс-компиляцию на BeagleBone Black в среде Visual Studio, используя Armadillo для перевода кода MATLAB в C ++.

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

Сначала я попытался это сделать, но кажется, что он неправильно читает файл и не читает все записи. Мой справочный файл представляет собой матрицу 2000×6, а созданная матрица броненосца — 5298×1. Я знаю, что без заголовка, имитирующего броненосец, он будет преобразован в вектор-столбец, и мне нужно будет изменить его, используя .reshape (), но он просто не получает все записи, а проверяет записи, которые он сделал читать неправильно.

Я не уверен, в чем проблема. Я поместил эталонные файлы .mat в папку Debug для удаленного проекта на BBB, где создается скомпилированный файл .out. Есть ли другой способ, которым я должен интегрировать это?

Кроме того, помощь с имитацией заголовка броненосца или другие предложения приветствуются.
Если вам что-нибудь понадобится, пожалуйста, дайте мне знать.

Вот тестовая программа, которую я использую:

#include <iostream>
#include <armadillo>

using namespace std;
using namespace arma;

int main()
{
mat data_ref;

data_ref.load("Epoxy_6A_Healthy_Output_200kHz_Act1_001.mat");

cout << "For Data_ref, there are " << data_ref.n_cols << " columns and " << data_ref.n_rows << " rows.\n";
cout << "First item: " << data_ref(0) << "\n6th item: " << data_ref(6) << "\n2000th item: " << data_ref(2000);

data_ref.reshape(2000, 6);

cout << "For Data_ref, there are " << data_ref.n_cols << " columns and " << data_ref.n_rows << " rows.\n";
cout << "First item: " << data_ref(0,0) << "\nLast Item: " << data_ref(1999,5);

cout << "\nDone";

return 0;
}

Первый элемент в файле .mat равен 0.0, а последний элемент — 0.0014.
Вот выход.

For Data_ref, there are 1 columns and 5298 rows.
First item: 8.48749e-53
th item: 9.80727e+256
th item: -2.4474e+238For Data_ref, there are 6 columns and 2000 rows.
First item: 8.48749e-53
(gdb) 1028-var-list-children --simple-values "var4.public" 0 1000
(gdb) 1030-var-list-children --simple-values "var4.arma::Base<double,
arma::Mat<double> >" 0 1000
Last Item: 0
Done=thread-exited,id="1",group-id="i1"The program '' has exited with code 0 (0x0).

Спасибо

1

Решение

Armadillo не поддерживает формат Matmat .mat. В документации они ссылаются на броненосца mat двоичный формат Однако вы можете сохранить данные в Matlab, используя hdf5 двоичный формат и импортируйте его в Armadillo, но тогда вам нужно скачать hdf5 lib и перенастроить Armadillo. Увидеть hdf5_binary раздел в документации.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]