HEX文件格式不赘述,写里直接放上代码。请批评改正。

 1 %%convert a signal data into hex file format
 2 % data format:16bit
 3 % signal length: less than 2^24-1
 4 % author: Yang Li yangli0534@gmail.com
 5 % data:2015.01.27
 6
 7 clear all;
 8 close all;
 9 clc;
10
11 %% fixed point or binary16 float point
12 fixed=1;
13 %% generate a signal waveform
14 %
15 T=10;%time length
16 fs=1e3;%sample rate
17 N=10000;
18 Period=N/fs/10;
19 f=1/Period;
20 t=linspace(0,(N-1)/fs,N);
21
22 %data=1:2^5-1;
23 data= sin(2*pi*f*t) +(rand(1,N)-0.5)/10;
24 % data=mod(50000*t,1000);
25 % plot(t,data)
26 dataBits=16;
27 byteBits=8;
28
29 %% convert into 16 bits fixed point number
30 if fixed == 1
31     maximum=max(abs(data));%maximum of absolute signal
32     scale=(2^15-1)/maximum;%scale
33     data=round(data*scale);
34     for i=1:1:length(data)
35         if data(i) <0
36             data(i) =2^16-abs(data(i)) ;
37         end
38     end
39 end
40 %% write
41 fh=fopen('data.hex','w');%open a new file (file path, file name)
42 bytesEveryRow=16;%write 16 bytes every row
43 dataEveryRow=bytesEveryRow/(dataBits/byteBits);%number of data every row
44 lengthData=length(data);%length of signal data
45 rowLengths=ceil(lengthData/dataEveryRow);%number of rows of the file to be written
46
47 for i=1:rowLengths % write a row each time
48     if(mod(i,hex2dec('1000'))==1)
49         baseaddr=dec2hex(floor(i/hex2dec('1000')),4);
50         checkSum=6+hex2dec(baseaddr(1:2))+hex2dec(baseaddr(3:4));
51          checkSum=(dec2hex(bitand(256-mod(checkSum,256),255),2));
52         fprintf(fh,[':02000004',baseaddr,checkSum,13,10]);%产生HEX码(end-1:end)
53
54     end
55     checkSum=0;
56     addr=dec2hex(mod((i-1)*16,hex2dec('10000')),4);%the start address of this row
57     checkSum=hex2dec(addr(1:2))+hex2dec(addr(3:4));
58     if i*dataEveryRow <lengthData %  numbers of data to be written greater than dataEveryRow
59         dataRow=dataEveryRow;
60         dataHex='';
61         for j=8*(i-1)+1:1:8*(i)
62             if fixed == 1%
63                 dataHexCurr=dec2hex(data(j),4);%16 bits fixed point
64              else
65                 dataHexCurr=num2binary16hex(data(j));%number format: 16bits floatIEEE 754 half precison float point standard,result is a hex format
66              end
67             checkSum=checkSum+hex2dec(dataHexCurr(1:2))+hex2dec(dataHexCurr(3:4));
68             dataHex=strcat(dataHex,dataHexCurr);
69         end
70
71     else
72          dataHex='';
73          dataRow =lengthData-(rowLengths-1)*dataEveryRow;
74         for j=(rowLengths-1)*dataEveryRow+1:1:lengthData
75              if fixed == 1%
76                 dataHexCurr=dec2hex(data(j),4);%16 bits fixed point
77              else
78                 dataHexCurr=num2binary16hex(data(j));%number format: 16bits floatIEEE 754 half precison float point standard,result is a hex format
79              end
80             checkSum=checkSum+hex2dec(dataHexCurr(1:2))+hex2dec(dataHexCurr(3:4));
81             dataHex=strcat(dataHex,dataHexCurr);
82         end
83     end
84    checkSum=checkSum+dataRow*dataBits/byteBits;
85     checkSum=(dec2hex(bitand(256-mod(checkSum,256),255),2));
86 %     disp([num2str(i),'--',dataHex,'--',checkSum])
87     fprintf(fh,[':',dec2hex(dataRow*dataBits/byteBits,2),addr,'00',dataHex,checkSum,13,10]);%产生HEX码(end-1:end)
88 end
89
90 fprintf(fh,':00000001FF');
91 fclose(fh);

