LTE系统调试记录3:将CCS导出的两天线的十六进制数据转换成十进制,在MATLAB中再转换成.mat数据

1.需求

CCS导出的数据分为2个天线,每个天线都有10ms,为有符号的十六进制数据,将其在C语言中转换成十进制,然后在MATLAB中转换成.mat数据。

2.实施

17.7.21更新///

data需要定义为int型,不然运行到最后会报错:

 Run-Time Check Failure #2 - Stack around the variable 'data' was corrupted.


因为数据中存在有符号的十六进制,比如FD8C,所以原来的程序有问题。

fscanf(readFilefp, "%x", &data);之后需要判断data是否为负数,若为负数需要进行处理:代码

		if (data > 32767)
			data -= 65536;

//

(1)将十六进制数据保存为十进制数据,一共2*10=20个文件,循环导出:

#include <stdio.h>
#define mslength 10 //几个ms的数据
#define antenalength 2 //几个天线

int main() {
	//int data[614400];
	short data;
	int symbolNum = 1;
	int dataLength = 30720 * 2 * symbolNum; // symbolNumms的数据长度(实部和虚部分开,故一个复数占用两个位置。)
	FILE *readFilefp;
	FILE *wirteFilefp;

	int i;
	int antena;	//天线1/2
	int ms;		//1ms-10ms

	char readFileName[40];//读取的CCS产生的hex文件
	char wirteFileName[40];//将转换成的dec数据写入该文件
	for (antena = 1; antena <= antenalength; antena++)
	{
		for (ms = 1; ms <= mslength; ms++)//分别读写10个文件
		{
			sprintf(readFileName, "ccs_antena_%d_ifft_%dms.txt", antena, ms);//改变读取文件的名称
			readFilefp = fopen(readFileName, "r");//输入的十六进制数据
			if (readFilefp == NULL) {
				printf("open readFile error.\n");
				exit(0);
			}

			sprintf(wirteFileName, "matlab_antena_%d_ifft_%dms.txt", antena, ms);//改变写入文件的名称
			wirteFilefp = fopen(wirteFileName, "w+");//输出的十进制数据
			if (wirteFilefp == NULL) {
				printf("open wirteFile error.\n");
				exit(0);
			}
			//printf("enter i:\n");
			//scanf("%d", &i);
			for (i = 0; i < dataLength; i++) {
				fscanf(readFilefp, "%x", &data);
				printf("%d\t%d\n", i, data);
				fprintf(wirteFilefp, "%d ", data);
			}
			fclose(readFilefp);
			fclose(wirteFilefp);
			printf("success\n");
		}
	}
	//getchar();
	scanf("%d", &i);
	return 0;
}
(2)在MATLAB中转换成.mat数据,循环导出:

% 16进制,但是不能有0x
clc,clear
global mslength 
mslength = 10;%两个天线10ms数据
% a=textread('data.txt','%s')';%以字符形式打开文件
% alpha=str2dec(a)'; %16进制转化为10进制数,存入alpha矩阵
for ms = 1:1:mslength
    readFile1Name = sprintf('matlab_antena_1_ifft_%dms.txt',ms);%改变读取文件的名称
    readFile2Name = sprintf('matlab_antena_2_ifft_%dms.txt',ms);%改变读取文件的名称
    saveFileName = sprintf('ccs_ifft_%dms.mat',ms);%改变读取文件的名称
    
    data1=importdata(readFile1Name);%天线1数据
    data2=importdata(readFile2Name);%天线2数据
    dataLength = length(data1);
    % data_complex = data(1:2:end) + 1i * data(2:2:end);
    data_complex1 = data1(1 : dataLength / 2) + 1i * data1(dataLength/2 + 1 : end);
    data_complex2 = data2(1 : dataLength / 2) + 1i * data2(dataLength/2 + 1 : end);
    ccs_ifft_ms = [data_complex1.' data_complex2.'];%两个天线数据合在一起
    save(saveFileName,'ccs_ifft_ms');
end

3.代码

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大师兄电子工作室

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值