matlab生成HEX文件-任意信号 大于64K长度
HEX文件格式不赘述,写里直接放上代码。请批评改正。
%%convert a signal data into hex file format
% data format:16bit
% signal length: less than ^-
% author: Yang Li yangli0534@gmail.com
% data:2015.01. clear all;
close all;
clc; %% fixed point or binary16 float point
fixed=;
%% generate a signal waveform
%
T=;%time length
fs=1e3;%sample rate
N=;
Period=N/fs/;
f=/Period;
t=linspace(,(N-)/fs,N); %data=:^-;
data= sin(*pi*f*t) +(rand(,N)-0.5)/;
% data=mod(*t,);
% plot(t,data)
dataBits=;
byteBits=; %% convert into bits fixed point number
if fixed ==
maximum=max(abs(data));%maximum of absolute signal
scale=(^-)/maximum;%scale
data=round(data*scale);
for i=::length(data)
if data(i) <
data(i) =^-abs(data(i)) ;
end
end
end
%% write
fh=fopen('data.hex','w');%open a new file (file path, file name)
bytesEveryRow=;%write bytes every row
dataEveryRow=bytesEveryRow/(dataBits/byteBits);%number of data every row
lengthData=length(data);%length of signal data
rowLengths=ceil(lengthData/dataEveryRow);%number of rows of the file to be written for i=:rowLengths % write a row each time
if(mod(i,hex2dec(''))==)
baseaddr=dec2hex(floor(i/hex2dec('')),);
checkSum=+hex2dec(baseaddr(:))+hex2dec(baseaddr(:));
checkSum=(dec2hex(bitand(-mod(checkSum,),),));
fprintf(fh,[':02000004',baseaddr,checkSum,,]);%产生HEX码(end-:end) end
checkSum=;
addr=dec2hex(mod((i-)*,hex2dec('')),);%the start address of this row
checkSum=hex2dec(addr(:))+hex2dec(addr(:));
if i*dataEveryRow <lengthData % numbers of data to be written greater than dataEveryRow
dataRow=dataEveryRow;
dataHex='';
for j=*(i-)+::*(i)
if fixed == %
dataHexCurr=dec2hex(data(j),);% bits fixed point
else
dataHexCurr=num2binary16hex(data(j));%number format: 16bits floatIEEE half precison float point standard,result is a hex format
end
checkSum=checkSum+hex2dec(dataHexCurr(:))+hex2dec(dataHexCurr(:));
dataHex=strcat(dataHex,dataHexCurr);
end else
dataHex='';
dataRow =lengthData-(rowLengths-)*dataEveryRow;
for j=(rowLengths-)*dataEveryRow+::lengthData
if fixed == %
dataHexCurr=dec2hex(data(j),);% bits fixed point
else
dataHexCurr=num2binary16hex(data(j));%number format: 16bits floatIEEE half precison float point standard,result is a hex format
end
checkSum=checkSum+hex2dec(dataHexCurr(:))+hex2dec(dataHexCurr(:));
dataHex=strcat(dataHex,dataHexCurr);
end
end
checkSum=checkSum+dataRow*dataBits/byteBits;
checkSum=(dec2hex(bitand(-mod(checkSum,),),));
% disp([num2str(i),'--',dataHex,'--',checkSum])
fprintf(fh,[':',dec2hex(dataRow*dataBits/byteBits,),addr,'',dataHex,checkSum,,]);%产生HEX码(end-:end)
end fprintf(fh,':00000001FF');
fclose(fh);
代码中有定点浮点两种,其中浮点格式为IEEE754标准中的half-precision-floating point, 16bit, 1bit 浮号位,5bit指数位,10小数位,代码如下:
function [ hex ] = num2binary16he( number )
%The IEEE standard specifies a binary16 as having the following format: %Sign bit: bit
%Exponent width: bits
%Significand precision: bits ( explicitly stored)
%S EEEEE MMMMMMMMMM
%INPUT: number is a random precision number %OUTPUT : var binary is a 's string of the binary16
% var decimail is the value of the number in decimal %Author :Yang Li .
%Email: yangli0534@gmail.com
if real(number) >= ^
error('beyond the maximum :-2^14--+2^24');
end S=number< ;
E=;
M=abs(number);
while((E>- && E<)&&( M>= || M< ))
if(M>=)
E=E+;
M=M/;
else
E=E-;
M=M*;
end
end
if ((E==- || E==)&& M>= || M<)
M=;
else
M=round((M-)*^) ;
end number1=(-)^S*(^ E )*(+M/^);
% binary=strcat(num2str(S),num2str(E),num2str(M))
E =E+;
binary=strcat(num2str(S),dec2bin(E,), dec2bin(M,)) ; sReal=(str2double(binary()));
eReal =-;
for i=:
eReal=eReal+str2double(binary(i))*^(-i);
end
% eReal=eReal*(-)^str2double(binary());
mReal = ;
for i=:
mReal=mReal+str2double(binary(i))*^(-i);
end numberReal=(-)^sReal*^eReal*(+mReal/^);
err=num2str(abs(number-numberReal));
decimal=numberReal;
% disp(['the origin data is : ',num2str(number)]);
% disp(['the float format is : ',binary]);
% disp(['so ,there is a error :',num2str(abs(number-numberReal))]); num=;
for i=:
num=num+str2double(binary(i))*^(-i);
end
hex=dec2hex(num,);
end
matlab生成HEX文件-任意信号 大于64K长度的更多相关文章
- 用matlab生成mif文件
在FPGA中,rom模块的初始化文件分为两种,一种是hex文件,另外一种是mif文件,这两种文件都可以通过Quartus进行手工创建,进行手工输入数据,也可以借助于专用的文件编辑器完成编辑. 在此介绍 ...
- Keil提示premature end of file错误 无法生成HEX文件
今天舍友在使用Keil UV4的时候遇到一个问题:Keil提示premature end of file,无法生成hex文件. 代码是没有错误的.那么问题就出在设置上面了. 百度了一圈,发现很少人解答 ...
- 【SW4STM32生成 hex文件的设置方法】
SW4STM32生成 hex文件的设置方法 开发环境:WIN7_64 + SW4STM32 联系方式:yexiaopeng1992@126.com 修改: 2018年1月21日 在这周,有一个热心的 ...
- matlab 生成.exe文件 转
本文链接:https://blog.csdn.net/qq_20823641/article/details/51863737 如何将MATLAB程序编译成独立可执行的程序?如何将编译好的独立可执行程 ...
- Keil4 uVision软件生成hex文件
keil4下载地址:http://www.pc6.com/softview/SoftView_236836.html 按图操作即可,注意文件夹选择. 1.选择工程,选择第一个new uvision p ...
- java调用matlab生成exe文件
一.Matlab生成Java Package 1.在MATLAB的Command Window输入deploytool命令,选择Library Compiler. 2.在弹出的窗口选择Java Pac ...
- matlab 生成mat文件
生成MAT文件 假如你的矩阵A.B都已赋值,现在需要将A,B矩阵保存成mat格式文件,执行如下命令:save mydata A B 就会把A B矩阵数据保存在yourdata.dat文件中了 保存指定 ...
- ABAQUS粘弹性边界及地震荷载施加的简单实现(Matlab生成input文件)
思路 粘弹性边界因为能够考虑地基辐射阻尼而使得结构抗震的计算结果更趋于合理,所以在需要考虑结构地基相互作用的结构抗震计算时,是较为常用的地基边界处理和地震荷载施加方法.而ABAQUS软件是经常用来进行 ...
- Matlab生成.dll文件在.NET中加载失败与平台的关系及解决方案
问题链接地址:http://bbs.elecfans.com/forum.php?mod=viewthread&tid=207995
随机推荐
- OAuth2.0 基础概述
web:http://oauth.net/2/ rfc:http://tools.ietf.org/html/rfc6749 doc:http://oauth.net/documentation/ c ...
- java初始化构造函数调用顺序
类初始化时构造函数调用顺序: (1)初始化对象的存储空间为零或null值: (2)调用父类构造函数: (3)按顺序分别调用类成员变量和实例成员变量的初始化表达式: (4)调用本身构造函数. 例子 ...
- php正规则表达式学习笔记(几个常用函数的区别)
preg_mache()函数和 preg_mache_all()函数的区别: preg_mache()只会匹配规则中的字符一次, preg_mache_all()会匹配符合条件的所有字符! 例子对比: ...
- eclipse中的web项目路径和发布好的项目路径
现在企业开发中,我们都会创建一个javaWeb工程,在eclipse中指的是新建一个dynamic web project,创建完工程之后,我们在IDE中大体看到如下的工程目录: 我们主要关心的文件夹 ...
- Android从零开始——Android开发环境的安装
Android开发环境的安装 1 IDE Android可以使用开发的IDE有Eclipse 或者 Android Studio.Android Studio还处于v 0.1.x版本,是early a ...
- 回车键和button按钮都绑定同一个事件,如何避免按回车的时候button重复点击
保存一个全局变量,用来记录Button的焦点状态 <button onclick="login();" onfocus="window.buttonIsFocuse ...
- 在 SharePoint Server 2013 中配置建议和使用率事件类型
http://technet.microsoft.com/zh-cn/library/jj715889.aspx 适用于: SharePoint Server 2013 利用使用事件,您可以跟踪用户与 ...
- 安装sql server managerment studio报错"The instance id is required but it is missing"
问题描述: 今天在安装sql server managerment studio的时候提示报错"The instance id is required but it is missing&q ...
- 详解Paint的各种set方法
一.前言 我们用set方法来设置画笔的样式,类似于我们挑选画笔画画的过程.由于上面有些方法不支持硬件加速,所以在高版本系统中可能会没有效果.因此,我们首先来看看官方废弃的方法. 下图来自:https: ...
- android res文件夹下面的 values-v11 、 values-v14
values-v11代表在API 11+的设备上,用该目录下的styles.xml代替res/values/styles.xml values-v14代表在API 14+的设备上,用该目录下的styl ...