基于ALOHA MAC方法的蒙特卡罗模拟(Matlab代码实现)

news2024/12/29 10:41:33

 👨‍🎓个人主页:研学社的博客 

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

本文基于ALOHA MAC方法的蒙特卡罗模拟。

📚2 运行结果

部分代码:

N=60;
Ts=0.0002; %Ts= 1200/6000000= 0.2msec
lamda= 250:200:2050; %[packet/sec] 
lamda2= lamda.*Ts; % lamda2=arrival rate=0.05:0.03:0.32 [packet/slot]
s = zeros(1, length(lamda));
g = zeros(1, length(lamda));
d = zeros(1, length(lamda));

for l=1:1:length(lamda)
    %TIMING PARAMETERS (PART 1)
    num_arrival_per_station = 1000000;
    interarrival_time= exprnd(1/(lamda2(l)), N, num_arrival_per_station); %[slot]
    arrival_schedule= cumsum(interarrival_time,2); %cumsum:Cumulative sumcollapse. B = cumsum(A,dim)
    %this double loop method works but very inefficient
    % arrival_schedule= zeros(N,num_arrival_per_station);
    % for n =1:N
    %     for i = 1:num_arrival_per_station
    %         arrival_schedule(n, i) = sum(interarrival_time(n, 1:i));
    %     end
    % end
    retransmission_schedule= zeros(1,N);
    simulation_time=1000000;
    current_time_slot=1;
    
    %DIFFERENT TRANSMIT INDICATORS (PART 2)
    transmit_status_indicator = zeros(1,N) ; % 0 for not transmitting, 1 for transmitting
    retransmit_status = zeros(1,N) ; % 0 for no retransmission, 1 for pending retransmission
    retransmission_attempt = zeros(1,N) ; %if pkt tx fail once becomes 1 , fail twice becomes 2, and so on ...useful for updating window for retransmission scheduling
    max_retransmission_attempt = 11;
    
    %%STATS PARAMETERS (PART 3)
    total_transmissions = 0;
    total_successful_transmissions = 0 ; %use for throughput computation
    total_delay_time = 0 ; %use for average delay computation
    packet_index=ones(1, N);
    
    while (current_time_slot < simulation_time)
        %%FUNCTION: check_whether_each_station_transmits_in_this_slot (PART 4)
        for j= 1:1:N
            %retransmission_schedule(1,j)
            if (retransmit_status(1,j)==1) %check if status is retransmit
                if (retransmission_schedule(1,j)==current_time_slot) %check if retransmission count down timer arrived
                    transmit_status_indicator(1,j)=1;
                    j_tx=j;
                end
            elseif (all(retransmit_status==0)==1) %no pendiong retranmission
                if (current_time_slot >= arrival_schedule(j,packet_index(1,j))) % there's a new packet
                    transmit_status_indicator(1,j)=1;
                    j_tx=j;
                end
            end
        end
        % Number of stations which transmit in this slot
        num_transmitting_stations = sum(transmit_status_indicator);
        total_transmissions = total_transmissions + num_transmitting_stations;
        %%FUNCTION: CHECK_SUCCESSFUL_OR_FAILED_TRANSMISSION (PART 5)
        if (num_transmitting_stations==1) %if transmission succeed
            total_successful_transmissions = total_successful_transmissions+1;
            % get packet arrival time. Based on difference between transmitted time and original arrival time, we can get this_unique_packet_delay_time
            this_unique_packet_delay_time_after_successful_tx= current_time_slot - arrival_schedule(j_tx, packet_index(1,j_tx));
            total_delay_time = total_delay_time + this_unique_packet_delay_time_after_successful_tx;
            transmit_status_indicator(1,j_tx) = 0; %update tx status
            retransmit_status(1,j_tx) = 0; %update re-tx status
            %update which next packet to be served, do something with arrival_schedule?
            packet_index(1,j_tx)= packet_index(1,j_tx) + 1; %increase packet index at the station has packet successfully transmitted
            retransmission_attempt(1,j_tx)=0;
            retransmission_schedule(1,j_tx)=0;
        else %if transmission fails
            for j=1:1:N
                retransmit_status(1,j) = transmit_status_indicator(1,j);
                if ((retransmit_status(1,j)==1)&&(retransmission_schedule(1,j)<=current_time_slot))
                    %if (retransmit_status(1,j)==1)
                    retransmission_schedule(1,j) = current_time_slot + randi([1, 2^(retransmission_attempt(1,j))+1],1);
                    retransmission_attempt(1,j) = retransmission_attempt(1,j)+1;
                    if (retransmission_attempt(1,j) > max_retransmission_attempt)
                        %discard the packet and serving next packet
                        packet_index(1,j)= packet_index(1,j) + 1;
                        retransmission_attempt(1,j)=0;
                        retransmission_schedule(1,j)=0;
                        retransmit_status(1,j)=0;
                    end
                    transmit_status_indicator(1,j)=0;
                end
            end
        end
        current_time_slot = current_time_slot + 1 ;
    end %belongs to while loop of incrementing simulation time

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

