一种基于USRP的频谱智能感知系统及其方法与流程

文档序号:12037517阅读:1481来源:国知局
一种基于USRP的频谱智能感知系统及其方法与流程

本发明涉及频谱感知技术领域,具体涉及一种基于usrp的频谱智能感知系统及其方法。



背景技术:

目前无线频谱资源的规划和使用是由政府制定,通信设备对频谱的使用须政府授权许可,而且政府所制定的频谱静态分配方式会严重降低频谱的利用效率。比如分配给蜂窝移动通信的系统频带经常会出现超负荷现象,而共用频带却85%的时间处于空闲状态。而认知无线电技术可使认知用户“见缝插针”地借用空闲的授权频带,从而提高频谱的利用机会和利用效率。

认知无线电的硬件原型通常选择usrp软件无线电平台装置,其前面板多为两天线接口,可以分别用来接收或发射信号,中间配有ethernet接口以通过千兆以太网连接pc,右下方的power接口作为电源接口。

如上所说,目前一台usrp配有两根天线,只能完成一次收发信号。如果把发射信号的天线用来发射su信号,那么就无法用发射天线来控制pu信号的存在与否了。因此,一台usrp无法通过检测程序实现认知用户su在pu信号不存在的情况下可以占用授权用户pu的授权频段,在pu信号存在的情况下,可以主动避让的功能。



技术实现要素:

为解决上述问题,本发明提供了一种基于usrp的频谱智能感知系统及其方法,避免了现有技术中一台usrp无法通过检测程序实现认知用户su在pu信号不存在的情况下可以占用授权用户pu的授权频段和在pu信号存在的情况下可以主动避让的缺陷。

为了克服现有技术中的不足,本发明提供了一种基于usrp的频谱智能感知系统及其方法的解决方案,具体如下:

一种基于usrp的频谱智能感知系统,包括usrp,所述usrp通过以太网与主机计算机pc相连接;

所述主机计算机pc中包括labview软件平台和niusrp软件套件,所述niusrp软件套件在labview中增加了ni-usrp驱动程序,所述labview软件平台中的程序通过ni-usrp驱动程序与所述usrp进行交互;

所述labview软件平台中的程序包括频谱感知程序,所述频谱感知程序包括usrp频谱感知模块。

进一步地,所述usrp为niusrp,所述niusrp通过千兆以太网与主机计算机pc相连接。

进一步地,所述主机计算机pc中还能够引用matlabscript以此来实现labview与matlab的联调。

进一步地,所述ni-usrp驱动程序包括八个函数,所述八个函数分别为

9.niusrp打开rx会话vi,即niusrpopenrxsessionvi;

10.niusrp配置信号vi,即niusrpconfigurevi;

11.niusrp初始化vi,即niusrpinitiatevi;

12.niusrp打开tx会话vi,即niusrpopentxsessionvi;

13.niusrp提取接收数据vi,即niusrpfetchrxdatavi;

14.niusrp发射数据vi,即niusrpwritetxdatavi);

15.终止vi,即niusrpabortvi;

16.关闭vi,即niusrpclosesessionvi;其中1-4中的vi实现配置功能,5-6中的vi实现读写功能,7-8中的vi实现结束功能。

进一步地,所述接收无线信号和发射无线信号模块通过所述ni-usrp驱动程序的所述八个函数来实现接收无线信号和发射无线信号的过程。

进一步地,所述基于usrp的频谱感知系统的方法,包括:在限定只用一台usrp的情况下,可以用一根天线作为接收天线接收无线信号,通过频谱感知程序中的usrp频谱感知模块对接收的无线信号进行频谱感知,找到可用频段后,通过另一根天线在此可用频段上发射fm信号,这时终止针对接收天线的能量检测模块的能量检测,利用接收天线解调发射天线所发射的fm信号,而所述usrp频谱感知模块包括音频信号存储模块、计算判决门限模块、能量检测模块、发射fm信号模块以及解调fm信号模块。

