这里我们采用的是Ettus USRP B200,使用的驱动是UHD,所以我们可以在gr-uhd找到我们需要的source和sink模块。为了使用UHD Blocks,首先的必须装好UHD。用户可以在嘉兆科技的官网找到相应的安装方法。如果是直接从源代码编译安装的,安装成功后,在GNU Radio Companion中会发现UHD的相关模块。
首先我们利用现有的模块建立一个流图。然后,通过移掉相关模块来实现QPSK的发射。流图如下:
运行结果如下:
然后,我们移除一些和添加一些模块,来连接发射一个真实的信号。由于是真实的无线信道,所以移除noise和add模块。因为有硬件限制速率,所以也不再需要Throttle block。转变成真实的无线系统是很容易的,我们在UHD Sink里找到UHD USRP Sink模块,然后添加到刚才的流图的最后的输出当中,当做流图的信号发射模块。
GNU Radio支持变量模块,用户可以通过修改变量模块的值,来改变整个流图的值,而不用去依次修改,这是非常方便的。复制和粘贴你的samp_rate变量模块两次,分别来控制中心频率和增益。我们设置的中心频率和增益必须是你所使用的硬件设备支持的,不同的设备支持的频段可能是不同的。这里,我们设置中心频率为2.421GHz,增益设置为30dB,这是这个设备支持的发射增益的1/3。
现在,可以利用新的变量模块来调整UHD里面的参数了。打开UHD USRP Sink,你会看到一个参数列表,这里有许多的参数我们需要调整。向下滚动到列表的底部,相应地设置以下属性:
Samp Rate (Sps): samp_rate
Ch0: Center Freq (Hz: freq
Ch0: Gain (dB): gain
Ch0: Antenna: "TX/RX"
Ch0: Bandwidth (Hz): samp_rate
需要特别注意的一点是任何大于1的值都会引起削波,这意味着振幅被“截断”在1。总的来说,必须设置幅度小雨1。在这个例子中,我们将添加乘0.5乘法器的输出,以确保处于正确的幅度。现在,流图如下:
如果你执行你的图,你会看到通常的初始化和GUI启动除,而不是一切都被模拟,你实际上是发送你的QPSK信号。如果我们看一下分析仪上的频谱,你应该能够清楚地看到你选择的频率的信号。如果你看不到,仔细检查一下你的参数,也试着修改下增益。
可以看到,跟我们设置是符合的,这说明我们已经成功的发射了QPSK信号。
在这一节中,我们将建立一个工作调频收音机接收器,你可以使用它收听你当地调频广播电台。
一个基本的但是却非常有用的是你可以利用GNU Radio创建一个实时的频谱分析的fft,这是一个用软件实现的无线电频谱分析仪,利用它用户能够验证你的硬件是否工作正常,在这里,我们可以利用它来确定我们所在地区的广播电台的频段,以便我们可以调谐到相应的频段。
现在我们来创建一个流图。找到UHD USRP Source和QT GUI Sink模块。之前我们用固定的中心频率和增益,现在来把它变成实时可调的。找到QT GUI Range模块,添加两个这样的模块到流图中。设置相应的参数,这里使用的是USRP B200:
QT GUI Range 1:
ID: freq
Label: freq
Default Value: 1e9
Start: 70e6
Stop: 6e9
Step: 10e6
QT GUI Range 2:
ID: gain
Label: gain
Default Value: 0
Start: 0
Stop: 74
Step: 1
尝试修改你的samp_rate,会发现一些有意思的东西。这里设置的是32MSps.现在来设置UHD USRP Source的参数:
Ch0: Center Freq (Hz): freq
现在,我们的流图应该是这样的:
检查下你的设置是否正确。
现在运行你的流图,你应该会看到你真实的信号。滑动相关按钮,注意图形的变化。默认的GNU Radio QT FFT sink内有许多有用的特性,例如均值和保峰值,尽量花一些时间去熟悉它们。
现在,有一个基本的接收器应用程序实时显示接收数据,让我们建立一个有用的应用程序!我们将添加更多的功能到流程,模块和数量如下:
1x Rational Resampler
1x WBFM Receiver
1x Audio Sink
2x Variable
我们数据的流向是:USRP Source->Rational Resampler->WBFM Receiver->Audio Sink.按照这个顺序连接好这些模块,期间可能会有报错,现在我么就来修改相应的参数,来解决这些报错。
首先,添加两个variable blocks,设置相应的参数:
Variable:
ID: audio_interp
Value: 4
ID: audio_rate
Value: 48e3
现在让我们把之前的sample rate改为250e3(250kHz).
Variable: samp_rate
ID: samp_rate
Value: 250e3
然后,我们配置其余的3个模块。
Audio Sink
这是一个比较简单的模块。它需要信号流的输入并通过扬声器播放它们。这个模块在GR的音频库初始化,这个音频库是包含在GNU Radio配置里面的。这里面有一些常见的速率设置,最常见的就是48kHz,现在我们使用的就是这个速率的。
设置Audio Sink参数:
Sample Rate: audio_rate
OK to Block: "No"
现在你只需要把你的速率设置为你的声卡支持的速率就可以了。
Rational Resampler
我们设置的USRP Source的速率为samp_rate,数值为250e3。设置的Audio Sink的速率为audio rate,数值为48e3。这里有一个问题,我们的源数据的采样率不是音频速率的整数倍:250000/48000=5.208。为了解决这个问题,我们必须进行重采样,这就需要用到Rational Resampler模块,将输入的速率转化为输出的速率。
Rational Resampler允许我们调整数据流的速度,通过插值或者抽取实现的。因为进来的数据的采样率为250k,我们就设定抽取的数值为250k,但是采样率是一个浮点型数据,所以设置抽取数值的时候注意需要将其转换为整型。然后,我们插值,所以再来设置插入的数据。由于WBFM进行了一个4次插值,所以我们可以利用audio_interp和audio_rate设置插入的速率。这样,设置的参数如下:
Type: Complex->Complex (Complex Taps)
Interpolation: audio_rate * audio_interp
Decimation: int(samp_rate)
其余的参数,默认就可以了。
WBFM Receiver
现在来配置最后的解调模块。这里仅仅需要设置两个参数:输入的速率以及抽取值。通过之前的例子,我们知道,输入的速率就是Rational Resampler的输入速率,抽取的就是audio_rate.
Quadrature Rate: audio_rate * audo_interp
Audio Decimation: audio_interp
注意这里的插入和抽取速率是可以自己设定,我们使用参数,是为了保证得到的结果一定是整数。
现在参数调整已经好了,应该看不到红色的报错信息了。整个流图如下:
运行流图,应该可以看到如下的界面,不同的版本可能会有所差异。改变freq,调谐到本地的FM频段,通过电脑的扬声器就可以听到广播了。
现在我们已经利用GNU Radio成功的搭建了无线电的收发平台。这些应用相对来说是比较简单的,他们利用GNU Radio提供的模块直接连接硬件组成无线系统。也说明了,将仿真带入真实的无线电系统在GNU Radio平台下是一件比较容易的事情。
粤ICP备20009059号-1 © Copyright 2019. All rights reserved. ettus.com.cn