m认知无线电网络中频谱感知的按需路由算法matlab仿真

news2025/1/12 0:46:00

目录

1.算法概述

2.仿真效果预览

3.MATLAB部分代码预览

4.完整MATLAB程序


1.算法概述

     使用无线电用户的频率范围在 9kHz 到 275GHz[3],由于无线通信环境中的干扰、信道衰落和无线电收发设备自身属性等的影响,大部分无线电设备只能工作在 50GHz 以下。在 3GHz 以上无线频谱资源利用率较低,3GHz 以下的利用率低于30%[4]。因此,频谱资源缺乏的主要原因为不合理的频谱资源管理政策。

      在低频段的频谱利用率较高,但在中频段和高频段利用率极低,固定的频谱管理政策是导致无线频谱资源短缺的真正原因,不是频谱资源不能满足用户需求。

       认知无线电让无线通信设备能够主动寻找可用信道,将未被使用的频谱资源进行再次利用,具体可通过认知无线电的智能化特性实现频率、时间和空间域不同频谱环境的信号感知,来充分满足用户使用需求。认知无线电本身存在学习能力,能够对通信环境中的变化做出分析和判断,然后能寻找到“频谱空穴”。

       当一个节点需要给网络中的其他节点传送信息时,如果没有到达目标节点的路由,则必须先以多播的形式发出RREQ(路由请求)报文。RREQ报文中记录着发起节点和目标节点的网络层地址,邻近节点收到RREQ,首先判断目标节点是否为自己。如果是,则向发起节点发送RREP(路由回应);如果不是,则首先在路由表中查找是否有到达目标节点的路由,如果有,则向源节点单播RREP,否则继续转发RREQ进行查找。
       按需路由选择(ODR)。ODR使用Cisco发现协议(CDP)来在分支(末节)路由器和中央路由器之间传输网络信息。与动态路由选择协议相比,ODR提供IP路由选择信息的开销非常小;而与静态路由相比,ODR的手工配置量更少。

       在大规模的路由网络中,例如在一个由省-地市-县-营业点组成的四级远程互连的路由网络中,如何维护大量的营业点路由器的直连子网路由和配置营业点的静态路由成为一个巨大的负担.此案例中说明了如何利用cisco On-Demand Routing (ODR)技术来优化这种大规模路由网络的一个设想.

算法A文献:

 算法B:

      基础算法B是基础算法A的简化,路径的退避时延只是节点退避时延的累加。算法的具体解释,参考文献’基础算法B’。

2.仿真效果预览

matlab2013b仿真

 

3.MATLAB部分代码预览

SOP_fre  = zeros(NUM_SOP,1);
for i = 1:NUM_SOP
    SOP_fre(i)  = 10*round(MAX_Fre/10*rand(1,1)) + MIN_Fre;%设置总共的频段情况20M~2400M,频段变换步进为10M
end
k        = 0.01;%调整10M的频率段,需要时间10ms。
Infor    = cell(sqrt(Num_node),sqrt(Num_node));
NUM_SOUR = 1;%源节点个数
NUM_DENT = 1;%目标节点个数
 
if sel_sna == 1
Band_W   = 2;%带宽统一为2M
end
 
if sel_sna == 2
   Band_Ws  = cell(sqrt(Num_node),sqrt(Num_node));%定义每个节点的带宽
   SNRi     = cell(sqrt(Num_node),sqrt(Num_node));%定义每个节点之间的信噪比
   Pi       = cell(sqrt(Num_node),sqrt(Num_node));%定义每个节点之间数据传输的不成果概率
end
 
 
S_data   = 0.3;%定义每个数据包的大小,通常,这个数据包的大小是相同的。
P0       = 0.7;%表示节点P观察到某个频段可用同时Q也观察到这个频段可用的概率;
qc       = 0.8;%在Q没有观察到频段可用而P观察到频段可用的概率
Pc       = 0.1;%每个节点的冲突概率
W0       = cell(sqrt(Num_node),sqrt(Num_node));%表示IEEE 802.11指数退避流程中退避窗口的最小值
 
 
Stime    = 100;%利用蒙特卡罗的仿真思想,对结果进行多次仿真,求平均
 
 
for pp = 1:Stime
    pp