进一步地,所述音频信号存储模块包括配置音频输入的函数、读取音频输入的函数、写入并打开音频文件的函数、写入音频文件的函数、音频输入清零的函数、关闭音频文件的函数和音频信号存储前面板,所述配置音频输入的函数用于设置音频信号的特征,所述音频信号的特征包括每通道采样总数、采样模式、设备id以及声音格式,所述读取音频输入的函数用于从所述主机计算机pc的声卡中读取正在录制的音频信号,所述写入并打开音频文件的函数用于指定音频信号在磁盘上的存储位置,所述写入音频文件的函数用于把读取的音频信号写入到指定的音频信号的存储位置,所述音频输入清零的函数用于停止采集数据、清除缓存、任务返回至默认状态以及清除与任务相关的数据,所述关闭音频文件的函数用于停止音频信号的存储,这样通过所述音频信号存储前面板选择音频文件的存储路径、输入每通道采样总数、采样模式、设备id以及声音格式,所述设备id是音频操作时输入或输出的设备的标识,它的默认值为0,所述每通道采样总数为指定的从样本缓冲区中读取样本的速率,所述采样模式为指定vi进行有限采样或连续采样,所述声音格式为设置音频操作的采集速率、通道数量和每个采样的比特位数;然后点击所示音频信号存储前面板的停止按钮,把选择的音频文件的存储路径传输到写入并打开音频文件的函数,而输入的每通道采样总数、采样模式、设备id以及声音格式传输到配置音频输入的函数,然后所述读取音频输入的函数按照传输到配置音频输入的函数中的所述每通道采样总数、采样模式、设备id以及声音格式用于从所述主机计算机pc的声卡中读取正在录制的音频信号,接着所述写入音频文件的函数根据传输到写入并打开音频文件的函数中的选择的音频文件的存储路径用于把读取的音频信号写入到选择的音频文件的存储路径,写入完毕后所述音频输入清零的函数就停止采集数据、清除缓存、任务返回至默认状态以及清除与任务相关的数据,而所述关闭音频文件的函数停止音频信号的存储。

进一步地,所述计算判决门限模块是根据公式(1)

