物联网与射频识别技术,课程实验(三)

news2024/11/14 15:00:07

实验3—— 时隙ALOHA(S-ALOHA)算法的实现及其性能分析

实验说明: 1.   利用Python或Matlab模拟时隙ALOHA算法; 分析标签数量k、时隙大小t对信道利用率的影响,其中, 信道利用率=发送数据的时间/(发送数据的时间+信道空闲的时间) 3.   利用Python或Matlab画出相应的曲线,并分析算法的优缺点。

纯aloha:
对于局域网LAN,反馈信息很快就可以得到;而对于卫星网,发送方要在 270ms 后才能确认数据发送是否成功。通过研究证明,纯ALOHA协议的信道利用率最大不超过18.4%(1/2e )

时隙Aloha:
信道效率:冲突危险区是纯ALOHA的一半,所以,与纯ALOHA协议相比,降低了产生冲突的概率,信道利用率最高为36.8%。
重发策略:同纯ALOHA ,等待一段随机的时间,然后重发;如再次冲突,则再等待一段随机的时间,直到重发成功为止。
代价:需要全网同步;可设置一个特殊站点,由该站点发送时钟信号

时隙Aloha为什么冲突危险区是纯ALOHA的一半?
因为将时间离散化,所以发生重叠的可能性很小,只有完全在同一个区域内发送才会出现冲突,因此冲突危险区是纯ALOHA的一半

 slottedALOHA.py:


import numpy as np
import matplotlib.pyplot as plt
import random

from task3_slottedALOHA.Tag import Tag

font3 = {'family': 'SimHei',
         'weight': 'normal',
         'size': 20,
         }

slotLength = 10

def cal(tagNum, slotLen):
    """
    function: 计算标签数量为tagNum、时隙大小slotLen时的信道利用率
    :param tagNum: 标签数量
    :param slotLen: 时隙大小
    :return: 返回信道利用率
    """
    tagList = []
    vis = []
    for i in range(tagNum):
        tag = Tag()
        tagList.append(tag)
        tag.slot = random.randint(1, 125)
        vis.append(False)

    ratio = []
    while 1:
        flag = 0
        cnt = 0
        index = []
        for i in range(tagNum):
            if vis[i]:  # 表明该标签已经静默
                flag += 1
            else:
                if tagList[i].slot == 0:
                    cnt += 1
                    index.append(i)
                tagList[i].slot -= 1
        if cnt == 1:  # 表明只有一个标签在该时隙发送数据
            vis[index[0]] = True
            ratio.append(slotLength/slotLen)
        elif cnt > 1:  #表明发生碰撞
            for i in index:
                if vis[i] == False:   #表明该标签数据尚未发送完毕
                    tagList[i].slot = random.randint(1, 250)
            ratio.append(0)
        else:
            ratio.append(0)
        if flag == tagNum:
            break

    print(tagNum, np.average(ratio))
    return np.average(ratio)  # 1.2是为了逼近36.8

def main():
    print('---------------标签数量k对信道利用率的影响--------------')
    tagNum = 250

    ratio = []
    for i in range(1, tagNum*2):
        rate = []
        for j in range(3):
            t = cal(i, slotLength)
            rate.append(t)
        ratio.append(np.average(rate))

    plt.plot(np.arange(1, tagNum*2), ratio, color='r', linestyle='--', marker='*', linewidth=2.0)
    plt.xlabel('标签数量', font3)
    plt.ylabel('信道利用率', font3)
    plt.show()


    print('---------------时隙大小t对信道利用率的影响--------------')
    ratio.clear()
    for i in range(slotLength, slotLength+100):
        rate = []
        for j in range(3):
            t = cal(100, i)
            rate.append(t)
        ratio.append(np.average(rate))

    plt.plot(np.arange(slotLength, slotLength+100), ratio, color='b', linestyle='-', marker='*', linewidth=2.0)
    plt.xlabel('时隙大小', font3)
    plt.ylabel('信道利用率', font3)
    plt.show()


if __name__ == '__main__':
    main()