🌈4 Matlab代码实现

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

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

相关文章

ES5+ 和 ES6

一、什么是严格模式 JavaScript 除了提供正常模式外&#xff0c;还提供了严格模式&#xff08;strict mode&#xff09;。ES5 的严格模式是采用具有限制性 JavaScript变体的一种方式&#xff0c;即在严格的条件下运行 JS 代码。严格模式在 IE10 以上版本的浏览器中才会被支持&a…

【App自动化测试】(六)移动端自动化中常用的元素定位方式

目录1. Android/iOS基础知识1.1 Android基础知识1.1.1 七大布局1.1.2 四大组件1.1.3 常用控件1.1.4 控件的布局1.2 iOS基础知识1.2.1 iOS介绍1.2.2 布局1.2.3 开发环境2.控件定位2.1 元素定位法2.1.1 dom结构介绍2.1.2 定位方式2.1.3 演示代码2.2 xpath定位2.2.1 xpath的层级定…

Radis基础命令(Hash类型)对field进行的操作

目录 Hash类型 Hash与String比较 Hash类型的常见命令&#xff08;显而易见&#xff0c;在String命令前加入H就是Hash的命令&#xff09; 1.HSET key field value&#xff1a;添加或修改hash类型key的field的值&#xff08;实操举例&#xff09; 2.HGET key field &#xf…

使用Jtest 2022.2简化严格的Java测试

阅读本文&#xff0c;您可以了解您的开发团队如何利用Parasoft Jtest 2022.2 中包含的先进功能和增强功能来简化 Java 测试。 如果开发人员没有自动化测试流程&#xff0c;Java和JUnit测试对他们来说可能是耗时且具有挑战性的。随着Parasoft Jtest2022.2新版本的发布&#xff…

基于JavaWeb的校园故障报修系统(源码+数据脚本+论文+技术文档)

项目描述 临近学期结束&#xff0c;还是毕业设计&#xff0c;你还在做java程序网络编程&#xff0c;期末作业&#xff0c;老师的作业要求觉得大了吗?不知道毕业设计该怎么办?网页功能的数量是否太多?没有合适的类型或系统?等等。这里根据疫情当下&#xff0c;你想解决的问…

欺诈团伙遇上关联网络,邪不压正

你可能永远都想不到骗子有多狡猾、多专业。 最近&#xff0c;小象看到这样一个案例&#xff1a; 近日&#xff0c;小王接到了一个自称“京东客服”的电话&#xff0c;说她网购的银行卡有一些网贷需要注销。因为个人信息与她的真实情况相符&#xff0c;小王便也相信了。随后在…

力扣225 - 用队列实现栈【C/C++实现】

用队列实现栈~一、题目描述二、思路分析1、结构声明与展开剖析2、入栈【入队思想】3、出栈【出队思想】4、获取栈顶元素【队列末尾】5、逐步算法图解三、整体代码展示&#x1f4bb;C语言代码实现&#x1f4bb;C代码实现【⭐】补充&#xff1a;单队列实现栈四、总结与提炼一、题…

谈谈用户态 TCP 协议实现

导语 TCP 协议是目前名气最大、使用最广泛的传输层网络协议。 TCP 是一个可靠的&#xff08;reliable&#xff09;、面向连接的&#xff08;connection-oriented&#xff09;、基于字节流&#xff08;byte-stream&#xff09;、全双工的&#xff08;full-duplex&#xff09;协…

低代码如何增强团队应用开发能力?

虽然数字化转型长期以来一直是企业的战略目标&#xff0c;但疫情加速了这一进程。企业为确保参与度和业务连续性而推出的第一个也是最直接的数字渠道之一是移动应用程序。 然而&#xff0c;对于大多数组织而言&#xff0c;最大的障碍之一是技术团队没有足够的带宽来创建具有严…

基于springboot+java+vue的健身房课程预约信息网站-计算机毕业设计