来推导出门限值,q(.)是正态分布尾部概率函数,所述计算判决门限模块包括计算门限设置信息的子vi、计算判决门限的子vi、matlab节点的程序和外围程序,所述计算门限设置信息的子vi对同一波段的频谱数据进行10次取样,将这10组取样处理结果的中位数作为输出,所述计算门限设置信息的子vi的输入端有三个参数,所述三个参数分别为待处理的功率密度谱的波形数据,待检测数据的起始频率和待检测数据的截止频率,而所述计算门限设置信息的子vi的输出端是一个簇集合,包括两个参数,该两个参数分别是整个波形数据的数组长度的一半n/2和虚警概率pf,把该两个参数代入公式(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,转换公式为公式(5)所示,公式(5)中的t(db)表示单位为db的检测门限值:

t(db)=10lg(tn)(5)

步骤3-3:把结果t(db)作为判决门限而输出;

进一步地,所述能量检测模块是根据这段频谱上的值是否存在大于检测门限值来进行判决的,如果这段频谱上的值大于检测门限值,就存在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和power=0,其中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:结束。

进一步地,所述发射fm信号模块中包括用来发射fm信号的子vi和发射fm波的前面板,所述发射fm信号模块根据得到的所述认知用户su的发射频率、适当的iq速率和频偏这样的参数,运行所述用来发射fm信号的子vi可以利用usrp的发射端发射fm信号运行,所述用来发射fm信号的子vi有三个输入,所述三个输入分别为载波频率、iq速率以及fm频偏,所述认知用户su的发射频率就是fm载波频率,通过所述发射fm波的前面板输入所述用来发射fm信号的子vi所需的载波频率、iq速率以及fm频偏的数值,通过所述发射fm波的前面板还能输入所述niusrp配置信号vi,也就是niusrpconfigure函数,所需的配置参数,通过所述发射fm波的前面板输入的配置参数用于设置usrp信号的发射,所述用来发射fm信号的子vi中包括波形重采样函数和fm调制函数;

在所述发射fm波的前面板输入所述用来发射fm信号的子vi所需的载波频率、iq速率、fm频偏的数值以及所述niusrp配置信号vi所需的配置参数后,所述用来发射fm信号的子vi把iq速率传送到所述波形重采样函数,所述波形重采样函数的输入端获取到所述iq速率和所述音频信号存储模块写入的音频信号的数据信息后,根据这两个参数,所述波形重采样函数可以控制音频信号的每个数据点每隔时间间隔δt来形成重采样后的波形数据发送,由此实现音频信号的比特率与usrp信号发射的iq速率相匹配的功能;

接着所述fm调制函数实现对信号的fm调制,所述fm调制函数有两个输入参数,一个是重采样后的波形数据,一个是fm信号的频偏,采样后的波形数据从波形重采样函数获得,fm信号的频偏为常数;

最后实现对信号的fm调制后,调制后的信号就通过所述ni-usrp驱动程序在所述fm载波频率下发射出去。

进一步地,对usrp接收到的信号进行处理,是以while循环的方式实现usrp能连续的接收信号的条件下通过所述解调fm信号模块对接收到的数据进行fm处理,该fm处理只需要对niusrpfetchrxdate驱动程序的输出结果进行处理,所述解调fm信号模块中包括用来播放音频信号的simplesound子vi、fm解调音频信号的前面板和处理信号的函数,所述simplesound子vi根据变量action值选择条件语句中的分支,若变量action值为“open”,就用soundoutputconfigure函数来配置声卡为播放音频做准备;若变量action值为“write”,先用一个normalizewaveform函数对波形数据进行归一化,再把处理后的数据用soundoutputwrite函数送入计算机的声卡进行播放;若变量action值为“close”,就用soundoutputclear函数清除送给声卡的缓存数据,结束音频的播放,所述fm解调音频信号的前面板的左侧部分为用来录入niusrp函数的配置参数的部分,其中numberofsamples配置参数代表每次从数据接收信道中接收到的样本数,numberofsamples和iq速率iqrate有以下关系:

fetchtime为时域中完成一次数据采集的时间,resolutionbandwidth为频域中的频率分辨率,即每个相邻数据间的频率间隔;所述fm解调音频信号的前面板的右侧部分为用于显示解调后的波形信号图和功率频谱图的波形显示部分,具体处理方式如下;

所述处理信号的函数对usrp接收到的连续信号在whileloop中进行处理,如果在数据信号接收正常的条件下按照fm解调音频信号的前面板中录入的niusrp函数的配置参数来持续接收数据,把接收的数据转换为极坐标的形式,把极坐标中的相位信号展开,展开后对数据进行微分,微分后分别把usrp采样率与声卡信息的采样率匹配、把数据实数部分和虚数部分分开和求信号的功率密度值,然后把数据实数部分和虚数部分分开和求信号的功率密度值后的数据分别进行显示然后结束该处理信号的函数的运行,而把usrp采样率与声卡信息的采样率匹配后的数据送到声卡在把用来播放音频信号的simplesound子vi中的action值变为“write”的条件下播放,播放完成后结束该处理信号的函数的运行,所述把极坐标中的相位展开是通过unwrap函数实现的。

本发明的技术效果为:在限定只用一台usrp的情况下,可以用一根天线作为接收天线接收无线信号,通过频谱感知程序中的usrp频谱感知模块对接收的无线信号进行频谱感知,找到可用频段后,通过另一根天线在此可用频段上发射fm信号。

附图说明

图1为本发明的usrp频谱感知模块的组成示意图。

图2为本发明的音频信号存储前面板的示意图。

图3为本发明的外围程序的流程图。

图4为本发明的matlab节点的程序流程图。

图5为本发明的所述用于频谱感知的matlab节点的程序的一个部分的流程图。

图6为本发明的所述用于频谱感知的matlab节点的程序的另一个部分的流程图。

图7为本发明的所述用于频谱感知的matlab节点的程序的剩余一个部分的流程图。

图8为本发明的所述发射fm波的前面板的示意图。

图9为本发明的所述fm解调音频信号的while循环部分的流程图。

图10为本发明的fm解调音频信号的前面板的示意图。

图11为本发明的实施例进行检测的基于usrp的频谱感知程序运行前面板示意图。

图12是对图11中能量密度谱的检测结果图。

图13是具体实施方式中的解调结果图。

具体实施方式

下面将结合实施例对本发明做进一步地说明。

如图1-图10所示,本实施例的基于usrp的频谱感知系统,包括usrp,所述usrp通过以太网与主机计算机pc相连接;这样在接收信号时,usrp负责把空间的无线信号转换成数字信号传输给主机计算机pc,然后主机计算机pc负责处理这些数字信号,处理这些数字信号的方式可以为解调或者解码;在发送信号时,主机计算机pc先对数字信号进行处理,处理这些数字信号的方式可以为编码或调制,然后把处理好的数字信号传输给usrp,usrp再把这些数字信号转换成模拟信号,通过天线发送到空间中。

所述主机计算机pc中包括labview软件平台和niusrp软件套件,所述niusrp软件套件在labview中增加了ni-usrp驱动程序,所述labview软件平台中的程序通过ni-usrp驱动程序与所述usrp进行交互;

所述labview软件平台中的程序包括频谱感知程序,所述频谱感知程序包括usrp频谱感知模块。

所述usrp为niusrp,所述niusrp通过千兆以太网与主机计算机pc相连接。

所述主机计算机pc中还能够引用matlabscript以此来实现labview与matlab的联调。在labview程序设计中如果数据比较复杂,可以把它交给matlab来处理。

所述ni-usrp驱动程序包括八个函数,所述八个函数分别为

17.niusrp打开rx会话vi,即niusrpopenrxsessionvi;

18.niusrp配置信号vi,即niusrpconfigurevi;

19.niusrp初始化vi,即niusrpinitiatevi;

20.niusrp打开tx会话vi,即niusrpopentxsessionvi;

21.niusrp提取接收数据vi,即niusrpfetchrxdatavi;

22.niusrp发射数据vi,即niusrpwritetxdatavi);