代码中有定点浮点两种,其中浮点格式为IEEE754标准中的half-precision-floating point, 16bit, 1bit 浮号位,5bit指数位,10小数位,代码如下:

 1 function [ hex ] = num2binary16he( number )
 2 %The IEEE 754 standard specifies a binary16 as having the following format:
 3
 4 %Sign bit: 1 bit
 5 %Exponent width: 5 bits
 6 %Significand precision: 11 bits (10 explicitly stored)
 7 %S EEEEE MMMMMMMMMM
 8 %INPUT: number is a random precision number
 9
10 %OUTPUT : var binary is a 2's string of the binary16
11 %         var decimail is the value of the number in decimal
12
13 %Author :Yang Li .
14 %Email: yangli0534@gmail.com
15 if real(number) >= 2^14
16     error('beyond the maximum :-2^14--+2^24');
17 end
18
19 S=number<0 ;
20 E=0;
21 M=abs(number);
22 while((E>-15 && E<15)&&( M>=2 || M<1 ))
23     if(M>=2)
24      E=E+1;
25      M=M/2;
26     else
27         E=E-1;
28         M=M*2;
29     end
30 end
31 if ((E==-15 || E==15)&& M>=2 || M<1)
32     M=0;
33 else
34     M=round((M-1)*2^10) ;
35 end
36
37
38   number1=(-1)^S*(2^ E   )*(1+M/2^10);
39 % binary=strcat(num2str(S),num2str(E),num2str(M))
40 E =E+15;
41 binary=strcat(num2str(S),dec2bin(E,5), dec2bin(M,10)) ;
42
43
44 sReal=(str2double(binary(1)));
45 eReal =-15;
46  for i=2:6
47     eReal=eReal+str2double(binary(i))*2^(6-i);
48  end
49 %  eReal=eReal*(-1)^str2double(binary(2));
50  mReal = 0;
51 for i=7:16
52     mReal=mReal+str2double(binary(i))*2^(16-i);
53 end
54
55 numberReal=(-1)^sReal*2^eReal*(1+mReal/2^10);
56 err=num2str(abs(number-numberReal));
57 decimal=numberReal;
58 % disp(['the origin data is : ',num2str(number)]);
59 % disp(['the float format is : ',binary]);
60 % disp(['so ,there is a error :',num2str(abs(number-numberReal))]);
61
62 num=0;
63 for i=1:16
64     num=num+str2double(binary(i))*2^(16-i);
65 end
66 hex=dec2hex(num,4);
67 end

转载于:https://www.cnblogs.com/hiramlee0534/p/4262400.html

