读取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=1266行
writecell(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中的不同列。