libmatio开发笔记(一):matlab文件操作libmatio库介绍,编译和基础Demo

简介: libmatio开发笔记(一):matlab文件操作libmatio库介绍,编译和基础Demo

前言

  Qt可通过matlab的库对mat文件进行读写,第三方库matio也可以对mat文件进行读写,其已经支持mat文件的7.3版本。


libmatio库介绍

  matio软件包含一个用于读写MATLAB MAT fles的库。libmatio库是创建/打开MAT fles和写入的主要接口。

  matio库可以编写版本5的MAT fles,版本5的fles带有可变压缩(如果使用zlib构建),以及支持引入的HDF5格式MAT file,即MATLAB 7.3版。


下载

  Git地址:git clone https://github.com/tbeu/matio.git

  官网:https://www.hdfgroup.org

  QQ群:1047134658(点击“文件”搜索“matio”,群内与博文同步更新)


Window上编译(从源码使用VS工程直接编译)

  编译环境:VS2015(vs14版本)。

步骤一:下载解压

  

步骤二:打开源码工程

  使用VS2015打开库中间的matio.sln(此处笔者是VS2017装了VS2015的MSVC编译器),如下图:

  

  

  

  修改编译器版本

  

步骤三:编译libmatio,出现无法打开”zlib.h”解决

  开始编译,出现错误如下:

  

  需要编译zlib库的x64版本,请参照博文《zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板》。

  将zlib头文件和库引入到libmatio工程中。

  头文件路径:

  

  库文件路径:

  

  库引入:

  

  意味着还缺少hdf5文件,还需要添加hdf5的msvc2015x64版本,暂时先不管,本步骤解决zlib问题,继续编译。

步骤四:编译libmatio,出现无法打开”hdf5.h”,解决

  编译hdf5,请参考文章:《Hdf5开发笔记(一):hdf5介绍,在windows上编译msvc2015x64版本

  

  

  发现不行,重新打开定位安装文件:

  

  

  

  解决后,继续编译。

步骤五:编译libmatio,调用参数太少

  

  打架,只剩下可能是2个库的升级依赖导致的问题,matio不兼容hdf5的三个大版本的api。

步骤五:更换hdf5版本

  重新定义版本,Matio:1.5.12(与之前一样),Hdf5:1.8.22(前面使用的是1.12.x),即更换hd5的版本即可。

  hdf5的编译,请参照博文《Hdf5开发笔记(一):hdf5介绍,编译和基础模板Demo》

  然后更改包含的路径:

  

  

  至此,此种方法编译失败,其库的参数调用几个版本的函数调用都没有这个,摸索后基本放弃,只能另寻他法。


Window上编译(CMake方式编译)

  编译环境:VS2015(vs14版本)。

步骤一:下载解压

  直接git的

  

步骤二:CMake配置

  

  

  编译hdf5,请参考文章:《Hdf5开发笔记(一):hdf5介绍,在windows上编译msvc2015x64版本

  添加HDF5的路径,如下图:

  

  zlib编译,请参照博文《zlib开发笔记(四):zlib库介绍、编译windows vs2015x64版本和工程模板》。

  添加zib,如下图:

  

  添加zlib的路径,如下图:

  

  配置通过:

  

步骤三:生成工程

  

步骤四:打开工程

  

步骤五:工程生成

  打开工程后,编译

  

步骤六:安装

  


模块化

  


Demo

bool MatlabManager::openMatFile(QString filePath)
{
    mat_t *pMatFile = 0;
    matvar_t *pMatVar = 0;
    // 打开mat文件
    pMatFile = Mat_Open(filePath.toUtf8().data(), MAT_ACC_RDONLY);
    if(!pMatFile)
    {
        LOG << "Failed to Mat_Open(filePath.toUtf8().data(), MAT_ACC_RDONLY)";
        return false;
    }
    // 遍历所有变量
    pMatVar = Mat_VarReadNext(pMatFile);
    while(pMatVar)
    {
        LOG << "read variable ============================="
            << "pMatVar->name:" << pMatVar->name << endl
            << "pMatVar->rank:" << pMatVar->rank << endl
            << "pMatVar->dims:" << pMatVar->dims << endl
            << "pMatVar->class_type:" << pMatVar->class_type << endl
            << "pMatVar->data_type:" << pMatVar->data_type << endl
            << "pMatVar->isComplex:" << pMatVar->isComplex << endl
            << "pMatVar->isLogical:" << pMatVar->isLogical << endl
            << "pMatVar->isGlobal:" << pMatVar->isGlobal << endl;
        // 释放
        Mat_VarFree(pMatVar);
        pMatVar = 0;
        // 继续遍历
        pMatVar = Mat_VarReadNextInfo(pMatFile);
    }
    // 关闭mat文件
    Mat_Close(pMatFile);
    pMatFile = 0;
    return true;
}