%%
%-----START:初始化产生节点,注意,这里,节点的显示用方格坐标显示,但是实际的位置信息均存储在每个节点的信息cell中
%-----START:初始化产生节点,注意,这里,节点的显示用方格坐标显示,但是实际的位置信息均存储在每个节点的信息cell中
%-----START:初始化产生节点,注意,这里,节点的显示用方格坐标显示,但是实际的位置信息均存储在每个节点的信息cell中
%-----START:初始化产生节点,注意,这里,节点的显示用方格坐标显示,但是实际的位置信息均存储在每个节点的信息cell中
%以下的代码仅仅为显示节点
[X_view,Y_view,Index] = func_postion(Num_node);
% figure(1);
% for i = 1:sqrt(Num_node)
%     for j = 1:sqrt(Num_node)
%         plot(X_view(i,j),Y_view(i,j),'b.');hold on
%     end
% end
 
%下面的是产生的每个节点的基本信息
%以下的信息是基于AOVD协议产生每个节点的基本信息
%产生坐标信息
POS = cell(sqrt(Num_node),sqrt(Num_node));
X   = zeros(sqrt(Num_node),sqrt(Num_node));
Y   = zeros(sqrt(Num_node),sqrt(Num_node));
for i = 1:sqrt(Num_node)
    for j = 1:sqrt(Num_node)
        X(i,j)   = RR*rand(1,1);Y(i,j) = RR*rand(1,1);
        POS{i,j} = [X(i,j),Y(i,j)];
    end
end
 
%产生每个节点的附近的所有的频段,每个节点附近的频段的个数是随机的1~NUM_SOP
FRE = cell(sqrt(Num_node),sqrt(Num_node));
for i = 1:sqrt(Num_node)
    for j = 1:sqrt(Num_node)
        tmp     = randint(1,1,[1,NUM_SOP/2]);          %产生该节点的频段数的个数
        Ind_sop = unique(randint(1,tmp,[1,NUM_SOP]));%产生对应个数的随机频段的编号
        FRE{i,j}= unique(SOP_fre(Ind_sop));                  %每个节点附近的随机频点,构成SOP集合来模拟频谱分布的非均匀性
    end
end
 
%产生每个节点的数据流
%分别定义单数据流;
%-------多数据流:并行的数据流,交叉的数据流以及随机的数据流;
[Data_flow,Starts,Ends] = func_data_flow(Num_node,sel_type);
 
%产生每个节点的退避最大窗口
for i = 1:sqrt(Num_node)
    for j = 1:sqrt(Num_node)
        W0{i,j} = 8-0.5*length(FRE{i,j}); 
    end
end
 
%定义每个节点的带宽
for i = 1:sqrt(Num_node)
    for j = 1:sqrt(Num_node)
        Band_Ws{i,j} = 2 + (1-2*rand(1,1));%通常情况下节点的带宽都是相同的 
    end
end
 
%定义每个节点之间的信噪比
for i = 1:sqrt(Num_node)
    for j = 1:sqrt(Num_node)
        SNRi{i,j} = 5 + 2*rand(1,1);%每个路径的SNR包括固有的5db以及随机性差异
    end
end
 
%定义每个节点之间数据传输的不成概率
for i = 1:sqrt(Num_node)
    for j = 1:sqrt(Num_node)
        Pi{i,j} = 0.5 + 0.5*rand(1,1);%满足高斯分布
    end
end
 
 
 
