读取log文件中的十进制数据,并转化为二进制和格雷码,之后分别写入表格的不同列MATLAB

读取log文件中的十进制数据,并转化为二进制和格雷码,之后分别写入表格的不同列MATLAB

我的log文件是这样的
在这里插入图片描述
第二列是十进制数据,也是我需要进行转换的。
那么,首先读取并提取出第二列数据。

%%读取log文件数据并进行转化
data_log = readtable('D:\资料\a文献\文献阅读及汇报笔记\码盘\码盘数据\WatchJ - 副本.log','FileType','text');
                                                    %使用绝对路径读取log文件
                                                    %uint16_t:16位无符号整型,范围:-32768-32767
data_double = table2array(data_log(:,2));           %提取log文件中第二列有效值,并转化为数组double类型

转化为普通二进制比较容易,使用dec2bin就可以:

data_char=dec2bin(data_double,10);                  %将十进制转为普通二进制显示
data_cell = cellstr(data_char);                     %char转化为cell便于写入excel表格

读取的十进制数据和普通二进制数据写入excel表格的程序分别为

xlswrite('D:\资料\a文献\文献阅读及汇报笔记\码盘\码盘数据\dataJ.xlsx',data_double,'A2:A1266');       
                                                    %double类型数据写入,将十进制数据存放于表格A列第2行至第m=1266writecell(data_cell,'D:\资料\a文献\文献阅读及汇报笔记\码盘\码盘数据\dataJ.xlsx','sheet',1,'Range','B2:B1266'); 
                                                    %cell类型数据写入,将普通二进制数据存放于表格B列第2行至第1266

到这里,每一行十进制数据已经转化成了对应的普通二进制数据,并且写入了excel表格中;
在接下来得到格雷码的过程中,我的思路是遍历元胞数组内的普通二进制并将其转化为对应的格雷码。
准备工作:

[m,n] = size(data_cell);                            %读取行列数便于for循环遍历每一个数据
gray_save = [];                                     %为存储转化格雷码后的数据做准备

具体进行遍历和转换的程序

for i = 1:m
    for j = 1:n
        data_cell(i,j);                             %遍历cell内的每一行每一列数据
        data_mat = cell2mat(data_cell(i,j));        %将每一个数据改为char类型便于转化为格雷码
    end
     gray = bin2gray_data(data_mat);                %bin2gray_data:将每一个char类型普通二进制转化为格雷码
                                                    %需要手动创建或添加bin2gray_data.m
     gray_cell = cellstr(gray);                     %char类型数据转化为cell类型便于写入excel表格中
     gray_save = [gray_save,gray_cell];             %将所有转化成格雷码的数据都放在一个数组中,cell类型
     gray_save_cell = gray_save';                   %行列转换,和读出来的数据行列保持一致
end

其中的bin2gray_data.m内容:

% 二进制编码转换为格雷码
function grayCode = bin2gray(bin)
    dat1 = bin(1);                  %首位不变
    dat2 = bin(2:end);              %2到n-1
    dat3 = bin(1:end-1);            %1到n-1
    len = length(dat2);             %dat2的长度

    g = bin2dec(dat2);              %bin2dec:将dat2转换为十进制数字病返回转换后的数字
    q = bin2dec(dat3);
    c = dec2bin(bitxor(g,q));       %bitxor:返回g和q的按位异或XOR
                                    %dec2bin:将十进制数字转化为二进制数字并返回
    len1 = length(c);
    len_error = len - len1;
    grayCode_temp(1:len_error) = '0';
    grayCode_temp = [grayCode_temp,c];
    grayCode = [dat1,grayCode_temp];
end

最后同样将格雷码写入表格中,效果如下:
在这里插入图片描述
以上,就完成了十进制数据转为普通二进制和格雷码的过程,并将它们一一对应保存在了excel中的不同列。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Frankie_stand

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

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

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

打赏作者

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

抵扣说明:

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

余额充值