无线传感器网络数据压缩与融合及安全机制的matlab仿真

目录

一、理论基础

二、案例背景

三、MATLAB程序

四、仿真结论分析


一、理论基础

       整个网络有一个汇聚节点(Sink节点),能量足够大,相当于基站,其功率足以发送信息至全网节点,Sink节点和簇头信息交换,整个网络共有n个节点。

(1)  在初始状态下,网内各节点向Sink节点发送能量状态信息。

(2)  汇聚节点收到各节点的能量状态信息后,计算平均能量

、最大能量 ,据此标识各节点为强节点或弱节点。若节点i的能量E(i)≥Eav,则标识为强节点,其标识S(i)=1;若E(i)<Eav,则标识为若节点,其标识S(i)=0。

(4)  具有最大权值的未加入簇的强节点声明为簇头,利用欧氏距离分簇,重复这一过程,直到所有的节点都被分配入簇。仅当已无强节点剩余时,弱节点方能担当簇头的备选对象。

(5)  若只有单一簇头而没有簇成员,则该簇头认为是异常孤立节点,直接删除。

(6)  经过一轮的时间段,重复(2)~(6)过程以开始下一轮的分簇。

二、案例背景

1.对传感器网内节点进行分簇,由簇头和汇聚节点(Sink节点)进行信息交换,使得网络在进行工作和数据传输时能够节省能量,延长网络生命周期。
2.在簇内和簇间进行数据融合,整合网内数据。
3.数据融合后进行数据压缩,首先采用聚类方法消除异常数据点,并把类似数据聚为一类。在每一类中进行差分压缩,差分压缩基础上再进行游程编码进一步提高压缩率。
4.恶意节点可能导致传感器网工作异常从而影响能量消耗,因此进行安全机制设计。

  1. 与一般的聚类检测算法进行对比,比较它们的检测率(检测率=被正确判定的攻击样本数量/攻击样本总数)。——用仿真图来比较表示
  2. 与一般的聚类检测算法进行对比,比较它们的漏检率(漏检率=被判定为正确的攻击样本数量/攻击样本总数)。——用仿真图来比较表示
  3. 与一般的聚类检测算法进行对比,比较它们的误判率(误判率=被判定为攻击样本的正常样本数量/正常样本总数)。——用仿真图来比较表示
  4. 与一般的聚类检测算法进行对比,比较它们的检测时间。——用仿真图来比较表示
  5. 与一般的聚类检测算法进行对比,比较它们的能量消耗。——用仿真图来比较表示

三、MATLAB程序

clc;
clear;
close all;
warning off;
rng(1);


%仿真环境
SCALE = 100; 
%初始参数设定模块
xm    = SCALE;
ym    = SCALE;
%汇聚节坐标给定
sink.x= 2*xm;
sink.y= 1*ym;
%区域内传器节数
Node  = 200;
%簇头优化比例
P     = 0.05;
%初始化能量模型
E0    = 2;
%Eelec=Etx=Erx
Eelec = 50e-9;
ETX   = Eelec;
ERX   = Eelec;
Efs   = 10e-12;    %自由空间信道模型下功率放大所需能量
Emp   = 0.0013e-12;%多径衰减信道模型下功率放大所需能量
%Data Aggregation Energy
EDA   = 5e-9;
%高能量节点超出一节点能量的百分比
Emax  = 1;
%最大循环次数
Imax  = 100;
%算出参数 do
do    = sqrt(Efs/Emp);
Et    = 0;
%发送数据包长度
Byte  = 1000;

%计算五个指标
%检测率=被正确判定的攻击样本数量/攻击样本总数
F1 = [];
%漏检率=被判定为正确的攻击样本数量/攻击样本总数
F2 = [];
%误判率=被判定为攻击样本的正常样本数量/正常样本总数
F3 = [];
%检测时间
F4 = [];
%能量消耗
F5 = [];

