【通信】蒙特卡洛算法模拟无线自组网自适应同步【含Matlab源码 3647期】-程序员宅基地

技术标签: matlab  Matlab信号处理(高阶版)  

在这里插入图片描述

一、扩频通信系统简介

蒙特卡洛模拟可以用来模拟无线自组网中的不确定性因素,而自适应同步技术可以根据网络环境的变化动态调整同步法的参数和策略。基于蒙特卡洛模拟的自适应同步技术可以通过对网络中各种不确定性因素进行建模和仿真,来更准确地评估同步算法的性能,并据此优化算法的设计。具体来说,可以按照以下步骤进行蒙特卡洛模拟的自适应同步:
(1)确定需要模拟的不确定性因素,例如节点位置、速度、信道条件等。
(2)根据这些因素建立模型,并进行仿真,得到一组数据。
(3)利用这组数据来评估同步算法的性能,例如同步误差、同步时间等指标。
(4)根据评估结果,调整同步算法的参数和策略,重新进行仿真。
(5)重复上述步骤,直到得到满意的同步效果。

二、部分源代码

clc;
clear;
close all;
warning off;
addpath(genpath(pwd));
rng(‘default’)

%网络规模
Nnodes= [50:50:250];

%蒙特卡洛
MTKL =400;
for ii = 1:length(Nnodes)
for jj = 1:MTKL
[ii,jj]
%节点分布范围
Nnode1= Nnodes(ii);%参考文献构建2个子网络,然后构建同步组网
Nnode2= Nnodes(ii);
Nnode = Nnode1+Nnode2;
SCALE = 10*sqrt(Nnodes(ii));
%初始节点能量
E0 = 1;
%通信半径
Radius= 50;%
%节点最大移动速度
Vmax = 1;%
%数据发送包速率
Smax = 20;%
%数据发送包长度
SLen = 2000;%
%节点通信阈值
LRad = 87;
%电路能耗系数
Eelec = 5e-8;
%信道传播模型的能耗系数
Efs = 1e-11;
%信道传播模型的能耗系数
Emp = 1.3e-15;
%压缩比
u = 0.5;%
%初始变异概率
P = 0.5;%
%发送率
Trans = 1.5;
c = 3e8;
%时钟频
fclk = 50e6;
tclk = 1e-5;
%组网过程的信道环境噪声干扰
SNR = -5;
%网络额定带宽
BW = 25e6;

    %构建网络1
    X1 = rand(1,Nnode1)*SCALE;  
    Y1 = rand(1,Nnode1)*SCALE; 
    %构建网络2
    X2 = rand(1,Nnode2)*SCALE+0.9*SCALE;  
    Y2 = rand(1,Nnode2)*SCALE+0.9*SCALE; 

    X  = [X1,X2];
    Y  = [Y1,Y2];

    %网络拓扑
    dmatrix = zeros(Nnode,Nnode);
    dmatrix0= zeros(Nnode,Nnode);
    for i = 1:Nnode 
        for j = 1:Nnode 
            Dist          = sqrt((X(i) - X(j))^2 + (Y(i) - Y(j))^2); 
            dmatrix0(i,j) = Dist; 
            %a link; 
            if Dist <= Radius & Dist > 0  
               %距离因素
               dmatrix(i,j) = Dist; 
            else 
               %距离因素
               dmatrix(i,j) = inf; 
            end; 
        end; 
    end; 
    MAX_dmatrix = max(max(dmatrix0));
    dmatrix     = dmatrix/MAX_dmatrix;

    %随机选择2源节点和目标节点
    tmps1 = randperm(Nnode1);
    tmps2 = randperm(Nnode2);
    idx1  = tmps1(1);
    idx2  = Nnode1+tmps2(1);

    %产生帧结构
    %导频
    PN1= 2*m_sequence([1,0,0,0,1,1,1])-1;
    PN2= 2*m_sequence([1,0,0,0,1,1,1])-1;
    PN3= 2*m_sequence([1,0,0,0,1,1,1])-1;
    PN4= 2*m_sequence([1,0,0,0,1,1,1])-1;
    %定义时隙
    mlost = 2*double(rand(1,8)>=0.5)-1;
    %定义发射数据
    datas = 2*double(rand(1,8192)>=0.5)-1;
    %定义收发间隔
    ttg   = 2*double(rand(1,16)>=0.5)-1;  
    frame1 = [mlost,datas,ttg];
    frame1B= [frame1,frame1,frame1,frame1,frame1,frame1,frame1,frame1,frame1,frame1,frame1,frame1,frame1,frame1,frame1];
    frame1C= [frame1B,frame1B,frame1B,frame1B,frame1B];
    frame1D= [PN1,PN2,PN3,PN4,frame1C,frame1C];

    paths = func_dijkstra(idx1,idx2,dmatrix); 
    path_distance=0; 
    ds=0;
    for d=2:length(paths) 
       path_distance= path_distance + MAX_dmatrix*dmatrix(paths(d-1),paths(d)); 
       ds(d)=MAX_dmatrix*dmatrix(paths(d-1),paths(d)); 
    end 
    %跳数
    Nhops = length(paths) - 1;

    %根据路由信息,发射帧数据
    T = frame1D;
    %公式3.2,计算传播延迟
    s = path_distance*1e3;
    ttra = s/c;%传输过程中的时延
    ttra2= ds*1e3/c;%传输过程中的各个节点时延
    %节点处理时延
    ttra3= 2;
    %时钟漂移偏差
    Tslot = length(mlost)*1*5*15*1/fclk;


    N     = 15;
    tdrift= tclk*Tslot*N;
    %融合组网
    %接收节点信息进行帧检测
    %检测是否同步
    flag   = 0;
    Tss    = [];
    Tee    = [];
    Delays = [];
    ixk    = 0;
    while ixk<=length(paths) 
        ixk = ixk+1;
        frame1D2= frame1D + randn(size(frame1D));
        yy     = xcorr(frame1D2(1:end-10000),PN1);
        yy2    = yy;
        pnx    = find(yy2>100);
        if isempty(pnx) == 0;
           %建立动态时延关系表 
           for ij = 1:length(ttra2)
               Delays(ij) = ttra3+ttra2(ij) + Tslot + tdrift;
           end
           %确定参考节点
           IDrefS = idx1;
           IDrefD = idx2;
           %广播参考节点
           TimeS  = (ixk+2+0.2*rand);%发送点的时间,设置随机发送时间
           %更新节点时间%完成更新
           TimeD  = TimeS + [sum(Delays)];
           flag   = 1;
        else
           %没检测到,不做处理  
           TimeS = 0;
           TimeD = 0;
           Delays= 0;
           flag  = 0;
        end
        Tss    = [Tss,TimeS];
        Tee    = [Tee,TimeD];
    end


    %端到端时延
    TimeD2D(jj)  = sum(Delays);
    %网络吞吐量与带宽,跳数相关
    th           = BW/Nhops;
    Throughput0(jj)= th/1e3;%转换为Kbits
    %初始入网时间
    Time1st(jj)  = mean(Tss);
    %迟入网时间
    TimeFst(jj)  = mean(Tee);
    %网络建立时间
    Timeset(jj)  = mean(Tee)+mean(Tss);
