阿涛a

导航

保存的雷达上报数据的matlab分析和作图

在进行雷达测试的过程中会实时保存通过CAN上报的每一帧的雷达数据,其中包括雷达状态和目标信息或原始信息。

这些信息可以保存为相应的文本格式,写了一个matlab的程序打开文件并解析数据绘图进行展示分析;

程序比较粗糙,没有逐行或逐帧对文件进行读取,是一次读取所有行,这点感觉不爽;

解析时也没有逐点按时间顺序在图上输出点的动态效果,这也有点不爽;后面不知道还有机会继续完善不,先记录一下吧。

主M文件如下:

clear
clc
close all
show_en=1;
save_emf_en=1;
save_fig_en=0;
fig01='avc_';
[file,path]=uigetfile('*.*','打开文件');
filep=strcat(path,file);
[ID, length_byte, can_0,can_1,can_2,can_3,can_4,can_5,can_6,can_7, time, numberOfFrames, numberOfErrorFrame]=...
load_cantxt(filep);
%以上为数据导入
ID_401='0x00000401'; %提取ID号为401的
ID_402='0x00000402';
ID_403='0x00000403';
ID_411='0x00000411'; %提取ID号为411的
ID_412='0x00000412';
ID_413='0x00000413';
vect401=find(hex2dec(ID(:,3:10))==hex2dec(ID_401(3:10)));%find是找到数组中非零元素的向量
vect402=find(hex2dec(ID(:,3:10))==hex2dec(ID_402(3:10)));
vect403=find(hex2dec(ID(:,3:10))==hex2dec(ID_403(3:10)));
vect411=find(hex2dec(ID(:,3:10))==hex2dec(ID_411(3:10)));
vect412=find(hex2dec(ID(:,3:10))==hex2dec(ID_412(3:10)));
vect413=find(hex2dec(ID(:,3:10))==hex2dec(ID_413(3:10)));
x_vect401=length(vect401);
x_vect402=length(vect402);
x_vect403=length(vect403);
x_vect411=length(vect411);
x_vect412=length(vect412);
x_vect413=length(vect413);
if isempty(vect401)==0 %如果temp不是空的=0不是空 =1是空
t_401=time(vect401);%按照ID号,分别读取time
ID_401_0=can_0(vect401,:); %读取ID帧下的数据字节
ID_401_1=can_1(vect401,:);
ID_401_2=can_2(vect401,:);
ID_401_3=can_3(vect401,:);
ID_401_4=can_4(vect401,:);
ID_401_5=can_5(vect401,:);
ID_401_6=can_6(vect401,:);
ID_401_7=can_7(vect401,:);
length_401_byte=round(mean(length_byte(vect401)));%round函数取整操作 该ID的数据长度
range_401=bitshift(double(hex2dec(ID_401_4)),16)+bitshift(double(hex2dec(ID_401_3)),8)+double(hex2dec(ID_401_2));
temp1=bitshift(double(range_401),47);% bitshift左移K位
temp=bitshift(double(temp1),-48);
RangeX=temp*0.01;
f_figure(01,'左目标距离',show_en);
plot(1:x_vect401,RangeX);
%f_fig_save(fig01,save_emf_en,save_fig_en);
legend('range左');
hold on
angle_401=bitshift(double(hex2dec(ID_401_2)),16)+bitshift(double(hex2dec(ID_401_1)),8)+double(hex2dec(ID_401_0));
temp1=bitshift(double(angle_401),47);% bitshift左移K位
temp=bitshift(double(temp1),-53);
angleX=(temp-1024)*0.16;
f_figure(02,'左目标角度',show_en);
plot(1:x_vect401,angleX);
%f_fig_save(fig01,save_emf_en,save_fig_en);
legend('angle左');
hold on
speed_401=bitshift(double(hex2dec(ID_401_7)),8)+double(hex2dec(ID_401_6));%速度
temp1=bitshift(double(speed_401),48);% bitshift左移K位
temp=bitshift(double(temp1),-50);
SpeedX=(temp-8192)*0.02;
f_figure(03,'左目标速度',show_en);
plot(t_401,SpeedX);
%f_fig_save(fig01,save_emf_en,save_fig_en);
legend('Speed左');
hold on
Amp_401=bitshift(double(hex2dec(ID_401_5)),8)+double(hex2dec(ID_401_4));%幅度
temp1=bitshift(double(Amp_401),54);% bitshift左移K位
temp=bitshift(double(temp1),-55);
AmpX=(temp-0.05)*0.32;
f_figure(04,'左目标幅度',show_en);
plot(t_401,AmpX);
%f_fig_save(fig01,save_emf_en,save_fig_en);
legend('Amp左');
hold on
end
if isempty(vect411)==0 %如果temp不是空的=0不是空 =1是空
t_411=time(vect411);%按照ID号,分别读取time
ID_411_0=can_0(vect411,:); %读取ID帧下的数据字节
ID_411_1=can_1(vect411,:);
ID_411_2=can_2(vect411,:);
ID_411_3=can_3(vect411,:);
ID_411_4=can_4(vect411,:);
ID_411_5=can_5(vect411,:);
ID_411_6=can_6(vect411,:);
ID_411_7=can_7(vect411,:);
length_411_byte=round(mean(length_byte(vect411)));%round函数取整操作 该ID的数据长度
range_411=bitshift(double(hex2dec(ID_411_4)),16)+bitshift(double(hex2dec(ID_411_3)),8)+double(hex2dec(ID_411_2));
temp1=bitshift(double(range_411),47);% bitshift左移K位
temp=bitshift(double(temp1),-48);
RangeX=temp*0.01;
f_figure(05,'右目标距离',show_en);
plot(1:x_vect411,RangeX);
%f_fig_save(fig01,save_emf_en,save_fig_en);
legend('range右');
hold on
angle_411=bitshift(double(hex2dec(ID_411_2)),16)+bitshift(double(hex2dec(ID_411_1)),8)+double(hex2dec(ID_411_0));
temp1=bitshift(double(angle_411),47);% bitshift左移K位
temp=bitshift(double(temp1),-53);
angleX=(temp-1024)*0.16;
f_figure(06,'右目标角度',show_en);
plot(1:x_vect411,angleX);
%f_fig_save(fig01,save_emf_en,save_fig_en);
legend('angle右');
hold on
speed_411=bitshift(double(hex2dec(ID_411_7)),8)+double(hex2dec(ID_411_6));%速度
temp1=bitshift(double(speed_411),48);% bitshift左移K位
temp=bitshift(double(temp1),-50);
SpeedX=(temp-8192)*0.02;
f_figure(07,'右目标速度',show_en);
plot(1:x_vect411,SpeedX);
%f_fig_save(fig01,save_emf_en,save_fig_en);
legend('Speed右');
hold on
Amp_411=bitshift(double(hex2dec(ID_411_5)),8)+double(hex2dec(ID_411_4));%幅度
temp1=bitshift(double(Amp_411),54);% bitshift左移K位
temp=bitshift(double(temp1),-55);
AmpX=(temp-0.05)*0.32;
f_figure(08,'右目标幅度',show_en);
plot(angleX,RangeX,'b*');
%f_fig_save(fig01,save_emf_en,save_fig_en);
legend('Amp右');
hold on
end