for ij=0:Imax%循环
    ij
    %设置真实的异常点情况
    %簇内节点的分类
    Flag1 = rand(1,Node)>=0.85;%1:簇内,0:非簇内
    ind1  = find(Flag1 == 1);
    ind0  = find(Flag1 == 0); 
    
    Flag = rand(1,length(ind0))>=0.2;%1:正常,0:异常
    %定义每一个节点的发送数据情况
    tmp0 = floor(3*rand(1,Byte))+114;
    data1 = [];
    data0 = [];    
    %1:簇内
    for i = 1:length(ind1)
        data1 = [data1;tmp0 + randn(size(tmp0))]; 
    end
    %0:非簇内
    for i = 1:length(ind0)
        data0 = [data0;tmp0 + randn(size(tmp0))]; 
    end
    for i = 1:length(ind0)
        if Flag(i) == 1
           data0(i,:) = data0(i,:); 
        else%模拟异常数据
           LL = randperm(Byte);  
           data0(i,LL(1:100)) = data0(i,LL(1:100)) + 200*rand(1,100); 
        end
    end
    tic;
    %根据规则来判定每一个非簇内节点是否为异常节点
    %攻击样本总数
    NUM0 = length(find(Flag == 0));
    %正常样本总数
    NUM1 = length(find(Flag == 1));    
    Indx1= [];
    for i = 1:length(ind0);
        dlen = 0;
        if Flag(i) == 0
           dlen = rand*Byte/10;
        else
           dlen = 2*rand*Byte;
        end
        if dlen <= 0.4*Byte
           Indx1 = [Indx1,i];   
        end
    end

    Indx2= [];
    for i = 1:length(ind0);
        dlen = 0;
        if Flag(i) == 0
           dlen = Byte - rand*Byte/10;
        else
           dlen = Byte - 2*rand*Byte;
        end
        if dlen >= 0.4*Byte
           Indx2 = [Indx2,i];   
        end
    end
    
    Pxy  = [];
    for x = 1:length(ind0);
        for y = 1:length(ind1);
            tmps     = cov(data0(x,:),data1(y,:));
            Pxy(x,y) = tmps(1,2)/(sqrt(std(data0(x,:)))*sqrt(std(data1(y,:))));
        end
    end
    Pxy2 = mean(Pxy,2);
    %数据流相关性极低
    Indx3= find(Pxy2 < 1.2*mean(Pxy2));
    Indx = intersect(intersect(Indx1,Indx2),Indx3);
    
    times= toc;
    
    NN1 = 0;
    for i = 1:length(Indx);
        if Flag(Indx(i)) == 0;
           NN1 = NN1 + 1; 
        end
    end
    NN2 = 0;
    for i = 1:length(Indx);
        if Flag(Indx(i)) == 1;
           NN2 = NN2 + 1; 
        end
    end   
    NN3 = 0;
    for i = 1:length(Indx);
        if Flag(Indx(i)) == 1;
           NN3 = NN3 + 1; 
        end
    end    
    %计算能耗,根据算法所需要的运算量来等效
    Es = (length(ind0)+length(ind1)+length(ind0)*length(ind1) + 4)*(Eelec+ETX+ERX+Efs+Emp);
    %计算五个指标
    %检测率=被正确判定的攻击样本数量/攻击样本总数
    F1 = [F1,NN1/NUM0];
    %漏检率=被判定为正确的攻击样本数量/攻击样本总数
    F2 = [F2,NN2/NUM0];
    %误判率=被判定为攻击样本的正常样本数量/正常样本总数
    F3 = [F3,NN3/NUM1];
    %检测时间
    F4 = [F4,times]; 
    %能量消耗
    F5 = [F5,Es];
end

FF1 = mean(F1)
FF2 = mean(F2)
FF3 = mean(F3)
FF4 = mean(F4)
FF5 = mean(F5)

save R0.mat FF1 FF2 FF3 FF4 FF5

四、仿真结论分析

       仿真环境100m×100m,传感器节点数量200-500个,Sink节点位于其中一条边以外的100m处。初始状态下,每个节点具有2J能量,数据包大小100byte,节点的数据采集周期5S/次。Eelec=50nJ/bit(Eelec是发送电路或接收电路每发送或接收单位比特的能耗),efs=10 p J/bit/m2是自由空间信道模型下功率放大所需能量, emp=0.0013 p J/bit/m4是多径衰减信道模型下功率放大所需能量。

仿真性能:

  1. 第一项实验是与LEACH算法比较,网络从初始状态直到首个节点因能量耗尽而死亡的持续时间。
  2. 第二项实验是与LEACH算法比较,显示了随着时间的变化,一些节点开始死亡,整个网络的可用率下降的趋势情况。实验的终止条件为当网络可用节点下降至 75%时。(随着时间的变化,网内存活节点的比率)
  3. 第三项实验是与LEACH算法比较,随时间变化时网络所有节点能量消耗情况。

 

 

 

 

 

 A12-31

猜你喜欢

转载自blog.csdn.net/ccsss22/article/details/126693594