end
TimeD2D_(ii)    =mean(TimeD2D);
Throughput0_(ii)=mean(Throughput0);
Time1st_(ii)=mean(Time1st);
TimeFst_(ii)=mean(TimeFst);
Timeset_(ii)=mean(Timeset);

end

figure;
plot(Nnodes,TimeD2D_,‘-bs’,…
‘LineWidth’,1,…
‘MarkerSize’,6,…
‘MarkerEdgeColor’,‘k’,…
‘MarkerFaceColor’,[0.9,0.0,0.0]);
grid on
xlabel(‘节点数量’);
ylabel(‘端到端时延(ms)’);

figure;
plot(Nnodes,Throughput0_,‘-bs’,…
‘LineWidth’,1,…
‘MarkerSize’,6,…
‘MarkerEdgeColor’,‘k’,…
‘MarkerFaceColor’,[0.9,0.0,0.0]);
grid on
xlabel(‘节点数量’);
ylabel(‘网络吞吐量(Kbps)’);

figure;
plot(Nnodes,Time1st_,‘-bs’,…
‘LineWidth’,1,…
‘MarkerSize’,6,…
‘MarkerEdgeColor’,‘k’,…
‘MarkerFaceColor’,[0.9,0.0,0.0]);
grid on
xlabel(‘节点数量’);
ylabel(‘初始入网时间(s)’);
ylim([0.8min(Time1st_),1.2max(Time1st_)]);

