一种用于超低功耗无线传感器网络的消息传递算法(Matlab代码实现)

news2024/11/24 10:58:45

    目录

💥1 概述

📚2 运行结果

🎉3 参考文献

👨‍💻4 Matlab代码

💥1 概述

无线传感器网络是由一定数量的无线传感器节点组成的网络系统,各节点可采集环境数据并通过无线通信进行数据传输,目前已广泛应用于军事、智能交通、环境监控等多个领域。在传统的无线传感器网络应用中,由于节点体积一般较小,网络寿命会受到节点电池容量的制约。而且,无线传感器网络中节点数量庞大、分布范围极广,因此,为所有节点更换电池是一件难以实现且成本极高的事情。为解决上述问题,本文提出一种超低功耗可持续无线传感器网络,利用无线能量传输技术将采集环境中的电磁波能量转化为电能为节点供电,同时通过引入唤醒无线电技术和环境反向散射技术进一步降低无线传感器网络的功耗,从而延长网络的使用寿命。

本文为用于超低功耗无线传感器网络的 MATLAB 消息传递算法。该程序基于Dijkstra算法,计算发送的每条消息的变化权重函数。节点的权重函数将考虑与基站的距离,但也考虑每个节点的剩余能量,这在超低功耗环境中至关重要。

📚2 运行结果

主函数部分代码:

clear
n = 25; %number of nodes
area = 10; %area in m^2 covered per node
r = 7; %range of a node
​
roundmax = 1000; %number of rounds simulation will run for
dimension = sqrt(area)*sqrt(n); 
BS = BaseStation(dimension/2, dimension/2); %base station postion at the centre
​
%deploy network
Network = CreateNodes(n, dimension);
distances = CalculateDists (n, Network);
dist2BS = calcBSDist(n,Network, BS);
connections = CalculateConnections (n,r,dist2BS, distances);
[s,t] = GraphPoints (n, connections);
​
​
​
%energy after setup phase
​
for i = 1:n
    c=0;
       for j = 1:n
           %send a wakeup packet to all nodes
           Network(i).energy = NewEnergy(Network(i), 0); 
           %if a node is in range, respond
           if connections(i,j) == true              
               Network(i).energy = NewEnergy(Network(i), 4); 
               c=c+1;
           end
       end
       %send one packet to the BS, with 4bytes for every neighbouring node
    Network(i).energy = NewEnergy(Network(i), 4*c); 
end
​
%draw graph
weights = CalculateWeights(distances, Network, n, connections);
G=DrawGraphWeight (s, t, weights);
​
​
%assign parents and children to Nodes
for i = 1:n
    P = shortestpath(G, i, n+1);
    if size(P,2)>2
        Network(i).parent = P(2);
        Network(P(2)).child = horzcat(Network(P(2)).child, i);
    end
end
​
%find first gen nodes
dC = 0;
for i = 1:n
    if connections (i, n+1) == true
        dC=dC+1;
    end
end
directConnect = zeros(1,dC);
j = 0;
for i = 1:n
    if connections(i,n+1) == true
        j = j+1;
        directConnect(j) = i;
    end
end
​
​
%main loop
for i = 1:roundmax
  for j = 1:n
      dependents = findDependents(Network(j),Network);
      for k = 1:size(Network(j).child,2) %send one packet per child
          %length of packet depends on that child's no.dependents
          %the instruction is only one byte long
          bytes = size(findDependents(Network(Network(j).child(k)),Network),2);
          Network(j).energy = NewEnergy(Network(j), bytes);
      end
      %finally, report data back to BS, 1 byte for data, 2 bytes each for
      %strength of links to children
      Network(j).energy = NewEnergy(Network(j), 1 + 2*size(Network(j).child,2)); %data out
  end
  
  weights = CalculateWeights(distances, Network, n, connections);
  G=DrawGraphWeight (s, t, weights);
  
​
  
  %clear children
  for z = 1:n
    Network(z).child=[];  
  end
      
  %assign parents and children
for q = 1:n
    %shortestpath in MATLAB is the built-in function for Dijkstra
    %shortest paths are found based on changing weight function
    P = shortestpath(G, q, n+1);
    if size(P,2)>2
        Network(q).parent = P(2);
        Network(P(2)).child = horzcat(Network(P(2)).child, q);
    end
end  
  
end

🎉3 参考文献

[1]陈俊聪. 超低功耗可持续无线传感器网络的研究与实现[D].华南理工大学,2019.

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

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

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

相关文章

使用cubeMX生成USB HID设备

一,简介 本文主要介绍如何使用stm32F407开发板和cubeMX生成USB FS HID设备,供参考。 二,操作步骤 本次总共分以下几个步骤: 1,创建cubeMX工程,并配置HID,生成工程代码; 2&#xf…

光伏防逆流系统的介绍

安科瑞虞佳豪 5月17日,新疆和田地区洛浦县国家电投洛浦光伏电站,今年2月刚刚并网发电的200兆瓦光伏发电项目坐落于戈壁滩上,占地5500亩的368004块光伏面板在阳光照射下熠熠生辉,为和田地区经济社会发展持续提供着绿色能源。 洛浦…

HNU-操作系统OS-实验Lab6

OS_Lab6_Experimental report 湖南大学信息科学与工程学院 计科 210X wolf (学号 202108010XXX) 实验目的 理解操作系统的调度管理机制熟悉 ucore 的系统调度器框架,以及缺省的Round-Robin 调度算法基于调度器框架实现一个(Stride Scheduling)调度算法来替换缺省的调度算…

第12章_MySQL数据类型精讲