23.终止vi,即niusrpabortvi;

24.关闭vi,即niusrpclosesessionvi;其中1-4中的vi实现配置功能,5-6中的vi实现读写功能,7-8中的vi实现结束功能。

所述niusrpopenrxsessionvi用来启动接收射频信号。

所述niusrpconfigurevi用来与接收会话rx或发送会话tx一起使用。通过这个vi,可以手动设置发送或接收数据的iq率,载频,增益这样的信息。但是,并不是所有手动设置的iq率、频率以及增益都是有效的。如果输入的参数值并非有效,函数会把输入值强制转化成一个有效值。

所述niusrpinitiatevi用来在niusrp配置vi之后使用,它可以告诉usrp参数配置已经完成,可以接收数据了。

所述niusrpopentxsessionvi用来启动usrp发射射频信号。

所述niusrpfetchrxdatavi用于提取usrp接收的数据。其可以把提取的数据进行解调或解码这样的数字化处理。

所述niusrpwritetxdatavi用来控制usrp发送iq数据。

所述niusrpabortvi给usrp传递停止命令。usrp接收停止命令后,不再接收或者发送数据。

所述niusrpclosesessionvi用来关闭正在运行的rx或者tx部分,并释放它们所用的内存。niusrpclosesessionvi和niusrpabortvi不同之处在于:如果调用了前者,如要重新使用usrp,需要重新运行程序;如果调用了后者,可以在不重新运行程序的情况下,重新使用usrp。

所述接收无线信号和发射无线信号模块通过所述ni-usrp驱动程序的所述八个函数来实现接收无线信号和发射无线信号的过程。

所述基于usrp的频谱感知系统的方法,包括:在限定只用一台usrp的情况下,可以用一根天线作为接收天线接收无线信号,通过频谱感知程序中的usrp频谱感知模块对接收的无线信号进行频谱感知,找到可用频段后,通过另一根天线在此可用频段上发射fm信号,这时终止针对接收天线的能量检测模块的能量检测,利用接收天线解调发射天线所发射的fm信号,而所述usrp频谱感知模块包括音频信号存储模块、计算判决门限模块、能量检测模块、发射fm信号模块以及解调fm信号模块。所述usrp频谱感知模块的组成如图1所示。

所述usrp频谱感知模块的基础是用来对fm调制音频信号进行发射与接收,所以音频信号存储模块首先要解决的问题就是音频信号的来源问题。labview中有关于处理音频信号的函数,下面介绍音频信号的存储。需要注意,labview进行音频信号处理时,只能识别.wav格式的文件。

所述音频信号存储模块包括配置音频输入的函数、读取音频输入的函数、写入并打开音频文件的函数、写入音频文件的函数、音频输入清零的函数、关闭音频文件的函数和如图4所示的音频信号存储前面板,所述配置音频输入的函数用于设置音频信号的特征,一般在usrp频谱感知模块开头用到,所述音频信号的特征包括每通道采样总数、采样模式、设备id以及声音格式,所述读取音频输入的函数用于从所述主机计算机pc的声卡中读取正在录制的音频信号,所述写入并打开音频文件的函数用于指定音频信号在磁盘上的存储位置,所述写入音频文件的函数用于把读取的音频信号写入到指定的音频信号的存储位置,所述音频输入清零的函数用于停止采集数据、清除缓存、任务返回至默认状态以及清除与任务相关的数据,所述关闭音频文件的函数用于停止音频信号的存储,表明音频信号存储完成;这样通过所述音频信号存储前面板选择音频文件的存储路径(在图2中的示例中,选择的音频文件的存储路径为e:\test.wav)、输入每通道采样总数、采样模式、设备id以及声音格式,所述设备id是音频操作时输入或输出的设备的标识,它的默认值为0,一般不需要更改,所述每通道采样总数为指定的从样本缓冲区中读取样本的速率,所述采样模式为指定vi进行有限采样或连续采样,所述声音格式为设置音频操作的采集速率、通道数量和每个采样的比特位数;然后点击所示音频信号存储前面板的停止按钮,这样就结束了录入并把选择的音频文件的存储路径传输到写入并打开音频文件的函数,而输入的每通道采样总数、采样模式、设备id以及声音格式传输到配置音频输入的函数,然后所述读取音频输入的函数按照传输到配置音频输入的函数中的所述每通道采样总数、采样模式、设备id以及声音格式用于从所述主机计算机pc的声卡中读取正在录制的音频信号,接着所述写入音频文件的函数根据传输到写入并打开音频文件的函数中的选择的音频文件的存储路径用于把读取的音频信号写入到选择的音频文件的存储路径(也就是指定的音频信号的存储位置),写入完毕后所述音频输入清零的函数就停止采集数据、清除缓存、任务返回至默认状态以及清除与任务相关的数据,而所述关闭音频文件的函数停止音频信号的存储。