运行环境 开发语言&#xff1a;Java 框架&#xff1a;springboot JDK版本&#xff1a;JDK1.8 服务器&#xff1a;tomcat7 数据库&#xff1a;mysql 数据库工具&#xff1a;Navicat11 开发软件&#xff1a;eclipse/myeclipse/idea Maven包&#xff1a;Maven 项目介绍 本健身网…

从零学习 InfiniBand-network架构(八) —— IB协议中的原子操作

从零学习 InfiniBand-network架构&#xff08;八&#xff09; —— IB协议中的原子操作 &#x1f508;声明&#xff1a; &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f511;未经作者允许&#xff0c;禁止转载 &#x1f6a9;本专题部分内容源于《InfiniBand-net…

Spring入门

一、Spring简介 1、Spring概述 官网地址&#xff1a;https://spring.io/ Spring 是最受欢迎的企业级 Java 应用程序开发框架&#xff0c;数以百万的来自世界各地的开发人员使用Spring 框架来创建性能好、易于测试、可重用的代码。 Spring 框架是一个开源的 Java 平台&#xf…

STM32F407输入捕获应用--PWM 输入模式测量脉冲频率与宽度

STM32F407输入捕获应用--PWM 输入模式测量脉冲频率与宽度一、测量脉宽或者频率二、PWM 输入模式三、软件实现3.1、硬件准备3.2代码3.4 验证输入捕获一般应用在两个方面&#xff0c;一个方面是脉冲跳变沿时间测量&#xff0c;另一方面是 PWM 输入测量。一、测量脉宽或者频率 1.测…

Dockerfile(容器与镜像 自定义nginx tomcat 镜像优化)

Dockerfile精讲一、容器与容器镜像之间的关系二、容器镜像分类三、容器镜像获取的方法四、容器镜像获取方法演示4.1 在DockerHub直接下载4.2 把操作系统中文件系统打包为容器镜像4.2.1 安装一个最化的操作系统4.2.2 把操作系统中文件系统进行打包4.2.3 把打包后文件加载至本地文…

连续信号与系统的频域分析之傅里叶级数

信号的傅里叶级数一、正交函数集二、三角形式傅里叶级数三、指数形式的傅里叶级数1. 定义2. 系数确定3. 典型信号的傅里叶级数4. 周期信号的功率谱在LTI系统的时域分析中&#xff0c;输入信号被分解成冲激信号或阶跃信号的叠加&#xff08;积分&#xff09;&#xff0c;然后利用…

LeetCode刷题2:链表篇

提示&#xff1a;本篇共7道力扣题目供大家食用&#xff0c;时间自行把控~ 算法刷题系列笔记 LeetCode刷题1&#xff1a;数组篇 文章目录算法刷题系列笔记作者有话说一、链表知识1.1 什么是链表?1.2 链表的类型1.3 链表操作二、经典题目2.1 Leetcode203.移除链表元素2.2 Leet…

vue-jest vue3

1. 使用vite搭建测试项目&#xff1a; vue create test-vue-jest 选择单元测试&#xff1a;Unit Testing--->jest 2. 配置 jest.config.js module.exports {transform: {"^.\\.vue$": "vue-jest",},preset: vue/cli-plugin-unit-jest/presets/types…

【关于几个问题的思考】

项目如何部署在服务器上面的 此文章以springboot 项目为例&#xff1a; 1.需要申请一台服务器&#xff0c;安装Linux操作系统 2.在服务器安装jdk ,不需要安装Tomcat&#xff0c;springboot 项目内嵌 Tomcat&#xff1b;安装项目的依赖项&#xff1a;如mysql redis等 3.此处利用…

Oracle SQL执行计划操作(9)——位图相关操作

​​​​​​9. 位图相关操作 该类操作基于位图数据(例如:位图索引的位图数据)进行位操作,或将其他结构数据转成位图数据以利用位操作。根据不同的具体SQL语句及其他相关因素,如下各操作可能会出现于相关SQL语句的执行计划。 1)BITMAP AND 对两个位图索引进行“与”(…

【CLS数据淘金第四期】网络流日志-云联网日志分析

导语 云联网&#xff08;Cloud Connect Network&#xff0c;CCN&#xff09;云联网覆盖全球 20 地域&#xff0c;提供云上私有网络间&#xff08;VPC&#xff09;、VPC 与本地数据中心间&#xff08;IDC&#xff09;内网互联的服务&#xff0c;具备全网多点互联、路由自学习、…