matlab生成HEX文件-任意信号 大于64K长度相关推荐

  1. 16进制 dat matlab_用MATLAB生成DAT文件

    用MATLAB生成DAT文件 f1=10;f2=100;fs=400;N=400; x = linspace(0,N/fs,N); y1 = sin(2*pi*f1*x); y2 = sin(2*pi ...

  2. 【嵌入式基础】Keil下编译代码并生成HEX文件

    目录 一.Keil环境搭建 1.百度网盘分享下载 2.Keil安装 3.注册 4.支持包安装 二. 在Keil环境下创建新项目 1.创建新项目 2.命名新文件​编辑 3.芯片选择和环境配置 4.添加源 ...

  3. matlab生成mif图像文件,matlab 生成mif文件导入quartus rom中

    用Quartus II创建并仿真ROM的步骤:1.在Quatus工程下生成一个ROM2.编写.mif文件,作为ROM的初始化文件3.将.mif文件拷贝到Modelsim工程下4.进行Modelsim仿 ...

  4. matlab产生mif 文件,用matlab生成mif文件

    在FPGA中,rom模塊的初始化文件分為兩種,一種是hex文件,另外一種是mif文件,這兩種文件都可以通過Quartus進行手工創建,進行手工輸入數據,也可以借助於專用的文件編輯器完成編輯. 在此介紹 ...

  5. matlab生成wav文件并用python验证

      在进行频谱分析时,发现MATLAB和python读取wav文件的波形不一致,导致不能得出正确结果,为了验证MATLAB和python哪部分有问题,于是有了这篇博客. 1.需求分析    用MATL ...

  6. stm32 str转hex_【SW4STM32生成 hex文件的设置方法】

    SW4STM32生成 hex文件的设置方法 开发环境:WIN7_64 + SW4STM32 联系方式:yexiaopeng1992@126.com 修改: 2018年1月21日 在这周,有一个热心的网 ...

  7. IAR建立CC2530工程的设置问题及生成.hex文件

    这篇是转载过来的,其实设置都差不多: 利用IAR建完一个工程后,进行设置如下:这里以CC2430为例子,CC2530设置也差不多. 选择 Project 菜单下的Options 配置与 CC2430 ...

  8. 关于Matlab生成批量文件文件名统一数字位数方法

    关于Matlab生成批量文件文件名统一数字位数方法 规定文件名数字位数方法: 读取文件方法 在生成批量含有数字编号的文件时,应该注意使用统一位数的数字来命名,且明明数字位数应该比文件数量最大值至少多一 ...

  9. STM32cubeIDE生成HEX文件

    我们首次编译STM32vubeIDE程序,会发现无HEX文件,这时需要选择项目属性 展开C/C++编译,选择设置,然后选择工具设置选项卡,点击单片机编译输出,勾选生成HEX文件 点击应用并关闭,再次编 ...

最新文章

  1. 微信小程序 文字换行
  2. java datetime和date_Java 8时间接口localDateTime和Date的对比
  3. springMVC实现文件下载(附带Servlet方式)
  4. 多个独立的forEach循环, 内部处理条件是一样,代码优化方案
  5. 横向排列两个多个div盒子的方法(CSS浮动清除float-clear/inline)/办法
  6. 7-8 德才论 (25 分)(C语言实现)
  7. ReactNative实现图集功能
  8. thymeleaf 的 th:onclick js方法入参
  9. 一文学会 Prometheus:开源系统监视和警报工具包!
  10. java大转盘抽奖概率算法_大转盘抽奖概率算法
  11. xposed框架在分机安装失败_pokemon go 和 虚拟gps
  12. 关于HTML转word小记
  13. 2021布吉高级中学高考成绩查询,2021北京市地区高考成绩排名查询,北京市高考各高中成绩喜报榜单...
  14. 第二章,用矩阵解线性方程组,01-高斯消元法
  15. 怎样编辑PDF,PDF怎么删除页面
  16. 女生学java好还是c语言_C语言适合女生学吗。难吗?
  17. JAVA面向对象编程——学生喂养三种宠物:猫、狗和鸟
  18. 搭建Genero BDL环境-安装篇
  19. flutter widget super(key: key)的作用(五)
  20. ESP32 TM1637显示4位数码管

热门文章

  1. 重启IIS和SqlServer的命令行
  2. centos7离线安装mysql_Centos7离线安装metasploit详细教程
  3. python如何导入seaborn_Seaborn - 导入数据集和库
  4. linux找不到动态链接库 .so文件的解决方法
  5. python中对象的概念是什么_简述Python中的面向对象编程的概念
  6. html5 clip,canvas中使用clip()函数裁剪方法
  7. java简单编译器源代码_25行代码实现一个简单的编译器
  8. CSDN光合计划-纯干货-推荐几个python全系列学习教程
  9. linux如何获取raw中的文件路径,如何使用Linux获取Touchscreen Rawdata的坐标
  10. 服务器多核性能排行,服务器内存多核性能