%-----OVER:节点的初始化信息结束,通过循环可知,每次的参数是时变的,符合实际情况
%-----OVER:节点的初始化信息结束,通过循环可知,每次的参数是时变的,符合实际情况
%-----OVER:节点的初始化信息结束,通过循环可知,每次的参数是时变的,符合实际情况
%-----OVER:节点的初始化信息结束,通过循环可知,每次的参数是时变的,符合实际情况
 
%%
%%
%%
%%
 
%%
%-----START:通过基础算法A的相关方法计算目标路径的延迟
%-----START:通过基础算法A的相关方法计算目标路径的延迟
%-----START:通过基础算法A的相关方法计算目标路径的延迟
%-----START:通过基础算法A的相关方法计算目标路径的延迟
%根据之前定义的数据流,找到数据流的源节点和目标节点,并根据最小延迟算法确定实际的路径
%[Data_flow,Starts,Ends]   
%根据已知的路径和SOP集合,计算每个交叉节点的冲突数
 
%通过计算延迟,使每个节点的频谱进行重新分配,从而使延迟达到最小值,频谱从初始化产生的SOP集合中选择
%计算初始的冲突数量,后面在动态分配频段的时候,进行实时的更新
Num   = zeros(sqrt(Num_node),sqrt(Num_node));
Num = func_find_Num(Data_flow,FRE,Num_node);
 
for i = 1:length(Starts)
    for j = 1:length(Data_flow{i})
        
 
        %首先计算节点延迟
        %首先计算节点延迟
        %不是目标节点,是中间节点
        %不是目标节点,是中间节点
        %不是目标节点,是中间节点
        if j < length(Data_flow{i})
                tmp1 = Data_flow{i}(:,j);
                tmp2 = Data_flow{i}(:,j+1); 
            %首先判断当前节点下有误存在交集,如果没有频段的交集则丢去该帧
            if  FRE{tmp1(1),tmp1(2)}(1) == FRE{tmp2(1),tmp2(2)}(1)
                Dswitching(j) = 0;
                if Num(tmp1(1),tmp1(2)) > 0
                   Dbackoff(j)   = W0{tmp1(1),tmp1(2)}/((1-Pc) * (1-(1-Pc)^(1/(Num(tmp1(1),tmp1(2))-1))));
                else
                   Dbackoff(j)   = 0;
                end                
            else
                Dswitching(j) = 2*k*abs(FRE{tmp1(1),tmp1(2)}(1) - FRE{tmp2(1),tmp2(2)}(1));
                if Num(tmp1(1),tmp1(2)) > 0
                   Dbackoff(j)   = W0{tmp1(1),tmp1(2)}/((1-Pc) * (1-(1-Pc)^(1/(Num(tmp1(1),tmp1(2))-1))));
                else
                   Dbackoff(j)   = 0;
                end
            end
            
            %计算传输延迟
            Dtrans(j)       = (1/(1-Pi{tmp1(1),tmp1(2)}))*S_data/( Band_Ws{tmp1(1),tmp1(2)}*log2(1 + SNRi{tmp1(1),tmp1(2)}) );
            %进行延迟信息反馈RREQ反馈
            DN(j)          = Dswitching(j) + Dbackoff(j) + Dtrans(j) ; 
  
            
        else%如果是目标节点
            %如果是目标节点
            %如果是目标节点
            tmp1 = Data_flow{i}(:,j);
            tmp2 = Data_flow{i}(:,j);         
            
            indss1 = 1;
            
            %搜索最小DN值
            for hh1 = 1:length(FRE{tmp1(1),tmp1(2)})
                for hh2 = 1:length(FRE{tmp2(1),tmp2(2)}) 
                    indss1 = indss1 + 1;
                    %更新频段
                    Fre_now  = FRE{tmp1(1),tmp1(2)}(hh1);
                    %更新冲突数
                    Fre_nows                  = FRE;
                    Fre_nows{tmp1(1),tmp1(2)} = Fre_now;
                    Num = func_find_Num(Data_flow,FRE,Num_node);
 
                    Dswitching(indss1) = 2*k*abs(FRE{tmp1(1),tmp1(2)}(hh1) - FRE{tmp2(1),tmp2(2)}(hh2));
                    if Num(tmp1(1),tmp1(2)) > 0
                       Dbackoff(indss1)   = W0{tmp1(1),tmp1(2)}/((1-Pc) * (1-(1-Pc)^(1/(Num(tmp1(1),tmp1(2))-1))));
                    else
                       Dbackoff(indss1)   = 0;
                    end
                    
                    %计算传输延迟
                    Dtrans(indss1)       = (1/(1-Pi{tmp1(1),tmp1(2)}))*S_data/( Band_Ws{tmp1(1),tmp1(2)}*log2(1 + SNRi{tmp1(1),tmp1(2)}) );
                    %进行延迟信息反馈RREQ反馈
                    DNss(indss1)         = Dswitching(indss1) + Dbackoff(indss1) + Dtrans(indss1) ; 
                end
            end
            %找到最小值,给出最小值对应的频段及相关参数
            DN(j) = min(DNss);
        end
        Num = func_find_Num(Data_flow,FRE,Num_node);
        %计算路径延迟    
        %计算路径延迟  
        indss = 0;
        for pp1 = 1:length(FRE{tmp1(1),tmp1(2)})
            for pp2 = 1:length(FRE{tmp2(1),tmp2(2)})
                indss = indss + 1;
                H = length(Data_flow{i})-j+1;%多跳跳数
 
                for j2 = 1:H
                    Dswitchingi_tmp(j2) = k*abs(FRE{tmp1(1),tmp1(2)}(pp1) - FRE{tmp2(1),tmp2(2)}(pp2));
                end
                Dswitchingi(indss) = sum(Dswitchingi_tmp);
                if mod(H,2) == 0%偶数
                   for j2 = 1:H
                       Uhx_tmp(j2) = (1-P0)*qc^((1-Pc^j2)/(1-Pc^2)); 
                   end
                   Uhx = sum(Uhx_tmp);
                end
                if mod(H,2) == 1%奇数
                   for j2 = 1:H
                       Uhx_tmp(j2) = (1-P0)*qc^((1-Pc^j2)/(1-Pc^2)) + P0*Pc^(j2-1); 
                   end
                   Uhx = sum(Uhx_tmp);        
                end       
                Dbackoffi(indss)   = (S_data/Band_Ws{tmp1(1),tmp1(2)}) * (floor((H+1)/2) - Uhx)/Uhx;
                DPss(indss)          = Dswitchingi(indss) + Dbackoffi(indss);
            end
        end
        DP(j) = min(DPss);
        
        Droutej(j)     = DP(j) + DN(j);
 
    end
 
    Droutej_i(:,i)     = Droutej;
    
 
    