figure;
plot(Nnodes,TimeFst_,‘-bs’,…
‘LineWidth’,1,…
‘MarkerSize’,6,…
‘MarkerEdgeColor’,‘k’,…
‘MarkerFaceColor’,[0.9,0.0,0.0]);
grid on
xlabel(‘节点数量’);
ylabel(‘迟入网时间(s)’);

figure;
plot(Nnodes,Timeset_,‘-bs’,…
‘LineWidth’,1,…
‘MarkerSize’,6,…
‘MarkerEdgeColor’,‘k’,…
‘MarkerFaceColor’,[0.9,0.0,0.0]);
grid on
xlabel(‘节点数量’);
ylabel(‘网络建立时间(s)’);

save R.mat Nnodes TimeD2D_ Throughput0_ Time1st_ TimeFst_ Timeset_

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 沈再阳.精通MATLAB信号处理[M].清华大学出版社,2015.
[2]高宝建,彭进业,王琳,潘建寿.信号与系统——使用MATLAB分析与实现[M].清华大学出版社,2020.
[3]王文光,魏少明,任欣.信号处理与系统分析的MATLAB实现[M].电子工业出版社,2018.

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_63266434/article/details/135004354

智能推荐

适合入门的8个趣味机器学习项目-程序员宅基地

文章浏览阅读86次。首发地址:https://yq.aliyun.com/articles/221708谈到机器学习,相信很多除学者都是通过斯坦福大学吴恩达老师的公开课《Machine Learning》开始具体的接触机器学习这个领域,但是学完之后又不知道自己的掌握情况,缺少一些实际的项目操作。对于机器学习的相关竞赛挑战,有些项目的门槛有些高,参加后难以具体的实现,因此造..._scrath五子棋下载

oracle 12c avg,Oracle 12c新特性系列专题-安徽Oracle授权认证中心-程序员宅基地

文章浏览阅读83次。原标题:Oracle 12c新特性系列专题-安徽Oracle授权认证中心 随着Oracle database 12c的普及,数据库管理员 (DBA) 的角色也随之发生了转变。 Oracle 12c数据库对 DBA 而言是下一代数据管理。它让 DBA 可以摆脱单调的日常管理任务,能够专注于如何从数据中获取更多价值。未来我们会推出基于Oracle12c的技术文章,帮助DBA尽快掌握新一代数据库的新特性..._ilm add policy row store compress advanced row after

第七周项目三(负数把正数赶出队列)-程序员宅基地

文章浏览阅读150次。问题及代码:*Copyright(c)2016,烟台大学计算机与控制工程学院 *All right reserved. *文件名称:负数把正数赶出队列.cpp *作者:张冰 *完成日期;2016年10月09日 *版本号;v1.0 * *问题描述: 设从键盘输入一整数序列a1,a2,…an,试编程实现: 当ai>0时,ai进队,当ai<0时,将队首元素出队,当ai

Linux命名空间学习教程(二) IPC-程序员宅基地

文章浏览阅读150次。本文讲的是Linux命名空间学习教程(二) IPC,【编者的话】Docker核心解决的问题是利用LXC来实现类似VM的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。而 LXC所实现的隔离性主要是来自内核的命名空间, 其中pid、net、ipc、mnt、uts 等命名空间将容器的进程、网络、消息、文件系统和hostname 隔离开。本文是Li..._主机的 ipc 命名空间

adb强制安装apk_adb绕过安装程序强制安装app-程序员宅基地

