0. NGSIM intro
NGISM是美国联邦公路局的车辆轨迹数据集中的 i-80 和 US-101 。 2 个数据集包含 6 个 15 min 采集轨迹子集, 其中的车辆状态数据是用10Hz (1 frame=0.1s)频率进行拍摄的多台高空相机对交通路况进行采集,然后再利用图像处理技术得到的, 数据包括车辆 ID、位置、速度、加速度、当前车道 ID,etc.。官方的NGSIM数据下载可评论留下邮箱看到后分享。
1. sEMA Data filter
NGSIM的数据类存在较大的噪声以及异常值,如果非必要精准的重构车辆的轨迹我们可以采用一些常见的滤波算法进行数据集平滑和异常值处理,eg. sEMA(symmetric exponential moving average) & S-G (Savitzky-Golay) & 小波变化 etc., 这里作者采用sEMA算法进行滤波。
2. code and simulation
sEMA Part-codes
for f=1:1:r1
% --------------------------------
% 提取 Vid=f
% using Local_x ,column=5
S_V_Lx_calc=TrajData0415( TrajData0415(:,1)==Vid_arr0415(f,1),5 );
% Vid=f
[Nr,Nc]=size(S_V_Lx_calc);
% 数据点个数
%-----------------------------------------------------------------------
% 求解 数据集中的横向速度:Vx_0415
for e=1:1:Nr % Vx_0415 Acc_x0415 calc.
if e==1
Vx_0415_calc(f,e)= (S_V_Lx_calc(e+1,1)-S_V_Lx_calc(e,1))/dto; % for Vx_0415
elseif 2<=e && e<=Nr-1
Vx_0415_calc(f,e)= (S_V_Lx_calc(e+1)-S_V_Lx_calc(e-1))/(2*dto);
Acc_x0415_calc(f,e)=(S_V_Lx_calc(e+1)-2*S_V_Lx_calc(e,1)+S_V_Lx_calc(e-1))/dt2;
elseif e==Nr
Vx_0415_calc(f,e)= Vx_0415_calc(f,e-1);
end
end
% 单独计算
Acc_x0415_calc(f,1)=(Vx_0415_calc(f,2)-Vx_0415_calc(f,1))/dt;
Acc_x0415_calc(f,Nr)=Acc_x0415_calc(f,Nr-1);
end
% for vy_0415_calc
Vx_0415_calcinv=Vx_0415_calc'; % 转置
Vx_0415_calc_=Vx_0415_calcinv(:);
Vx_0415_calc_(Vx_0415_calc_==inf)=[]; % 去除预设的inf量 preallcation
% for Acc_x0415_calc
Acc_x0415inv_calc=Acc_x0415_calc';
Acc_x0415_calc_=Acc_x0415inv_calc(:);
Acc_x0415_calc_(Acc_x0415_calc_==inf)=[];
for w=1:1:r
TrajData0415_calc(w,19)=Vx_0415_calc_(w,1)*0.3048; % ft-->meter
TrajData0415_calc(w,20)=Acc_x0415_calc_(w,1)*0.3048;
for ww=[5,6,12,13]
TrajData0415_calc(w,ww)=TrajData0415(w,ww)*0.3048;
end
for ww=[1,2,3,4,7,8,9,10,11,14,15,16,17,18] % column index
TrajData0415_calc(w,ww)=TrajData0415(w,ww);
end
end
sEMA 滤波效果:
分析可知滤波后的数据在保留数据集原有信息的同时可以很好处理NGSIM中的尖点与噪声。MMiL欢迎大家交流与讨论,一起进步 !