当前位置: 首页 > news >正文

物联网通信仿真:物联网应用案例_(19).物联网低功耗广域网仿真案例

物联网低功耗广域网仿真案例

概述

低功耗广域网(Low-Power Wide-Area Network, LPWAN)是一种专门设计用于低带宽、低功耗、远距离通信的无线网络技术。LPWAN 主要用于连接大量低功耗设备,如传感器、智能表计等,这些设备通常位于偏远地区或难以访问的位置。常见的 LPWAN 技术包括 LoRaWAN、NB-IoT、Sigfox 等。本节将详细介绍如何使用仿真工具对 LPWAN 进行建模和仿真,以评估其在不同应用场景中的性能。

1. LPWAN 技术介绍

1.1 LoRaWAN

LoRaWAN 是一种基于 LoRa 技术的开源通信协议,它使用扩频技术(Chirp Spread Spectrum, CSS)实现远距离通信。LoRaWAN 网络架构包括终端设备(End Devices)、网关(Gateways)和网络服务器(Network Server),其中终端设备通过网关与网络服务器进行通信。

1.1.1 网络架构
  • 终端设备(End Devices):负责采集数据并发送到网关。
  • 网关(Gateways):接收终端设备的数据并转发到网络服务器。
  • 网络服务器(Network Server):处理网关接收到的数据,并进行路由、加密等操作。
1.1.2 通信模式

LoRaWAN 支持三种通信模式:

  • Class A:默认模式,终端设备在发送数据后会打开两个接收窗口,以接收网络服务器的响应。
  • Class B:终端设备在固定时间间隔内打开接收窗口,以接收网络服务器的下行数据。
  • Class C:终端设备始终保持接收窗口打开,以接收网络服务器的下行数据。
1.2 NB-IoT

NB-IoT(Narrowband Internet of Things)是一种基于蜂窝网络的 LPWAN 技术,它使用窄带频谱实现低功耗、远距离通信。NB-IoT 的主要特点是低功耗、低成本、大连接数和广覆盖。

1.2.1 网络架构
  • 终端设备(End Devices):负责采集数据并发送到基站。
  • 基站(Base Station):接收终端设备的数据并转发到核心网。
  • 核心网(Core Network):处理基站接收到的数据,并进行路由、加密等操作。
1.2.2 通信模式

NB-IoT 支持两种通信模式:

  • PSM(Power Saving Mode):终端设备在发送数据后进入休眠模式,以节省功耗。
  • eDRX(Extended Discontinuous Reception):终端设备在休眠模式下可以定期唤醒,以接收网络服务器的下行数据。
1.3 Sigfox

Sigfox 是一种专有的 LPWAN 技术,使用超窄带(Ultra Narrow Band, UNB)调制技术实现低功耗、远距离通信。Sigfox 的主要特点是低功耗、低成本和简单的网络架构。

1.3.1 网络架构
  • 终端设备(End Devices):负责采集数据并发送到基站。
  • 基站(Base Station):接收终端设备的数据并转发到云平台。
  • 云平台(Cloud Platform):处理基站接收到的数据,并进行路由、加密等操作。
1.3.2 通信模式

Sigfox 主要支持单向通信模式,终端设备可以发送数据到基站,但接收到的数据非常有限。

2. 仿真工具介绍

2.1 NS-3

NS-3(Network Simulator 3)是一个广泛使用的网络仿真工具,支持多种网络协议的仿真,包括 LPWAN 技术。NS-3 提供了丰富的模块和 API,可以方便地进行网络建模和性能评估。