文章浏览阅读2w次,点赞5次,收藏7次。在设备上强制安装apk。在app已有的情况下使用-r参数在app版本低于现有版本使用-d参数命令adb install -r -d xxx.apk_adb绕过安装程序强制安装app

随便推点

STM32F407 越界问题定位_stm32flash地址越界怎么解决-程序员宅基地

文章浏览阅读290次。如果是越界进入硬件错误中断,MSP 或者 PSP 保存错误地址,跳转前会保存上一次执行的地址,lr 寄存器会保存子函数的地址,所以如果在 HardFault_CallBack 中直接调用 C 语言函数接口会间接修改了 lr,为了解决这个问题,直接绕过 lr 的 C 语言代码,用汇编语言提取 lr 寄存器再决定后面的操作。由于 STM32 加入了 FreeRTOS 操作系统,可能导致无法准确定位,仅供参考(日常编程需要考虑程序的健壮性,特别是对数组的访问,非常容易出现越界的情况)。_stm32flash地址越界怎么解决

利用SQL注入上传木马拿webshell-程序员宅基地

文章浏览阅读1.8k次。学到了一种操作,说实话,我从来没想过还能这样正常情况下,为了管理方便,许多管理员都会开放MySQL数据库的secure_file_priv,这时就可以导入或者导出数据当我如图输入时,就会在D盘创建一个名为123456.php,内容为<?php phpinfo();?>的文件我们可以利用这一点运用到SQL注入中,从拿下数据库到拿下目标的服务器比如我们在使用联合查询注入,正常是这样的语句http://xxx?id=-1 union select 1,'你想知道的字段的内容或查询语句',

Html CSS的三种链接方式_html链接css代码-程序员宅基地

文章浏览阅读2.9w次,点赞12次,收藏63次。感谢原文:https://blog.csdn.net/abc5382334/article/details/24260817感谢原文:https://blog.csdn.net/jiaqingge/article/details/52564348Html CSS的三种链接方式css文本的链接方式有三种:分别是内联定义、链入内部css、和链入外部css1.代码为:<html>..._html链接css代码

玩游戏哪款蓝牙耳机好?2021十大高音质游戏蓝牙耳机排名_适合游戏与运动的高音质蓝牙耳机-程序员宅基地

文章浏览阅读625次。近几年,蓝牙耳机市场发展迅速,越来越多的消费者希望抛弃线缆,更自由地听音乐,对于运动人士来说,蓝牙耳机的便携性显得尤为重要。但目前市面上的大多数蓝牙耳机实际上都是“有线”的,运动过程中产生的听诊器效应会严重影响听歌的感受。而在“真无线”耳机领域,除了苹果的AirPods外,可供选择的产品并不多,而AirPods又不是为运动场景打造的,防水能力非常差。那么对于喜欢运动又想要“自由”的朋友来说,有没有一款产品能够满足他们的需求呢?下面这十款小编专门为大家搜罗的蓝牙耳机或许就能找到适合的!网红击音F1_适合游戏与运动的高音质蓝牙耳机

iOS 17 测试版中 SwiftUI 视图首次显示时状态的改变导致动画“副作用”的解决方法-程序员宅基地

文章浏览阅读1k次,点赞6次,收藏7次。在本篇博文中,我们在 iOS 17 beta 4(SwiftUI 5.0)测试版中发现了 SwiftUI 视图首次显示时状态的改变会导致动画“副作用”的问题,并提出多种解决方案。

Flutter 自定义 轮播图的实现_flutter pageview轮播图 site:csdn.net-程序员宅基地

文章浏览阅读1.9k次。  在 上篇文章–Flutter 实现支持上拉加载和下拉刷新的 ListView 中,我们最终实现的效果是在 listView 上面留下了一段空白,本意是用来加载轮播图的,于是今天就开发了一下,希望能给各位灵感。一 、效果如下说一下大体思路   其实图片展示是用的 PageView ,然后,下面的指示器 是用的 TabPageSelector ,当然整体是用 Stack 包裹起来的。1、..._flutter pageview轮播图 site:csdn.net

推荐文章

热门文章

相关标签