基于无线传感器网络(WSN) 查找两个节点之间的最短路径并发送数据(Matlab代码实现)

news2025/1/22 20:46:32

    目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码

💥1 概述

本代码基于无线传感器网络,在两个节点(源节点和目标节点)之间找到最短路径,并开始发送数据,直到路由中涉及的一个节点死亡。一旦一个节点死亡,它就会搜索另一条路径并重新开始发送,直到参与路由的节点因没有能量等原因死亡,直到网络在源节点和目标节点之间不再有连接。

📚2 运行结果

主函数部分代码:

clear all
close all
clc
​
%% GPU config - if want to run some code block into GPU. (NOT FULLY IMPLEMENTED)
%gpu = gpuDevice;
%gpu(1);
​
​
%% Main configuration values for this simulation
​
dataset.nodeNo = 50; %Number of nodes
dataset.nodePosition(1,:) = [1 50 50]; %(Sender node fixed position)
dataset.nodePosition(2,:) = [2 900 900]; %(Receiver node fixed position)
dataset.NeighborsNo = 5;
dataset.range = 250; %Tolerance distance to became neighbor of one node (Euclidean distance based)
dataset.atenuationFactor = 1.8; %Atenuation factor in freespace - ranges from 1.8 to 4 due environment
dataset.minEnergy = 80; % Mw - Miliwatts (70% energy)
dataset.maxEnergy = 100; % Mw - Miliwatts (Full energy (100%) - 1 mAh charge capacity within 1 Volt energy)
dataset.energyconsumptionperCicle = 0.35;
dataset.energyrecoveryperCicle = 0.2;
dataset.energyfactor = 0.001;
STenergy=10000;
packet=0;
iterationcounter=1;
​
% Node position sortition
​
for a = 3 : dataset.nodeNo
    
   dataset.nodeId = a; 
   garbage.x = randi([1 900]); %Xpos sortition
   garbage.y = randi([1 900]); %Ypos sortition
   dataset.nodePosition(a,:) = [dataset.nodeId garbage.x garbage.y]; %NodeID, X and Y position into nodePosition table
   
end
​
% Euclidean Distance calc from one node to all others
​
for i = 1 : dataset.nodeNo
    for j = 1: dataset.nodeNo
        garbage.x1 = dataset.nodePosition(i,2); 
        garbage.x2 = dataset.nodePosition(j,2); 
        garbage.y1 = dataset.nodePosition(i,3); 
        garbage.y2 = dataset.nodePosition(j,3);
        
        dataset.euclidiana(i,j) = sqrt(  (garbage.x1 - garbage.x2) ^2 + (garbage.y1 - garbage.y2)^2  ); 
        
    end
end
​
% Edges matrix definition due "range" variable value
​
dataset.weights = lt(dataset.euclidiana,dataset.range);
​
% Graph construction
​
G=graph(dataset.weights,'omitselfloops'); %Graph creation based on adjacency matrix (Edges matrix) built above
​
% Euclidean distance extraction for all existente end-to-end formed by
% "distance tolerance" (range variable value)
​
for a = 1 : height(G.Edges)
    garbage.s = G.Edges.EndNodes(a,1);
    garbage.t = G.Edges.EndNodes(a,2);
    garbage.Z(a,:) = dataset.euclidiana(garbage.s,garbage.t);
 end
G.Edges.Euclidiana = garbage.Z(:,1);
​
%Initial energy sortition (from 70% to 100% - minEnergy and maxEnergy variable valeu) 
​
[dataset.nodePosition(:,4)] = dataset.maxEnergy -(dataset.maxEnergy-dataset.minEnergy)*rand(dataset.nodeNo,1);
dataset.nodePosition(1:2,4)=STenergy;
​
%All "G" (Graph object) based nodes degree to use as "node processing
%status overload"
 (more connections, busier!)​
for a = 1: length(dataset.nodePosition(:,1))
   
    dataset.nodePosition(a,5) = degree(G,dataset.nodePosition(a,1));
    
