首页 / 专利库 / 杂项知识产权事务 / 数字版权管理 / 授权中心 / 一种基于USRP的虚拟仿真系统及其方法

一种基于USRP的虚拟仿真系统及其方法

阅读:623发布:2022-09-04

专利汇可以提供一种基于USRP的虚拟仿真系统及其方法专利检索,专利查询,专利分析的服务。并且一种基于USRP的虚拟仿真系统及其方法,包括USRP,所述USRP通过以太网与主机计算机PC相连接;所述主机计算机PC中包括LabVIEW 软件 平台和NI USRP 软件套件 ,所述NI USRP软件套件在LabVIEW中增加了NI-USRP驱动程序,所述LabVIEW软件平台中的程序通过NI-USRP驱动程序与所述USRP进行交互;所述LabVIEW软件平台中的程序包括虚拟仿真程序;所述虚拟仿真程序包括虚拟仿真认知网络模 块 。有效避免了 现有技术 中缺少虚拟仿真手段、尤其是发射虚拟 信号 的办法来实现SU信号对PU信号的避让效果的 缺陷 。,下面是一种基于USRP的虚拟仿真系统及其方法专利的具体信息内容。

1.一种基于USRP的虚拟仿真系统,其特征在于,包括USRP,所述USRP通过以太网与主机计算机PC相连接;
所述主机计算机PC中包括LabVIEW软件平台和NI USRP软件套件,所述NI USRP软件套件在LabVIEW中增加了NI-USRP驱动程序,所述LabVIEW软件平台中的程序通过NI-USRP驱动程序与所述USRP进行交互;
所述LabVIEW软件平台中的程序包括虚拟仿真程序;
所述虚拟仿真程序包括虚拟仿真认知网络模
2.根据权利要求1所述的基于USRP的虚拟仿真系统,其特征在于,所述USRP为NI USRP,所述NI USRP通过千兆以太网与主机计算机PC相连接。
3.根据权利要求1所述的基于USRP的虚拟仿真系统,其特征在于,所述主机计算机PC中还能够引用MATLAB script以此来实现LabVIEW与MATLAB的联调。
4.根据权利要求1所述的基于USRP的虚拟仿真系统,其特征在于,所述NI-USRP驱动程序包括八个函数,所述八个函数分别为
1.niUSRP打开Rx会话VI,即niUSRP Open Rx Session VI;
2.niUSRP配置信号VI,即niUSRP Configure VI;
3.niUSRP初始化VI,即niUSRP Initiate VI;
4.niUSRP打开Tx会话VI,即niUSRP Open Tx Session VI;
5.niUSRP提取接收数据VI,即niUSRP Fetch Rx Data VI;
6.niUSRP发射数据VI,即niUSRP Write Tx Data VI);
7.终止VI,即niUSRP Abort VI;
8.关闭VI,即niUSRP Close Session VI;其中1-4中的VI实现配置功能,5-6中的VI实现读写功能,7-8中的VI实现结束功能。
5.根据权利要求1所述的基于USRP的虚拟仿真系统的方法,其特征在于,包括:通过LabVIEW发射虚拟信号的办法来实现SU信号对PU信号的避让效果,这种虚拟仿真的方法不再使用USRP收发信号,所述虚拟仿真程序中的虚拟仿真认知网络模块所处理的对象是一段可以控制的虚拟频谱,在虚拟频谱中,所述虚拟仿真程序中的虚拟仿真认知网络模块可以使由混合单频与波形信号函数产生PU信号随机出现,可以通过LabVIEW前面板,显示同时包含PU信号和SU信号的频谱图,检测SU对PU的避让效果,所述虚拟仿真认知网络模块中包括计算判决限模块、能量检测模块以及发射虚拟信号模块。
6.根据权利要求5所述的基于USRP的虚拟仿真系统的方法,其特征在于,所述计算判决门限模块是根据公式(1)
来推导出门限值,Q(.)是正态分布尾部概率函数,所述计算判决门限模块包括计算门限设置信息的子VI、计算判决门限的子VI、MATLAB节点的程序和外围程序,所述计算门限设置信息的子VI对同一波段的频谱数据进行10次取样,将这10组取样处理结果的中位数作为输出,所述计算门限设置信息的子VI的输入端有三个参数,所述三个参数分别为待处理的功率密度谱的波形数据,待检测数据的起始频率和待检测数据的截止频率,而所述计算门限设置信息的子VI的输出端是一个簇集合,包括两个参数,该两个参数分别是整个波形数据的数组长度的一半N/2和信号的噪声功率σ2,把该两个参数代入公式(1)就能计算出对应于虚警概率的门限值λf,而在外围程序中,设置了1个全局变量cishu,还有2个局部变量Pnz和门限设置信息;cishu用于记录所述计算门限设置信息的子VI运行的次数;门限设置信息为前10次取样计算结果的中位数,如果取样次数不到10次,门限设置信息为每次取样后的计算结果;如果取样次数超过10次,门限设置信息与取样10次门限设置信息相同,另外还设置了局部变量数组形式的变量Pnz,Pnz负责把每次外围程序的运行结果存储下来,等到对频谱数据取样10次时,外围程序计算Pnz数组中数据的中位数,所述外围程序的具体流程如下:
步骤1-1:获取全局变量cishu的值。在所述外围程序刚开始时,把cishu设置成1;
步骤1-2:判断cishu是否小于11,如果小于11,执行步骤1-3;如果不小于11,执行步骤
1-5;
步骤1-3:把频谱数据段的数据送入MATLAB节点,利用MATLAB工具处理数据,把一次运算的结果依次存到局部变量数组Pnz中,在MATLAB节点里,程序会判断是否程序已经执行了
10次,如果执行了10次,则会把10次数据的中位数作为门限设置信息的局部变量,并将该局部变量作为程序输出值;
步骤1-4:全局变量cishu自加1赋给全局变量cishu;
步骤1-5:获取步骤1-3中的门限设置信息,并将其作为程序输出值;
所述MATLAB节点的程序计算指定频谱内的噪声功率和整个波形数据的长度的一半,取
10次计算结果的中位数作为输出结果,所述MATLAB节点的输入端参数及作用如下:
所述MATLAB节点的输入端参数包括:
起始频率f1和截止频率f2,用于确定频谱范围;
全局变量cishu,用于记录所述计算门限设置信息的子VI运行的次数;
局部变量Pnz,用于存储前10次的计算结果;
功率谱密度,所述功率谱密度是波形数据格式,包括三个参数f0,df,magnitude,分别表示波形的起始频率、频率间隔以及对应频率点的功率密度;
所述MATLAB节点的输出端的参数及其含义如下:
Pn是程序运行10次得到的噪声功率的中位数;
M是波形数据长度的一半;
局部变量Pnz用于把计算结果写入数组,以待MATLAB节点的程序再次运行时可以从中读取数据;
所述MATLAB节点的程序的流程如下所示:
步骤2-1:根据公式(2)计算出起始频率和截止频率各自在数组magnitude中对应的下标n1和n2,为了确保n1和n2是整数,使用round(n)函数对公式(2)运算的结果进行四舍五入处理,其中n为n1或者n2,f为f1或者f2:
n=(f-f0)/df   (2)
步骤2-2:设置当起始频率在数组magnitude中对应的下标n1为0时,强制把该n1的值调整为1;
步骤2-3:计算n1到n2的数据点的个数N,作为指定频率段数组的长度;计算出输入数组magnitude的长度值的一半赋值给M作为输出;
步骤2-4:把波形幅度信息S中下标从n1到n2的元素值,用公式(3)进行计算,并把结果赋给新数组x,其中数组x的下标从1开始,长度为N:
Pn=10^(Pn(dB)/10)     (3)
其中Pn(dB)表示用分贝dB值表示的噪声功率;
步骤2-5:高斯噪声信号的能量在频域内的表达式为公式(4)所示:
利用高斯噪声信号的功率谱均值P(f)是一个固定值,先求特定频段的均值P(f)df,然后以此均值P(f)df乘以频谱图数据的点数,求取整个频段的噪声功率P(t);
步骤2-6:把Pn赋值给数组局部变量Pnz,数组的下标设置为程序运行的次数,也就是全局变量cishu;
步骤2-7:根据全局变量cishu判断所述MATLAB节点的程序是否运行了10次,如果全局变量cishu等于10,执行步骤2-8,否则执行步骤2-9;
步骤2-8:求取数组局部变量Pnz的中位数,把结果赋值给数组局部变量Pnz,并把Pnz作为输出,执行步骤2-9;
步骤2-9:全局变量cishu自加1,表示程序已经完成了一次计算Pn,cishu是一个全局变量,在主程序初始运行时,默认值为1;再利用公式(1)计算判决门限T,所述计算判决门限的子VI根据输入参数计算出能量检测的门限值,而其输入参数包括门限设置信息和虚警概率,所述门限设置信息从计算门限设置信息的子VI中获取,虚警概率代表把噪声信号误当作PU信号的概率,可以手动设置,默认情况下为0.1,所述计算判决门限的子VI的输出结果为检测门限值T;而所述计算判决门限的子VI包括MATLAB节点的数据处理程序,所述MATLAB节点的数据处理程序的数据处理流程如下:
步骤3-1:根据公式(1)可以计算出虚警概率pf所对应的门限值Tn,也就是λf,MATLAB节点的数据处理程序中包括qfuncinv()函数,其是MATLAB中的封装函数,能够实现Q-1()的功能;
步骤3-2:因为功率谱密度的数据的单位是分贝,所以还需要把Tn的单位转换成dB,转换公式为公式(30)所示,公式(5)中的T(dB)表示单位为dB的检测门限值:
T(dB)=10lg(Tn)     (5)
步骤3-3:把结果T(dB)作为判决门限而输出。
7.根据权利要求5所述的基于USRP的虚拟仿真系统的方法,其特征在于,所述能量检测模块是根据这段频谱上的值是否存在大于检测门限值来进行判决的,如果这段频谱上的值大于检测门限值,就存在PU信号,如果这段频谱上的值不大于检测门限值,就不存在PU信号,所述检测门限值就是所述判决门限;
另外所述能量检测模块包括用于频谱检测的VI,所述用于频谱检测的VI从输入的功率密度谱的数据中,根据门限值的大小,来判断功率密度谱中哪些频段存在PU信号,还可以根据检测结果,以及FM频偏的大小,计算FM发射信号的载波频率,最后,根据PU信号范围中的起始频率和终止频率,该用于频谱检测的VI能够计算出这一频段PU信号的功率;
所述用于频谱检测的VI中包括有用于频谱检测的MATLAB节点,在所述用于频谱检测的MATLAB节点的输入端包括一个全局变量suf,所述用于频谱检测的MATLAB节点的输出端包括另一个全局变量suf和全局变量lastpower,其中suf是magnitude数组的下标,magnitude数组也就是数组S,利用公式(6),可以根据suf计算出发射频率fw,如果是对某一载波信号进行分析,则需要在所得结果的基础上加上载波频率fz,如公式(7)所示:
fw=f0+df*suf     (6)
fw=fz+f0+df*suf   (7)
在所述用于频谱检测的MATLAB节点的输入端包括PU信号范围的两个参数f1和f2,f1和f2分别代表估算PU信号功率时,计算范围的起始频率和截止频率;
所述用于频谱检测的MATLAB节点的程序分为顺序执行的三个程序部分,所述三个程序部分包括:
a.频谱数组中找到所有可以作为SU发射频率的下标;
b.计算出SU信号的发射频率对应的下标suf;
c.计算出指定频段PU信号的功率;
所述频谱数组中找到所有可以作为SU发射频率的下标的程序部分可以从频谱数组中找到所有可以作为认知用户SU的发射频率的下标,所述频谱数组中找到所有可以作为SU发射频率的下标的程序部分判断频谱数组中的下标是否可以为认知用户SU的发射频率的下标的标准是:发射的SU信号不能对PU信号造成干扰,所述频谱数组中找到所有可以作为SU发射频率的下标的程序部分的流程如下:
步骤4-1:计算出数组S的长度N,和频偏w对应的数据点数n,并定义一个和S长度相同,初值为0的数组X;
步骤4-2:依次遍历数组S中的元素,如果元素值大于阈值T,所述阈值T也就是门限值,那么此元素对应下标处X的元素值为1,这样就找到了S中所有大于阈值的点,也就可以认为下标处X所对应的数组元素值为1处存在PU信号;
步骤4-3:令Y等于X,其中Y用于记录所有可以作为发射频率的数据点位置,令Y等于X,就保证了在X(i)等于1处,即存在PU信号的地方,不能作为发射频率对应的下标;
步骤4-4:遍历X中的每一个元素,判断在X(i)是否与X(i)之前的三个数的值是否不同,通过这种办法,找到PU信号的边界,所述PU信号的边界包括PU信号上升的边界和PU信号下降的边界,如果判断的结果不同,执行步骤4-5;如果判断的结果相同,执行步骤4-10,i为整型变量;
步骤4-5:判断i-n是否小于1,即判断i-n是否溢出,如果溢出,令k1=1,如果i-n没有溢出,令k1=i-n,这时k1的作用是用来作为找到可以作为发射频率的频段的起始边界,同样地,还包括一个终止边界,定义为k2,所述k1和k2为整型变量;
步骤4-6:判断i+n是否大于N,同样也是判断i+n是否溢出,如果溢出,令k2=N;如果没有溢出,令k2=i+n;
步骤4-7:通过步骤4-5和步骤4-6,已经找到了授权用户PU边界处左边和右边n个点的位置是k1到k2,并保证了k1,k2没有溢出,在这一步骤中,令Y中k1和k2之间的下标对应的元素值为1;
步骤4-8:如果在遍历的时候,Y数组元素的下标i=1时,即在Y数组的开始处,并且i+n没有溢出,那么令Y数组的下标1到1+n处的元素值为1;
步骤4-9:如果在遍历的时候,Y数组元素的下标i=N时,即在Y数组的终止处,并且i-n没有溢出,那么令Y数组下标N-n到N处的元素值为1;
步骤4-10:结束;
所述计算出SU信号的发射频率对应的下标suf的程序部分的流程如下:
步骤5-1:对所述计算出SU信号的发射频率对应的下标suf的程序部分的重要参数初始化,令i=1和,其中i代表发射频率下标的初始值,power代表PU信号的初始能量值;
步骤5-2:以while循环的方式来逐一判断Y(i)是否为1,如果Y(i)为1,i进行自加运算,否则所述计算出SU信号的发射频率对应的下标suf的程序部分跳出while循环,通过这种办法找到Y(i)中第一个其值不为1的下标i,已经知道该Y(i)的值为0,表示下标i处对应的频率可以作为发射频率,这样就找到了第一个可以作为SU发射频率的对应下标的值;
步骤5-3:判断suf分别加n和减n后是否在1到N范围内,如果在1到N内,说明suf值为上次发射频率对应的下标,就要根据suf值计算其左边和右边的n个数据点的能量,把结果赋值给power,然后执行步骤5-4,如果n不在1到N内,则说明suf不是上次发射频率对应的下标,直接执行步骤5-4;
步骤5-4:判断i+10是否小于N,如果是,说明存在合适的发射频率的下标,执行步骤5-
5;如果不是,说明检测到的频率下标不能作为发射频率的下标,执行步骤5-7;
步骤5-5:判断是否满足三个条件,所述三个条件为suf等于1、|suf-i|大于10和power比0.7*lastpower小,这三个条件均满足执行步骤5-6;
步骤5-6:将i赋值给全局变量suf,表示找到了新的发射频率的下标,执行步骤5-8;
步骤5-7:将1赋值给全局变量suf,表示没有找到可以作为发射频率下标的值,执行步骤5-8;
步骤5-8:将计算的power值赋给全局变量lastpower,为下一次判断SU信号是否需要避让PU信号做准备;
步骤5-9:结束;
计算出指定频段PU信号的功率的流程如下:
步骤6-1:把PU信号的能量初始化为0,并把设置的检测频率范围的边界f1和f2利用公式(27)转换成对应的下标fn1和fn2;
步骤6-2:判断fn1和fn2是否小于等于0,如果小于等于0,说明fn1或fn2不合法,就把它们的值改为1,否则,直接执行步骤6-3;
步骤6-3:判断fn1是否小于fn2,如果是,执行步骤6-4;否则执行步骤6-5,在这里,fn1对应起始频率,fn2对应截止频率;
步骤6-4;在数组S中,从下标fn1到fn2找到对应元素中大于门限值T的元素,先把这个元素通过公式(8)去掉dB单位,其中Ps(dB)是单位为dB的PU信号的功率,然后把转换后的结果递加到PU信号的功率Ps中,这样,可以求出f1到f2中存在的PU信号的能量Ps;
Ps=10^(Ps(dB)/10)      (8)
步骤6-5:结束。
8.根据权利要求5所述的基于USRP的虚拟仿真系统的方法,其特征在于,在进行虚拟仿真时,SU信号是通过所述发射虚拟信号模块中的函数生成的,所述发射虚拟信号模块中的函数为虚拟发射SU信号子VI,所述发射虚拟信号模块中的函数有三个输入端,分别是功率密度谱、发射频率和信号频偏输入端,所述发射虚拟信号模块中的函数可以在输入的功率密度谱的基础上,在SU信号发射频率处生成一个矩形波,该矩形波宽度为两个频偏,中心频率为SU的发射频率,所述发射虚拟信号模块中的函数数据处理部分是交给MATLAB来实现的,所述发射虚拟信号模块的执行流程具体如下:
步骤7-1:将输入的发射频率f利用公式(2)转换成数组对应的下标fn;根据频率间隔fn的大小,将频偏w转换成数据的点数wn;
步骤7-2:利用MATLAB中的max()函数和min()函数找到功率谱密度幅度值的最大值和最小值,并把最大值赋值给变量smax,把最小值赋值给变量smin;
步骤7-3:判断fn是否大于2,如果大于2,执行步骤7-3;否则执行第步骤7-5;
步骤7-4:利用for函数,把fn附近wn个点赋值为smax,把其余的赋值为smin,然后执行步骤7-6;
步骤7-5:把S中所有的数据点赋值为smin,然后执行步骤7-6;
步骤7-6:结束。