end
    F_Droutej_i(:,:,pp) = Droutej_i;
end
%-----OVER:通过基础算法A的相关方法计算目标路径的延迟
%-----OVER:通过基础算法A的相关方法计算目标路径的延迟
%-----OVER:通过基础算法A的相关方法计算目标路径的延迟
%-----OVER:通过基础算法A的相关方法计算目标路径的延迟
 
 
%最后的延迟为F_Droutej_i进行求平均
for i = 1:size(Droutej_i,1)
    for j = 1:size(Droutej_i,2)
        Droutej_i_average(i,j) = mean(F_Droutej_i(i,j,:));
    end
end
Droutess = mean(mean(Droutej_i_average));
01_044_m

4.完整MATLAB程序

matlab源码说明_我爱C编程的博客-CSDN博客

V

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

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

相关文章

融媒体解决方案-最新全套文件

融媒体解决方案-最新全套文件一、建设背景二、建设思路三、建设方案二、获取 - 融媒体全套最新解决方案合集一、建设背景 随着互联网的快速发展&#xff0c;社会已步入全媒体时代&#xff0c;各媒体机构积极探索传统媒体转型之路。 为巩固壮大主流思想舆论&#xff0c;不断提…

对数的应用:放缩x轴或者y轴以更好地表达函数的结果

