RGMII_231024解帧Matlab

clc
clear

fname = 'data_1121_pm_0.bin';
fd = fopen(fname,'r','b');
data = fread(fd,'uint8')';
% data = data(1:10000);

IDLE = 0;
FRAME = 1;

S_c_state = 0;
S_n_state = 0;

S_cnt = 0;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%解MAC帧
j = 1;
for i = 0:length(data)-12
    if(data(i+12) == 5 && data(i+11) == 4 && data(i+10) == 3 && data(i+9) == 2 && data(i+8) == 1 && data(i+7) == 218 ...
    && data(i+6) == 37 && data(i+5) == 176 && data(i+4) == 56 && data(i+3) == 130 && data(i+2) == 82 && data(i+1) == 60)
        S_c_state = FRAME;%识别到帧头,进入读帧状态
    elseif(S_cnt == 96)%一帧数据结束(一帧共99个数据)
        S_c_state = IDLE;
        S_cnt = 0;
    elseif(S_c_state == FRAME)
        S_cnt = S_cnt + 1;%去除帧数据
        frame_data(j) = data(i+14);
        j = j+1;
    end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%解{5a5a5a5a,32'hX,32'hY,32'hZ}
IDLE = 0;
XYZ = 1;

S_c_state = 0;
S_n_state = 0;

S_cnt = 0;

X_j = 1;
Y_j = 1;
Z_j = 1;
for i = 0:length(frame_data)-4
    if(frame_data(i+4) == 90 && frame_data(i+3) == 90 && frame_data(i+2) == 90 && frame_data(i+1) == 90)
        S_c_state = XYZ;%识别到帧头(5A5A5A5A),进入读帧状态
    elseif((S_c_state == XYZ) && (S_cnt<4))%X
        X(X_j) = frame_data(i+4);
        X_j = X_j+1;
        S_cnt = S_cnt + 1;
    elseif((S_c_state == XYZ) && (S_cnt<8))%Y
        Y(Y_j) = frame_data(i+4);
        Y_j = Y_j+1;
        S_cnt = S_cnt + 1;
    elseif((S_c_state == XYZ) && (S_cnt<12))%Z
        Z(Z_j) = frame_data(i+4);
        Z_j = Z_j+1;
        S_cnt = S_cnt + 1;
    else
        S_cnt = 0;
        S_c_state = IDLE;
    end
end

% X_SEE = dec2hex(X);
% Y_SEE = dec2hex(Y);
% Z_SEE = dec2hex(Z);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%将8位拼接成32位
%%%%处理X路
j = 1;
for i = 1:4:length(X)
    X_data(j) = X(i)*2^24 + X(i+1)*2^16 + X(i+2)*2^8 + X(i+3);
    if(X_data(j) > 2^31)%将FPGA中有符号数转换成Matlab十进制负数
        X_data(j) = X_data(j) - 2^32;    
    end
    j = j+1;
end
%去除两个定点
X_data = X_data/2^2;
%%%%处理Y路
j = 1;
for i = 1:4:length(Y)-mod(length(Y),4)
    Y_data(j) = Y(i)*2^24 + Y(i+1)*2^16 + Y(i+2)*2^8 + Y(i+3);
    if(Y_data(j) > 2^31)%将FPGA中有符号数转换成Matlab十进制负数
        Y_data(j) = Y_data(j) - 2^32;    
    end
    j = j+1;
end
%去除两个定点
Y_data = Y_data/2^2;
%%%%处理Z路
j = 1;
for i = 1:4:length(Z)-mod(length(Z),4)
    Z_data(j) = Z(i)*2^24 + Z(i+1)*2^16 + Z(i+2)*2^8 + Z(i+3);
    if(Z_data(j) > 2^31)%将FPGA中有符号数转换成Matlab十进制负数
        Z_data(j) = Z_data(j) - 2^32;    
    end
    j = j+1;
end
%去除两个定点
Z_data = Z_data/2^2;

%%%%%%X路存txt文件
filename = 'X_data.txt';
fileID = fopen(filename, 'w');
fprintf(fileID, '%d\n', X_data');
fclose(fileID);
%%%%%%Y路存txt文件
filename = 'Y_data.txt';
fileID = fopen(filename, 'w');
fprintf(fileID, '%d\n', Y_data');
fclose(fileID);
%%%%%%Z路存txt文件
filename = 'Z_data.txt';
fileID = fopen(filename, 'w');
fprintf(fileID, '%d\n', Z_data');
fclose(fileID);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值