2.1.1 安装和配置
# 安装依赖sudoapt-getupdatesudoapt-getinstallbuild-essential autoconf automake libxmu-dev g++ python3 python3-tk perl cmake p7zip-fullgit# 获取 NS-3 源码gitclone https://gitlab.com/nsnam/ns-3-dev.git ns-3# 配置和编译cdns-3 ./waf configure ./waf build
2.1.2 基本用法
# 导入 NS-3 模块importns.coreimportns.networkimportns.lora# 设置仿真时间ns.core.Simulator.Stop(ns.core.Seconds(10.0))# 创建节点nodes=ns.network.NodeContainer()nodes.Create(10)# 安装 LoRaWAN 模块loraHelper=ns.lora.LoraHelper()loraHelper.Install(nodes)# 启动仿真ns.core.Simulator.Run()ns.core.Simulator.Destroy()
2.2 OMNeT++

OMNeT++ 是一个可扩展的仿真框架,支持多种网络协议和系统的仿真。OMNeT++ 提供了图形界面和丰富的仿真模型库,适合进行复杂的网络仿真。

2.2.1 安装和配置
# 下载 OMNeT++ 源码wgethttps://omnetpp.org/pub/omnetpp/releases/5.6.2/omnetpp-5.6.2-src-linux.tgz# 解压并进入目录tar-xzf omnetpp-5.6.2-src-linux.tgzcdomnetpp-5.6.2# 编译和安装./configuremakemakeinstall
2.2.2 基本用法
// 包含必要的头文件#include<omnetpp.h>usingnamespaceomnetpp;// 定义一个简单的模块classLoRaNode:publiccSimpleModule{private:cMessage*msg;protected:// 初始化模块virtualvoidinitialize()override{msg=newcMessage("LoRaPacket");scheduleAt(0.0,msg);}// 处理消息virtualvoidhandleMessage(cMessage*msg)override{if(msg->isSelfMessage()){EV<<"发送 LoRa 数据包\n";send(msg,"out");scheduleAt(simTime()+1.0,msg);}}};// 注册模块Define_Module(LoRaNode);

3. LoRaWAN 仿真案例

3.1 城市环境中的传感器网络
3.1.1 仿真场景

假设在一个城市环境中,部署了多个 LoRaWAN 传感器节点,用于监测环境参数(如温度、湿度、空气质量等)。这些节点通过多个网关与网络服务器进行通信,评估网络的覆盖范围和数据传输延迟。

3.1.2 仿真步骤
  1. 创建网络拓扑:定义节点和网关的位置。
  2. 配置终端设备:设置传感器节点的发送频率和数据包大小。
  3. 配置网关:设置网关的接收灵敏度和覆盖范围。
  4. 配置网络服务器:设置数据处理逻辑和路由策略。
  5. 运行仿真:启动仿真并记录相关指标。
3.1.3 代码示例
# 导入 NS-3 模块importns.coreimportns.networkimportns.loraimportns.mobilityimportns.internet# 设置仿真时间ns.core.Simulator.Stop(ns.core.Seconds(60.0))# 创建节点nodes=ns.network.NodeContainer()nodes.Create(10)# 创建网关gateways=ns.network.NodeContainer()gateways.Create(3)# 安装 LoRaWAN 模块loraHelper=ns.lora.LoraHelper()loraHelper.Install(nodes)loraHelper.Install(gateways)# 安装移动模型mobilityHelper=ns.mobility.MobilityHelper()mobilityHelper.SetPositionAllocator("ns3::GridPositionAllocator","MinX",ns.core.DoubleValue(0.0),"MinY",ns.core.DoubleValue(0.0),"DeltaX",ns.core.DoubleValue(10.0),"DeltaY",ns.core.DoubleValue(10.0),"GridWidth",ns.core.UintegerValue(3),"LayoutType",ns.core.StringValue("RowFirst"))mobilityHelper.SetMobilityModel("ns3::RandomWalk2dMobilityModel","Bounds",ns.mobility.RectangleValue(ns.mobility.Rectangle(-50,50,-50,50)))mobilityHelper.Install(nodes)# 配置网关位置pos=ns.mobility.ListPositionAllocator()pos.Add(ns.core.Vector(0.0,0.0,0.0))pos.Add(ns.core.Vector(50.0,50.0,0.0))pos.Add(ns.core.Vector(-50.0,-50.0,0.0))mobilityHelper.SetPositionAllocator(pos)mobilityHelper.Install(gateways)# 配置网络服务器networkServerHelper=ns.lora.LoraNetworkServerHelper()networkServerHelper.Install()# 配置数据包生成packetSinkHelper=ns.applications.PacketSinkHelper("ns3::UdpSocketFactory",ns.network.InetSocketAddress(ns.network.Ipv4Address.GetAny(),9))sinkApps=packetSinkHelper.Install(nodes)sinkApps.Start(ns.core.Seconds(0.0))sinkApps.Stop(ns.core.Seconds(60.0))# 配置数据包发送onOffHelper=ns.applications.OnOffHelper("ns3::UdpSocketFactory",ns.network.InetSocketAddress(ns.network.Ipv4Address.GetAny(),9))onOffHelper.SetAttribute("PacketSize",ns.core.UintegerValue(100))onOffHelper.SetAttribute("OnTime",ns.core.StringValue("ns3::ConstantRandomVariable[Constant=1]"))onOffHelper.SetAttribute("OffTime",ns.core.StringValue("ns3::ConstantRandomVariable[Constant=0.1]"))serverApps=onOffHelper.Install(nodes.Get(0))serverApps.Start(ns.core.Seconds(0.0))serverApps.Stop(ns.core.Seconds(60.0))# 启动仿真ns.core.Simulator.Run()ns.core.Simulator.Destroy()