对数尺度的作用 yAxnyAx^nyAxn 在实验中 AAA 和 nnn 都是未知数&#xff0c;现在我想求出 AAA 和 nnn假设 n1.5,A1n1.5, A1n1.5,A1&#xff0c;那么我们可以做个图看看 x np.linspace(1,10,10) y 1 * x**3 plt.plot(y)如果我做实验恰好得到一些点&#xff0c;那么我很难知道…

【全志T113-S3_100ask】14-1 linux采集usb摄像头实现拍照(FFmpeg、fswebcam)

【全志T113-S3_100ask】14-1 linux采集usb摄像头实现拍照背景&#xff08;一&#xff09;FFmpeg1、简介&#xff1a;2、交叉编译FFmpeg3、测试&#xff08;二&#xff09;fswebcam1、背景2、交叉编译fswebcam3、测试背景 在开发板上有一个csi转dvp接口的摄像头&#xff0c;但是…

前端入门到放弃(VUE、ES6,简单到不得了)

VSCode 使用 1、安装常用插件 切换到插件标签页 安装一下基本插件 2、创建项目 vscode 很轻量级&#xff0c;本身没有新建项目的选项&#xff0c;创建一个空文件夹就可以当做一个项目 3、创建网页 创建文件&#xff0c;命名为 index.html 快捷键 !快速创建网页模板 h1 回…

精益管理学会|什么是ECRS改善方法?

ECRS是IE工程改善、精益生產管理改善的四大法宝。 针对现有的生产线进行改善时&#xff0c;常见的做法是对现有的生产线进行绘制各工站的工时山积表如下圖所見&#xff0c;然后对各工站的动作单元进行ECRS 改善。 E&#xff1a;不需要的可进行 Eliminate &#xff08;取消&…

Telegraf-Influxdb-Grafana容器化部署拓展(Https、AD域、告警集成)并监控Cisco设备指标

前言&#xff1a; 还记得在去年的笔记中提到过使用python的pysnmp模块&#xff0c;配合Influxdb&#xff0c;Grafana收集Cisco设备指标。链接如下&#xff1a;https://blog.csdn.net/tushanpeipei/article/details/117329794 。在该实例中&#xff0c;我们通过python编写脚本收…

第一节 Maven核心程序解压与配置

1、Maven 官网地址 首页&#xff1a; Maven – Maven Repositories (apache.org)https://maven.apache.org/repositories/index.html下载页面&#xff1a; Maven – Download Apache Mavenhttps://maven.apache.org/download.cgi下载链接&#xff1a; 具体下载地址&#xff…

【微信小程序】列表渲染wx:for

&#x1f3c6;今日学习目标&#xff1a;第十二期——列表渲染wx:for &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人主页&#xff1a;颜颜yan_的个人主页 ⏰预计时间&#xff1a;20分钟 &#x1f389;专栏系列&#xff1a;我的第一个微信小程序 文章目录前言效果图< block…

同花顺_代码解析_交易系统_J01_08

本文通过对同花顺中现成代码进行解析&#xff0c;用以了解同花顺相关策略设计的思想 目录 J_01 MACD系统 J_02 布林带系统 J_03 趋向指标 J_04 乖离系统 J_05 KDJ系统 J_07 容量比率系统 J_08 威廉系统 J_01 MACD系统 分析MACD柱状线&#xff0c;由绿变红(负变正)&…

Bootstrap实例(四)

目录&#xff1a; &#xff08;1&#xff09;bootstrtap实例&#xff08;轮廓&#xff09; &#xff08;2&#xff09;bootstrap三列布局 &#xff08;3&#xff09;bootstrap&#xff08;标签页&#xff09; &#xff08;4&#xff09;bootstrap&#xff08;end&#xff0…

56.Django的admin后台管理使用方法

