从.mat文件读取的复数数组转换成.coe文件
- clear;clc;close all;
- load('XXXXXXX.mat')
- % 写入文件的数据系数coe1
- coe1 = power(10,4);
- % 补码常数const_coe,2的const_coe幂次方
- const_coe = 16;
- % 将十进制数据转成十六进制数据的位数 coe2,需要保证 FFFF(coe2个F)转换成10进制后要大于coe1且大于等于power(2,const_coe)
- coe2 = 4;
- data = sig_IQ_norm*coe1;% sig_IQ_norm:加载mat文件中的变量名称
- I_data = floor(real(data));% 只取数据的整数部分
- Q_data = floor(imag(data));
- I_data(I_data<0) = I_data(I_data<0)+power(2,const_coe);% 转换负数为补码
- Q_data(Q_data<0) = Q_data(Q_data<0)+power(2,const_coe);
- dataHex_real = dec2hex(I_data,coe2); % 将实部整数数据转换成coe2位16进制
- dataHex_imag = dec2hex(Q_data,coe2); % 将虚部整数数据转换成coe2位16进制
- fid = fopen('longS_longS_AC_V1.coe','w');
- % 写入文件说明
- fprintf(fid,'memory_initialization_radix= %d ;\n',coe2);
- fprintf(fid, 'memory_initialization_vector=\n');
- % 将IQ数据写入coe文件
- for kk = 1:size(dataHex_imag,1)
- fprintf(fid, '%s%s,\n', dataHex_real(kk,:),dataHex_imag(kk,:));
- end
- % 关闭文件
- fclose(fid);

从.coe还原数据的代码如下
- filename = "XXXXXX.coe";% 文件名称
- % 写入文件的数据系数coe1
- coe1 = power(10,4);
- % 将十进制数据转成十六进制数据的位数 bitwidth,需要保证 FFFF(bitwidth个F)转换成10进制后要大于coe1且大于等于power(2,const_coe)
- bitwidth = 4;
- % 补码常数const_coe,2的const_coe幂次方
- const_coe = 16;
- fid = fopen(filename);
- if fid==-1
- error("无法打开文件:%s",filename);
- end
- line = fgetl(fid);% 跳过前两行的数据说明
- line = fgetl(fid);
- hex_data = {};% 储存读取的数据
- while ~feof(fid)
- line = fgetl(fid);
- if ~isempty(line)
- line = strtrim(line);
- line = strrep(line,',',''); % 丢掉数据中的逗号
- hex_data{end+1} = line;
- end
- end
- fclose(fid);
- maxval = power(2,const_coe-1)-1; % 数据最大门限,大于该值则为负数的补码
- real_data = zeros(1,numel(hex_data));% 存储实部数据
- imag_data = zeros(1,numel(hex_data));% 存储虚部数据
- for kk = 1:numel(hex_data)
- cabin = hex_data{kk};
- realcabin = hex2dec(cabin(1:bitwidth)); % 十六进制转成十进制
- imagcabin = hex2dec(cabin(bitwidth+1:2*bitwidth));
- % 将补码还原成负数
- if realcabin>maxval
- realcabin = realcabin-power(2,const_coe);
- end
- if imagcabin>maxval
- imagcabin = imagcabin-power(2,const_coe);
- end
- real_data(kk) = realcabin;
- imag_data(kk) = imagcabin;
- end
- % 还原数据大小
- real_data = real_data./coe1;
- imag_data = imag_data./coe1;
- % 拼成IQ数据
- IQdata = real_data+1j*imag_data;
- figure;plot(abs(IQdata));
参考人工智能 kimi ,仅供学习使用
免责声明:本文系网络转载或改编,未找到原创作者,版权归原作者所有。如涉及版权,请联系删