4. NB-IoT 仿真案例

4.1 智能表计网络
4.1.1 仿真场景

假设在一个居民区中,部署了多个 NB-IoT 智能表计,用于监测水、电、气的使用情况。这些表计通过基站与核心网进行通信,评估网络的连接可靠性和数据传输延迟。

4.1.2 仿真步骤
  1. 创建网络拓扑:定义表计和基站的位置。
  2. 配置终端设备:设置表计的发送频率和数据包大小。
  3. 配置基站:设置基站的接收灵敏度和覆盖范围。
  4. 配置核心网:设置数据处理逻辑和路由策略。
  5. 运行仿真:启动仿真并记录相关指标。
4.1.3 代码示例
// 包含必要的头文件#include<omnetpp.h>#include"NBIoTModule.h"usingnamespaceomnetpp;// 定义一个简单的模块classNBIoTNode:publiccSimpleModule{private:cMessage*msg;protected:// 初始化模块virtualvoidinitialize()override{msg=newcMessage("NBIoTPacket");scheduleAt(0.0,msg);}// 处理消息virtualvoidhandleMessage(cMessage*msg)override{if(msg->isSelfMessage()){EV<<"发送 NB-IoT 数据包\n";send(msg,"out");scheduleAt(simTime()+1.0,msg);}}};// 注册模块Define_Module(NBIoTNode);// NBIoT 模块classNBIoTModule:publiccSimpleModule{private:cMessage*msg;protected:// 初始化模块virtualvoidinitialize()override{msg=newcMessage("NBIoTPacket");scheduleAt(0.0,msg);}// 处理消息virtualvoidhandleMessage(cMessage*msg)override{if(msg->isSelfMessage()){EV<<"处理 NB-IoT 数据包\n";send(msg,"out");scheduleAt(simTime()+1.0,msg);}}};// 注册模块Define_Module(NBIoTModule);

5. Sigfox 仿真案例

5.1 远程监测系统
5.1.1 仿真场景

假设在一个偏远地区,部署了多个 Sigfox 传感器节点,用于监测环境参数(如温度、湿度、空气质量等)。这些节点通过基站与云平台进行通信,评估网络的覆盖范围和数据传输延迟。

5.1.2 仿真步骤
  1. 创建网络拓扑:定义节点和基站的位置。
  2. 配置终端设备:设置传感器节点的发送频率和数据包大小。
  3. 配置基站:设置基站的接收灵敏度和覆盖范围。
  4. 配置云平台:设置数据处理逻辑和路由策略。
  5. 运行仿真:启动仿真并记录相关指标。
