无线传感器网络数据压缩与融合及安全机制的matlab仿真
Posted fpga和matlab
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无线传感器网络数据压缩与融合及安全机制的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))];
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是多径衰减信道模型下功率放大所需能量。
仿真性能:
- 第一项实验是与LEACH算法比较,网络从初始状态直到首个节点因能量耗尽而死亡的持续时间。
- 第二项实验是与LEACH算法比较,显示了随着时间的变化,一些节点开始死亡,整个网络的可用率下降的趋势情况。实验的终止条件为当网络可用节点下降至 75%时。(随着时间的变化,网内存活节点的比率)
- 第三项实验是与LEACH算法比较,随时间变化时网络所有节点能量消耗情况。
A12-31
以上是关于无线传感器网络数据压缩与融合及安全机制的matlab仿真的主要内容,如果未能解决你的问题,请参考以下文章