end
​
% Pathloss calc of each Edges based in a freespace (1.8 factor)
​
[G.Edges.Pathloss] = (10*dataset.atenuationFactor)*log10(G.Edges.Euclidiana);
​
%End points coordinates and energy migration to G object
​
for a = 1 : height(G.Edges)
  garbage.Sourcenode = G.Edges.EndNodes(a,1);
  garbage.Targetnode = G.Edges.EndNodes(a,2);
  G.Edges.SourcenodeXpos(a) = dataset.nodePosition(garbage.Sourcenode,2);
  G.Edges.SourcenodeYpos(a) = dataset.nodePosition(garbage.Sourcenode,3);
  G.Edges.TargetnodeXpos(a) = dataset.nodePosition(garbage.Targetnode,2);
  G.Edges.TargetnodeYpos(a) = dataset.nodePosition(garbage.Targetnode,3);
    G.Edges.ActiveEdge(a) = 1;
end
​

🎉3 参考文献

​[1]陆政. 基于改进蚁群算法的WSN路由研究[D].安徽理工大学,2018.

部分理论引用网络文献,若有侵权联系博主删除。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/468702.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java学习过程(韩顺平661-665)

网络通信是指在计算机网络中,通过网络连接的设备之间进行数据交换的过程。网络通信可以分为两种类型:有线网络通信和无线网络通信。 有线网络通信主要通过物理介质(如光纤、双绞线等)来传输数据,其中最常用的协议是以…

数字孪生新能源智慧充电桩Web3D可视化运维系统

放眼全球,近十年来,新能源汽车赛道堪称“热得发烫”。伴随着进入成年期的新能源汽车行业对相关配套设备支撑水平的提升,作为其“新基建”的充电桩领域表现更为突出的价值势能。过去,在一系列补贴政策和资本刺激下,充电…

七种MOS管栅极驱动电路

01 直接驱动 首先说一下电源IC直接驱动,下图是我们最常用的直接驱动方式,在这类方式中,我们由于驱动电路未做过多处理,因此我们进行PCB LAYOUT时要尽量进行优化。如缩短IC至MOSFET的栅极走线长度,增加走线宽度&#x…

《商用密码应用与安全性评估》第三章商用密码标准与产品应用3.4商用密码标准与产品

一、智能IC卡标准与产品 智能IC卡的分类 存储器卡:内部一般不包含密码安全机制,不具备信息处理能力,外部可对片内信息任意存取,因此存储器卡一般用于存放不需要保密的信息逻辑加密卡:逻辑加密卡内除了具有非易失性存…

redis缓存生产实践(一)---大key压缩

文章目录 前言一、缓存到底是使用String还是hash我该如何选择二、什么是大key及其影响2.1 什么是 Redis 大 key?2.2 大key带来的影响 三、大key压缩3.1 注解标记可能需要压缩的数据3.2 获取注解信息判断内存占用大小3.2 判断对象占用内存3.2 gzip压缩json3.2 判断当…

Reid之损失函数理论学习讲解

基于深度学习的Reid主要流程为输入图像-->CNN(提取特征)-->Global average pooling-->特征向量,将用这些特征来衡量图像的相似情况。并用这些特征进行检索,返回分类情况。 在训练网络的时候需要涉及损失函数,因此就引出了表征学习和…

大数据专业好找工作么

现在,在数字化转型的推动下,越来越多的企业意识到大数据的魅力,并不断在这个领域投入资金,Python大数据开发相关人才也备受青睐! 学Python之前:这玩意真有传说中那么好么? 学Python之后&#…

【browser】浏览器跨域处理

好久没有更新博客了,前段时间在疯狂面试,最近工作了才有时间来写博客。 准备来讲讲面试里常问到的跨域处理吧。 说到跨域,我们可能会下意思的说出jsonp,服务端配置cors,node配置代理等,再多了,我…

加密脱胎于去中心化理想,但力求合规 细数各国政府态度之演变

比特币诞生之始,只是极客文化圈内流行的小众货币。如今,加密市场已经发展到无法忽视的程度,虽然全球仍未对加密货币形成共识,但监管已成为各国政府不得不考虑的问题。 美国:监管愈发模糊且不可测 美国始终是加密领域全…

