目录
一、理论基础
二、案例背景
三、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.恶意节点可能导致传感器网工作异常从而影响能量消耗,因此进行安全机制设计。
- 与一般的聚类检测算法进行对比,比较它们的检测率(检测率=被正确判定的攻击样本数量/攻击样本总数)。——用仿真图来比较表示
- 与一般的聚类检测算法进行对比,比较它们的漏检率(漏检率=被判定为正确的攻击样本数量/攻击样本总数)。——用仿真图来比较表示
- 与一般的聚类检测算法进行对比,比较它们的误判率(误判率=被判定为攻击样本的正常样本数量/正常样本总数)。——用仿真图来比较表示
- 与一般的聚类检测算法进行对比,比较它们的检测时间。——用仿真图来比较表示
- 与一般的聚类检测算法进行对比,比较它们的能量消耗。——用仿真图来比较表示
三、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))]; endfor i = 1:length(ind0)if Flag(i) == 1data0(i,:) = data0(i,:); else%模拟异常数据LL = randperm(Byte); data0(i,LL(1:100)) = data0(i,LL(1:100)) + 200*rand(1,100); endendtic;%根据规则来判定每一个非簇内节点是否为异常节点%攻击样本总数NUM0 = length(find(Flag == 0));%正常样本总数NUM1 = length(find(Flag == 1)); Indx1= [];for i = 1:length(ind0);dlen = 0;if Flag(i) == 0dlen = rand*Byte/10;elsedlen = 2*rand*Byte;endif dlen <= 0.4*ByteIndx1 = [Indx1,i]; endendIndx2= [];for i = 1:length(ind0);dlen = 0;if Flag(i) == 0dlen = Byte - rand*Byte/10;elsedlen = Byte - 2*rand*Byte;endif dlen >= 0.4*ByteIndx2 = [Indx2,i]; endendPxy = [];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,:))));endendPxy2 = 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; endendNN2 = 0;for i = 1:length(Indx);if Flag(Indx(i)) == 1;NN2 = NN2 + 1; endend NN3 = 0;for i = 1:length(Indx);if Flag(Indx(i)) == 1;NN3 = NN3 + 1; endend %计算能耗,根据算法所需要的运算量来等效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];
endFF1 = 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是多径衰减信道模型下功率放大所需能量。
仿真性能:
- 第一项实验是与LEACH算法比较,网络从初始状态直到首个节点因能量耗尽而死亡的持续时间。
- 第二项实验是与LEACH算法比较,显示了随着时间的变化,一些节点开始死亡,整个网络的可用率下降的趋势情况。实验的终止条件为当网络可用节点下降至 75%时。(随着时间的变化,网内存活节点的比率)
- 第三项实验是与LEACH算法比较,随时间变化时网络所有节点能量消耗情况。
A12-31