在自动驾驶、工业监测等实际应用中,多源数据融合技术面临着三大核心挑战:传感器测量误差导致的不确定性、不同设备观测偏差引发的不一致性,以及多传感器重复采集造成的冗余性。传统融合方法(如加权平均、卡尔曼滤波)往往难以有效处理这些复杂情况。Dempster-Shafer证据理论(DST)因其在处理不确定信息方面的独特优势,成为解决这一问题的有力工具。
然而,当不同传感器提供的证据存在高度冲突时(例如一个摄像头判定前方障碍物是行人,而雷达却判断为车辆),传统的Dempster组合规则可能产生反直觉的融合结果。这就像多位专家对同一问题给出截然不同的意见时,简单平均他们的观点可能导致荒谬结论。本文提出的信念对数相似度测量(BLSM)方法,本质上是通过数学手段量化不同证据之间的"意见分歧程度",进而智能调整各证据在最终决策中的权重。
DST的核心可以类比为一个"信任分配"系统。假设我们要识别一个不明物体,定义识别框架Θ={行人,车辆,障碍物}。每个传感器(证据源)会按照以下方式表达其判断:
当两个证据源高度冲突时,比如:
传统Dempster组合规则会计算出冲突系数K=0.9×0.9+0.1×0.1=0.82,归一化后得到:
m({行人})=(0.9×0.1)/(1-0.82)=0.05
m({车辆})=(0.1×0.9)/(1-0.82)=0.95
这种结果明显不合理——两个证据对"行人"和"车辆"的支持程度本应相当,但融合后却极端偏向一方。这就好比两位专家各持己见时,强行得出的结论反而偏离了双方的真实意见。
BLSM的核心创新在于引入对数函数来量化证据间的相似程度。对于两个BPA m₁和m₂,其相似度计算如下:
相似度矩阵构建:
对于识别框架中的所有子集A、B,计算:
code复制sim(A,B) = exp(-|log(m₁(A)+ε) - log(m₂(B)+ε)|)
其中ε是极小值防止log(0)。
权重计算:
code复制w₁ = ∑ sim(m₁,m₂) / (∑ sim(m₁,m₂) + ∑ sim(m₂,m₁))
权重反映了该证据与其他证据的总体一致性程度。
加权组合:
使用修正的Dempster规则:
code复制m(A) = (1/K) * ∑ w₁*m₁(B) * w₂*m₂(C)
其中B∩C=A,K是归一化因子。
EBLSM在BLSM基础上进一步考虑了两个重要因素:
子集基数修正:
对于包含更多元素的子集(如{行人,车辆}相比{行人}),给予适当折扣:
code复制sim_enhanced(A,B) = sim(A,B) * (1/log(|A|+|B|+2))
不确定性惩罚:
对分配给全集Θ的概率质量(即不确定性部分)进行特殊处理,防止过度惩罚合理的怀疑。
matlab复制function [fused_bpa] = EBLSM_fusion(bpa_list)
% 初始化参数
num_evidence = size(bpa_list,1);
focal_elements = get_focal_elements(bpa_list);
% 计算相似度矩阵
sim_matrix = zeros(num_evidence);
for i = 1:num_evidence
for j = i+1:num_evidence
sim_matrix(i,j) = calculate_BLSM(bpa_list(i,:), bpa_list(j,:));
sim_matrix(j,i) = sim_matrix(i,j);
end
end
% 计算证据权重
weights = sum(sim_matrix,2) / sum(sim_matrix(:));
% 加权证据组合
fused_bpa = zeros(1,size(bpa_list,2));
for i = 1:num_evidence
for j = i+1:num_evidence
[temp_bpa, K] = weighted_dempster(bpa_list(i,:), bpa_list(j,:), weights(i), weights(j));
fused_bpa = fused_bpa + temp_bpa;
end
end
fused_bpa = fused_bpa / sum(fused_bpa);
end
function [sim] = calculate_BLSM(bpa1, bpa2)
% 获取所有焦元组合
[A,B] = meshgrid(find(bpa1>0), find(bpa2>0));
pairs = [A(:), B(:)];
% 计算每对焦元的相似度贡献
sim_terms = arrayfun(@(x,y) ...
exp(-abs(log(bpa1(x)+eps)-log(bpa2(y)+eps))) * ...
(1/log(cardinality(x)+cardinality(y)+2)), ...
pairs(:,1), pairs(:,2));
sim = mean(sim_terms);
end
数值稳定性处理:
计算优化:
特殊情形处理:
matlab复制if max(weights) > 0.8
warning('存在主导证据,建议检查数据质量');
weights = weights / sum(weights) * 0.8;
weights(find(weights==max(weights))) = 0.2;
end
实验设置:
融合结果对比:
| 方法 | m(行人) | m(车辆) | m(障碍物) | m(Θ) |
|---|---|---|---|---|
| Dempster | 0.142 | 0.714 | 0.143 | 0 |
| Murphy平均 | 0.300 | 0.467 | 0.100 | 0.133 |
| 本文EBLSM | 0.325 | 0.450 | 0.125 | 0.100 |
关键观察:当摄像头与雷达对"行人"的判断存在冲突时,EBLSM方法既不会像Dempster规则那样极端偏向某一方,也不会像简单平均那样过度平滑,而是给出了更合理的折中结果。
实验数据:
结果分析:
冲突检测:
最终融合:
code复制m({过热})=0.24, m({磨损})=0.315, m({泄漏})=0.345, m({正常})=0.1
这个结果反映出系统更倾向于"泄漏"故障,但同时也保留了"磨损"的可能性,与实际场景中两种故障可能同时存在的情况相符。
基数修正系数:
matlab复制1/log(1.5*(|A|+|B|)+1)
权重平滑:
matlab复制% 避免单个证据权重过低
weights = max(weights, 0.1/length(weights));
weights = weights / sum(weights);
焦元预筛选:
matlab复制% 只处理概率质量大于阈值的焦元
threshold = 0.05;
valid_focals = find(bpa > threshold);
并行计算:
matlab复制parfor i = 1:num_evidence
for j = i+1:num_evidence
sim_matrix(i,j) = calculate_BLSM_parallel(bpa_list(i,:), bpa_list(j,:));
end
end
所有结果趋近均匀分布:
某个证据完全主导:
运行速度过慢:
在实际工业部署中,我们建议先对各类典型场景进行离线测试,记录下不同冲突程度下的融合结果,建立预期行为基准。同时可以结合时间序列分析,对连续帧中的融合结果进行平滑处理,避免单帧误判。