微波EDA网,见证研发工程师的成长!
首页 > 微波射频 > 软件无线电 > 基于 GNU Radio 和 USRP 的频谱检测方法

基于 GNU Radio 和 USRP 的频谱检测方法

时间:12-17 来源:新浪科技 点击:
4.3 能量检测实现

4.3.1GNU Radio USRP 初始化设置

需要搭建基于GNU Radio的FFT频谱检测器,我们就需要正确的初始化配置USRP,建立流图,搭建起 FFT 运算的软件无线电结构。

初始化配置 USRP,需要使用 GNU Radio 中的 usrp.py 模块,这个模块包含输入输出初始化设置、ADC 采样速率、功率、增益、载频等。基本上所有关于配置 USRP 的子函数都需要重载 usrp.py 来配置。具体见下表:

基于 <wbr>GNU <wbr>Radio <wbr>和 <wbr>USRP <wbr>的频谱检测方法

usrp.py函数是所有 GNU Radio 控制 USRP 的程序都要用到的初始化函数,它们控制 usb 接口、fpga 程序、ADC、DAC、子板,跟硬件打交道的程序都可以从这个函数的子函数找到控制方法。

source_x()和 sink_x()则是 usrp.py 中最基本的子函数,它们是流图的开始或者结束,由它们我们可以初始化 USRP 为接受器或者发射器,而且一个 USRP 通过时分复用可以复用为双工收发器。

按照表的函数应用举例,我们设置 USRP 为接收状态,nchan=2 这样我们可以同时获得两个子板的信息,同时对 400M 和 2.4G 频段进行扫频。其余设置均为默认状态,由此可得知:

adc_rate= 64 MS/s
usrp_decim= 64
usrp_rate= adc_rate / usrp_decim = 1 MS/s

4.3.2 FFT 能量检测流图

由上一小节 FFT 的原理,我们可以得出 FFT 计算结果的意义,可对其进一步处理达到我们的需求。GNU Radio 自带库有 FFT 模块,在设置好 USRP 并正确的建立流图,然后将得到的结果通过计算途径处理,最终得到我们需要的功能——大范围的能量检测。

因为 USRP 带宽的限制,一个时间内前端只能检测到 8MHz 的射频信号如果要检测大于 8MHz 带宽的信号我们需要通过不断的 RF 前端步进调频以达到检测大范围频谱的目的,虽然检测到的频谱并不是实时的。USRP(或者程序)每个时刻对一段范围的频率进行检测,然后步进调频到下一段频率,这样就能扫频扫过大段的频率。

要是频率调频已经完成步进调频,我们需要在每一个步进时刻结束时——即已获得这段频率的数值时,发送一个调频指令到 USRP。调频控制由 gr.bin_statistics_f sink 程序实现,bin_statistics 在以下的函数解释中有详细解释。

当我们命令 USRP 的 RF 子板改变中心频率时,我们必须等待 ADC 的采样到达 FFT处理器并判断完是否属于需要的中心频率。在这个过程中需要经过很多重的延时比如从FPGA,USB,计算延时。这样我们必须在调节到下一步进频率时进行延时,以保证上一步进频率的采样能正确的被 FFT 处理器处理。

程序主要驱动部分由 bin_statistics sink 函数组成。整个流程如图 4-3

基于 <wbr>GNU <wbr>Radio <wbr>和 <wbr>USRP <wbr>的频谱检测方法

bin_statistics主要控制 USRP 的调频控制,并根据步进频率带宽的大小决定延时时间即 FFT 处理器忽略掉 N 个向量(向量长度由计算决定)这里也可以详细解释,当进行完 FFT 处理后,bin_statistics 将处理后的信息组合成 message,并将此 message 插入message queue。message 的每个内容由 FFT 后的每个最大频率的向量组成。

每一步进的延时需要计算得出,延时包括调频延时和计算延时,其中调频延时是最主要的延时。

调频延时由 RF 前端的 PLL 到主板的时间再加上管道中排队的时间,我们所用的RFX 系列延时差不多是 1ms。

调频延时转化为 FFT 计算时忽略的向量个数的计算公式是

tune_delay_passed_to_bin_statistics=
int(round(required_tune_delay_in_sec*usrp_rate/fft_size))

其中:

required_tune_delay_in_sec= 10e-3 ;usrp_rate = 1M (decimation =64);
fft_size= 256
可得出tune_delay_passed_to_bin_stats = 4 (FFT Frames)

这表示,我们延时 1ms 我们将跳过 4 个输入的 FFT 向量个数,来获得真实的向量数据。延时时间还包括计算延时,我们需要收集处理 N 个 FFT 采样,如果 DR=8 那将用时 128us,还应该加上计算机处理这 N 个采样的时间,这个需要根据实际计算机的处理能力通过实验测得。

本实验平台设置步进频率为 3MHz,设置 3M 是为了能尽可能精确的对小范围的频率进行能量测算,而我们通信时占用的频宽也大概是 2M 多,加上半衰保护,差不多即是 3M。而且步进频率 3M 可节省每一步进的运算时间,是个均衡的选择。这样 USRP及相关程序的初始化就完成了。

以下是完成 FFT 运算的流图,其搭建一个完整的软件无线电结构,数据最终写入message。流图如下图:

基于 <wbr>GNU <wbr>Radio <wbr>和 <wbr>USRP <wbr>的频谱检测方法




基于 <wbr>GNU <wbr>Radio <wbr>和 <wbr>USRP <wbr>的频谱检测方法

4.3.3 实现结果

总结如下,受制于 USB 总线的约束,USRP 不能检测超过 8MHz 的带宽(USRP 的USB2.0 最大数据传输速率为 32M Bytes/S,每个实采样点占用 2 个 Bytes,以一路复数采样进行单收或单发,则最高可达到 32/4=8M 复采样每秒,即最高发送或接收 8MHz带宽的信号)。因此,要对一段 RF 频段进行检测,必须以合适地步进值调节 RF 前端,这样就能检查很宽的频谱。在此设计过程中,为更好地表示指定频段内的频谱感知情况,通过设置 GNU Radio 的相关函数,我们选取 3MHz 这样的扫频间距。

频段扫描过程如下:
(1) 设置所要感知频段的最小、最大频率以及扫描次数 M;

(2) 对所选频谱范围进行间隔化,每一间隔值为 3MHz;

(3) 在第一个 3MHz 频段范围内对信号进行 AD 采样,得到 N 个点(本次设计 N 取256);

(4) 进行 N 点 FFT,对得到的 N 个复数分别进行平方和运算,得出模值 ,再累加,求得平均值作为此 3MHz 间隔的模值,并由此求得功率大小,记录到文件中;

(5) 移频到下一个 3MHz 间隔,重复上面的步骤,直到扫描完频段内所有的每一个间隔;

我们对特定频段做多几次扫频,获得平均功率数据,使用 gnuplot 将数据画图。其中 Y 轴为平均功率,单位为 dBm;X 轴为频率,单位为 MHz。因为 400M 和 2.4G 频段上的功率量值不同,所以起始功率不同。见图 4-5 和图 4-6

基于 <wbr>GNU <wbr>Radio <wbr>和 <wbr>USRP <wbr>的频谱检测方法


基于 <wbr>GNU <wbr>Radio <wbr>和 <wbr>USRP <wbr>的频谱检测方法

从上两图中的检测结果可以非常直观的得到以下结论:

(1)2.4G 非授权频段非常拥挤,这段频率已经被大量的 wifi 设备使用殆尽,而且还有大量"不速之客"加进来干扰,比如蓝牙和微波炉开启产生的污染(图中 2430MHz处即是微波炉开启产生的信号辐射)。

(2)在 400M 授权频段上,除了某些频率一直有信号在占用,大部分频段大部分时间都是空闲的。这些授权频段无论从时间上还是从功率上分析,都非常适合认知无线电非授权用户的使用。

由美国频谱规划文件中如图 4-7 可知,400M-480M 范围内,国际通行的规划大部分都是划给移动通信,而在我国,大部分频段在民用范围内大部分时间都是静默的,只是450M 小灵通通信占用了一点,如上图可清晰的发现 450M 处被占用情况。

所以我们选择 400M 频段作为认知无线电动态接入的频段,可减少对授权用户的干扰,从时间和频谱空间这两个角度来说也比较容易找到空闲频段。
基于 <wbr>GNU <wbr>Radio <wbr>和 <wbr>USRP <wbr>的频谱检测方法

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top