Tag.py没用,可以不用管

参考资料:

(25条消息) Aloha和时隙Aloha介绍与分析_历久弥坚的博客-CSDN博客_时隙aloha

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

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

相关文章

10、中断系统概述

目录 0x01、异常类型 0x0001、系统异常清单 0x0002、外部中断清单 0x02、NVIC 简介 0x0001、NVIC 寄存器 0x0002、NVIC 中断配置固件库 0x03、优先级 0x0001、优先级定义 0x0002、优先级分组 0x0003、中断编程 0x01、异常类型 STM32F103 在内核水平上搭载了一个异常响…

重金打造SEA浩瀚架构,吉利的野心绝不仅仅是一个平台

(作者:贝贝。常年供职于某外资整车企业产品规划部门,负责全球车型在国内的引入和投放)最近几个月,吉利旗下的中高端电动车品牌极氪汽车销量一路走高。单凭借极氪001一款车型,10月、11月交付量连续破万&…

查找:折半查找、平衡二叉树、散列表(习题-1、5、6)二叉排序树(习题-2、3、4)

一个不知名大学生,江湖人称菜狗 original author: jacky Li Email : 3435673055qq.com Time of completion:2023.1.1 Last edited: 2023.1.1 目录 查找:折半查找、平衡二叉树、散列表(习题-1、5、6) 第1关&#xff1…

04.spring源码循环依赖终极讲解

1.Spring怎么解决循环依赖 我们都知道&#xff0c;单例Bean初始化完成&#xff0c;要经历三步&#xff1a; 注入就发生在第二步&#xff0c;属性赋值&#xff0c;结合这个过程&#xff0c;Spring 通过三级缓存解决了循环依赖&#xff1a; 一级缓存 : Map<String,Object>…

PUCCH传输UCI信息

上报HARQ-ACK 时序 传输HARQ-ACK信息的时序不再像4G那样固定&#xff0c;而是由基站侧配置给UE。有下面几种情况&#xff1a; 如果UE收到的是DCI format 1_0&#xff0c;其中的字段’PDSCH-to-HARQ_feedback timing indicatior’指示HARQ-ACK与PDSCH的时序关系&#xff0c;该…

Linux之孤儿进程、进程优先级、环境变量

本章目录1.孤儿进程2.状态优先级3.环境变量1.孤儿进程 父进程如果提前退出&#xff0c;那么子进程后退出&#xff0c;进入Z之后&#xff0c;那该如何处理&#xff1f; 父进程先退出&#xff0c;子进程还在&#xff0c;子进程就称之为“孤儿进程”。 孤儿进程被1号init进程&am…

移动安全APT事件总结及防御解决方案探讨

声明 本文是学习移动安全总结 2019. 下载地址而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 2019年各地移动APT事件总结 2019年世界依旧不太平&#xff0c;在表面平静的背后是暗流涌动。大规模军事冲突不会发生的当下&#xff0c;因利益&#xff0c;…

Python全栈开发(一)——环境搭建和入门

今天是2023年的第一天&#xff0c;接下来的一个月里&#xff0c;我将持续更新关于python全栈开发的相关知识&#xff0c;前面一段时间都是基础语法。主要分成四大块&#xff1a;基础、面向对象、MYSQL数据库、Django框架。话不多说&#xff0c;进入到今天的主题。 1.文档和工具…

聊聊最适合程序员的画图工具

画图工具 没问题&#xff0c;直接坦白讲&#xff0c;我用了 2 年的画图工具是&#xff1a;draw.io。 我的图解文章里的图片全是在 draw.io 这个工具画的&#xff0c;写了那么久的图解文章&#xff0c;再加上我工作中也有画图的习惯&#xff0c;累计也有在上面画了接近 1000 张…

树形压缩DP——没有上司的舞会

树形压缩DP——没有上司的舞会一、问题描述二、DFS暴搜1、算法思路2、代码实现三、DP做法一、问题描述 二、DFS暴搜 1、算法思路 这道题其实最容易想到的是暴力DFS&#xff0c;然后选出一个最大值。我们平时会在DFS的形参中设置一个变量表示子树的根。但是今天这道题还涉及到…