5.1.3 代码示例
// 包含必要的头文件#include<omnetpp.h>#include"SigfoxModule.h"usingnamespaceomnetpp;// 定义一个简单的模块classSigfoxNode:publiccSimpleModule{private:cMessage*msg;protected:// 初始化模块virtualvoidinitialize()override{msg=newcMessage("SigfoxPacket");scheduleAt(0.0,msg);}// 处理消息virtualvoidhandleMessage(cMessage*msg)override{if(msg->isSelfMessage()){EV<<"发送 Sigfox 数据包\n";send(msg,"out");scheduleAt(simTime()+10.0,msg);}}};// 注册模块Define_Module(SigfoxNode);// Sigfox 模块classSigfoxModule:publiccSimpleModule{private:cMessage*msg;protected:// 初始化模块virtualvoidinitialize()override{msg=newcMessage("SigfoxPacket");scheduleAt(0.0,msg);}// 处理消息virtualvoidhandleMessage(cMessage*msg)override{if(msg->isSelfMessage()){EV<<"处理 Sigfox 数据包\n";send(msg,"out");scheduleAt(simTime()+1.0,msg);}}};// 注册模块Define_Module(SigfoxModule);

6. 仿真结果分析

6.1 性能指标

在进行 LPWAN 仿真时,我们主要关注以下性能指标:

  • 覆盖范围:评估网络在不同环境下的覆盖范围。
  • 数据传输延迟:评估数据从终端设备到网络服务器的传输延迟。
  • 功耗:评估终端设备的功耗,特别是在不同通信模式下的功耗差异。
  • 连接可靠性:评估网络的连接可靠性,特别是在高负载下的表现。
6.2 数据收集和处理

为了收集和分析仿真结果,我们可以使用以下工具和模块:

  • 使用 NS-3 的 Tracer 模块:记录仿真过程中的数据传输情况。
  • 使用 OMNeT++ 的 Scalar 和 Vector 模块:记录仿真过程中的性能指标。
6.2.1 代码示例

以下是一个使用 NS-3 的 Tracer 模块来记录 LoRaWAN 仿真结果的示例:

# 导入 NS-3 模块importns.coreimportns.networkimportns.loraimportns.mobilityimportns.internetimportns.tracer# 设置仿真时间ns.core.Simulator.Stop(ns.core.Seconds(60.0))# 创建节点nodes=ns.network.NodeContainer()nodes.Create(10)# 创建网关gateways=ns.network.NodeContainer()gateways.Create(3)# 安装 LoRaWAN 模块loraHelper=ns.lora.LoraHelper()loraHelper.Install(nodes)loraHelper.Install(gateways)# 安装移动模型mobilityHelper=ns.mobility.MobilityHelper()mobilityHelper.SetPositionAllocator("ns3::GridPositionAllocator","MinX",ns.core.DoubleValue(0.0),"MinY",ns.core.DoubleValue(0.0),"DeltaX",ns.core.DoubleValue(10.0),"DeltaY",ns.core.DoubleValue(10.0),"GridWidth",ns.core.UintegerValue(3),"LayoutType",ns.core.StringValue("RowFirst"))mobilityHelper.SetMobilityModel("ns3::RandomWalk2dMobilityModel","Bounds",ns.mobility.RectangleValue(ns.mobility.Rectangle(-50,50,-50,50)))mobilityHelper.Install(nodes)# 配置网关位置pos=ns.mobility.ListPositionAllocator()pos.Add(ns.core.Vector(0.0,0.0,0.0))pos.Add(ns.core.Vector(50.0,50.0,0.0))pos.Add(ns.core.Vector(-50.0,-50.0,0.0))mobilityHelper.SetPositionAllocator(pos)mobilityHelper.Install(gateways)# 配置网络服务器networkServerHelper=ns.lora.LoraNetworkServerHelper()networkServerHelper.Install()# 配置数据包生成packetSinkHelper=ns.applications.PacketSinkHelper("ns3::UdpSocketFactory",ns.network.InetSocketAddress(ns.network.Ipv4Address.GetAny(),9))sinkApps=packetSinkHelper.Install(nodes)sinkApps.Start(ns.core.Seconds(0.0))sinkApps.Stop(ns.core.Seconds(60.0))# 配置数据包发送onOffHelper=ns.applications.OnOffHelper("ns3::UdpSocketFactory",ns.network.InetSocketAddress(ns.network.Ipv4Address.GetAny(),9))onOffHelper.SetAttribute("PacketSize",ns.core.UintegerValue(100))onOffHelper.SetAttribute("OnTime",ns.core.StringValue("ns3::ConstantRandomVariable[Constant=1]"))onOffHelper.SetAttribute("OffTime",ns.core.StringValue("ns3::ConstantRandomVariable[Constant=0.1]"))serverApps=onOffHelper.Install(nodes.Get(0))serverApps.Start(ns.core.Seconds(0.0))serverApps.Stop(ns.core.Seconds(60.0))# 配置 Tracer 模块loraHelper.EnableTraces()# 启动仿真ns.core.Simulator.Run()ns.core.Simulator.Destroy()

