当前位置:   article > 正文

SPIN Routing Algorithm_spin协议

spin协议

平面路由协议仿真——SPIN算法
仿真软件——MATLAB

1、定位算法的实现
1.1 基本原理
SPIN协议是一种以数据为中心的自适应通信路由协议,假设所有传感器节点都可能是希望获得数据的汇聚节点,每个传感器节点都知道自己是否需要数据。为了避免防洪法出现的信息爆炸问题和部分重叠现象,传感器节点在传送数据之前彼此使用元数据进行协商,协商机制可确保传输有用数据。元数据的定义格式是与具体应用相关的,SPIN协议没有给出它的具体定义格式。SPIN协议的有点是采用协商机制,避免了资源的盲目使用,但在某种情况下,他会出现数据不可传递性的问题。
SPIN协议有3 种类型的消息,即ADV、REQ和DATA
1)ADV——用于新数据广播。当一个节点有数据需要传输时,它可以用ADV数据包对外广播;
2)REQ——用于请求发送数据。当一个节点希望接收DATA数据包时,发送REQ数据包;
3)DATA——数据包。包含了附上元数据头的传感器采集的数据的数据包。
这里写图片描述
1.2 代码实现
1.2.1 prepare.m

n=100;
spread=0.2;
X=rand(n, 1);
Y=rand(n, 1);
start_index=randi(n);
end_index=randi(n);
hold on
plot(X, Y, '.', 'markersize', 20);
plot(X(start_index), Y(start_index), 'm.', 'markersize', 20);
plot(X(end_index), Y(end_index), 'm.', 'markersize', 20);

save X;
save Y;
save spread;
save start_index;
save end_index;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

1.2.2 spin.m

end_index=load('end_index.mat');
X=end_index.X;
Y=end_index.Y;
spread=end_index.spread;
start_index=end_index.start_index;
end_index=end_index.end_index;
n=length(X);
times=zeros(n, 1);
found=zeros(n, 1);
for i=1:n
    for j=1:n
        dmat(i,j)=sqrt((X(i)-X(j))^2+(Y(i)-Y(j))^2);
    end
end
queue=zeros(n*100, 1);
queue(1)=start_index;
found(start_index)=1;
front=2;
rear=1;
hold on;
plot(X, Y, 'o');
while found(end_index)==0 && rear<front
    for i=1:n
        if i~=queue(rear) && dmat(queue(rear), i)<=spread && found(i)==0
            line([X(queue(rear)),X(i)], [Y(queue(rear)),Y(i)]);
            queue(front)=i;
            found(i)=1;
            times(i)=times(i)+1;
            front=front+1;
        end
    end
    rear=rear+1;
end
for i=1:n
    if times(i)<=5
        plot(X(i), Y(i), '.', 'markersize', 20);
    elseif times(i)<=10
        plot(X(i), Y(i), 'g.', 'markersize', 20);
    elseif times(i)<=20
        plot(X(i), Y(i), 'c.', 'markersize', 20);
    elseif times(i)<=50
        plot(X(i), Y(i), 'y.', 'markersize', 20);
    elseif times(i)<=100
        plot(X(i), Y(i), 'k.', 'markersize', 20);
    else
        plot(X(i), Y(i), 'r.', 'markersize', 20);
    end
end
plot(X(start_index), Y(start_index), 'm.', 'markersize', 20);
plot(X(end_index), Y(end_index), 'm.', 'markersize', 20);
disp(sum(times));
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

2、仿真结果和分析
2.1 仿真结果
这里写图片描述
这里写图片描述

2.2 结果分析
虽然SPIN协议解决了Flooding协议的“内爆”和“重叠”问题,采用协商机制有效的避免了资源的盲目使用。但是SPIN协议还是存在“盲目转发”、“数据不可达”等问题。“盲目转发”问题缩短了网络生命周期,降低了网络的性能,而“数据不可达”问题会导致网络信息无法收集,使无线传感器网络失去应用的意义。

2.3 结论
SPIN协议较适用于大型的网络拓扑,而在小型网络中Flooding的优势更为明
显,这是因为小型网络中存在的数据重叠或内爆现象的概率都较低,而且小网络的数据传输本来就小,这时候SPIN所带来的数据元,及邻居节点的回应信息都不可忽略,这就必然消耗额外的能量,而且没有必然消耗额外的时间去发送信息元及回应信息。
SPIN算法的健壮性较高, 如果有节点退出了网络,则该节点的邻点在发送ADV命令时,就不会收到该节点的REQ回应,此时该数据会被其他正常的节点所接收;SPIN算法节能性较高,其快速性较洪泛算法提高很多。SPIN路由协议具有很高的可用性,能够解决传统协议具有的内爆、重叠等问题。但它是针对理想网络设计的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/944420
推荐阅读
相关标签
  

闽ICP备14008679号