Matlab实现多传感器信息融合(D-S证据推论)

D-S证据理论是对贝叶斯推理方法推广,主要是利用概率论中贝叶斯条件概率来进行的,贝叶斯条件概率需要知道先验概率。而D-S证据理论不需要知道先验概率,能够很好地表示“不确定”,被广泛用来处理不确定数据。 (对来自多传感器数据的融合处理)

适用于:信息融合、专家系统、情报分析、法律案件分析、多属性决策分析 


1、D-S证据理论知识介绍

(1)四大定义

基本概率分配、信任函数、似然函数、信任区间

其中,函数m为识别框架U上的基本概率赋值函数,m(A)叫做A的基本概率赋值,也就是对A的支持度,如果满足\forall A\subseteq U,m(A)> 0,则称A为焦元。

(2)Dempster组合规则(以两个证据/传感器为例)

组合规则的简单描述(1-K表示归一化因子)

(2)Dempster判决规则

判决规则

       D-S证据理论组合正是由组合规则与判定规则组成的,Dempster组合规则作为其核心内容将多传感器的信息进行融合达到判定规则的标准,最终得到融合结果。

2、Matlab实现:

先编写了两个函数:DSfusion表示根据组合规则写的融合函数;

                                DSjudg表示根据判定规则编写的决策函数;

最终使用主函数Dempster.m实现多传感器信息融合。

(1)融合函数DSfusion:

function [Result] = DSfusion(P,inputm1,inputm2)

%该函数是D-S的融合函数,即融合两个传感器m1和m2之间的信息(实现经典Dempster-Shafer组合公式)

%  INPUT:  P    :      分类的类别最终的组合

%            inputm1:    传感器m1对于分类组合数N的置信度,1-by-(N-1) matrix.[去掉空集]

%            inputm2:    传感器m2对于分类组合数N的置信度,1-by-(N-1) matrix.[去掉空集]

%

%  OUTPUT:  Result:      两个传感器最终的数据融合结果(对于分类组合数N的置信度),

%                                     1-by-(N-1) matrix.[去掉空集]

L = length(P)-1;

mp = zeros(1,L);

for k = 1:L

    F_k = zeros(L,L);

    label = num2str(P(k));

    for i = 1:L

        label_i = num2str(P(i));

        for j = 1:L

            label_j = num2str(P(j));

            itersect_ij = intersect(label_i,label_j);

            if strcmp(itersect_ij,label)     

                F_k(i,j) = 1;

            end

        end

    end 

    mp(k) = sum(sum(inputm1'*inputm2.*F_k));

end

mp = mp/sum(mp);

Result = mp;

end

(2)决策函数DSjudg

function [A1, A2] = DSjudg(P, Result, ec1, ec2)

%该函数是D-S的判断函数,

%   INPUT:  P      :     分类的类别最终的组合,1-by-(N-1) matrix.[去掉空集]

%            Result :     两个传感器最终的数据融合结果(对于分类组合数N的置信度),1-by-(N-1)

%            matrix.[去掉空集]

%            ec1,ec2:     两个判决门限值

%

%   OUTPUT:  Type   :     根据DS证据推论得到的最终结果

%            A1,A2  :     判断阈值

[~, mx] = size(Result);

res = zeros(1, mx);

A1 = max(Result(1,1:3));     %此处需要根据你的分类组合数进行修改,取确定的类别

                                            %比如我这里组合数是A,B,C,AB,ABC,空集,确定的类别是前三                                                    个类别,所以我取3

[c,r] = find(Result == A1);

res = Result;

res(c,r) = 0;

A2 = max(res(1,1:3));           %此处同上

uncertainty = Result(1,mx) + Result(1,mx-1);  %此处是不确定的类别数的概率总和,即类别

                                                                        %组合矩阵中后两个AB和ABC

if (A1-A2 > ec1) && (uncertainty < ec2) && (A1 > uncertainty)

    judg_result = [c,r,A1];

    Type = P(c,r);

    fprintf('D-S数据融合之后的结果是:%d\n',Type);

else 

    fprintf('无法识别目标\n');

end

end

(3)主函数Dempster.m

clc;

clear;

%% Matlab code for Dempster's combinatonal rule in belief functiontheory.

num_Sensor=3;   %传感器数目

num_Object=5;   %分类的类别最终的组合数,去掉空集

num_Period=3;   %测量周期数

Info=zeros(num_Sensor,num_Object,num_Period);   % 一次判决所需要的信息

    Info(:,:,1)=[0.30 0.40 0.15 0.00 0.15 ;

                 0.30 0.50 0.10 0.00 0.10 ;

                 0.30 0.30 0.20 0.00 0.20 ;];

    Info(:,:,2)=[0.40 0.20 0.20 0.00 0.20 ;

                 0.50 0.20 0.20 0.00 0.10 ;

                 0.50 0.30 0.10 0.00 0.10 ;];

    Info(:,:,3)=[0.50 0.20 0.15 0.00 0.15 ;

                 0.40 0.30 0.10 0.00 0.20 ;

                 0.40 0.20 0.10 0.00 0.30 ;]; 

    Info1=zeros(num_Period,num_Object);

    P = [1 2 3 12 123 0];

    %P1 = ['A','B','C','AB','ABC','空集'];

    %各周期内传感器的融合

    for i=1:num_Period

        Info1(i,:)=Info(1,:,i);

        for j=1:num_Sensor-1

            Info1(i,:)=DSfusion(P, Info1(i,:),Info(j+1,:,i));

        end

    end

    %周期之间的融合

    Final_Result=Info1(1,:);

    for i=1:num_Period-1

        Final_Result=DSfusion(P, Final_Result,Info1(i+1,:));

    end

    ec1=0.1;  %融合决策判据

    ec2=0.1;

    DSjudg(P, Final_Result, ec1, ec2);

如果周期数为1,则只用计算三个传感器之间的融合即可,也就是加粗那部分。

算法的运行结果:

D-S数据融合之后的结果是:1

%%即根据DS证据理论,融合三个传感器的信息,最终可以得出结果属于A类别。

最终返回的结果是P矩阵中的类别,1代表的是A类别,2代表的是B类别,3代表的是C类别。

参考资料:

理论部分:理论知识(一)理论知识(二)

代码部分:代码1代码2

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 9,074评论 0 2
  • 写在前面的话 代码中的# > 表示的是输出结果 输入 使用input()函数 用法 注意input函数输出的均是字...
    FlyingLittlePG阅读 8,181评论 0 9
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 6,182评论 0 2
  • 贪心算法 贪心算法总是作出在当前看来最好的选择。也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上...
    fredal阅读 13,059评论 3 52
  • 打算系统学习绘画 从工笔开始 从小到大没写过毛笔字 这是第一周的作业 虽然惨不忍睹 但是已经开始了 不是吗? 纸:...
    跃染阅读 2,515评论 5 5

友情链接更多精彩内容