c语言读取mat文件
读取含有IQ数据的mat文件前提是导入matlab文件读写库matio.h添加静态库libmatio.lib、hdf5.lib、szip.lib、zlib1.lib#include<stdlib.h>#include "matio.h"#pragma comment(lib,"libmatio.lib")#pragma comment(lib,"hdf5.lib")#pragma co
·
读取含有IQ数据的mat文件
前提是导入matlab文件读写库matio.h
添加静态库libmatio.lib、hdf5.lib、szip.lib、zlib1.lib 下载地址
#include<stdlib.h>
#include "matio.h"
#pragma comment(lib,"libmatio.lib")
#pragma comment(lib,"hdf5.lib")
#pragma comment(lib,"szip.lib")
#pragma comment(lib,"zlib1.lib")
int main(){
int i=0,j=0;
mat_t* matfp;
const char *file;
file="data_double_300000.mat";
matfp=Mat_Open(file, MAT_ACC_RDONLY);
if (NULL == matfp) {
printf("Error opening MAT file %s\n", file);
return -1;
}
matvar_t* matvar_I=NULL;
matvar_t* matvar_Q=NULL;
matvar_I=Mat_VarRead(matfp,"I");
matvar_Q=Mat_VarRead(matfp,"Q");
if(!matvar_I)
{
printf("Error read MatVar: I.\n");
return -1;
}
if(!matvar_Q)
{
printf("Error read MatVar: Q.\n");
return -1;
}
int iDataN=matvar_I->nbytes/matvar_I->data_size;
double* dI=new double[iDataN];
double* dQ=new double[iDataN];
memset(dI,0,iDataN*sizeof(double));
memset(dQ,0,iDataN*sizeof(double));
//IQ数据是double类型
if (matvar_I->data_type == MAT_T_DOUBLE){
const double* xData_I=static_cast<const double*>(matvar_I->data);
const double* xData_Q=static_cast<const double*>(matvar_Q->data);
memcpy(dI,xData_I,iDataN*sizeof(double));
memcpy(dQ,xData_Q,iDataN*sizeof(double));
//IQ数据是short类型
}else if(matvar_I->data_type == MAT_T_INT16){
const short* xData_I=static_cast<const short*>(matvar_I->data);
const short* xData_Q=static_cast<const short*>(matvar_Q->data);
for(i=0; i<iDataN; i++){
dI[i]=(double)xData_I[i];
dQ[i]=(double)xData_Q[i];
}
}else{
printf("IQ data type error.\n");
}
matvar_t* matvar_fs=NULL;
matvar_t* matvar_startfre=NULL;
matvar_t* matvar_stopfre=NULL;
matvar_fs=Mat_VarRead(matfp,"samplingRate");
matvar_startfre=Mat_VarRead(matfp,"startfre");
matvar_stopfre=Mat_VarRead(matfp,"stopfre");
if(!matvar_fs)
{
printf("Error read MatVar: samplingRate.\n");
return -1;
}
if(!matvar_startfre)
{
printf("Error read MatVar: startfre.\n");
return -1;
}
if(!matvar_stopfre)
{
printf("Error read MatVar: stopfre.\n");
return -1;
}
const double *dfSample=static_cast<const double*>(matvar_fs->data);
const double *startfre=static_cast<const double*>(matvar_startfre->data);
const double *stopfre=static_cast<const double*>(matvar_stopfre->data);
double fs=*dfSample;
double Bandw=fs/2;
double Startfre=*startfre, Stopfre=*stopfre;
double band=Stopfre-Startfre;
double F_c=(Stopfre+Startfre)/2;
double iGain=0,iAtt=0;
Mat_VarFree(matvar_I);
Mat_VarFree(matvar_Q);
Mat_VarFree(matvar_fs);
Mat_VarFree(matvar_startfre);
Mat_VarFree(matvar_stopfre);
Mat_Close(matfp);
if (iDataN < 10000)
{
return -1;
}
if(dI != NULL)
{
delete []dI;
dI = NULL;
}
if(dQ != NULL)
{
delete []dQ;
dQ = NULL;
}
return 0;
}
另外:在VS工程中,添加c/c++工程中外部头文件(.h),lib库,dll库的基本步骤
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐


所有评论(0)