第12章_MySQL数据类型精讲 1. MySQL中的数据类型 类型类型举例整数类型TINYINT、SMALLINT、MEDIUMINT、INT(或INTEGER)、BIGINT浮点类型FLOAT、DOUBLE定点数类型DECIMAL位类型BIT日期时间类型YEAR、TIME、DATE、DATETIME、TIMESTAMP文本字符串类型CHAR、VARCHAR、TINYTEXT、TE…

chatgpt赋能Python-pythondeque函数

Python deque函数:高效地操作双向队列 介绍 在Python中,deque函数是一个非常重要的内置函数,用于创建双向队列。双向队列是一个序列容器,可以从两端添加或删除元素,这使得它成为许多常见问题的解决方案。deque函数是…

Vue--》深入理解 Vue 3 导航守卫,掌握前端路由的灵魂技能!

目录 vue3导航守卫讲解与使用 element-ui的安装与使用 配置路由和设置路径别名 设置登录页面并实现规则跳转 设置导航前置守卫 设置导航后置守卫 其他路由相关操作 vue3导航守卫讲解与使用 导航守卫是在 Vue Router 中提供的一种功能,它允许你在切换路由之前…

chatgpt赋能Python-pythonfirst

PythonFirst:Python编程新手的最佳起点 作为一门简洁而又强大的编程语言,Python在过去的几年中得到了越来越多的关注和应用。它广泛应用于数据分析、人工智能、Web开发、自动化等领域,成为了许多程序员的首选语言。如果你也是刚刚开始接触Py…

有哪些简单而知道的人少的excel操作技巧?

以下是 Excel 里鲜为人知而又简单、逆天的操作技巧: 1. 快速选中数据区域:双击数据区域左上角的方格即可快速选中整个数据区域。 2. 使用自动筛选快速查找和筛选数据:在 Excel 数据表中,使用自动筛选可以快速找到和筛选特定数据…

【Robot Dynamics Lecture Notes学习笔记之浮动基动力学】

Robot Dynamics Lecture Notes学习笔记之浮动基动力学 Contact ForcesSoft Contact Model Contact Forces from Constraints Constraint Consistent DynamicsContact Switches and Impact CollisionsImpulse TransferEnergy Loss 浮动基座系统的广义坐标分别由驱动关节坐标 q j…

小程序-基础加强(二):使用npm包

使用npm包 1.小程序对npm的支持与限制 目前,小程序中已经支持使用npm安装第三方包,从而来提高小程序的开发效率。但是,在小程序中使用npm包有如下3个限制: ①不支持依赖于Node.js内置库的包 ②不支持依赖于浏览器内置对象的包 …

Springboot +spring security,登录表单进阶配置及原理分析

一.简介 登录表单配置实操 二.创建项目 如何创建一个SpringSecurity项目,前面文章已经有说明了,这里就不重复写了。 三.配置默认用户信息 配置文件添加如下用户信息,代码如下: spring:security:user:name: lglbcpassword: 1…

HNU数据结构与算法分析-作业7-算法设计技术

1. (简答题, 10分)请简述分治法所能解决的问题一般具有哪些特征? 2. (简答题, 10分)请简述动态规划法的四个求解步骤。 3. (简答题, 10分)请比较动态规划法和贪心法,并写出两者的区别。 4. (简答题, 10分)请写出分支限界法和回溯法的区别。 二. 算法设计…

chatgpt赋能Python-pythonendswith

Python endswith方法:介绍、用法和示例 在编程中,经常需要查找字符串是否以特定字符结尾。Python提供了一个方便易用的方法——endswith()。 什么是Python endswith()方法? Python endswith()方法是用于检查字符串是否以特定子字符串结尾的…

第六章总结-莫凡商城的注册、登录功能

1.微信小程序表单组件 1.1button按钮组件 type的属性值有三种 primary 绿色default 白色warn 红色 除了这种方式可以设置按钮大小,还有其他的通过视图来控制按钮的方式,因为我们知道,微信小程序的按钮并不都是这三种颜色。其他方式比如把按…

Web APIs之DOM

一.Web API基本认知 二.获取DOM对象 三.操作元素内容 四. 操作元素属性 五.定时器-间歇函数 一、Web API基本认知 *作用和分类 *什么是DOM *DOM树 *DOM对象 1.作用和分类 (1)作用:使用JS去操作html和浏览器 (2&#xff09…

service mesh学习

背景 单体服务的痛点导致单体服务被拆分为多个微服 每个微服必须要解决负载均衡、服务发现、熔断等功能 为了让上层开发更加快速和无需关注通用能力,在网络栈和应用业务层之间抽出一个透明网络代理层。 Service Mesh 轻量级网络代理,负责微服之间的通…

H5 实现蜂巢(六边形)导航,支持用户交互和动态添加,纯css实现无需布局计算

最近公司的项目出了版新的UI设计图,所以准备进行样式改版 而其中就有个导航要改成蜂巢(六边形)导航,当我看到时其实也挺迷糊的。 说一下我一开始的想法哈: 我一开始是打算使用背景颜色线性渐变 或者 用4个子元素覆盖4角 来实现 六边形的视觉…

二、数据字典开发

文章目录 二、数据字典开发1、搭建service-cmn模块1.1 搭建service-cmn模块1.2 修改配置1.3 启动类 2、数据字典列表2.1 数据字典列表接口2.1.1 model模块添加数据字典实体2.1.2 添加数据字典mapper2.1.4 添加数据字典controller 2.2 数据字典列表前端2.2.1 添加路由2.2.2 定义…

centos 8 安装nacos2.0.3

去官网下载软件包 下载地址:https://github.com/alibaba/nacos/releases 上传到服务器指定位置,并解压 修改nacos存储为数据库 vi /xxx/nacos/conf/application.properties ## 在最后添加以下内容 spring.datasource.platformmysql db.num1 db.url.0j…