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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,100评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,308评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,718评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,275评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,376评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,454评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,464评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,248评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,686评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,974评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,150评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,817评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,484评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,140评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,374评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,012评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,041评论 2 351

推荐阅读更多精彩内容

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