mysql的事务和锁

【MySQL事务和锁】 学习原文&#xff1a;https://blog.csdn.net/zly03/article/details/127170995 事务四大特性&#xff1a;原子性、一致性、隔离性、持久性&#xff0c;简称ACID MySQL中支持3种不同的存储引擎&#xff1a; MyISAM存储引擎、Memory存储引擎、和InnoDB存储引…

CMake使用外部动态库/静态库和头文件

CMake使用外部动态库/静态库和头文件一、准备工作二、新建一个新的CMake工程三、开始构建四、为target添加共享库五、链接静态库一、准备工作 在博文《使用CMake构建静态库和动态库》中已经介绍了libhello动态库的构建和安装&#xff0c;现在我们看看如何使用这个外部动态库。…

iOS 15.0+ 中 SwiftUI 顶部或底部悬浮功能小面板的极简实现

功能需求 我们有时需要在 App 主视图的顶部或底部固定悬浮放置一个功能视图: 如上图所示,我们将一个列表项目输入小面板按需放在主视图的顶部或底部: 当放置在顶部时,解决了其对导航栏(NavigationView)中 toolbar 内容的遮挡问题;当放置在底部时,考虑到了其对列表最后…

spring boot 实现搜索引擎的设计思想

目录 实现思路 索引模块 预处理 对文档进行分词 搜索模块 实现思路 索引构建模块 搜索模块 数据库模块 索引模块 对于搜索一个东西&#xff0c;我们很自然的能想到遍历去查找。比如我要查找一本书叫 《红楼梦》&#xff0c;那么我直接在所有结果中进行遍历查找&#xff…

druid解析-过滤器详解

druid支持过滤器&#xff0c;可以在获取连接或者调用连接对象的方法时&#xff0c;先调用过滤器&#xff0c;之后再执行底层方法&#xff0c;比如DruidDataSource的getConnection()方法&#xff1a; public DruidPooledConnection getConnection(long maxWaitMillis) throws SQ…

网络安全一哥的奇安信发布了全球高级可持续威胁年度报告 值得学习

声明 本文是学习全球高级持续性威胁 APT 2021年度报告. 下载地址而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 中国境内高级持续性威胁综述 基于中国境内海量DNS域名解析和奇安信威胁情报中心失陷检测&#xff08;IOC&#xff09;库的碰撞分析&…

9_1、Java基本语法之常用类String、StringBuffer、StringBuilder的使用

一、String的使用及常用方法 1、概述 String:表示字符串&#xff0c;使用""引起来。 1.1、String类是声明为final的&#xff0c;不可被继承。 1.2、String类实现了Serializable接口&#xff0c;表示字符串支持序列化。 …

【王道操作系统】2.1.3 原语实现对进程的控制

原语实现对进程的控制 文章目录原语实现对进程的控制1.什么是进程控制2.原语实现对进程的控制3.回忆进程的组织4.进程控制大致图解5.进程控制原语的相同点6.进程控制的五种原语1.什么是进程控制 2.原语实现对进程的控制 3.回忆进程的组织 4.进程控制大致图解 这里说明一下调度和…

MySQL【AUTO_INCREMENT 】自增列

使用案例场景再现&#xff1a; 创建一个为test的数据库&#xff0c;为数据库test创建一个数据表student &#xff0c;其中包含的字段有 id name sex&#xff0c;admission_time,其中要求student表中的人员id必须连续排列。 create database test use test cr…

SCI论文解读复现【NO.1】基于Transformer-YOLOv5的侧扫声纳图像水下海洋目标实时检测

此前出了目标改进算法专栏&#xff0c;但是对于应用于什么场景&#xff0c;需要什么改进方法对应与自己的应用场景有效果&#xff0c;并且多少改进点能发什么水平的文章&#xff0c;为解决大家的困惑&#xff0c;此系列文章旨在给大家解读最新目标检测算法论文&#xff0c;帮助…