【通信】蒙特卡洛算法模拟无线自组网自适应同步【含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

智能推荐

AI大模型在效率工具、内容平台、商业流程自动化、机器人、操作系统、智能设备等场景的应用_大模型下的智能流程-程序员宅基地

文章浏览阅读1.3w次。AI大模型可以用于自动摘要,例如基于Bert模型的自动摘要工具。这些工具可以自动从一篇文章中提取核心信息,并生成简要摘要。这些系统可以帮助用户更快地了解文章内容。AI大模型在效率工具、内容平台、商业流程自动化、机器人、操作系统、智能设备等场景的应用正日益广泛。这些系统可以提高工作效率、内容生产效率、决策效率、机器人智能和操作系统智能化程度,提高用户体验和服务质量。未来随着技术的不断发展,AI大模型的应用场景将更加广泛和深入。_大模型下的智能流程

pycharm如何连接远程服务器的docker容器进行运行和调试代码(一)_pycharm 远程docker-程序员宅基地

文章浏览阅读1.3w次,点赞33次,收藏90次。pycharm如何连接远程服务器的docker容器有两种方法:第一种:pycharm通过ssh连接已在运行中的docker容器第二种:pycharm连接docker镜像,pycharm运行代码再自动创建容器本文是第一种方法的教程,第二种请点击以上的链接条件:(1)准备好pycharm专业版,社区版没有连接远程服务器的功能(2)远程服务器ubuntu,已安装好docker一、配置远程服务器的docker容器1. 启动并运行交互式容器docker run -it --nam_pycharm 远程docker

修改服务器端上传大小限制_"<requestlimits maxquerystring=\"4080\" maxallowed-程序员宅基地

文章浏览阅读4.5k次。1.i. Configuration节点下 ii. System.web下修改节点HttpRuntime为 2.上传大于30M的的文件 碰到这个问题的实际环境是我们使用了_""

Linux Shell脚本攻略(一)_linux shell脚本攻略 在线 site:blog.csdn.net-程序员宅基地

文章浏览阅读458次。1.终端打印命令:echo,转义字符,echo ${ }2.环境变量:通常是,未在当前进程中定义,而在父进程中继承而来的变量。 cat /proc/$PID/environ 查看与pid进程相关的环境变量 export命令用来设置环境变量。3.重定向操作符:stdin,stdout,stderr4._linux shell脚本攻略 在线 site:blog.csdn.net

python 常见算法-程序员宅基地

文章浏览阅读324次。  python虽然具备很多高级模块,也是自带电池的编程语言,但是要想做一个合格的程序员,基本的算法还是需要掌握,本文主要介绍列表的一些排序算法  递归是算法中一个比较核心的概念,有三个特点,1 调用自身  2 具有结束条件  3 代码规模逐渐减少  举例:以下四个函数只有两个为递归  func3和func4 但是输出是不同的比如func3(5)输出为5,4,3,2,1f..._python中常用基本算法相关接口与应用。

Android-gradle配置详解_gradle unittests.returndefaultvalues-程序员宅基地

文章浏览阅读667次。**android gradle配置详解**AppExtension类及其属性可能大部分人看到AppExtension类会感觉到非常的陌生,其实我们在app中的build.gradle中填写配置信息的时候,经常看到它,它是什么呢?如果你按ctrl+鼠标左键对着android{},点击进去就知道了,其实android{…}表示的就是AppExtension这个类。我们再来看看AppExtension继承关系:除了AppExtension之外还有2个类与之相似..._gradle unittests.returndefaultvalues

随便推点

lamp安装多个php版本,在开发LAMP服务器上如何运行多个版本的PHP 5.x?(How can one run multiple versions of PHP 5.x on a develop...-程序员宅基地

文章浏览阅读154次。在开发LAMP服务器上如何运行多个版本的PHP 5.x?(How can one run multiple versions of PHP 5.x on a development LAMP server?)我需要使用多个版本的PHP 5.x来测试我的PHP应用程序,如PHP 5.0.0和PHP 5.2.8。有没有办法配置开发LAMP服务器,以便我可以快速测试多个版本的PHP5的应用程序?I ne..._lamp可以多php版本吗

windows下cmd窗口显示中文乱码_cmd窗口中文显示乱码问题-程序员宅基地

文章浏览阅读141次。【代码】windows下cmd窗口显示中文乱码。_cmd窗口中文显示乱码问题

MobaXterm工具的下载和安装教程_mobaxterm下载-程序员宅基地

文章浏览阅读1.2k次,点赞3次,收藏4次。MobaXterm_mobaxterm下载

探索SO-VITS-SVC:一款高效语音识别与转换服务-程序员宅基地

文章浏览阅读416次,点赞9次,收藏8次。探索SO-VITS-SVC:一款高效语音识别与转换服务项目地址:https://gitcode.com/svc-develop-team/so-vits-svc![](https://gitcode.net/mirrors svc-develop-team/so-vits-svc/badge)SO-VITS-SVC是一个开源的语音识别和转换服务项目,由svc-develop-team团队精心..._so-vits-svc api

OpenCV学习笔记】二十七、轮廓特征属性及应用(四)——正外接矩形_轮廓正方向的外接矩阵-程序员宅基地

文章浏览阅读1.3k次。【OpenCV学习笔记】二十七、轮廓特征属性及应用(四)——正外接矩形标签: OpenCV图像处理2017-04-01 14:35 945人阅读 评论(2) 收藏 举报 分类:OpenCV学习笔记(41) 版权声明:本文为博主原创文章,未经博主允许不得转载。轮廓特征属性及应用(四)——正外接矩形1.轮廓正外接矩形—_轮廓正方向的外接矩阵

yyyy-MM-dd 与 YYYY-MM-dd_unity yyyy-mm-dd-程序员宅基地

文章浏览阅读848次。新的一年之际,APP 给出了这样的提示:日期显示:“2020-12-31”!车友群里面立马有人不淡定了,虽然大家都猜出来,这应该是 APP 的 Bug,但还是难免要吐槽一下,讨论到最后,就快要“杀个程序员祭天了”!那么产生这个 Bug 的原因是什么呢?其实很简单,就是 把 yyyy-MM-dd 写成了 YYYY-MM-dd 。如果对时间处理不那么熟悉的程序员看到这里,会认为 yyyy ..._unity yyyy-mm-dd

推荐文章

热门文章

相关标签