所述计算判决门限模块是在运行能量检测模块进行能量检测之前,根据公式(1)

来推导出门限值需要有一段信号的长度、信噪比以及噪声功率。这些信息可以从参考频谱上获取,下面分析如何从一段参考频谱上得到这些计算判决门限的必要信息,q(.)是正态分布尾部概率函数,所述计算判决门限模块包括计算门限设置信息的子vi、计算判决门限的子vi、matlab节点的程序和外围程序,为了保证计算结果的可靠性,所述计算门限设置信息的子vi对同一波段的频谱数据进行10次取样,将这10组取样处理结果的中位数作为输出,所述计算门限设置信息的子vi的输入端有三个参数,所述三个参数分别为待处理的功率密度谱的波形数据,待检测数据的起始频率和待检测数据的截止频率,而所述计算门限设置信息的子vi的输出端是一个簇集合,包括两个参数,该两个参数分别是整个波形数据的数组长度的一半n/2和虚警概率pf,把该两个参数代入公式(1)就能计算出对应于虚警概率的门限值λf,而在外围程序中,设置了1个全局变量cishu,还有2个局部变量pnz和门限设置信息;cishu用于记录所述计算门限设置信息的子vi运行的次数;门限设置信息为前10次取样计算结果的中位数,如果取样次数不到10次,门限设置信息为每次取样后的计算结果;如果取样次数超过10次,门限设置信息与取样10次门限设置信息相同,另外还设置了局部变量数组形式的变量pnz,pnz负责把每次外围程序的运行结果存储下来,等到对频谱数据取样10次时,外围程序计算pnz数组中数据的中位数,如图3所示,所述外围程序的具体流程如下:

步骤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节点的程序再次运行时可以从中读取数据;

如图4所示,所述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时,程序出错,设置当起始频率在数组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值表示的噪声功率;在计算检测门限的程序中,要用到噪声功率pn的实际值,可用公式(3)把分贝值转换为实际值。

步骤2-5:高斯噪声信号的能量在频域内的表达式为公式(4)所示:

由于在某个频段存在pu信号,不可能对整个频段的功率值叠加来求噪声功率。利用高斯噪声信号的功率谱均值p(f)是一个固定值,可以先求特定频段的均值p(f)df,然后以此均值p(f)df乘以频谱图数据的点数,求取整个频段的噪声功率p(t);

进行到步骤2-5,程序已经完成了对所需参数m,pn的计算,但是为了数据的准确性,下面的步骤考虑从多组数据中计算中位数作为输出。

步骤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;这样保证了程序的输出参考了多组值,可以减小突然的脉冲对结果的干扰。

也就是通过门限参数设置子vi可以得到公式(1)中等号右边的两个未知参数(pu信号的噪声功率pn和波形数据长度值的一半m),下面再利用公式(1)计算判决门限t,所述计算判决门限的子vi可以根据输入参数计算出能量检测的门限值,而其输入参数包括门限设置信息和虚警概率,所述门限设置信息可以从计算门限设置信息的子vi中获取,虚警概率代表把噪声信号误当作pu信号的概率,可以手动设置,默认情况下为0.1,所述计算判决门限的子vi的输出结果为检测门限值t;具体实现主要通过matlab节点来进行数据处理,下面分析matlab节点的数据处理程序。而所述计算判决门限的子vi包括matlab节点的数据处理程序,所述matlab节点的数据处理程序的数据处理流程如下:

步骤3-1:根据公式(1)可以计算出虚警概率pf所对应的门限值tn,也就是λf,matlab节点的数据处理程序中包括qfuncinv()函数,其是matlab中的封装函数,能够实现q-1()的功能;

步骤3-2:因为功率谱密度的数据的单位是分贝,所以还需要把tn的单位转换成db,转换公式为公式(5)所示,公式(5)中的t(db)表示单位为db的检测门限值:

t(db)=10lg(tn)(5)

步骤3-3:把结果t(db)作为判决门限而输出;

这样就完成了计算判决门限的设计。

进一步地,所述能量检测模块是根据这段频谱上的值是否存在大于检测门限值来进行判决的,如果这段频谱上的值大于检测门限值,就存在pu信号,如果这段频谱上的值不大于检测门限值,就不存在pu信号,所述检测门限值就是所述判决门限;因而说,找到一个合适的检测门限,对检测结果有很大的作用。如果门限值太低,就会使虚警概率pf太大,把噪声信号误认为是pu信号;如果门限值太高,就会使检测概率pd变小,这样即使频谱上存在pu信号,也不一定能判决出来,出现漏检现象。因此,需要找到一个合适能量检测门限值λ(在程序中以t或者tn表示门限值λ),以使检测概率与虚警概率折中。

另外所述能量检测模块包括用于频谱感知的vi,所述用于频谱感知的vi可以从输入的功率密度谱的数据中,根据门限值的大小,来判断功率密度谱中哪些频段存在pu信号,还可以根据检测结果,以及fm频偏的大小,计算fm发射信号的载波频率,最后,根据pu信号范围中的起始频率和终止频率,该用于频谱感知的vi能够计算出这一频段pu信号的功率;

所述用于频谱感知的vi中包括有用于频谱感知的matlab节点,在所述用于频谱感知的matlab节点的输入端包括一个全局变量suf,所述用于频谱感知的matlab节点的输出端包括另一个全局变量suf和全局变量lastpower,其中suf是magnitude数组的下标,magnitude数组也就是数组s,利用公式(6),可以根据suf计算出发射频率fw(换一个角度,也可以把suf理解为发射频率fw在magnitude数组中所对应的下标),如果是对某一载波信号进行分析,则需要在所得结果的基础上加上载波频率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信号的地方,不能作为发射频率对应的下标,这样,就只要考虑在pu边界左右n各点处和数组y的边界附近不可以作为发射频率对应的下标的情况了;

步骤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为整型变量,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;保证边界左右n个点的下标不能作为发射频率的下标。

步骤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;这样也就保证了在数组y的端点处不能作为发射频率的下标。经过对y的处理后,剩余的y(i)=0的下标,可以作为发射频率的下标。

步骤4-10:结束;

在通过所述频谱数组中找到所有可以作为su发射频率的下标的程序部分找到了所有认知用户su的发射频率的下标后,就需要从中选择一个认知用户su的发射频率的下标。这时,有两点需要考虑:一点是认知用户su的发射频率的改变不能太频繁,如果pu信号只是在边界处频繁抖动,不需要改变认知用户su的发射频率对应的下标;另一点是,假设已经找到了认知用户su的发射频率对应的下标,并且认知用户su已经在根据这个下标转换后的频率处发射信号,除非在认知用户su的发射频率的频段内出现pu信号,否则也不能改变su发射频率对应的下标。

所述计算出su信号的发射频率对应的下标suf的程序部分的流程如下:

步骤5-1:对所述计算出su信号的发射频率对应的下标suf的程序部分的重要参数初始化,令i=1和power=0,为下面计算发射频率对应的下标以及pu信号的能量做准备,其中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:通过步骤5-2,虽然找到了su发射频率的对应下标值,但这个值不一定要转换成发射频率。在这一步骤,判断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;其中,第一个条件suf等于1的意义是上一次没有找到合适的发射频率或者是上次没有发射信号;第二个条件|suf-i|大于10的意义是i值的变化相比suf而言,超过了10单位,这样是为了给检测信号10个单位的抖动空间,如果上次信号的边界下标变化不超过10个单位就不需要变化;第三个条件power比0.7*lastpower的意义是,当一个su信号已经发射,如果此时在su信号的频带上pu发射信号,su信号就需要避让,实际上是根据su信号所在频段内的信号能量是否突增来判断授权用户是否开始占用此频段。

步骤5-6:将i赋值给全局变量suf,表示找到了新的发射频率的下标,执行步骤5-8;

步骤5-7:将1赋值给全局变量suf,表示没有找到可以作为发射频率下标的值,执行步骤5-8;

