1.完整项目描述和程序获取
>面包多安全交易平台:https://mbd.pub/o/bread/Y56TlJhr
>如果链接失效,可以直接打开本站店铺搜索相关店铺:
>如果链接失效,程序调试报错或者项目合作也可以加微信或者QQ联系。
2.部分仿真图预览
3.算法概述
无线传感器网络中故障节点会产生并传输错误数据,这将消耗节点的能量和带宽,同时会形成错误的决策。利用节点感知数据的空间相似性,提出了节点故障诊断的算法,通过对邻节点所感知的感数据进行比较,从而确定检测节点的状态,并将测试状态向网络中其他相邻节点进行扩散。对于网络中存在的节点瞬时故障,通过时间冗余的检测方法,降低故障诊断的虚警率。该算法对实现故障节点的检测具有较好的性能,实验结果验证了算法的可行性和有效性。
4.部分源码
%计算网络指标
[Cc,Cc_avg] = func_Cluster_Coeff(xk_ij);
% disp(['聚类系数为:',num2str(Cc_avg)]);
[Dds,Dds_avg,M,P_Dds]= func_Degree_Distribution(xk_ij);
% disp(['平均度为:',num2str(Dds_avg)]);
%状态cij计算
c_ij = zeros(Note,Note);
for j1 = 1:Note
for j2 = 1:Note
if xk_ij(j1,j2) == 1;
if abs(State(j1)-State(j2))<=epss
c_ij(j1,j2) = 0;
else
c_ij(j1,j2) = 1;
end
else
c_ij(j1,j2) = 0;
end
end
end
%计算相似节点的相似程度,变量名字为ci
ci = zeros(1,Note);
for j1 = 1:Note
tmp=0;
for j2 = 1:Note
if xk_ij(j1,j2) == 1;
if c_ij(j1,j2) == 0;
tmp=tmp+1;
end
end
end
ci(j1) = tmp;
end
%根据门限获得故障点
for j1 = 1:Note
if ci(j1)<5-theta1
F(j1)=1;
end
end
%计算正确率
L(jj) = length(find(F==F_real))/length(F_real);
%计算虚警
CNT = 0;
for i = 1:length(F)
if F_real(i)==0 & F(i)==1
CNT = CNT + 1;
end
end
LL(jj) = CNT/length(F);
end
L2(ki)= mean(L);
LL2(ki)= mean(LL);
end
figure;
plot(Per,L2,'-bs',...
'LineWidth',2,...
'MarkerSize',6,...
'MarkerEdgeColor','r',...
'MarkerFaceColor',[0.7,0.7,0.4]);
xlabel('节点故障率');
ylabel('故障诊断精度');
axis([0.05,0.3,0.5,1]);
figure;
plot(Per,LL2,'-bs',...
'LineWidth',2,...
'MarkerSize',6,...
'MarkerEdgeColor','r',...
'MarkerFaceColor',[0.7,0.7,0.4]);
xlabel('节点故障率');
ylabel('虚警率');
axis([0.05,0.3,0,1]);
if theta1 == 1
save R1.mat Per L2 LL2
end
if theta1 == 2
save R2.mat Per L2 LL2
end
if theta1 == 3
save R3.mat Per L2 LL2
end
figure;
bar(ci);
xlabel('节点数');
ylabel('c_i');
figure;
subplot(211);
bar([1:Note],Dds);
xlabel('节点编号');
ylabel('节点的度');
subplot(212);
bar([0:M],P_Dds,'b');
xlabel('节点的度');
ylabel('节点度的概率');
figure;
plot(X,Y,'bo');
hold on
hold on
for j1 = 1:Note
for j2 = 1:Note
if xk_ij(j1,j2) == 1;
plot([X(j1),X(j2)],[Y(j1),Y(j2)],'m','linewidth',1); hold on
end
end
end
05_047_m