读取bin文件和txt文件数据-matlab

bin文件:8位二进制,转换成rom 的coe文件

%%生成4096字节的coe文件,并掉转原始文件中的位顺序。
%% 读取bin文件
fileID = fopen('F:\SRC\02-MATLAB\test.bin','r');
data = fread(fileID,'ubit8'); %8位为单位读取
fclose(fileID);

%获取原始文件长度
data_length=length(data);

% 生成coe文件
fid = fopen('test.coe','w');   
%-ROM coe标准格式,以16进制写入
fprintf( fid, 'MEMORY_INITIALIZATION_RADIX = 16;\n');                     
fprintf( fid, 'MEMORY_INITIALIZATION_VECTOR =\n');
fprintf(fid,'%x,\n',00); 
fprintf(fid,'%x,\n',00); 
fprintf(fid,'%x,\n',00); 
fprintf(fid,'%x,\n',00); 
 
%- 写数据
for i = 1:1:data_length
    if(i<data_length) 
        m=data(i); 
        m_b_l0=bitget(m,1);
        m_b_l1=bitget(m,2);
        m_b_l2=bitget(m,3);
        m_b_l3=bitget(m,4);
        m_b_l4=bitget(m,5);
        m_b_l5=bitget(m,6);
        m_b_l6=bitget(m,7);
        m_b_l7=bitget(m,8);
        m_c=(m_b_l0*2^7+ ...
             m_b_l1*2^6+ ...
             m_b_l2*2^5+ ...
             m_b_l3*2^4+ ...
             m_b_l4*2^3+ ...
             m_b_l5*2^2+ ...
             m_b_l6*2^1+ ...
             m_b_l7*2^0); 

        fprintf(fid,'%x,\n',m_c); 


    else 
        if(data_length==4096) 
            m=data(i); 
            m_b_l0=bitget(m,1);
            m_b_l1=bitget(m,2);
            m_b_l2=bitget(m,3);
            m_b_l3=bitget(m,4);
            m_b_l4=bitget(m,5);
            m_b_l5=bitget(m,6);
            m_b_l6=bitget(m,7);
            m_b_l7=bitget(m,8);
            m_c=(m_b_l0*2^7+ ...
                 m_b_l1*2^6+ ...
                 m_b_l2*2^5+ ...
                 m_b_l3*2^4+ ...
                 m_b_l4*2^3+ ...
                 m_b_l5*2^2+ ...
                 m_b_l6*2^1+ ...
                 m_b_l7*2^0); 
    
            fprintf(fid,'%x;\n',m_c); %如果原始数据的长度等于4096,写入最后一个数据,并以分号结尾;
        else  
            m=data(i); 
            m_b_l0=bitget(m,1);
            m_b_l1=bitget(m,2);
            m_b_l2=bitget(m,3);
            m_b_l3=bitget(m,4);
            m_b_l4=bitget(m,5);
            m_b_l5=bitget(m,6);
            m_b_l6=bitget(m,7);
            m_b_l7=bitget(m,8);
            m_c=(m_b_l0*2^7+ ...
                 m_b_l1*2^6+ ...
                 m_b_l2*2^5+ ...
                 m_b_l3*2^4+ ...
                 m_b_l4*2^3+ ...
                 m_b_l5*2^2+ ...
                 m_b_l6*2^1+ ...
                 m_b_l7*2^0); 
    
            fprintf(fid,'%x,\n',m_c); %如果原始数据的长度不等于4096,写入原始文件中的最后一个数据。

            for j = 1:1:4096-4-data_length %填充0xFF
                if(j<4096-4-data_length)
                    fprintf(fid,'%x,\n',255);
                else 
                   fprintf(fid,'%x;\n',255); 
                end
            end



        end
    end    
end

fclose(fid); 

txt文件:16位16进制,转换成Double数组。

clear;
%%
%读取txt文件中的数据
fileID = fopen('F:\SRC\03-simulink\test\adc_20MHz_32768.txt','r');
data_hex = textscan(fileID,'%s');
fclose(fileID);

%%
%长度与时间信息 
data_length=length(data_hex{1,1});
n=(1:data_length)';

%%
%格式转换
data_r=zeros(data_length,1);
for i=1:data_length
    data_r(i,1)=hex2dec(convertCharsToStrings(data_hex{1,1}(i,1)));
end

data_dec=zeros(data_length,1);
for i = 1:1:data_length
    msb_sign=bitget(data_r(i),16);

    if(msb_sign==1)
        data_dec(i,1)=data_r(i)-65536;
    else 
        data_dec(i,1)=data_r(i);
    end    
end

%%
%数据源 to simulink
data_src=[n,data_dec];

导入数据后,显示不完全设置,修改默认设置,修改后如下图
显示设置
txt文件:10进制,转换成Double数组。

data_dec = load('F:\SRC\03-simulink\test\13_90_1M_1Vemf.txt');
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

树清风探花

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值