【通信】蒙特卡洛算法模拟无线自组网自适应同步【含Matlab源码 3647期】

在这里插入图片描述

⛄一、扩频通信系统简介

蒙特卡洛模拟可以用来模拟无线自组网中的不确定性因素,而自适应同步技术可以根据网络环境的变化动态调整同步法的参数和策略。基于蒙特卡洛模拟的自适应同步技术可以通过对网络中各种不确定性因素进行建模和仿真,来更准确地评估同步算法的性能,并据此优化算法的设计。具体来说,可以按照以下步骤进行蒙特卡洛模拟的自适应同步:
(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 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

  • 23
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Matlab领域

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值