软件无线电基础
Exploring GNU radio(GNU radio探密)是GNU radio创始人Eric Blossom所写的,为我们用GNU radio工具构建软件无线电系统做了简明扼要的介绍。读完之后有几点需要自己注意的地方:
- ADC的主要特性:采样率和动态范围。
采样率是ADC测量模拟信号的速度,USRP上有4个采样率为64MHZ的ADC。动态范围是ADC区别最低信号值和最大信号值的精度,决定于ADC的位数,如8位的ADC最多能代表256个信号梯度。ADC的物理特性(主要从转换原理区分)和价格决定了这两项指标。
- 我们为什么需要一个RF前端?
根据奈奎斯特采样定律,如果想要无混叠的将信号从采样数据中恢复出来,那么采样率至少应是信号最大频率的2倍(低通采样定理)。如果ADC的采样频率是20MHz,则正常情况下无法接收90M—100M的FM广播。但是通过RF前端,我们可以实现这个功能。RF前端的功能就是降频,将高频降到中频。我们可以简单的把RF前端想像成一个黑盒,它的输入是高频信号,而输出则是以中频(IF)为中心频率的低频信号。
- GNU radio的两个开发工具:C++和Python。
其中复杂的信号处理模块block是由C++编写的,而Python将各个模块粘接起来,形成流图flow graph。dial_tone.py是GNU radio中的Hello World,在没有USRP硬件设备的情况下,只通过声卡就可以发出拔号音。代码是通过产生两个频率分别为350Hz和440Hz的正弦信号,叠加到audio.sink上进行播放。audio.sink是一个接收器,它将接收到的数据输入到声卡中进行播放。
- URSP:GNU radio最好的伙伴
虽然gnu radio支持很多的硬件设备来进行开发,但无疑usrp系统是它最好的伙伴。从USRP的启动过程中,可以看出它所包含的各部分:USB控制器(8051固件)、FPGA的配置(bitsteam,通过verilog编写)。硬件层次的开发处于开发的最高层,高于c++、Python层次代码的编写。
- FPGA的作用就是做上下变频,在数字中频和基带信号之间进行转换。
在接收模式下,标准的FPGA配置可以让我们选择所感兴趣的频段,并完成基带化和抽取、滤波等功能。和RF功能类似,只是这是在数字域的采样变换。这里涉及数字下变频转换器(Digital Down Converter,DDC)的原理。
- 软件无线电是一个令人兴奋的新兴领域。目前的应用包括TDMA波形、天文无线电、软件GPS和分布式频谱利用测量系统。虽然在技术、政策等各方面都还有着一定的限制,但是它目前所实现的应用实例以及未来完全的软件无线电系统都让人感觉到广阔的发展前景。我也将在这一广阔而灵活的软件无线电领域继续学习。
典型的软件无线电\接收流程图**:
天线-> 接收射频端-> 模数转换器-> 软件代码
典型的软件无线电\发射流程图**:
软件代码-> 数模转换器-> 发射射频端–> 天线
ADC:连接物理世界的模拟信号和计算机能处理的数字信号。模数转换器有两个主要特征参数:抽样率和动态幅度。抽样率可以理解为采样,动态幅度可以理解为在一定幅值范围的量化。根据nyquist采样定理,采样频率至少为抽样带宽的两倍。射频段可以将接收射频前端将输入的射频信号转换成输出的中频信号。
RX是模数转换,TX是数模转换。USRP的抽样率是64M符号/秒。这就意味着最高数字化32Mhz的带宽。