步骤5-8:将计算的power值赋给全局变量lastpower,为下一次判断su信号是否需要避让pu信号做准备;

步骤5-9:结束;

至此,计算出su信号的发射频率对应的下标suf的程序部分找到了发射频率对应的下标。

计算出指定频段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对应截止频率,必须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:结束。

到这里,程序完成了对pu信号功率的估算,结合前面对噪声功率pn的估算,利用公式(9)可以计算出pu信号的信噪比snr。

snr=10lg(ps/pn)(9)

所述发射fm信号模块中包括用来发射fm信号的子vi和发射fm波的前面板,所述发射fm信号模块根据得到的所述认知用户su的发射频率、适当的iq速率和频偏这样的参数,运行所述用来发射fm信号的子vi可以利用usrp的发射端发射fm信号运行,所述用来发射fm信号的子vi有三个输入,所述三个输入分别为载波频率、iq速率以及fm频偏,所述认知用户su的发射频率就是fm载波频率,通过所述发射fm波的前面板输入所述用来发射fm信号的子vi所需的载波频率、iq速率以及fm频偏的数值,通过所述发射fm波的前面板还能输入所述niusrp配置信号vi,也就是niusrpconfigure函数,所需的配置参数,通过所述发射fm波的前面板输入的配置参数用于设置usrp信号的发射,所述用来发射fm信号的子vi中包括波形重采样函数和fm调制函数;

在所述发射fm波的前面板输入所述用来发射fm信号的子vi所需的载波频率、iq速率、fm频偏的数值以及所述niusrp配置信号vi所需的配置参数后,所述用来发射fm信号的子vi把iq速率传送到所述波形重采样函数,所述波形重采样函数的输入端获取到所述iq速率和所述音频信号存储模块写入的音频信号的数据信息后,根据这两个参数,所述波形重采样函数可以控制音频信号的每个数据点每隔时间间隔δt来形成重采样后的波形数据发送,由此实现音频信号的比特率与usrp信号发射的iq速率相匹配的功能;

接着所述fm调制函数是labview软件里rfcommunications软件包里ip封装的一个函数,可以实现对信号的fm调制,所述fm调制函数有两个输入参数,一个是重采样后的波形数据,一个是fm信号的频偏,采样后的波形数据从波形重采样函数获得,fm信号的频偏为常数;

最后实现对信号的fm调制后,调制后的信号就通过所述ni-usrp驱动程序在所述fm载波频率下发射出去。

如果要考虑对连续的fm信号解调,必须保证usrp能连续地接收信号,这个问题可以通过while循环来解决。对usrp接收到的信号进行处理,是以while循环的方式实现usrp能连续的接收信号的条件下通过所述解调fm信号模块对接收到的数据进行fm处理,该fm处理只需要对niusrpfetchrxdate驱动程序的输出结果进行处理,所述解调fm信号模块中包括用来播放音频信号的simplesound子vi、fm解调音频信号的前面板和处理信号的函数,所述simplesound子vi根据变量action值选择条件语句中的分支,若变量action值为“open”,就用soundoutputconfigure函数来配置声卡为播放音频做准备;若变量action值为“write”,先用一个normalizewaveform函数对波形数据进行归一化,再把处理后的数据用soundoutputwrite函数送入计算机的声卡进行播放;若变量action值为“close”,就用soundoutputclear函数清除送给声卡的缓存数据,结束音频的播放,所述fm解调音频信号的前面板的左侧部分为用来录入niusrp函数的配置参数的部分,其中numberofsamples配置参数代表每次从数据接收信道中接收到的样本数,numberofsamples和iq速率iqrate有以下关系:

fetchtime为时域中完成一次数据采集的时间,resolutionbandwidth为频域中的频率分辨率,即每个相邻数据间的频率间隔;所述fm解调音频信号的前面板的右侧部分为用于显示解调后的波形信号图和功率频谱图的波形显示部分,具体处理方式如下;

所述处理信号的函数对usrp接收到的连续信号在whileloop中进行处理,如果在数据信号接收正常的条件下按照fm解调音频信号的前面板中录入的niusrp函数的配置参数来持续接收数据,把接收的数据转换为极坐标的形式,把极坐标中的相位信号展开,展开后对数据进行微分,微分后分别把usrp采样率与声卡信息的采样率匹配、把数据实数部分和虚数部分分开和求信号的功率密度值,然后把数据实数部分和虚数部分分开和求信号的功率密度值后的数据分别进行显示然后结束该处理信号的函数的运行,而把usrp采样率与声卡信息的采样率匹配后的数据送到声卡在把用来播放音频信号的simplesound子vi中的action值变为“write”的条件下播放,播放完成后结束该处理信号的函数的运行,所述把极坐标中的相位展开是通过unwrap函数实现的,所述unwrap函数可以把不连续的相位信号转换成连续的相位信号,避免相位的突变。

