使用matlab导出16进制的数据(第一次使用fopen,fprintf,dec2hex时需要避开的坑)
matlab进行数据类型的转换与数据的导出任务需求遇到问题
matlab进行数据类型的转换与数据的导出
任务需求
产生一个正弦信号,并将其转换位变为8位的数据,并输出,需要导出的数据位16进制的.coe文件
clc;
clear;
N=2^10;
F=2^8;
s_p = 0:1024;
t=s_p/N;
sin_data=sin(2*pi*t);
%%定点化
fix_sin_data=fix(sin_data*127);
%%负数使用补码进行表示
for i = 1:N+1
if fix_sin_data(i) < 0
fix_sin_data(i)= F +fix_sin_data(i);
else
fix_sin_data(i) = fix_sin_data(i);
end
end
%%转换为16进制的数
fix_sin_data_hex=dec2hex(fix_sin_data);
%%变为.coe文件
fid=fopen('ROM_8_1024.coe','w+');
fprintf(fid,'MEMORY_INITIALIZATION_RADIX=16;\n');
fprintf(fid,'MEMORY_INITIALIZATION_VECTOR=\n');
for i=1 : N-1
% fprintf(fid,'%s, \n',fix_sin_data_hex(i));
fprintf(fid,'%c%c,\n',fix_sin_data_hex(i,1),fix_sin_data_hex(i,2));
end
fprintf(fid,'%c%c;\n',fix_sin_data_hex(N,1),fix_sin_data_hex(N,2));
fclose(fid);
遇到问题
在设计过程中前面都没有问题,但是经过dec2hex时会将数值型的数据转换为char型,注意不是字符串型实字符型,所以在写文件的时候不能用s%,应该用c%,因为是N*2的数据大小,所以对于每一行的数据应该读取两次。不然会使输出结果为下图或没有结果。![在这里插入图片描述](https://img-blog.csdnimg.cn/202008032024453.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0NTU0OTY0,size_16,color_FFFFFF,t_70)
|