以下为数据导入的M文件代码

 1 function [ID, length_byte, can_0,can_1,can_2,can_3,can_4,can_5,can_6,can_7, time, numberOfFrames, numberOfErrorFrame]=...
 2 load_cantxt(fileToOpen)
 3 %[data1,data3,data4,data7,data8]=textread(fileToOpen,'%s%*s%s%s%*s%*s%s%s','headerlines',1,'delimiter','\n'); %读字符串 删除前2行,回车分隔符
 4 [data1,data3,data4,data7,data8,data9,data10,data11,data12,data13,data14,data15]=textread(fileToOpen,'%s%*s%s%s%*s%*s%s%s%s%s%s%s%s%s%s','headerlines',1);
 5 numberOfFrames=length(data1); %读取的行数
 6 %以上把数据读进一个cell中
 7 stringToBeMatch='1  00000000';
 8 indexMatch=strncmp(data1,stringToBeMatch,length(stringToBeMatch));%比较字符串的前n个字符,返回逻辑值 相同1 不同0
 9 indexToBeDelete=find(indexMatch==1); %find返回数组线性索引的向量
10 temp=1:length(data1);
11 temp(indexToBeDelete)=[];
12 numberOfErrorFrame=length(indexToBeDelete);
13 %以上删除错误行
14 %data_str=strvcat(data_new); %垂直串联字符串 把整个数据串联成字符数组
15 time=char(data3); %垂直串联字符串 把整个数据串联成字符数组
16 ID=char(data4); %垂直串联字符串 把整个数据串联成字符数组
17 length_byte=char(data7);
18 can_0=char(data8);%cellstr转换为元胞字符串数组
19 can_1=char(data9);
20 can_2=char(data10);
21 can_3=char(data11);
22 can_4=char(data12);
23 can_5=char(data13);
24 can_6=char(data14);
25 can_7=char(data15);
26 %以上分离string中的有用数据

以下是作图子M文件代码

 1 function y=f_figure(fig_id,name,show_en)
 2 if show_en==0
 3    show_en='off';
 4 elseif show_en==1
 5     show_en='on';
 6 end
 7 %以上控制图像是否显示
 8 figure(fig_id);
 9 clf;%清空图形窗口
10 set(gcf,'visible',show_en); %设置图形对象属性gcf返回当前图窗的句柄
11 set(gcf,'name',name);
12 assignin('base',strcat('fig_num_',num2str(fig_id)),fig_id);%把fig_id赋值给fig_id变量?stract水平串联字符串
13 %由主程序调入相应的数据制图

 

posted on 2020-05-29 13:50  阿涛a  阅读(761)  评论(0编辑  收藏  举报