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

实验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

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值