第3章 CHAPTER 3 软件无线电RTLSDR RTLSDR是Realtek公司开发的一款廉价的无线电接收设备,将该设备连接到普通计算机,就可以构成低成本的软件无线电平台。本章首先介绍RTLSDR的使用方法,然后介绍RTLSDR的应用接口函数,接着利用RTLSDR进行数据采集,对采集的数据进行理论解析,最后介绍RTLSDR硬件结构。 3.1RTLSDR简介 RTLSDR是Realtek公司开发的一款廉价的无线电接收设备,最初用于接收数字高清广播电视信号,后来Eric Fry和Antti Palosaari等研究发现该设备在特定模式下能够接收25MHz~1.75GHz频段内的所有信号,并可以通过USB接口将采集的I/Q信号传输到普通计算机,从而构成一款低成本的软件无线电(SoftwareDefined Radio,SDR)平台。 3.1.1RTLSDR的应用 将一个RTLSDR接上天线,然后接到计算机USB接口,就搭建成一个简易的软件无线电平台,如图31所示。 图31RTLSDR软件无线电平台 软件无线电平台通过RTLSDR采集射频信号。在25MHz~1.75GHz频段上,分布了大量的应用,如FM广播、航空系统、海事通信、ISM频段、应急通信、电视广播、音频广播、GPS卫星定位系统、2G/3G/4G移动通信和物联网系统等,具体频段如图32所示。 图32RTLSDR无线应用 3.1.2RTLSDR驱动安装 在使用RTLSDR之前,计算机需要预先安装相应的驱动程序。首先下载一款名为Zadig的软件https://zadig.akeo.ie/,然后将一个RTLSDR插入计算机任意USB接口,接着运行Zadig软件,在软件弹出的界面中,单击Options菜单,在下拉菜单中选择 List All Devices。 如果RTLSDR设备硬件正常,在设备列表中就可以看到BulkIn,Interface (Interface 0)选项,如图33所示。选择该选项,Driver选择WinUSB,最后单击 Reinstall Driver按钮,就可以进行RTLSDR驱动的安装。待驱动程序安装成功后,软件界面的左下方会显示提示信息: Driver Installation: SUCCESS。 图33Zadig软件 3.1.3SDR应用软件 驱动安装完成之后,可以利用SDR软件测试RTLSDR。常用的SDR软件有SDRSharp、HDSDR、GQRX 和SDRangel等。本节选择SDRSharphttps://airspy.com/download/和SDRangelhttps://github.com/f4exb/sdrangel两款SDR软件进行说明。 首先将RTLSDR插入计算机USB接口,然后启动SDRSharp软件,在SDRSharp界面左上角的Source列表下,选择RTLSDR(USB)。接下来设置一个本地FM电台频率(本例中设置为104.3MHz),单击Run按钮,就可以收听FM广播,如图34所示。这里需要注意,不同地区的FM电台频率不尽相同,如果没有听到广播,可以调节频率进行电台搜索。 图34SDRSharp软件 SDRangel是另一款专业的SDR测试软件,利用该软件,也可以接收并解调FM信号,如图35所示。值得一提的是,该软件支持无线信号发射。 图35SDRangel软件 同样,首先安装SDRangel软件。SDRangel安装完成之后,启动该软件,在左侧选项的FileInput中选择RTLSDR设备,如图35所示。接下来在左上角设置一个本地电台的中心频率(本例中设置为92.7MHz),最后单击Run按钮,如果可以听到FM广播,看到频谱图,就说明RTLSDR可以正常使用。 3.1.4RTLSDR发现趣事 早在2010年,Realtek公司就将RTL2832U芯片操作手册发布给Linux开发者,希望他们能够开发出该芯片在Linux系统下的驱动和软件。Eric Fry就是开发者之一,他用了大量时间研究USB接口传出的数据,并且发布了该芯片在Linux下的驱动。 两年之后,芬兰的一名工程专业的学生Antti Palosaari在V4L GMANE开发者论坛上表示,他能够用RTL设备侦听无线电信号。他发现,如果RTL设备工作于FM或数字信号广播(Digital Audio Broadcasting,DAB)模式,会直接输出原始未解调的信号,于是他使用RTL设备捕捉了17s的FM广播信号数据,并在网上询问是否有人可以用软件解调这个信号。信息发布36h后,在网友的合作下,他再次发布消息称: “我可能发现了一种超级廉价的SDR设备。” Antti Palosaari的这个发现激发了软件无线电开发者的兴趣,开发者着重研究了RTLSDR的USB协议。他们进一步研究发现,RTL2832U在FM或DAB模式下会直接输出8位的基带I/Q信号。此时Osmocom的一些开发者也在其中,由于之前有osmosdr开发经验,于是很快就能够通过Osmocom软件控制RTL2832U。 2013年之后,随着软件无线电技术的迅猛发展,RTLSDR作为SDR设备,其使用率远远超过了数字视频广播(Digital Video Broadcasting,DVB)接收机。再回顾Realtek 公司的设计初衷,可谓是“一次意外的收获”。这也得益于美国NooElec公司,该公司采用了R820T调谐器,将RTLSDR的频率接收范围扩展到25MHz~1.75GHz,使之成为目前占有率最高、成本最低、应用最广泛的SDR平台。 3.2RTLSDR的LabVIEW接口 对于专业的SDR开发者,仅仅了解SDR软件的使用显然是不够的,学习如何开发SDR软件才是根本。本节将以FM接收机为例,介绍基于LabVIEW的SDR软件开发过程。 3.2.1RTLSDR接口安装 LabVIEW要控制RTLSDR,需要在LabVIEW函数库中添加RTLSDR的接口函数。首先将rtlsdr函数 文件夹(本书配套程序)复制到主机LabVIEW的安装文件目录下,如\National Instruments\LabVIEW 2013\instr.lib,启动LabVIEW, 图36RTLSDR接口函数 在Instrument I/O→Instrument Drivers→rtlsdr→VIs路径下就能够找到RTLSDR在LabVIEW中的接口函数模块,如图36所示。 3.2.2RTLSDR接口函数 RTLSDR接口函数介绍如下。 (1) open函数: 查找并开启设备,返回设备句柄。通过设备句柄,就可以对RTLSDR的参数进行配置。 (2) set sample rate函数: 设置设备的I/Q数据的采样率,最大采样率一般不应超过2.4M,否则会有数据丢失。 (3) set center freq函数: 设置中心频率,有效范围为25MHz~1.75GHz。 (4) set freq correction函数: 用于RTLSDR频偏校正,RTLSDR会随机产生约±20ppm频偏,在一些典型应用中,使用前需要预先进行频偏校正。 (5) set tuner gain函数: 设置射频调谐器的增益,有效值为{0,9,14,27,37,77,87,125,144,157,166,197,207,229,254,280,297,328,338,364,372,386,402,421,434,439,445,480,496},该值表示10倍分贝值,如115表示11.5dB。 (6) set agc mode函数: 设置调谐器内部自动增益控制(Automatic Gain Control,AGC)电路,AGC能够将接收信号的动态范围调整到合适的ADC电平。 (7) reset buffer函数: 重新设置RTL2832U内部的数据接收缓存。 (8) read sync函数: 将RTL2832U数据通信方式设置为同步通信方式。 (9) close函数: 释放句柄资源,供下次调用时分配。注意,close函数不可省略,否则再次运行时会报错。 3.2.3RTLSDR数据采集流程 在LabVIEW数据采集系统中,一般逻辑是先配置设备,然后进行循环读,最后关闭设备,如图37所示。 图37LabVIEW数据采集的一般流程 RTLSDR的数据采集过程也遵循这一逻辑。接下来,本节将通过RTLSDR数据采集的例子说明RTLSDR接口函数的使用方法,如图38所示。 LabVIEW编程步骤如下。 (1) 利用open接口函数搜索RTLSDR设备句柄。首先新建一个空白的VI,打开程序框图,从函数选板中导入open和close两个函数模块,然后在前面板中创建一个数值显示控件DevRefnum,用于显示open函数的输出值,也就是设备句柄。 (2) 在计算机的USB接口插入一个RTLSDR,运行程序,若RTLSDR接口函数安装正确,并且RTLSDR正常连接,那么DevRefnum将返回设备句柄,否则返回0,如图39所示。需要注意的是,这里open.vi输入的Device index(设备索引)值为0。 图38RTLSDR数据采集流程 图39设备句柄 (3) 在程序框图中依次创建set sample rate.vi、set center freq.vi和reset buffer.vi 3个函数模块,如图310所示。注意,配置这些函数模块都需要设备句柄信息。利用set sample rate.vi接口函数设置I/Q采样率,利用set center freq.vi接口函数设置设备的中心频率,利用reset buffer.vi接口函数重设缓存。 (4) 创建一个While循环,再创建一个read sync.vi函数模块,通过这个模块,可以读取缓存中的I/Q数据,如图310所示。 需要注意的是,在read sync.vi函数模块中,可以设置单次读取数据的长度。需要指出的是,从RTLSDR中读取的数据格式是I1Q1I2Q2I3Q3…InQn,采用Decimate 1D Array模块可以将I/Q数据分开,如图310所示。 (5) 将I/Q数据的时域波形和频谱显示出来。创建两个波形图和一个频谱测量模块,在进行频谱测量之前,先构建波形,将数组I或数组Q作为波形数组Y的值,将采样率的倒数作为采样间隔,如图310所示。 图310RTLSDR数据采集程序 (6) 创建一个close.vi函数模块,用于释放句柄资源,如图310所示。这里需要特别注意,在程序运行时,如果直接单击LabVIEW程序“停止”按钮,close.vi函数将不会被执行,再次运行程序的时候,可能会因为找不到设备句柄而无法正常运行。因此,需要单击While循环中的stop按钮停止程序,此时close.vi会被执行,再次运行的时候就不会报错。 (7) 切换到前面板,配置sample rate和center frequency两个参数。sample rate设置为200k,center frequency设置为104.3MHz,运行程序,可以获得该频段信号的时域波形和频谱,如图311所示。 图311I/Q数据采集波形图 3.3FM电台搜索 在RTLSDR数据采集实验中,我们已经能够利用RTLSDR和LabVIEW接口模块获取FM频段的I/Q信号,为了深入解析这些信号,还需要补充一些必要数学知识,如信号的复数表示等。接下来,本节将通过FM电台搜索实例介绍RTLSDR的控制方法。 3.3.1信号的复数表示 在通信系统中,一个实带通信号st可以表示为 st=a(t)cos[2πfct+φ](31) 其中,a(t)为幅度; fc为载波频率; φ表示相位。将式(31)展开可得 st=atcosφcos2πfct-a(t)sin(φ)sin(2πfct)(32) 令sIt=atcos (φ),表示同向分量; sQt=a(t)sin (φ),表示正交分量,则式(32)进一步化简为 st=sItcos2πfct-sQtsin(2πfct)(33) 将式(33)进一步写成复数形式,即 st=R{sIt+jsQte2πfct}(34) 式(34)中的复数sIt+jsQt表达了基带信号的信息,该复数称为复基带信号,设sL(t)表示复基带信号,即 sL(t)=sIt+jsQt(35) 需要指出的是,实际发射和接收的信号都是实信号,而复信号只是等价的数学表达,这种表达使数学计算更加简洁。 3.3.2FM的复基带表示 在实际FM调制和解调的过程中,载波调制和解调是在射频前端完成的。在计算机端,只需完成FM复基带信号的设计,或者将复基带信号还原成原始基带信号。设Ts为I/Q采样间隔,kf为调制灵敏度,Ac为载波幅度,mnTs为需要传输的数字基带信号,则复基带信号为 sL(nTs)=sInTs+jsQ(nTs)(36) 其中,根据FM的调制原理,I路信号为 sI(nTs)=AccosφnTs=Accos2πkf∫mnTsdt(37) Q路信号为 sQnTs=AcsinφnTs=Acsin2πkf∫mnTsdt(38) 注意,这里复基带信号sL(nTs)是数字信号。 根据FM复基带信号的产生过程,可以逆推出FM的解调过程。从RTLSDR中获得复基带信号sL(nTs)后,只需反正切法求出sL(nTs)的相位,然后对相位进行微分处理,就可以还原基带信号mnTs。 3.3.3RTLSDR控制参数 1. 设备索引 RTLSDR与计算机之间通过USB接口通信,需要配置设备的索引。如果只插入一个RTLSDR,那么设备索引为0; 如果同时插入两个RTLSDR,先插入设备的索引为0,后插入设备的索引为1。 2. I/Q采样率 I/Q采样速率为采样间隔的倒数,即每秒钟采样值的数量。I/Q采样是通过USB接口交织发送的,在FM解调实验中,由于语音信号的频率范围为0~20kHz,所以I/Q采样速率设置为200kHz就已经足够。 3. 中心频率 FM广播的中心频率范围为87.5~108MHz。由于RTLSDR石英振荡器稳定度较低,实际产生的振荡频率可能会与我们设定的目标中心频率存在大约±20ppm的频率偏差。 4. 调谐器增益 调谐器增益指的是R820T增益,即是在A/D转换之前中频信号的增益,有效值范围为0~49.6dB。需要注意,增大增益的同时也会放大噪声。 5. 采样缓存 采样缓存是一个先入先出的队列,寄存的对象是I/Q采样值,计算机通过读函数可以读取采样缓存中的数据。需要注意的是,在读取数据之前,需要对采样缓存进行重置。 3.3.4FM接收机设计模型 在3.2.3节中,调用了RTLSDR的接口模块函数,实现了数据接收功能。本节将利用这些接口函数。实现一个FM接收机。从结构上看,仍然采用RTLSDR的数据采集模型,不同的是,增加了频谱计算和频谱显示两个功能模块,各模块之间的逻辑连接关系如图312所示。 图312FM接收机设计模型 3.3.5FM 电台搜索实例 接下来,本节将通过一个FM电台搜索实例,进一步解释从RTLSDR中获取的数据。实验步骤如下。 (1) 复制3.2.3节所示的数据采集程序,重命名VI并保存,为了确保程序的正确性,运行程序,验证是否能够成功获取数据。 (2) 利用Decimate 1D Array模块将I/Q数据分成两路,然后转换成对应的复数组,并利用XY图将其显示出来,如图313所示。 (3) 将中心频率设为104.3MHz(或本地其他可用电台频率),运行程序。根据3.3.2节的理论分析,有 sInTs=AccosφnTs,sQnTs=AcsinφnTs(39) 理论结果应是一个圆形,但是由于受噪声、A/D分辨率等因素的影响,实际结果并不是一个理想的圆,如图314所示。 图313复数组构成 图314FM复基带信号XY图 (4) 测量FM信号的频谱。在Signal Processing→Waveform Measurements路径下找到FFT Power Spectrum and PSD模块,利用这个模块,就可以测量FM信号的频谱,完整的程序框图如图315(a)所示,功率谱如图316(b)所示,可以看出,在中心频率104.3MHz处有一个明显的峰值。 图315FM信号解析 (5) 修改中心频率,从功率谱中发现电台。首先把中心频率设置为88MHz,采样率设置为2.4MHz,每间隔1MHz扫描频率,直到108MHz。从功率谱扫描中可以发现广播电台的频谱分布,也能够看出电台信号强弱。需要注意的是,由于接收的FM信号与接收地理位置和天线有关,不同广播电台的信号强度可能会不一样,有些信号较弱的广播电台可能要调高增益才能从噪声中区分出来。 3.4FM信号解调和播放 RTLSDR接收到FM信号后,需要对FM信号进行解调处理。接下来,本节将介绍FM信号的解调流程、程序框图以及基于队列的FM接收机。 3.4.1FM信号解调流程 根据2.4.1节的反正切原理,FM信号解调和播放大体分为4步,依次是相位计算、微分处理、下采样和声音播放,如图316所示。 图316FM接收机模型 (1) 相位计算。将复数组转换为极坐标,就可以获得相位,由于相位值分布在[-π,π]范围内,因此还需要进行相位展开处理。 (2) 微分处理。对相位求导直接可以获得基带信号。 (3) 下采样。由于接收信号的I/Q采样率为286.65kHz,而普通音乐播放设备的采样率是44.1kHz,因此需要进行波形下采样。 (4) 声音播放。在Graphics & Sound→Sound→Output路径下找到声音播放相关模块。需要注意的是,下采样后的信号输入扬声器之前要进行归一化处理。 3.4.2RTLSDR解调程序框图 完成程序框图编程之后,回到前面板设置参数,运行程序,如果程序正确,则会有断断续续的声音播放出来,这是因为将I/Q数据采集模块、FM解调模块以及声音播放模块通过串行的方式放在一个循环之中,这种方式增大了循环时间间隔,会造成声音“卡顿”的问题。FM接收机的程序框图如图317所示。 3.4.3基于队列的FM接收机 为了解决声音“卡顿”问题,可以应用1.3.6节中介绍的生产者消费者设计模式,利用这种设计模式,可以将I/Q数据采集模块和I/Q数据处理模块分开,以增大I/Q数据采集效率,如图318所示。 图317FM接收机: 单循环方案 图318FM接收机: 生产者消费者方案 在这个生产者消费者设计模式中,采用了Data Stream队列结构来实现。在生产者循环中,不断从RTLSDR中获取I/Q数据; 在消费者循环中,进行FM解调、声音播放以及频谱显示等信号处理。 在消费者循环中,同时完成FM解调、声音播放以及频谱显示功能,也会造成声音卡顿现象,可以再创建一个队列,用于处理声音播放功能。关于这个问题,将在第4章进一步介绍。 3.5RTLSDR硬件结构 RTLSDR硬件结构采用典型的数字中频接收机结构。接下来,本节将首先介绍RTLSDR内部电路板,然后介绍RTLSDR信号处理的流程,接着详细介绍RTLSDR的两枚核心芯片: R820T和RTL2832U,最后介绍数字中频接收机结构。 3.5.1RTLSDR硬件简介 RTLSDR内部硬件电路板如图319所示,可以看出,RTLSDR主要由R820T调谐器芯片、RTL2832U两枚芯片构成,其中R820T负责模拟信号下变频,RTL2832U负责I/Q信号采集和转发。 图319RTLSDR 内部电路板 RTLSDR电路板上还包含LED、静电保护(Electrostatic Discharge,ESD)二极管、红外线(Infrared Radiation,IR)传感器、晶振、带电可擦可编程只读存储器(Electrically Erasable Programmable Read Only Memory,EEPROM)以及USB 2.0接口等器件。 3.5.2RTLSDR信号处理流程 RTLSDR通过R820T和RTL2832U将射频信号变换为基带信号。RTLSDR内部信号处理流程如图320所示。 图320RTLSDR内部信号处理流程 首先,天线将射频信号通过MCX(推入式)连接器耦合到R820T。R820T调谐器将射频信号下变频为中频信号。RTL2832U芯片接着对中频信号进行A/D采样、数字下变频等处理,并获得基带信号。最后,USB 2.0接口将基带信号送入计算机做基带信号处理,如基于LabVIEW的信号解调处理。 3.5.3调谐器芯片R820T 调谐器芯片R820T用于射频(Radio Frequency,RF)频段选择,并将接收到的射频信号下变频到一个固定的中频。R820T可以接收42~1002MHz的射频信号,中频频率为3.57MHz,其内部结构如图321所示R820T High Performance Low Power Advanced Digital TV Silicon Tuner Datasheet。 图321R820T内部结构 其中,RF_IN是MCX连接器接口,用于连接天线,以耦合空间中的射频信号。由于天线会使集成电路累积静电荷,最终可能会导致器件损坏,实际电路中采用了ESD二极管连接MCX,接地放电以保护集成电路。LNA(低噪声放大器)可以在放大微弱信号的同时提供较高的信噪比。RF FILTER(射频滤波器)是镜像抑制滤波器,其主要作用是滤除镜像信号和相邻信道干扰。混频器对射频信号进行模拟混频,其本地振荡信号由压控振荡器(VCO)模块提供。IF FILTER(中频滤波器)在滤去上变频成分的同时抑制频带外信号,起到选频作用。VGA为可变增益控制放大器。 3.5.4控制器芯片RTL2832U RTL2832U芯片是RTLSDR的控制核心,最初用于DVBT(地面无线数字电视系统)。它最主要的功能是将输入中频信号变换成数字基带信号,并将这些数据传递给计算机。RTL2832U芯片内嵌高速的模拟数字转换器(Analog to Digital Converter,ADC),采样率为28.8MHz,采样位数为8位。 RTL2832U芯片除了集成ADC之外,还集成了8051微嵌系统,负责整个板载资源的控制,其内部结构如图322所示。 图322RTL2832U内部结构 从图322可以看出,RTL2832U首先利用ADC对中频信号进行采样,这里的中频信号带宽为6MHz,ADC以28.8MHz的采样率进行采样。接着,采样数据在芯片内部进行一次数字下变频,这一过程又分为两步: ①将I/Q采样信号分为两路,一路与本振信号进行混频,另一路与经过90°相移器的本振信号进行混频; ②利用数字低通滤波器滤除倍频分量,得到两路I/Q基带信号。最后,利用抽取器对I/Q信号进行抽取处理,降低数据量以减轻后续计算机信号处理的负担。注意: RTL2832U在SDR(Single Data Rate)模式下,抽取后的I/Q 数据按I1→Q1→I2→Q2…依次交错输出,通过USB 2.0送到计算机。RTL2832U在DVBT模式下,内部的数字信号处理(Digital Signal Processing,DSP)模块还进行了重采样、同步、快速傅里叶变换(Fast Fourier Transform,FFT)、信道估计和均衡、符号逆映射、信道解码和解交织PID(比例积分微分控制)滤波等数字信号解调处理。一款RTLSDR的原理图如图323所示。 3.5.5数字中频接收机结构 RTLSDR本质上是一种数字中频接收机,如图324所示,它的解调过程分为模拟信号处理和数字信号处理两级。在模拟信号处理中,通过模拟电路把射频(RF)降到中频。在数字信号处理中,通过数字信号处理技术把中频降到基带,更重要的是解调过程可以用软件设置RF频率,这样就能够自定义需要的RF频率范围。 RTLSDR内部信号处理流程采用低中频接收机结构,射频信号经过天线系统后,首先利用低噪声放大器进行放大,然后进行镜像抑制滤波,接着通过混频器将射频信号下变频到中频,在中频段对信号进行中频滤波,并进一步放大以及自动增益控制(AGC),接着将中频信号送入ADC进行采样。ADC采样之后,信号就在数字域进行处理,首先对数字信号进行 图323RTLSDR的原理图 (源于“老邵的开源世界”) 图324数字中频接收机结构 数字下变频解调,然后依次进行抽取和数字滤波处理,最后输出基带信号。 数字低中频结构之所以能够被广泛采用,是因为它能够较好地解决硬件实现过程中存在的一些问题。例如,采用数字下变频技术,能够有效避免模拟信号中的I/Q不均衡问题,能够有效解决噪声消除和直流偏置效应。此外,中频信号的滤波和解调都可以用软件编程来实现,以灵活适应不同通信标准的要求。关于低中频接收机结构,将在第7章详细介绍。 3.6本章小结 本章介绍了一种低成本的软件无线电平台RTLSDR。首先,本章介绍了RTLSDR 驱动程序安装和验证,介绍了RTLSDR在LabVIEW中的接口函数以及这些函数的使用方法。 然后,通过RTLSDR数据采集实例,介绍了RTLSDR的控制方法,为了解析采集的I/Q数据,还介绍了信号的复数表示法。 接下来,通过基于RTLSDR的电台频谱扫描和FM解调实例,进一步介绍了RTLSDR的使用方法。 最后,介绍了RTLSDR硬件结构、RTLSDR的信号处理流程以及软件无线电接收机结构。