Demo测试

double数据类型

  

  


struct+doubleSeries类型

  先解析的是struct

  

doubleSeries数据类型

  

  查看文档也只支持这几种类型特殊文件

  

  doubleSeries是不支持的


工程模板

  testMatioDemo_工程模板_v1.0.0_基础调用matio库成功遍历文件.rar



相关文章
|
7月前
|
编解码 算法
m基于码率兼容打孔LDPC码nms最小和译码算法的LDPC编译码matlab误码率仿真
m基于码率兼容打孔LDPC码nms最小和译码算法的LDPC编译码matlab误码率仿真
48 0
|
7月前
|
编解码 算法
m基于码率兼容打孔LDPC码oms最小和译码算法的LDPC编译码matlab误码率仿真
m基于码率兼容打孔LDPC码oms最小和译码算法的LDPC编译码matlab误码率仿真
116 0
|
7月前
|
算法 5G
基于LDPC编译码和FP-MAP球形检测算法的协作MIMO系统误码率matlab仿真
基于LDPC编译码和FP-MAP球形检测算法的协作MIMO系统误码率matlab仿真
|
算法 异构计算
基于FPGA的Lorenz混沌系统verilog开发,含testbench和matlab辅助测试程序
基于FPGA的Lorenz混沌系统verilog开发,含testbench和matlab辅助测试程序
|
存储 算法
通过MATLAB自动产生Hamming编译码的verilog实现,包含testbench
通过MATLAB自动产生Hamming编译码的verilog实现,包含testbench
通过MATLAB自动产生Hamming编译码的verilog实现,包含testbench
|
数据采集 数据可视化 BI
matlab数学建模方法与实践 笔记2:数据的准备
matlab数学建模方法与实践 笔记2:数据的准备
152 0
|
7月前
|
算法 5G
基于协作mimo系统的RM编译码误码率matlab仿真,对比硬判决译码和软判决译码
基于协作mimo系统的RM编译码误码率matlab仿真,对比硬判决译码和软判决译码
|
7月前
|
算法
m基于OFDM+QPSK和LDPC编译码以及MMSE信道估计的无线图像传输matlab仿真,输出误码率,并用图片进行测试
MATLAB2022a仿真实现了无线图像传输的算法,包括OFDM、QPSK调制、LDPC编码和MMSE信道估计。OFDM抗频率选择性衰落,QPSK用相位表示二进制,LDPC码用于前向纠错,MMSE估计信道响应。算法流程涉及编码、调制、信道估计、均衡、解码和图像重建。MATLAB代码展示了从串行数据到OFDM信号的生成,经过信道模型、噪声添加,再到接收端的信道估计和解码过程,最终计算误码率。
80 1
|
5月前
|
机器学习/深度学习 数据采集 监控
基于CNN卷积神经网络的步态识别matlab仿真,数据库采用CASIA库
**核心程序**: 完整版代码附中文注释,确保清晰理解。 **理论概述**: 利用CNN从视频中学习步态时空特征。 **系统框架**: 1. 数据预处理 2. CNN特征提取 3. 构建CNN模型 4. 训练与优化 5. 识别测试 **CNN原理**: 卷积、池化、激活功能强大特征学习。 **CASIA数据库**: 高质量数据集促进模型鲁棒性。 **结论**: CNN驱动的步态识别展现高精度,潜力巨大,适用于监控和安全领域。
|
7月前
|
算法
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长
MATLAB 2022a仿真实现了LDPC码的性能分析,展示了不同码长对纠错能力的影响。短码长LDPC码收敛快但纠错能力有限,长码长则提供更强纠错能力但易陷入局部最优。核心代码通过循环进行误码率仿真,根据EsN0计算误比特率,并保存不同码长(12-768)的结果数据。
102 9
m基于BP译码算法的LDPC编译码matlab误码率仿真,对比不同的码长

热门文章

最新文章