说明书全文

一种基于USRP的虚拟仿真系统及其方法

技术领域

[0001] 本发明涉及认知网络与5G关键技术领域,具体涉及一种基于USRP的虚拟仿真系统及其方法。

背景技术

[0002] 软件无线电是一种可以用软件操控的无线电,它兼容不同的模式,可以直接在硬件平台上实现产品的更新换代,节约了产品更新换代的成本。认知无线电是在软件无线电的基础上发展而来的,可以自适应周围环境,提高频谱利用率,并避免对主用户PU的干扰。此外,由于认知无线电在5G中的应用是新兴技术,目前的研究基本局限于理论分析,缺少虚拟仿真手段,尤其是模拟发射虚拟信号的办法来实现SU信号对PU信号的干扰避让效果。

发明内容

[0003] 为解决上述问题,本发明提供了一种基于USRP的虚拟仿真系统及其方法,有效避免了现有技术中缺少虚拟仿真手段、尤其是模拟发射虚拟信号的办法来实现SU信号对PU信号干扰避让效果的缺陷
[0004] 为了克服现有技术中的不足,本发明提供了一种基于USRP的虚拟仿真系统及其方法的解决方案,具体如下:
[0005] 一种基于USRP的虚拟仿真系统,包括USRP,所述USRP通过以太网与主机计算机PC相连接;
[0006] 所述主机计算机PC中包括LabVIEW软件平台和NI USRP软件套件,所述NI USRP软件套件在LabVIEW中增加了NI-USRP驱动程序,所述LabVIEW软件平台中的程序通过NI-USRP驱动程序与所述USRP进行交互;
[0007] 所述LabVIEW软件平台中的程序包括虚拟仿真程序;
[0008] 所述虚拟仿真程序包括虚拟仿真认知网络模
[0009] 进一步地,所述USRP为NI USRP,所述NI USRP通过千兆以太网与主机计算机PC相连接。
[0010] 进一步地,所述主机计算机PC中还能够引用MATLAB script以此来实现LabVIEW与MATLAB的联调。
[0011] 进一步地,所述NI-USRP驱动程序包括八个函数,所述八个函数分别为[0012] 9.niUSRP打开Rx会话VI,即niUSRP OpenRx Session VI;
[0013] 10.niUSRP配置信号VI,即niUSRP Configure VI;
[0014] 11.niUSRP初始化VI,即niUSRP Initiate VI;
[0015] 12.niUSRP打开Tx会话VI,即niUSRP Open Tx Session VI;
[0016] 13.niUSRP提取接收数据VI,即niUSRP Fetch Rx Data VI;
[0017] 14.niUSRP发射数据VI,即niUSRP Write Tx Data VI);
[0018] 15.终止VI,即niUSRP Abort VI;
[0019] 16.关闭VI,即niUSRP Close Session VI;其中1-4中的VI实现配置功能,5-6中的VI实现读写功能,7-8中的VI实现结束功能。
[0020] 进一步地,所述基于USRP的虚拟仿真系统的方法,包括:通过LabVIEW发射虚拟信号的办法来实现SU信号对PU信号的避让效果,这种虚拟仿真的方法不再使用USRP收发信号,所述虚拟仿真程序中的虚拟仿真认知网络模块所处理的对象是一段可以控制的虚拟频谱,在虚拟频谱中,所述虚拟仿真程序中的虚拟仿真认知网络模块可以使由混合单频与波形信号函数产生PU信号随机出现,可以通过LabVIEW前面板,显示同时包含PU信号和SU信号的频谱图,检测SU对PU的避让效果,所述虚拟仿真认知网络模块中包括计算判决限模块、能量检测模块以及发射虚拟信号模块。
[0021] 进一步地,所述计算判决门限模块是根据公式(1)
[0022]
[0023] 来推导出门限值,Q(.)是正态分布尾部概率函数,所述计算判决门限模块包括计算门限设置信息的子VI、计算判决门限的子VI、MATLAB节点的程序和外围程序,所述计算门限设置信息的子VI对同一波段的频谱数据进行10次取样,将这10组取样处理结果的中位数作为输出,所述计算门限设置信息的子VI的输入端有三个参数,所述三个参数分别为待处理的功率密度谱的波形数据,待检测数据的起始频率和待检测数据的截止频率,而所述计算门限设置信息的子VI的输出端是一个簇集合,包括两个参数,该两个参数分别是整个波形数据的数组长度的一半N/2和信号的噪声功率σ2,把该两个参数代入公式(1)就能计算出对应于虚警概率的门限值λf,而在外围程序中,设置了1个全局变量cishu,还有2个局部变量Pnz和门限设置信息;cishu用于记录所述计算门限设置信息的子VI运行的次数;门限设置信息为前10次取样计算结果的中位数,如果取样次数不到10次,门限设置信息为每次取样后的计算结果;如果取样次数超过10次,门限设置信息与取样10次门限设置信息相同,另外还设置了局部变量数组形式的变量Pnz,Pnz负责把每次外围程序的运行结果存储下来,等到对频谱数据取样10次时,外围程序计算Pnz数组中数据的中位数,所述外围程序的具体流程如下:
[0024] 步骤1-1:获取全局变量cishu的值。在所述外围程序刚开始时,把cishu设置成1;
[0025] 步骤1-2:判断cishu是否小于11,如果小于11,执行步骤1-3;如果不小于11,执行步骤1-5;
[0026] 步骤1-3:把频谱数据段的数据送入MATLAB节点,利用MATLAB工具处理数据,把一次运算的结果依次存到局部变量数组Pnz中,在MATLAB节点里,程序会判断是否程序已经执行了10次,如果执行了10次,则会把10次数据的中位数作为门限设置信息的局部变量,并将该局部变量作为程序输出值;
[0027] 步骤1-4:全局变量cishu自加1赋给全局变量cishu;
[0028] 步骤1-5:获取步骤1-3中的门限设置信息,并将其作为程序输出值;
[0029] 所述MATLAB节点的程序计算指定频谱内的噪声功率和整个波形数据的长度的一半,取10次计算结果的中位数作为输出结果,所述MATLAB节点的输入端参数及作用如下:
[0030] 所述MATLAB节点的输入端参数包括:
[0031] 起始频率f1和截止频率f2,用于确定频谱范围;
[0032] 全局变量cishu,用于记录所述计算门限设置信息的子VI运行的次数;
[0033] 局部变量Pnz,用于存储前10次的计算结果;
[0034] 功率谱密度,所述功率谱密度是波形数据格式,包括三个参数f0,df,magnitude,分别表示波形的起始频率、频率间隔以及对应频率点的功率密度;
[0035] 所述MATLAB节点的输出端的参数及其含义如下:
[0036] Pn是程序运行10次得到的噪声功率的中位数;
[0037] M是波形数据长度的一半;
[0038] 局部变量Pnz用于把计算结果写入数组,以待MATLAB节点的程序再次运行时可以从中读取数据;
[0039] 所述MATLAB节点的程序的流程如下所示:
[0040] 步骤2-1:根据公式(2)计算出起始频率和截止频率各自在数组magnitude中对应的下标n1和n2,为了确保n1和n2是整数,使用round(n)函数对公式(2)运算的结果进行四舍五入处理,其中n为n1或者n2,f为f1或者f2:
[0041] n=(f-f0)/df   (2)
[0042] 步骤2-2:设置当起始频率在数组magnitude中对应的下标n1为0时,强制把该n1的值调整为1;
[0043] 步骤2-3:计算n1到n2的数据点的个数N,作为指定频率段数组的长度;计算出输入数组magnitude的长度值的一半赋值给M作为输出;
[0044] 步骤2-4:把波形幅度信息S中下标从n1到n2的元素值,用公式(3)进行计算,并把结果赋给新数组x,其中数组x的下标从1开始,长度为N:
[0045] Pn=10^(Pn(dB)/10)   (3)
[0046] 其中Pn(dB)表示用分贝dB值表示的噪声功率;
[0047] 步骤2-5:高斯噪声信号的能量在频域内的表达式为公式(4)所示:
[0048]
[0049] 利用高斯噪声信号的功率谱均值P(f)是一个固定值,可以先求特定频段的均值P(f)df,然后以此均值P(f)df乘以频谱图数据的点数,求取整个频段的噪声功率P(t);
[0050] 步骤2-6:把Pn赋值给数组局部变量Pnz,数组的下标设置为程序运行的次数,也就是全局变量cishu;
[0051] 步骤2-7:根据全局变量cishu判断所述MATLAB节点的程序是否运行了10次,如果全局变量cishu等于10,执行步骤2-8,否则执行步骤2-9;
[0052] 步骤2-8:求取数组局部变量Pnz的中位数,把结果赋值给数组局部变量Pnz,并把Pnz作为输出,执行步骤2-9;
[0053] 步骤2-9:全局变量cishu自加1,表示程序已经完成了一次计算Pn,cishu是一个全局变量,在主程序初始运行时,默认值为1;再利用公式(1)计算判决门限T,所述计算判决门限的子VI根据输入参数计算出能量检测的门限值,而其输入参数包括门限设置信息和虚警概率,所述门限设置信息从计算门限设置信息的子VI中获取,虚警概率代表把噪声信号误当作PU信号的概率,可以手动设置,默认情况下为0.1,所述计算判决门限的子VI的输出结果为检测门限值T;而所述计算判决门限的子VI包括MATLAB节点的数据处理程序,所述MATLAB节点的数据处理程序的数据处理流程如下:
[0054] 步骤3-1:根据公式(1)可以计算出虚警概率Pf所对应的门限值Tn,也就是λf,MATLAB节点的数据处理程序中包括qfuncinv()函数,其是MATLAB中的封装函数,能够实现Q-1()的功能;
[0055] 步骤3-2:因为功率谱密度的数据的单位是分贝,所以还需要把Tn的单位转换成dB,转换公式为公式(30)所示,公式(5)中的T(dB)表示单位为dB的检测门限值:
[0056] T(dB)=10lg(Tn)   (5)
[0057] 步骤3-3:把结果T(dB)作为判决门限而输出;
[0058] 进一步地,所述能量检测模块是根据这段频谱上的值是否存在大于检测门限值来进行判决的,如果这段频谱上的值大于检测门限值,就存在PU信号,如果这段频谱上的值不大于检测门限值,就不存在PU信号,所述检测门限值就是所述判决门限;
[0059] 另外所述能量检测模块包括用于频谱检测的VI,所述用于频谱检测的VI从输入的功率密度谱的数据中,根据门限值的大小,来判断功率密度谱中哪些频段存在PU信号,还可以根据检测结果,以及FM频偏的大小,计算FM发射信号的载波频率,最后,根据PU信号范围中的起始频率和终止频率,该用于频谱检测的VI能够计算出这一频段PU信号的功率;
[0060] 所述用于频谱检测的VI中包括有用于频谱检测的MATLAB节点,在所述用于频谱检测的MATLAB节点的输入端包括一个全局变量suf,所述用于频谱检测的MATLAB节点的输出端包括另一个全局变量suf和全局变量lastpower,其中suf是magnitude数组的下标,magnitude数组也就是数组S,利用公式(6),可以根据suf计算出发射频率fw,如果是对某一载波信号进行分析,则需要在所得结果的基础上加上载波频率fz,如公式(7)所示:
[0061] fw=f0+df*suf   (6)
[0062] fw=fz+f0+df*suf   (7)
[0063] 在所述用于频谱检测的MATLAB节点的输入端包括PU信号范围的两个参数f1和f2,f1和f2分别代表估算PU信号功率时,计算范围的起始频率和截止频率;
[0064] 所述用于频谱检测的MATLAB节点的程序分为顺序执行的三个程序部分,所述三个程序部分包括:
[0065] a.频谱数组中找到所有可以作为SU发射频率的下标;
[0066] b.计算出SU信号的发射频率对应的下标suf;
[0067] c.计算出指定频段PU信号的功率;
[0068] 所述频谱数组中找到所有可以作为SU发射频率的下标的程序部分可以从频谱数组中找到所有可以作为认知用户SU的发射频率的下标,所述频谱数组中找到所有可以作为SU发射频率的下标的程序部分判断频谱数组中的下标是否可以为认知用户SU的发射频率的下标的标准是:发射的SU信号不能对PU信号造成干扰,所述频谱数组中找到所有可以作为SU发射频率的下标的程序部分的流程如下:
[0069] 步骤4-1:计算出数组S的长度N,和频偏w对应的数据点数n,并定义一个和S长度相同,初值为0的数组X;
[0070] 步骤4-2:依次遍历数组S中的元素,如果元素值大于阈值T,所述阈值T也就是门限值,那么此元素对应下标处X的元素值为1,这样就找到了S中所有大于阈值的点,也就可以认为下标处X所对应的数组元素值为1处存在PU信号;
[0071] 步骤4-3:令Y等于X,其中Y用于记录所有可以作为发射频率的数据点位置,令Y等于X,就保证了在X(i)等于1处,即存在PU信号的地方,不能作为发射频率对应的下标;
[0072] 步骤4-4:遍历X中的每一个元素,判断在X(i)是否与X(i)之前的三个数的值是否不同,通过这种办法,找到PU信号的边界,所述PU信号的边界包括PU信号上升的边界和PU信号下降的边界,如果判断的结果不同,执行步骤4-5;如果判断的结果相同,执行步骤4-10,i为整型变量;
[0073] 步骤4-5:判断i-n是否小于1,即判断i-n是否溢出,如果溢出,令k1=1,如果i-n没有溢出,令k1=i-n,这时k1的作用是用来作为找到可以作为发射频率的频段的起始边界,同样地,还包括一个终止边界,定义为k2,所述k1和k2为整型变量;
[0074] 步骤4-6:判断i+n是否大于N,同样也是判断i+n是否溢出,如果溢出,令k2=N;如果没有溢出,令k2=i+n;
[0075] 步骤4-7:通过步骤4-5和步骤4-6,已经找到了授权用户PU边界处左边和右边n个点的位置是k1到k2,并保证了k1,k2没有溢出,在这一步骤中,令Y中k1和k2之间的下标对应的元素值为1;
[0076] 步骤4-8:如果在遍历的时候,Y数组元素的下标i=1时,即在Y数组的开始处,并且i+n没有溢出,那么令Y数组的下标1到1+n处的元素值为1;
[0077] 步骤4-9:如果在遍历的时候,Y数组元素的下标i=N时,即在Y数组的终止处,并且i-n没有溢出,那么令Y数组下标N-n到N处的元素值为1;
[0078] 步骤4-10:结束;
[0079] 所述计算出SU信号的发射频率对应的下标suf的程序部分的流程如下:
[0080] 步骤5-1:对所述计算出SU信号的发射频率对应的下标suf的程序部分的重要参数初始化,令i=1和,其中i代表发射频率下标的初始值,power代表PU信号的初始能量值;
[0081] 步骤5-2:以while循环的方式来逐一判断Y(i)是否为1,如果Y(i)为1,i进行自加运算,否则所述计算出SU信号的发射频率对应的下标suf的程序部分跳出while循环,通过这种办法找到Y(i)中第一个其值不为1的下标i,已经知道该Y(i)的值为0,表示下标i处对应的频率可以作为发射频率,这样就找到了第一个可以作为SU发射频率的对应下标的值;
[0082] 步骤5-3:判断suf分别加n和减n后是否在1到N范围内,如果在1到N内,说明suf值为上次发射频率对应的下标,就要根据suf值计算其左边和右边的n个数据点的能量,把结果赋值给power,然后执行步骤5-4,如果n不在1到N内,则说明suf不是上次发射频率对应的下标,直接执行步骤5-4;
[0083] 步骤5-4:判断i+10是否小于N,如果是,说明存在合适的发射频率的下标,执行步骤5-5;如果不是,说明检测到的频率下标不能作为发射频率的下标,执行步骤5-7;
[0084] 步骤5-5:判断是否满足三个条件,所述三个条件为suf等于1、|suf-i|大于10和power比0.7*lastpower小,这三个条件均满足执行步骤5-6;
[0085] 步骤5-6:将i赋值给全局变量suf,表示找到了新的发射频率的下标,执行步骤5-8;
[0086] 步骤5-7:将1赋值给全局变量suf,表示没有找到可以作为发射频率下标的值,执行步骤5-8;
[0087] 步骤5-8:将计算的power值赋给全局变量lastpower,为下一次判断SU信号是否需要避让PU信号做准备;
[0088] 步骤5-9:结束;
[0089] 计算出指定频段PU信号的功率的流程如下:
[0090] 步骤6-1:把PU信号的能量初始化为0,并把设置的检测频率范围的边界f1和f2利用公式(27)转换成对应的下标fn1和fn2;
[0091] 步骤6-2:判断fn1和fn2是否小于等于0,如果小于等于0,说明fn1或fn2不合法,就把它们的值改为1,否则,直接执行步骤6-3;
[0092] 步骤6-3:判断fn1是否小于fn2,如果是,执行步骤6-4;否则执行步骤6-5,在这里,fn1对应起始频率,fn2对应截止频率;
[0093] 步骤6-4;在数组S中,从下标fn1到fn2找到对应元素中大于门限值T的元素,先把这个元素通过公式(8)去掉dB单位,其中Ps(dB)是单位为dB的PU信号的功率,然后把转换后的结果递加到PU信号的功率Ps中,这样,可以求出f1到f2中存在的PU信号的能量Ps;
[0094] Ps=10^(Ps(dB)/10)   (8)
[0095] 步骤6-5:结束。
[0096] 进一步地,在进行虚拟仿真时,SU信号是通过所述发射虚拟信号模块中的函数生成的,所述发射虚拟信号模块中的函数为虚拟发射SU信号子VI,所述发射虚拟信号模块中的函数有三个输入端,分别是功率密度谱、发射频率和信号频偏输入端,所述发射虚拟信号模块中的函数可以在输入的功率密度谱的基础上,在SU信号发射频率处生成一个矩形波,该矩形波宽度为两个频偏,中心频率为SU的发射频率,所述发射虚拟信号模块中的函数数据处理部分是交给MATLAB来实现的,所述发射虚拟信号模块的执行流程具体如下:
[0097] 步骤7-1:将输入的发射频率f利用公式(2)转换成数组对应的下标fn;根据频率间隔fn的大小,将频偏w转换成数据的点数wn;
[0098] 步骤7-2:利用MATLAB中的max()函数和min()函数找到功率谱密度幅度值的最大值和最小值,并把最大值赋值给变量smax,把最小值赋值给变量smin;
[0099] 步骤7-3:判断fn是否大于2,如果大于2,执行步骤7-3;否则执行第步骤7-5;
[0100] 步骤7-4:利用for函数,把fn附近wn个点赋值为smax,把其余的赋值为smin,然后执行步骤7-6;
[0101] 步骤7-5:把S中所有的数据点赋值为smin,然后执行步骤7-6;
[0102] 步骤7-6:结束。
[0103] 本发明的技术效果为:通过LabVIEW发射虚拟信号的办法来实现SU信号对PU信号的避让效果,这种虚拟仿真的方法不再使用USRP收发信号,所述虚拟仿真程序中的虚拟仿真认知网络模块所处理的对象是一段可以控制的虚拟频谱。附图说明
[0104] 图1为本发明的虚拟仿真认知网络模块的组成示意图。
[0105] 图2为本发明的外围程序的流程图
[0106] 图3为本发明的MATLAB节点的程序流程图。
[0107] 图4为本发明的所述用于频谱检测的MATLAB节点的程序的一个部分的流程图。
[0108] 图5为本发明的所述用于频谱检测的MATLAB节点的程序的另一个部分的流程图。
[0109] 图6为本发明的所述用于频谱检测的MATLAB节点的程序的还有一个部分的流程图。
[0110] 图7为本发明的虚拟发射信号流程图。
[0111] 图8为本发明的具体实施方式中的虚拟认知网络程序前面板示意图。
[0112] 图9为本发明的具体实施方式中的当噪声有效值为0.02,0.04,0.06,0.08时,PU信号的频谱图,其中图9(a)表示噪声有效值为0.02时的频谱图,图9(b)表示噪声有效值为0.04时的频谱图,图9(c)表示噪声有效值为0.06时的频谱图,图9(d)表示噪声有效值为
0.08时的频谱图。
[0113] 图10为本发明的具体实施方式中的虚拟PU信号频谱图,其中图10(a)为800HzPU信号存在的频谱图,图10(b)为800HzPU信号不存在的频谱图。
[0114] 图11为对图10进行能量检测得到的检测结果图。
[0115] 图12为本发明的具体实施方式中根据频谱检测结果计算SU发射频率的结果图,其中图12(a)为800HzPU存在时计算SU载频的结果图,图12(b)为800HzPU不存在时计算SU载频的结果图。
[0116] 图13为本发明的具体实施方式中SU对PU避让的实验效果图,其中图13(a)为 800HzPU信号不存在时的PU,SU的频谱图,图13(b)为 800HzPU信号存在时的PU,SU的频谱图。