准备 Django框架提供了一个自动化后台管理功能&#xff0c;对网站数据的后台维护&#xff0c;仅仅需要进行非常简单的配置和编写极少的代码即可实现。 首先创建一个Django项目admin_study&#xff0c;然后创建连接数据库&#xff0c;在数据库中创建好表数据库后&#xff0c;进…

[附源码]java毕业设计小区物业管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

头歌-信息安全技术-用Python实现自己的区块链、支持以太坊的云笔记服务器端开发、编写并测试用于保存云笔记的智能合约、支持以太坊的云笔记小程序开发基础

头歌-信息安全技术-用Python实现自己的区块链、支持以太坊的云笔记服务器端开发、编写并测试用于保存云笔记的智能合约、支持以太坊的云笔记小程序开发基础一、用Python实现自己的区块链1、任务描述2、评测步骤(1)打开终端&#xff0c;输入两行代码即可评测通过二、支持以太坊的…

MySQL的高阶学习:索引、B+树

1.索引 索引是一种数据结构&#xff0c;如果没有索引&#xff0c;查找一个数据就需要从第一页开始全局检索直至找到需要的数据&#xff0c;有了索引可以先在目录中根据拼音查找到该数据所在的页数&#xff0c;因此通过索引可以大大减少了查询时间。 索引有两种存储类型&#xf…

金融科技赋能 互融云手机回租系统 实现资产全流程在线运营管理

在共享单车、充电宝等共享商业的兴起与成熟之后&#xff0c;“信用租赁”的模式悄然诞生&#xff0c;租房、租衣、租数码等已成常态。信用租赁系统的出现&#xff0c;带活了一大批租赁经济&#xff0c;尤其是手机行业。 伴随手机零售业的增长以及新品发布速度的提高&#xff0…

CY8C5888AXQ-LP096 CY8C5888AXI-LP096,IC MCU 32BIT

PSoC 5LP是一种真正的可编程嵌入式片上系统&#xff0c;集成了可配置的模拟和数字外设&#xff0c;内存和单芯片上的微控制器。PSoC 5LP架构通过以下方式提高性能&#xff1a; 32位Arm Cortex-M3核心加上DMA控制器和数字滤波处理器&#xff0c;最高可达80mhz 超低功率&#xff…

China SAFe Day 2022中国规模化敏捷大会圆满落幕!

China SAFe Day 202211月5日&#xff0c;2022 China SAFe Day暨第三届中国规模化敏捷大会在上海圆满落幕。 本届大会由Scrum中文网和SAI&#xff08;Scaled Agile Inc.&#xff09;联合主办&#xff0c;围绕 “敏捷企业与数字化变革” 这一主题展开&#xff0c;内容涵盖工业敏…

RSA加密原理与RSA公钥加密系统、数字签名

通过公钥加密系统&#xff0c;可以对传输于两个通信单位之间的消息进行加密&#xff0c;即使窃听者窃听到加密之后的消息&#xff0c;也不能对其破译。 1、RSA公钥加密原理 1.1 几个核心概念 公钥P与公钥函数P()密钥S与密钥函数S() 可以简单理解&#xff0c;一个公钥对应一个…

【数据结构】—— 单链表的增删改查

❤️一名热爱Java的大一学生&#xff0c;希望与各位大佬共同学习进步❤️ &#x1f9d1;个人主页&#xff1a;周小末天天开心 各位大佬的点赞&#x1f44d; 收藏⭐ 关注✅&#xff0c;是本人学习的最大动力 感谢&#xff01; &#x1f4d5;该篇文章收录专栏—数据结构 目录 方…

BUUCTF web之随便注

启动靶场访问如下&#xff0c;输入1&#xff0c;报错&#xff0c;可知是字符型注入&#xff0c;变量由单引号包裹 输入1 and 11 --&#xff0c;显示正常 先直接用sqlmap注入一下&#xff0c;显示存在注入&#xff0c;但是始终注入不出来数据库&#xff0c;“[ERROR] unable to …