微波EDA网,见证研发工程师的成长!
首页 > 微波射频 > 软件无线电 > 基于GNU Radio和USRP的认知无线电平台研究

基于GNU Radio和USRP的认知无线电平台研究

时间:11-07 来源:mwrf 点击:

一个模拟信号,经过 ADC 采样之后,就变成了数字信号。采样得到的数字信号,就可以做 FFT 变换了。N 个采样点,经过 FFT 之后,就可以得到 N 个点的 FFT 结果。为了方便进行 FFT 运算,通常 N 取 2 的整数次方。假设采样频率为 Fs,信号频率 F,采样点数为 N。那么 FFT 之后结果就是一个为 N 点的复数。每一个点就对应着一个频率点。这个点的模值,就是该频率值下的幅度特性。具体跟原始信号的幅度有什么关系呢?假设原始信号的峰值为 A,那么 FFT 的结果的每个点(除了第一个点直流分量之外)的模值就是 A 的 N/2 倍。而第一个点就是直流分量,它的模值就是直流分量的 N 倍。而每个点的相位,就是在该频率下的信号的相位。第一个点表示直流分量(即 0Hz),而最后一个点 N 的再下一个点(实际上这个点是不存在的,这里是假设的第 N+1 个点,也可以看做是将第一个点分做两半分,另一半移到最后)则表示采样频率 Fs,这中间被N-1 个点平均分成 N 等份,每个点的频率依次增加。例如某点 n 所表示的频率为:Fn=(n-1)*Fs/N。由上面的公式可以看出,Fn 所能分辨到频率为为 Fs/N,如果采样频率Fs 为 1024Hz,采样点数为 1024 点,则可以分辨到 1Hz。1024Hz 的采样率采样 1024 点,刚好是 1 秒,也就是说,采样 1 秒时间的信号并做 FFT,则结果可以分析到 1Hz,如果采样 2 秒时间的信号并做 FFT,则结果可以分析到 0.5Hz。如果要提高频率分辨力,则必须增加采样点数,也即采样时间。频率分辨率和采样时间是倒数关系。

假设 FFT 之后某点 n 用复数 a+bi 表示,那么这个复数的模就是

,相位就是 Pn=atan2(b,a)。根据以上的结果,就可以计算出 n 点(n≠1,且 n<=N/2)对应的信号的表达式为:An/(N/2)*cos(2*pi*Fn+Pn),即 2*An/N*cos(2*pi*Fn+Pn)。对于 n=1 点的信号,是直流分量,幅度即为 A1/N。

由于 FFT 结果的对称性,通常我们只使用前半部分的结果,即小于采样频率一半的结果,即可以是前向 FFT 也可以是后向 FFT,前向、后向各一半结果。

由此可知:假设采样频率为 Fs,采样点数为 N,做FFT 之后,某一点 n(n 从 1 开始)表示的频率为:Fn=(n-1)*Fs/N;该点的模值除以 N/2 就是对应该频率下的信号的幅度(对于直流信号是除以 N);该点的相位即是对应该频率下的信号的相位。相位的计算可用函数 atan2(b,a)计算。atan2(b,a)是求坐标为(a,b)点的角度值,范围从-pi 到 pi。要精确到 xHz,则需要采样长度为 1/x 秒的信号,并做 FFT。要提高频率分辨率,就需要增加采样点数,这在一些实际的应用中是不现实的,需要在较短的时间内完成分析。解决这个问题的方法有频率细分法,比较简单的方法是采样比较短时间的信号,然后在后面补充一定数量的 0,使其长度达到需要的点数,再做 FFT,这在一定程度上能够提高频率分辨力。

4.3 能量检测实现

4.3.1GNU Radio 的 USRP 初始化设置

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

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

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

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

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

网站地图

Top