在 OMNeT++ 中,我们可以使用 Scalar 和 Vector 模块来记录仿真结果:

// 包含必要的头文件#include<omnetpp.h>#include"NBIoTModule.h"usingnamespaceomnetpp;// 定义一个简单的模块classNBIoTNode:publiccSimpleModule{private:cMessage*msg;cOutVector packetSentVector;cOutScalar packetSentScalar;protected:// 初始化模块virtualvoidinitialize()override{msg=newcMessage("NBIoTPacket");scheduleAt(0.0,msg);// 初始化数据收集模块packetSentVector.setName("Packet Sent Vector");packetSentScalar.setName("Packet Sent Scalar");}// 处理消息virtualvoidhandleMessage(cMessage*msg)override{if(msg->isSelfMessage()){EV<<"发送 NB-IoT 数据包\n";send(msg,"out");// 记录发送的数据包packetSentVector.record(simTime());packetSentScalar.record(1);scheduleAt(simTime()+1.0,msg);}}};// 注册模块Define_Module(NBIoTNode);// NB-IoT 模块classNBIoTModule:publiccSimpleModule{private:cMessage*msg;cOutVector packetReceivedVector;cOutScalar packetReceivedScalar;protected:// 初始化模块virtualvoidinitialize()override{msg=newcMessage("NBIoTPacket");scheduleAt(0.0,msg);// 初始化数据收集模块packetReceivedVector.setName("Packet Received Vector");packetReceivedScalar.setName("Packet Received Scalar");}// 处理消息virtualvoidhandleMessage(cMessage*msg)override{if(msg->isSelfMessage()){EV<<"处理 NB-IoT 数据包\n";send(msg,"out");// 记录接收到的数据包packetReceivedVector.record(simTime());packetReceivedScalar.record(1);scheduleAt(simTime()+1.0,msg);}}};// 注册模块Define_Module(NBIoTModule);

7. 结论

通过以上仿真案例,我们可以评估不同 LPWAN 技术在各种应用场景中的性能。LoRaWAN、NB-IoT 和 Sigfox 每种技术都有其独特的优势和适用场景:

  • LoRaWAN:适用于需要远距离通信和低功耗的场景,如城市环境中的传感器网络。
  • NB-IoT:适用于需要高连接数和广覆盖的场景,如居民区中的智能表计网络。
  • Sigfox:适用于需要简单网络架构和低功耗的场景,如偏远地区的远程监测系统。

使用 NS-3 和 OMNeT++ 这样的仿真工具,可以方便地进行网络建模和性能评估,为实际部署提供理论依据和技术支持。

8. 未来工作