八股文(Mybatis)

文章目录 1. Mybatis缓存机制2. 动态SQL语句3. 分页3. 1 几种分页方式3.2 MyBatis 是如何进行分页的?分页插件的原理是什么?3.3 逻辑分页和物理分页 1. Mybatis缓存机制 作用:避免每次都去查db 一级缓存是SqlSession级别的缓存,也…

Mysql统计分组后每组数据与每组数量区别

下边统计的是分组后每组的数量:结果是多个 select p.id (count(*)) from p group by p.id 如果想统计分组后,有多个分组,需要如下执行: select count(*) from (select p.id (count(*)) from p group by p.id) as a 此外&#xf…

大数据之Hadoop数据仓库Hive

目录: 一、简介二、HQL的执行流程三、索引四、索引案例五、Hive常用DDL操作六、Hive 常用DML操作七、查询结果插入到表八、更新和删除操作待完善。。。 一、简介 Hive 是一个构建在 Hadoop 之上的数据仓库,它可以将结构化的数据文件映射成表&#xff0c…

【Linux】线程-线程安全之互斥

操作系统核心数centos 3.10.032位单核 线程之线程安全 线程不安全的现象互斥死锁线程饥饿 线程不安全的现象 进程线程的背景概念: 临界资源:多线程执行流之间共享的资源 临界区:每个线程内部,访问临界资源的代码 互斥&#xff1a…

设计模式——责任链

目录 1、传统方案,OA系统的采购审批项目 2、职责链模式基本介绍 3、职责链模式解决 OA 系统采购审批项目 4、职责链模式在 SpringMVC 框架应用的源码分析 责任链模式类似一个链表,每个具体处理人层层判断对请求的处理权限,没权限的话把请…

基于C++/CLI实现C#调用C++类对象过程中的注意事项

目录 一、基于C/CLI 的调用原理二、注意事项如何基于VS2010完成上述一系列开发过程1、生成C应用程序(非托管代码)2、基于C/CLI生成托管代码3、C#调用 三、C/CLI与COM组件对比 一、基于C/CLI 的调用原理 C/CLI (Common Language Infrastructu…

阿里P7晒出工资单:狠补了这个,真香...

据阿里HR部门发布的最新信息,2023年招聘岗位数将扩招3000+。但就2022年就业形势来看,大厂缩招裁员导致优质岗位竞争变得更加激烈,2023开年以来,也有不少大厂纷纷传来裁员的消息!除了对面试者技术的要求变高…

Netty BIO/NIO/AIO介绍

概念介绍 1、 BIO(blocking I/O):同步阻塞IO,也即是传统的I/O。 2、 NIO (non-blocking IO): 也即是New I/O,使用它可以提供非阻塞式的高伸缩性网络。 3、AIO 即 NIO2.0, 叫做异步不阻塞的 IO。 AIO 引入异步通道的概念, 采用了 Proactor 模式, 简化了程序编写,有…

零拷贝(Zero-Copy)

一,数据的四次拷贝与四次上下文切换 很多应用程序在面临客户端请求时,可以等价为进行如下的系统调用: File.read(file, buf, len);Socket.send(socket, buf, len); 例如消息中间件 Kafka 就是这个应用场景,从磁盘中读取一批消息…

kafka介绍

1.kafka是什么 Kafka是一种高性能、可扩展、容错的分布式流处理平台,广泛应用于日志收集、实时数据处理、消息传递等场景所开发的一个消息队列中间件 2.kafka的优势 Kafka的优势在于其高吞吐量、可扩展性、容错性以及灵活的数据保留策略。它的高吞吐量是因为Kafk…

十一、Node.js

一、Node.js是什么? 在了解Node.js之前,我们先去了解一下什么叫v8引擎。这里参考一下其他博主的资料。 聊聊V8引擎_努力学习前端的77的博客-CSDN博客 这个时候我们再去看下Node.js的定义。 官方对Node.js的定义: Node.js是一个基于V8 Ja…