使用MATLAB生成IEEE浮点的coe文件

使用MATLAB生成IEEE浮点的coe文件

在这篇文章中,主要写了我自己生成IEEE格式的coe文件以及用MATLAB读取IEEE格式的coe文件过程中用到的知识点,涉及到PFGAMATLAB

IEEE754解读

什么是IEEE754

IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。该标准的全称为IEEE二进制浮点数算术标准(ANSI/IEEE Std 754-1985),又称IEC 60559:1989,微处理器系统的二进制浮点数算术(本来的编号是IEC 559:1989)。
IEEE 754规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度(43比特以上,很少使用)与延伸双精确度(79比特以上,通常以80位实现)。

IEEE754表示

IEEE的表示也可以说是IEEE的组成。
组成其中S为数据的符号位;E为指数位;M为有效数字位。
IEEE754标准:

参考文档

上述数据的实际值为 n = ( − 1 ) s ∗ m ∗ 2 e n = (-1)^{s} *m* 2^e n=(1)sm2e

IEEE格式coe文件的生成

这个过程主要分为三个部分。一是生成coe文件的数据点;二是将数据点进行格式转换;三是将转换后的数据点存入coe文件。

生成coe文件的数据点

生成数据点的方法非常多,这里列举生成正弦波信号的方法(有不对的地方请各位指正)

width=32; %宽度
depth=128; %深度是65536
n=0:depth-1;
yn=sin(2*pi/128*n);

产生的波形如图所示:
产生正弦波图片

进行数据格式转换

这些数据点已经存入yn变量里面。然后将数据转换为IEEE格式的浮点数。
这里我用到的是

yn = single(yn);
num2hex(yn);

将转换后的数据存入文件

%===============================开始写coe文件=============================== 
addr=0:depth-1;
% str_width=strcat('WIDTH=',num2str(width));
str_depth=strcat('DEPTH=',num2str(depth)); 
fid=fopen('IEEE_sin.coe','wt'); %打开或者新建coe,存放位置和文件名任意 

%********************************************************************************/ 
fprintf(fid,'MEMORY_INITIALIZATION_RADIX=16;\n'); 
fprintf(fid,'MEMORY_INITIALIZATION_VECTOR=\n');
fprintf(fid,'%tx,\n',yn) %开始写数据了 
fclose(fid);

在这里特别注意一点,就是写入数据的格式,IEEE的格式为"%tx"。这个地方我是被折磨了挺久,最开始没有发现这个问题,生成的coe文件一直有问题。这个地方我是参考MATLAB官方的help文档。
在命令行输入:

help fprintf

找到如图所示的帮助
在这里插入图片描述本人MATLAB小白,有写错的地方望大家指正

啊啊啊啊啊!果然有问题

上面关于数据转换的地方,其实%tx这个直接就可以将浮点数转换成单精度十六进制,是不需要中间进行一次转换的
在这里插入图片描述上面这个图片中fprintf后面直接用的是小写x,如果换成大写X,则输出的coe文件的数据位浮点数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值