在未来的工作中,我们可以进一步研究和优化 LPWAN 技术,包括但不限于以下方面:

  • 网络优化:通过调整网络参数(如发送功率、通信频率等)来优化网络性能。
  • 多技术融合:研究 LoRaWAN、NB-IoT 和 Sigfox 等多种 LPWAN 技术的融合方案,以提高网络的可靠性和覆盖范围。
  • 实际部署测试:在实际环境中部署 LPWAN 网络,验证仿真结果的准确性,并进行优化调整。

通过这些工作,我们可以更好地理解和应用 LPWAN 技术,为物联网应用提供更高效、可靠的通信解决方案。

http://www.cnnetsun.cn/news/1738.html

相关文章:

  • 物联网通信仿真:物联网应用案例_(20).物联网机器学习与人工智能仿真应用
  • 物联网通信仿真:物联网应用案例_(21).物联网通信仿真的挑战与未来趋势
  • 通信系统仿真:多天线技术仿真_(1).多天线技术基础
  • 通信系统仿真:多天线技术仿真_(4).信道建模与仿真
  • 通信系统仿真:多天线技术仿真_11.多天线系统的性能评估指标
  • 通信系统仿真:多天线技术仿真_(18).多天线技术的最新进展
  • 通信系统仿真:多天线技术仿真_15.多天线技术的物理层安全增强
  • 通信系统仿真:光通信系统仿真_(4).光调制技术
  • 【网络安全工具】抓包工具 Wireshark vs Sniff Master:从功能差异到场景适配的超详细对比分析,新手必看
  • 【零基础学 CTF】网络安全 CTF 是什么?有何学习意义?新手入门必备指南与实战技巧
  • IT 技术人员转岗网络安全前景如何?零基础从入门到精通的学习路线 + 实战资源,收藏这一篇就够了
  • DNS 污染有多可怕?别让它悄悄毁掉你的网络安全!如何判断 DNS 是否被污染?
  • 十年安全人深扒:黑客不碰赌博网站的底层逻辑,怕报复只是借口,68% 反溯源率 + 双重罪名才是真正劝退点
  • 35 岁后运维工程师的出路究竟在哪?零基础从入门到精通的完整学习路径,这一篇收藏好就够用
  • 【程序员出路】开发岗位竞争激烈?转型网络安全渗透测试工程师:技能迁移方法 + 认证考取攻略,新手也能上手
  • 程序员 90 天转型黑客实战指南:从开发思维到网络安全攻防
  • Web 渗透测试全流程零基础入门:核心概念 + 实操步骤 + 工具使用,一篇文章搞定所有知识点
  • 【运维人转型忠告】别再头脑发热胡乱转行!血泪经验总结,能骂醒一个算一个
  • 项目总延期、资源总冲突?一套系统让项目从“失控”到“可控”,你信吗?
  • 3 小时搭个「轻量项目管理系统」,进度、责任、风险全看透
  • 3 小时搭建高效 OA 系统:打破繁琐魔咒,让管理回归简单
  • 质量管理:不止于 “挑错”,更在于 “筑基”
  • FreeRTOS 入门(二十六):队列创建与读写 API 实战解析
  • 从“被动等待”到“主动推荐”:AI搜索时代,工贸企业如何用GEO成为全球客户首选?
  • Vision Studio C#中字符串创建、字符串常用的方法、数组的运用
  • AI新王与旧王:一场围绕着数据飞轮的战争
  • 如何在ONLYOFFICE协作空间中使用AI智能体?配置应用全攻略
  • 大数据毕业设计:基于Spark美食数据分析可视化系统 Hadoop 深度学习TensorFlow LSTM 预测算法模型 爬虫技术 Django框架 (建议收藏)
  • Python美食数据分析可视化推荐系统 协同过滤推荐算法 数据大屏 毕业设计(建议收藏)✅
  • 智慧守护:医疗AI算法重构居家养老新生态深度解析(一)