接下来分析该方法和系统接收到的无线信号的效果,先对所述各前面板的参数进行设置,为后面分析程序运行效果做准备。然后根据程序运行结果来验证获取的门限值的合理性,以及得出pu信号受噪声干扰较小的特点。之后,程序分析了能量检测的结果,得到程序能够从频谱中较好地找出pu信号的结论。最后,对从usrp接收天线接收的信号进行解调,根据解调效果来验证su信号发射频率的设置是否得当,具体过程如下:

在使用usrp之前,需要把主机计算机pc的ip地址设置成192.168.10.1。在默认情况下,usrp的ip为192.168.10.2,这个地址只能与192.168.10.1配对。如果把主机计算机pc的ip地址设置成其它的地址,即使usrp与主机计算机pc之间通过网线连接,usrp也无法实现与主机计算机pc的通信。如图11所示是基于usrp对无线信号进行频谱感知的程序前面板。设定iqrate为4m,carrierfrequency为91m。在能量检测谱中,横坐标的范围是-2m到2m,代表检测频谱带宽为4m。在横坐标值为0处,代表载波频率91mhz的能量。可以认为检测频谱的范围是89mhz~93mhz。在前面板左下方的参数设置区中,可以根据usrp接收信号的“能量密度图”手动设置噪声检测频率范围,和pu信号检测频率范围。程序可以通过这两个范围值估算出接收信号的噪声功率和pu功率。在图11所示的例子中,设置的检测噪声信号的频率范围是-1.9mhz~-1.6mhz(没有考虑载波频率是91mhz,实际上的检测频率范围是(91-1.9=89.1)mhz~(91-1.6=89.4)mhz),估算得到的噪声功率为3.43×10-11。将此噪声功率以及检测数据点的个数(在程序中通过length函数求得)带入公式(3-11),就可以求出检测门限值为-104.562db。通过观察,可以看出此门限值能好地区分出“能量密度谱”中pu信号和噪声信号。所以,程序得到的门限值比较合理。

设置pu信号的检测频率范围为-1.2mhz~-0.5mhz。在此范围内,如果检测到的信号能量值大于门限值视为pu信号的功率值,把功率值的平均数作为输出结果“pu信号功率”。图11中得到的pu信号功率为1.968×10-7。然后根据噪声功率,和pu信号功率,利用对应公式,可以求出接收信号的信噪比为37.58db。这个信噪比的值比较大,说明usrp接收到的pu信号受噪声的影响较小。根据计算得到的门限值,可以对频谱进行能量检测,图12是对图11中能量密度谱的检测结果。在图12中,幅度值为1表示在该频率处为pu信号,幅度值为0表示在该频率处为噪声信号。图12显示在89.5mhz,90mhz,91mhz处存在pu信号。在图11的能量密度谱的在这3个频率处附近,信号的功率明显比其它频率处的功率大,可以认为这3个频率附近的信号为pu信号。所以,程序较为准确地完成了频谱感知,找到了给定频谱中pu信号的位置。

另外根据检测结果,程序计算的“发射频率”为89mhz。点击图11中的“是否发射信号”按键,程序以89mhz为载波频率,发射一个fm波。然后设置接收fm信号的程序的载波频率为89mhz,对su信号进行接收,可以得到图13的解调结果。fm解调程序可以对载波频率处的fm信号进行解调,解调后的音频信号频谱图在图13中右下方。解调程序可以播放解调后的音频信号,播放音频的时候虽然有一些噪声,但还是能够粗略地恢复未调制的音频信号。这说明,发射后的su信号与感知频谱上的pu信号没有共占某一段频谱。所以,程序找到了合适的su发射频率,并且其频谱也没有与pu信号的频谱产生混叠。

本技术方案的技术效果为:在限定只用一台usrp的情况下,可以用一根天线作为接收天线接收无线信号,通过频谱感知程序中的usrp频谱感知模块对接收的无线信号进行频谱感知,找到可用频段后,通过另一根天线在此可用频段上发射fm信号。

以上以实施例的方式对本发明作了描述,本领域的技术人员应当理解,本公开不限于以上描述的实施例,在不偏离本发明的范围的情况下,可以做出各种变化、改变和替换。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1