Matlab的数据处理

#Matlab对数据的简单处理
我们在使用vivado的时候,有时需要我们输入一些数据进入模块来验证模块的正确性;如果数据量比较少,可以使用移位寄存器去输入数据。但是数据量比较大的话,就可以使用ROM将需要的数据存储在coe文件里读取,这样更为方便。

###规定输出数据的位宽

  num2str(a,'04d');  %a这个数据变成一个四位宽
  fprintf(fid,'%02x ',vpa( data(i) ) );%输出的数组变成两位
  sprintf('%02x' , 0) ; % char '00'

###将十进制的二维数组直接转换成十六进制的二维数组

[mm,nn] = size(tran_finial);             % 获取初始十进制矩阵的行列值
hex_array = cell(mm,nn);   % 存储转换后的16进制格式矩阵,矩阵大小与init_array对应,不能是字符char数组只会显示一个字符
N = 2;                     % 转换后的精度,即16进制数所占字符宽度,可自定义

for row_i = 1:mm
   for column_j = 1 : nn 
       bin_temp = tran_finial(row_i,column_j);  %将对应的十进制数据取出来
       hex_temp = dec2hex(bin_temp,N);          %将数据变成十六进制两个字符的十六进制数据
       hex_array{row_i,column_j} = hex_temp;  %赋给元胞数组
   end
end

在这里插入图片描述
在这里插入图片描述
###字符串拼接
可以使用字符串拼接操作符(+)或字符串的 strcat() 函数将多个字符串组合成一个字符串。

str1 = "Hello";
str2 = "world";
str3 = "!";
result = str1 + " " + str2 + str3;
disp(result);  % 输出: "Hello world!"

###字符串拆分
可以使用reshape()函数进行字符串的拆分将其拆成我们想要的比如2个字符、4个字符、8个字符等等。

  JJZLData = ('1ACFFC1D00C7843101');
  data = reshape(JJZLData,2,[])' ;  %先拆分,后转置

在这里插入图片描述

###在coe文件内存入十六进制数据

data = (1:100)';  % 生成递增的1-100的数列

hex_data = dec2hex(data);   % 将数据转换为十六进制格式

% 将数据写入coe文件中
filename = 'data.coe';
fileID = fopen(filename,'w');
fprintf(fileID,'memory_initialization_radix=16;\n');
fprintf(fileID,'memory_initialization_vector=\n');
for i = 1:size(hex_data,1)
    if i == size(hex_data,1)
        fprintf(fileID,'%s;\n',hex_data(i,:));
    else
        fprintf(fileID,'%s,\n',hex_data(i,:));
    end
end
fclose(fileID);

###在coe文件内存入二进制数据

JJZLData = ('1ACFFC1D00C7843101');

ASM_Hex = hex2dec(JJZLData');         % 十六进制字符串转十进制字符串
ASM_Bin = dec2bin(ASM_Hex);               % 十进制字符串转二进制字符串
length_data = length(ASM_Hex);
fid=fopen('TEST_KP_ZJZL.Coe','wt');
fprintf(fid,'memory_initialization_radix=2;\n');
fprintf(fid,'memory_initialization_vector=\n');
for j = 1:length_data
    for q=1:4
       if ASM_Bin(j,q)=='1'
           tb=1;
       else
           tb=0;
       end
       fprintf(fid,'%d',tb);  
       fprintf(fid,'\n');
    end
end

fprintf(fid,'; ');
fclose(fid); 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值