具体实施方式

[0117] 下面将结合实施例对本发明做进一步地说明。
[0118] 如图1-图7所示,本实施例的基于USRP的虚拟仿真系统,包括USRP,所述USRP通过以太网与主机计算机PC相连接;这样在接收信号时,USRP负责把空间的无线信号转换成数字信号传输给主机计算机PC,然后主机计算机PC负责处理这些数字信号,处理这些数字信号的方式可以为解调或者解码;在发送信号时,主机计算机PC先对数字信号进行处理,处理这些数字信号的方式可以为编码或调制,然后把处理好的数字信号传输给USRP,USRP再把这些数字信号转换成模拟信号,通过天线发送到空间中。
[0119] 所述主机计算机PC中包括LabVIEW软件平台和NI USRP软件套件,所述NI USRP软件套件在LabVIEW中增加了NI-USRP驱动程序,所述LabVIEW软件平台中的程序通过NI-USRP驱动程序与所述USRP进行交互;
[0120] 所述LabVIEW软件平台中的程序包括虚拟仿真程序;
[0121] 所述虚拟仿真程序包括虚拟仿真认知网络模块。
[0122] 所述USRP为NI USRP,所述NI USRP通过千兆以太网与主机计算机PC相连接。
[0123] 所述主机计算机PC中还能够引用MATLAB script以此来实现LabVIEW与MATLAB的联调。在LabVIEW程序设计中如果数据比较复杂,可以把它交给MATLAB来处理。
[0124] 所述NI-USRP驱动程序包括八个函数,所述八个函数分别为
[0125] 17.niUSRP打开Rx会话VI,即niUSRP Open Rx Session VI;
[0126] 18.niUSRP配置信号VI,即niUSRP Configure VI;
[0127] 19.niUSRP初始化VI,即niUSRP Initiate VI;
[0128] 20.niUSRP打开Tx会话VI,即niUSRP Open Tx Session VI;
[0129] 21.niUSRP提取接收数据VI,即niUSRP Fetch Rx Data VI;
[0130] 22.niUSRP发射数据VI,即niUSRP Write Tx Data VI);
[0131] 23.终止VI,即niUSRP Abort VI;
[0132] 24.关闭VI,即niUSRP Close Session VI;其中1-4中的VI实现配置功能,5-6中的VI实现读写功能,7-8中的VI实现结束功能。
[0133] 所述niUSRP Open Rx Session VI用来启动接收射频信号
[0134] 所述niUSRP Configure VI用来与接收会话Rx或发送会话Tx一起使用。通过这个VI,可以手动设置发送或接收数据的IQ率,载频,增益这样的信息。但是,并不是所有手动设置的IQ率、频率以及增益都是有效的。如果输入的参数值并非有效,函数会把输入值强制转化成一个有效值。
[0135] 所述niUSRP Initiate VI用来在niUSRP配置VI之后使用,它可以告诉USRP参数配置已经完成,可以接收数据了。
[0136] 所述niUSRP Open Tx Session VI用来启动USRP发射射频信号。
[0137] 所述niUSRP Fetch Rx Data VI用于提取USRP接收的数据。其可以把提取的数据进行解调或解码这样的数字化处理。
[0138] 所述niUSRP Write Tx Data VI用来控制USRP发送IQ数据。
[0139] 所述niUSRP Abort VI给USRP传递停止命令。USRP接收停止命令后,不再接收或者发送数据。
[0140] 所述niUSRP Close Session VI用来关闭正在运行的Rx或者Tx部分,并释放它们所用的内存。niUSRP Close Session VI和niUSRP Abort VI不同之处在于:如果调用了前者,如要重新使用USRP,需要重新运行程序;如果调用了后者,可以在不重新运行程序的情况下,重新使用USRP。
[0141] 所述基于USRP的虚拟仿真系统的方法,包括:通过LabVIEW发射虚拟信号的办法来实现SU信号对PU信号的避让效果,这种虚拟仿真的方法不再使用USRP收发信号,所述虚拟仿真程序中的虚拟仿真认知网络模块所处理的对象是一段可以控制的虚拟频谱,在虚拟频谱中,所述虚拟仿真程序中的虚拟仿真认知网络模块可以使由混合单频与波形信号函数产生PU信号随机出现,克服了用一台USRP无法控制PU信号的缺点。可以通过LabVIEW前面板,显示同时包含PU信号和SU信号的频谱图,检测SU对PU的避让效果,所述虚拟仿真认知网络模块中包括计算判决门限模块、能量检测模块以及发射虚拟信号模块。所述虚拟仿真认知网络模块的程序模块组成如图1所示。
[0142] 所述计算判决门限模块是在运行能量检测模块进行能量检测之前,根据公式(1)[0143]
[0144] 来推导出门限值需要有一段信号的长度、信噪比以及噪声功率。这些信息可以从参考频谱上获取,下面分析如何从一段参考频谱上得到这些计算判决门限的必要信息,Q(.)是正态分布尾部概率函数,所述计算判决门限模块包括计算门限设置信息的子VI、计算判决门限的子VI、MATLAB节点的程序和外围程序,为了保证计算结果的可靠性,所述计算门限设置信息的子VI对同一波段的频谱数据进行10次取样,将这10组取样处理结果的中位数作为输出,所述计算门限设置信息的子VI的输入端有三个参数,所述三个参数分别为待处理的功率密度谱的波形数据,待检测数据的起始频率和待检测数据的截止频率,而所述计算门限设置信息的子VI的输出端是一个簇集合,包括两个参数,该两个参数分别是整个波形数据的数组长度的一半N/2和信号的噪声功率σ2,把该两个参数代入公式(1)就能计算出对应于虚警概率的门限值λf,而在外围程序中,设置了1个全局变量cishu,还有2个局部变量Pnz和门限设置信息;cishu用于记录所述计算门限设置信息的子VI运行的次数;门限设置信息为前10次取样计算结果的中位数,如果取样次数不到10次,门限设置信息为每次取样后的计算结果;如果取样次数超过10次,门限设置信息与取样10次门限设置信息相同,另外还设置了局部变量数组形式的变量Pnz,Pnz负责把每次外围程序的运行结果存储下来,等到对频谱数据取样10次时,外围程序计算Pnz数组中数据的中位数,如图2所示,所述外围程序的具体流程如下:
[0145] 步骤1-1:获取全局变量cishu的值。在所述外围程序刚开始时,把cishu设置成1;
[0146] 步骤1-2:判断cishu是否小于11,如果小于11,执行步骤1-3;如果不小于11,执行步骤1-5;
[0147] 步骤1-3:把频谱数据段的数据送入MATLAB节点,利用MATLAB工具处理数据,把一次运算的结果依次存到局部变量数组Pnz中,在MATLAB节点里,程序会判断是否程序已经执行了10次,如果执行了10次,则会把10次数据的中位数作为门限设置信息的局部变量,并将该局部变量作为程序输出值;
[0148] 步骤1-4:全局变量cishu自加1赋给全局变量cishu;
[0149] 步骤1-5:获取步骤1-3中的门限设置信息,并将其作为程序输出值;
[0150] 所述MATLAB节点的程序计算指定频谱内的噪声功率和整个波形数据的长度的一半,取10次计算结果的中位数作为输出结果,所述MATLAB节点的输入端参数及作用如下:
[0151] 所述MATLAB节点的输入端参数包括:
[0152] 起始频率f1和截止频率f2,用于确定频谱范围;
[0153] 全局变量cishu,用于记录所述计算门限设置信息的子VI运行的次数;
[0154] 局部变量Pnz,用于存储前10次的计算结果;
[0155] 功率谱密度,所述功率谱密度是波形数据格式,包括三个参数f0,df,magnitude,分别表示波形的起始频率、频率间隔以及对应频率点的功率密度;
[0156] 所述MATLAB节点的输出端的参数及其含义如下:
[0157] Pn是程序运行10次得到的噪声功率的中位数;
[0158] M是波形数据长度的一半;
[0159] 局部变量Pnz用于把计算结果写入数组,以待MATLAB节点的程序再次运行时可以从中读取数据;
[0160] 如图3所示,所述MATLAB节点的程序的流程如下所示:
[0161] 步骤2-1:根据公式(2)计算出起始频率和截止频率各自在数组magnitude中对应的下标n1和n2,为了确保n1和n2是整数,使用round(n)函数对公式(2)运算的结果进行四舍五入处理,其中n为n1或者n2,f为f1或者f2:
[0162] n=(f-f0)/df   (2)
[0163] 步骤2-2:为了防止起始频率在数组magnitude中对应的下标n1为0时,程序出错,设置当起始频率在数组magnitude中对应的下标n1为0时,强制把该n1的值调整为1;
[0164] 步骤2-3:计算n1到n2的数据点的个数N,作为指定频率段数组的长度;计算出输入数组magnitude的长度值的一半赋值给M作为输出;
[0165] 步骤2-4:把波形幅度信息S中下标从n1到n2的元素值,用公式(3)进行计算,并把结果赋给新数组x,其中数组x的下标从1开始,长度为N:
[0166] Pn=10^(Pn(dB)/10)   (3)
[0167] 其中Pn(dB)表示用分贝dB值表示的噪声功率;在计算检测门限的程序中,要用到噪声功率Pn的实际值,可用公式(3)把分贝值转换为实际值。
[0168] 步骤2-5:高斯噪声信号的能量在频域内的表达式为公式(4)所示:
[0169]
[0170] 由于在某个频段存在PU信号,不可能对整个频段的功率值叠加来求噪声功率。利用高斯噪声信号的功率谱均值P(f)是一个固定值,可以先求特定频段的均值P(f)df,然后以此均值P(f)df乘以频谱图数据的点数,求取整个频段的噪声功率P(t);
[0171] 进行到步骤2-5,程序已经完成了对所需参数M,Pn的计算,但是为了数据的准确性,下面的步骤考虑从多组数据中计算中位数作为输出。
[0172] 步骤2-6:把Pn赋值给数组局部变量Pnz,数组的下标设置为程序运行的次数,也就是全局变量cishu;
[0173] 步骤2-7:根据全局变量cishu判断所述MATLAB节点的程序是否运行了10次,如果全局变量cishu等于10,执行步骤2-8,否则执行步骤2-9;
[0174] 步骤2-8:求取数组局部变量Pnz的中位数,把结果赋值给数组局部变量Pnz,并把Pnz作为输出,执行步骤2-9;
[0175] 步骤2-9:全局变量cishu自加1,表示程序已经完成了一次计算Pn,cishu是一个全局变量,在主程序初始运行时,默认值为1;这样保证了程序的输出参考了多组值,可以减小突然的脉冲对结果的干扰。
[0176] 也就是通过门限参数设置子VI可以得到公式(1)中等号右边的两个未知参数(PU信号的噪声功率Pn和波形数据长度值的一半M),下面再利用公式(1)计算判决门限T,所述计算判决门限的子VI可以根据输入参数计算出能量检测的门限值,而其输入参数包括门限设置信息和虚警概率,所述门限设置信息可以从计算门限设置信息的子VI中获取,虚警概率代表把噪声信号误当作PU信号的概率,可以手动设置,默认情况下为0.1,所述计算判决门限的子VI的输出结果为检测门限值T;具体实现主要通过MATLAB节点来进行数据处理,下面分析MATLAB节点的数据处理程序。而所述计算判决门限的子VI包括MATLAB节点的数据处理程序,所述MATLAB节点的数据处理程序的数据处理流程如下:
[0177] 步骤3-1:根据公式(1)可以计算出虚警概率pf所对应的门限值Tn,也就是λf,MATLAB节点的数据处理程序中包括qfuncinv()函数,其是MATLAB中的封装函数,能够实现Q-1()的功能;
[0178] 步骤3-2:因为功率谱密度的数据的单位是分贝,所以还需要把Tn的单位转换成dB,转换公式为公式(30)所示,公式(5)中的T(dB)表示单位为dB的检测门限值:
[0179] T(dB)=10lg(Tn)   (5)
[0180] 步骤3-3:把结果T(dB)作为判决门限而输出;
[0181] 这样就完成了计算判决门限的设计。
[0182] 所述能量检测模块是根据这段频谱上的值是否存在大于检测门限值来进行判决的,如果这段频谱上的值大于检测门限值,就存在PU信号,如果这段频谱上的值不大于检测门限值,就不存在PU信号,所述检测门限值就是所述判决门限;因而说,找到一个合适的检测门限,对检测结果有很大的作用。如果门限值太低,就会使虚警概率Pf太大,把噪声信号误认为是PU信号;如果门限值太高,就会使检测概率Pd变小,这样即使频谱上存在PU信号,也不一定能判决出来,出现漏检现象。因此,需要找到一个合适能量检测门限值λ(在程序中以T或者Tn表示门限值λ),以使检测概率与虚警概率折中。
[0183] 另外所述能量检测模块包括用于频谱检测的VI,所述用于频谱检测的VI可以从输入的功率密度谱的数据中,根据门限值的大小,来判断功率密度谱中哪些频段存在PU信号,还可以根据检测结果,以及FM频偏的大小,计算FM发射信号的载波频率,最后,根据PU信号范围中的起始频率和终止频率,该用于频谱检测的VI能够计算出这一频段PU信号的功率;
[0184] 所述用于频谱检测的VI中包括有用于频谱检测的MATLAB节点,在所述用于频谱检测的MATLAB节点的输入端包括一个全局变量suf,所述用于频谱检测的MATLAB节点的输出端包括另一个全局变量suf和全局变量lastpower,其中suf是magnitude数组的下标,magnitude数组也就是数组S,利用公式(6),可以根据suf计算出发射频率fw(换一个度,也可以把suf理解为发射频率fw在magnitude数组中所对应的下标),如果是对某一载波信号进行分析,则需要在所得结果的基础上加上载波频率fz,如公式(7)所示:
[0185] fw=f0+df*suf   (6)
[0186] fw=fz+f0+df*suf   (7)
[0187] 在所述用于频谱检测的MATLAB节点的输入端包括PU信号范围的两个参数f1和f2,f1和f2分别代表估算PU信号功率时,计算范围的起始频率和截止频率;
[0188] 所述用于频谱检测的MATLAB节点的程序分为顺序执行的三个程序部分,所述三个程序部分包括:
[0189] a.频谱数组中找到所有可以作为SU发射频率的下标;
[0190] b.计算出SU信号的发射频率对应的下标suf;
[0191] c.计算出指定频段PU信号的功率;
[0192] 所述频谱数组中找到所有可以作为SU发射频率的下标的程序部分可以从频谱数组中找到所有可以作为认知用户SU的发射频率的下标,所述频谱数组中找到所有可以作为SU发射频率的下标的程序部分判断频谱数组中的下标是否可以为认知用户SU的发射频率的下标的标准是:发射的SU信号不能对PU信号造成干扰,所述频谱数组中找到所有可以作为SU发射频率的下标的程序部分的流程如下:
[0193] 步骤4-1:计算出数组S的长度N,和频偏w对应的数据点数n,并定义一个和S长度相同,初值为0的数组X;
[0194] 步骤4-2:依次遍历数组S中的元素,如果元素值大于阈值T,所述阈值T也就是门限值,那么此元素对应下标处X的元素值为1,这样就找到了S中所有大于阈值的点,也就可以认为下标处X所对应的数组元素值为1处存在PU信号;
[0195] 步骤4-3:令Y等于X,其中Y用于记录所有可以作为发射频率的数据点位置,令Y等于X,就保证了在X(i)等于1处,即存在PU信号的地方,不能作为发射频率对应的下标,这样,就只要考虑在PU边界左右n各点处和数组Y的边界附近不可以作为发射频率对应的下标的情况了;
[0196] 步骤4-4:遍历X中的每一个元素,判断在X(i)是否与X(i)之前的三个数的值是否不同,通过这种办法,找到PU信号的边界,所述PU信号的边界包括PU信号上升的边界和PU信号下降的边界,如果判断的结果不同,执行步骤4-5;如果判断的结果相同,执行步骤4-10,i为整型变量;
[0197] 步骤4-5:判断i-n是否小于1,即判断i-n是否溢出,如果溢出,令k1=1,如果i-n没有溢出,令k1=i-n,这时k1的作用是用来作为找到可以作为发射频率的频段的起始边界,同样地,还包括一个终止边界,定义为k2,所述k1和k2为整型变量,k2在后面的步骤会出现;
[0198] 步骤4-6:判断i+n是否大于N,同样也是判断i+n是否溢出,如果溢出,令k2=N;如果没有溢出,令k2=i+n;
[0199] 步骤4-7:通过步骤4-5和步骤4-6,已经找到了授权用户PU边界处左边和右边n个点的位置是k1到k2,并保证了k1,k2没有溢出,在这一步骤中,令Y中k1和k2之间的下标对应的元素值为1;保证边界左右n个点的下标不能作为发射频率的下标。
[0200] 步骤4-8:如果在遍历的时候,Y数组元素的下标i=1时,即在Y数组的开始处,并且i+n没有溢出,那么令Y数组的下标1到1+n处的元素值为1;
[0201] 步骤4-9:如果在遍历的时候,Y数组元素的下标i=N时,即在Y数组的终止处,并且i-n没有溢出,那么令Y数组下标N-n到N处的元素值为1;这样也就保证了在数组Y的端点处不能作为发射频率的下标。经过对Y的处理后,剩余的Y(i)=0的下标,可以作为发射频率的下标。
[0202] 步骤4-10:结束;
[0203] 在通过所述频谱数组中找到所有可以作为SU发射频率的下标的程序部分找到了所有认知用户SU的发射频率的下标后,就需要从中选择一个认知用户SU的发射频率的下标。这时,有两点需要考虑:一点是认知用户SU的发射频率的改变不能太频繁,如果PU信号只是在边界处频繁抖动,不需要改变认知用户SU的发射频率对应的下标;另一点是,假设已经找到了认知用户SU的发射频率对应的下标,并且认知用户SU已经在根据这个下标转换后的频率处发射信号,除非在认知用户SU的发射频率的频段内出现PU信号,否则也不能改变SU发射频率对应的下标。
[0204] 所述计算出SU信号的发射频率对应的下标suf的程序部分的流程如下:
[0205] 步骤5-1:对所述计算出SU信号的发射频率对应的下标suf的程序部分的重要参数初始化,令i=1和power=0,为下面计算发射频率对应的下标以及PU信号的能量做准备,其中i代表发射频率下标的初始值,power代表PU信号的初始能量值;
[0206] 步骤5-2:以while循环的方式来逐一判断Y(i)是否为1,如果Y(i)为1,i进行自加运算,否则所述计算出SU信号的发射频率对应的下标suf的程序部分跳出while循环,通过这种办法找到Y(i)中第一个其值不为1的下标i,已经知道该Y(i)的值为0,表示下标i处对应的频率可以作为发射频率,这样就找到了第一个可以作为SU发射频率的对应下标的值;
[0207] 步骤5-3:通过步骤5-2,虽然找到了SU发射频率的对应下标值,但这个值不一定要转换成发射频率。在这一步骤,判断suf分别加n和减n后是否在1到N范围内,如果在1到N内,说明suf值为上次发射频率对应的下标,就要根据suf值计算其左边和右边的n个数据点的能量,把结果赋值给power,然后执行步骤5-4,如果n不在1到N内,则说明suf不是上次发射频率对应的下标,直接执行步骤5-4;
[0208] 步骤5-4:判断i+10是否小于N,如果是,说明存在合适的发射频率的下标,执行步骤5-5;如果不是,说明检测到的频率下标不能作为发射频率的下标,执行步骤5-7;
[0209] 步骤5-5:判断是否满足三个条件,所述三个条件为suf等于1、|suf-i|大于10和power比0.7*lastpower小,这三个条件均满足执行步骤5-6;其中,第一个条件suf等于1的意义是上一次没有找到合适的发射频率或者是上次没有发射信号;第二个条件|suf-i|大于10的意义是i值的变化相比suf而言,超过了10单位,这样是为了给检测信号10个单位的抖动空间,如果上次信号的边界下标变化不超过10个单位就不需要变化;第三个条件power比0.7*lastpower的意义是,当一个SU信号已经发射,如果此时在SU信号的频带上PU发射信号,SU信号就需要避让,实际上是根据SU信号所在频段内的信号能量是否突增来判断授权用户是否开始占用此频段。
[0210] 步骤5-6:将i赋值给全局变量suf,表示找到了新的发射频率的下标,执行步骤5-8;
[0211] 步骤5-7:将1赋值给全局变量suf,表示没有找到可以作为发射频率下标的值,执行步骤5-8;
[0212] 步骤5-8:将计算的power值赋给全局变量lastpower,为下一次判断SU信号是否需要避让PU信号做准备;
[0213] 步骤5-9:结束;
[0214] 至此,计算出SU信号的发射频率对应的下标suf的程序部分找到了发射频率对应的下标。
[0215] 计算出指定频段PU信号的功率的流程如下:
[0216] 步骤6-1:把PU信号的能量初始化为0,并把设置的检测频率范围的边界f1和f2利用公式(27)转换成对应的下标fn1和fn2;
[0217] 步骤6-2:判断fn1和fn2是否小于等于0,如果小于等于0,说明fn1或fn2不合法,就把它们的值改为1,否则,直接执行步骤6-3;
[0218] 步骤6-3:判断fn1是否小于fn2,如果是,执行步骤6-4;否则执行步骤6-5,在这里,fn1对应起始频率,fn2对应截止频率,必须fn1大于fn2才有意义;
[0219] 步骤6-4;在数组S中,从下标fn1到fn2找到对应元素中大于门限值T的元素,先把这个元素通过公式(8)去掉dB单位,其中Ps(dB)是单位为dB的PU信号的功率,然后把转换后的结果递加到PU信号的功率Ps中,这样,可以求出f1到f2中存在的PU信号的能量Ps;
[0220] Ps=10^(Ps(dB)/10)   (8)
[0221] 步骤6-5:结束。
[0222] 到这里,程序完成了对PU信号功率的估算,结合前面对噪声功率Pn的估算,利用公式(9)可以计算出PU信号的信噪比SNR。
[0223] SNR=10lg(Ps/Pn)   (9)
[0224] 在进行虚拟仿真时,SU信号是通过所述发射虚拟信号模块中的函数生成的,所述发射虚拟信号模块中的函数为虚拟发射SU信号子VI,所述发射虚拟信号模块中的函数有三个输入端,分别是功率密度谱、发射频率和信号频偏输入端,所述发射虚拟信号模块中的函数可以在输入的功率密度谱的基础上,在SU信号发射频率处生成一个矩形波,该矩形波宽度为两个频偏,中心频率为SU的发射频率,所述发射虚拟信号模块中的函数数据处理部分是交给MATLAB来实现的,所述发射虚拟信号模块的执行流程具体如下:
[0225] 步骤7-1:将输入的发射频率f利用公式(2)转换成数组对应的下标fn;根据频率间隔fn的大小,将频偏w转换成数据的点数wn;
[0226] 步骤7-2:利用MATLAB中的max()函数和min()函数找到功率谱密度幅度值的最大值和最小值,并把最大值赋值给变量smax,把最小值赋值给变量smin;
[0227] 步骤7-3:判断fn是否大于2,如果大于2,执行步骤7-3;否则执行第步骤7-5;这里,判断fn是否大于2,是为了判断频谱检测到的发射频率f是否在检测频带范围内,如果不在检测频带范围内,说明发射频率无效,不能发射SU信号。
[0228] 步骤7-4:利用for函数,把fn附近wn个点赋值为smax,把其余的赋值为smin,然后执行步骤7-6;
[0229] 步骤7-5:把S中所有的数据点赋值为smin,然后执行步骤7-6;
[0230] 步骤7-6:结束。
[0231] 在函数运行时,SU信号可以根据频谱信号幅度值的变化范围自动调节smax,smin。这样产生的SU虚拟发射信号能够适应不同的频谱图。
[0232] 所述虚拟仿真系统及其方法除了具有感知频谱的能外,还可以实现认知功能,即当PU信号不占用某一频带时,SU信号可以占用这段频带,而当PU信号需要占用这段频带时,SU信号会主动避让PU信号,接下来就首先对噪声的估算结果进行验证得到噪声估算值比理论值偏大,但误差在可接受范围内的结论;其次,对获取的门限值进行了验证,得到门限值可以较为准确区分出PU信号和噪声信号的结论;然后,对指定频谱的能量检测进行了验证,得到能量检测程序可以较为准确地找出PU信号所在位置的结论;再然后,对SU信号的发射频率的合理性进行了验证,得到在该发射频率处发射SU信号可以不对PU信号造成干扰的结论;最后,对SU对PU避让的效果进行了验证,得到SU信号可以主动避让PU信号的结论,具体过程如下:
[0233] 在虚拟频谱中,PU信号以单频信号的形式存在,操作者可以手动设置PU信号的频率,幅度,相位参数,以实现对不同虚拟信号的仿真,图8为虚拟认知网络程序的前面板。默认情况下,程序的采样率为10000Hz,主机计算机PC从缓存数据中接收数据的速率为1000Hz。噪声检测范围为0~500Hz,在这一范围内,不应存在PU信号。程序设置噪声功率的有效值为0.1,设置三个PU信号的频率分别为800Hz,2000Hz,1500Hz,其中800Hz信号幅度值随机为0或0.5。
[0234] 首先验证程序对门限的设置是否正确。门限值是根据对应公式计算得到的,其中虚警概率的值规定为0.1,数据的长度N通过length函数获取。但是噪声功率σ2是通过取样估计得到的,有必要先判断噪声功率是否与理论值接近。
[0235] 在程序中,噪声通过函数“混合单频与波形信号”添加,输入的参数是噪声的有效值。由于添加的噪声是高斯噪声,其均值为0,可以认为噪声信号有效值的平方与噪声信号的方差或者噪声信号的功率相同。在估算噪声功率时,程序取10组计算结果的中位数作为输出值,输出结果具有较好的稳定性。进行实验操作,可以得到表1的理论噪声功率与实际噪声功率的比较结果。
[0236] 表1
[0237]
[0238]
[0239] 通过表1可以看出,理论噪声功率比通过采样估算得到的噪声功率要大一些。但是,两者的差值与噪声估算值在同一个数量级上,可以近似认为通过估算得到了比较准确的噪声功率。
[0240] 对噪声功率σ2进行估算后,可以直接利用对应公式得到门限值。图9给出了当噪声有效值为0.02,0.04,0.06,0.08时,PU信号的频谱图。
[0241] 通过表1可以看到当噪声的有效值是0.02,0.04,0.06,0.08时,计算得到的门限值分别为-31.5853dB,-25.9251dB,-22.3595dB,-19.9232dB。在图9纵坐标上找到这些对应的门限值,可以看出,这些门限值远远地超过了噪声的最大值。这样在进行能量检测时,可以去除噪声对PU信号的影响。但是,计算得到的门限值稍偏大,这要求PU信号的发射功率要大一些。
[0242] 以图9(a)为例,噪声功率徘徊在-60dB上下,最大值在-50dB上下,计算得到的门限值是-31.5853dB。这样的门限值可以保证噪声信号不会被误认为PU信号。但是只有PU信号的最小功率大于-31.5853dB时,才能保证PU信号能够被检测出来。也就是说接收端的PU信号的最小值必须要比噪声信号大18dB左右,检测效果才会比较好。
[0243] 得到门限值之后,程序下一步会根据门限值对频谱进行能量检测。在程序中,如果在某一频段上存在PU信号,那么检测结果中这一频段的幅度值为1,否则为0。可以根据检测结果是否为1来判断是否存在PU信号。
[0244] 程序发送3路单频信号作为虚拟的PU信号,这3路信号的初始频率值分别为800Hz,2000Hz,1500Hz,初始幅度值分别为0.5,0.5,1。第1路800Hz的信号幅度值随机为0.5或0。通过这种办法,可以模拟这一路的PU信号随机存在或者不存在。这3路信号的频谱图如图10所示。
[0245] 利用能量检测程序对图10进行能量检测,得到图11所示的检测结果。
[0246] 根据图11(a),程序检测出在800Hz,1500Hz,2000Hz处存在PU信号;根据图11(b),程序检测出在1500Hz,2000Hz处,存在PU信号。所以,可以看出能量检测程序具有较好的检测效果,不仅能够检测到一直存在的PU信号,还能够检测到800HzPU信号是否存在。
[0247] 完成了频谱的检测后,需要验证程序是否能够根据频谱检测的结果,从频谱中准确地找到作为SU信号的载波频率。设计要求在发射SU信号时不能对PU信号造成干扰,这一点从频谱上来说就是SU信号的频谱不能与PU信号的频谱产生混叠。所以在图10中检测到的PU信号存在的地方,以及PU信号边界左右为频偏长度的频带都不能作为SU信号的载波频率。
[0248] 在图12中,当频谱图的幅度值为1时,表示该频率处不能作为SU信号的载波频率;当频谱图的幅度值为0时,表示该频率处可以作为SU信号的载波频率。
[0249] 根据图10(a),分析SU的发射频率时,理想的情况如下:当800Hz的PU信号存在时,PU信号所占用的频带(很小,可以忽略),以及PU边界外500Hz频带,也就是300Hz到1300Hz的频带都不能作为SU信号的发射频率。然后考虑到1500Hz,2000Hz的PU信号,结合对800Hz信号的判断结果,可以得到300Hz到2500Hz的频带不能作为SU信号的载波频率。最后,考虑到SU信号不能溢出检测频谱,在检测频谱的边界500Hz的频带也不能作为SU信号的发射频率。这种理想的预测结果与程序的运行结果图12(a)一致。
[0250] 用同样地方法可以分析出图12(b)是图11(b)被处理后的正确结果。
[0251] 综上所述,可以认为程序在指定频谱中找到了所有可以作为SU信号发射的频率。程序设定以找到的所有频率中的最小值作为SU信号的发射频率。读取前面板中显示的SU发射频率,知道图12(a)和图12(b)的SU发射频率分别是520Hz和2540Hz,所以可以认为程序从所有可以作为SU信号发射频率中的最小值作为SU信号的发射频率。
[0252] 另外,为了防止因PU信号的边界不稳定致使SU发射频率频繁跳动的现象,程序允许PU信号边界在小范围内抖动而SU发射频率不发生改变。例如输入了一个单频PU信号,其频率为800Hz,这时计算得到的SU发射频率为1340Hz。但是当PU信号的频率在790Hz~810Hz之内时,SU发射频率依然为1340Hz。所以可以认为程序对PU信号边界抖动的处理效果比较好。
[0253] PU是授权用户,SU是认知用户,SU只有在PU不发送信号时,才能借用PU的频带。当PU开始发送信号时,SU信号需要立即避让,在其它的空闲频带上发送信号。这种SU对PU的避让可以理解为SU与PU在不同时间和频带上充分使用频谱。
[0254] SU与PU在不同时间上充分使用频谱体现在:SU可以在PU不发送信号的这段时间内占用授权频带。这样,同一授权频带在不同的时刻被PU或SU使用。SU与PU在不同频带上充分使用频谱体现在:如果PU需要在授权频带上发射信号,SU就需要回避这一授权频带,在频谱上找到其它空闲频带发射信号。这样,在相同的时刻,PU与SU使用不同的频带。
[0255] 图13是SU对PU避让的实验效果图。在图13中,PU信号同样是图10中的三路单频信号,SU信号由矩形波表示。由于800Hz的单频PU信号的幅度值是随机为0.5或0,可以理解为800Hz的单频PU信号是随机存在或不存在。当800Hz的PU信号不存在时,程序找到的SU发射频率范围如图11(b)所示,可以在500Hz~1kHz内发射SU信号。发射SU后,频谱图如图12(a)所示,此时SU信号占用了PU信号的授权频带。当PU信号发送信号时,如图11(a)所示,SU可以在2.5kHz~4.5kHz范围内发射信号。发射SU信号后,频谱图如图12(b)所示,SU不再占用PU的授权频带,而是在频谱中找到空闲的频带发射SU信号。所以,程序实现了SU对PU的避让,并且PU,SU可以在不同时刻,不同频段共享指定的频谱。
[0256] 本技术方案的技术效果为:通过LabVIEW发射虚拟信号的办法来实现SU信号对PU信号的避让效果,这种虚拟仿真的方法不再使用USRP收发信号,所述虚拟仿真程序中的虚拟仿真认知网络模块所处理的对象是一段可以控制的虚拟频谱。
[0257] 以上以实施例的方式对本发明作了描述,本领域的技术人员应当理解,本公开不限于以上描述的实施例,在不偏离本发明的范围的情况下,可以做出各种变化、改变和替换。
高效检索全球专利

专利汇是专利免费检索,专利查询,专利分析-国家发明专利查询检索分析平台,是提供专利分析,专利查询,专利检索等数据服务功能的知识产权数据服务商。

我们的产品包含105个国家的1.26亿组数据,免费查、免费专利分析。

申请试用

分析报告

专利汇分析报告产品可以对行业情报数据进行梳理分析,涉及维度包括行业专利基本状况分析、地域分析、技术分析、发明人分析、申请人分析、专利权人分析、失效分析、核心专利分析、法律分析、研发重点分析、企业专利处境分析、技术处境分析、专利寿命分析、企业定位分析、引证分析等超过60个分析角度,系统通过AI智能系统对图表进行解读,只需1分钟,一键生成行业专利分析报告。

申请试用

QQ群二维码
意见反馈