2.4 运行第一个RTL-SDR接收机程序
现在你已经安装好硬件支持包、驱动,并且把我们的自定义库加入了Matlab路径,你就可以开始尝试第一个程序了!这一节包含两个练习,第一个练习你可以运行Simulink实现的频谱分析仪,另一个是功能一样但是使用Matlab代码实现。在两个例子中,RF信号都由RTL-SDR接收,下变频,数字化,最后显示到MathWorks提供的频谱分析仪中(频域示波器)。我们对于这两个练习都录制了视频。
如果你之前没有使用Matlab和Simulink的经验,没有信心直接使用RTL-SDR,你可能要先看一下第四章,然后再回来看练习2.5和2.6。
练习2.5 初次使用RTL-SDR:Simulink
这个练习帮助你尝试在Simulink里使用RTL-SDR。系统会获取并显示一些你身边的真实RF信号(实际的结果跟你的地理位置有关)。我们会展示在Simulink中RTL-SDR的中心频率的调谐方法,并且教你如何设置前端增益。做这个练习的过程也能检验你的硬件支持包对于Simulink已经正确配置,并且你的RTL-SDR的硬件工作正常。
(a)打开Matlab。如果你没打开Matlab,回到练习2.1(a),打开后,把当前文件夹设置为/intro。
(b)你需要的文件是rtlsdr_rx_startup_simlink.slx,它会显示在Matlab窗口的当前文件夹下。你可以在那里双击这个模型,或者如果你是以PDF的方式在读本书,你也可以直接单击下方的这个链接,然后直接打开。
(c)浏览模型。模型加载完毕后,你应该看到下方这个Simulink窗口,你可以运行它来接收信号。
RTL-SDR接收机模块(装好硬件支持包后,Simulink就支持了)是你的RTL-SDR的接口,使用中心频率模块来设置RTL-SDR的频率,调谐器增益也是这样设置的。图1.11展示了RTL-SDR中具体哪个硬件跟这些参数对应。在1.6节里说过,RTL-SDR接收的信号以8位采样值从设备中流出来。这些IQ采样值从RTL-SDR接收机模块的Data口出来,是复数信号。想了解复数的细节,请看第五章。
信号输入给两个频谱分析仪,第一个是快速傅立叶(FFT)表示的,它的带宽是fs,正好是RTL-SDR接收机的采样率。第二个频谱分析仪是瀑布图,带宽跟第一个一样。
(d)打开接收机文档。这些模块上方的长方形包含了文件信息,对应的联系,也提供了本书的pdf文件,双击它看看。
(e)检查RTL-SDR接收机模块的参数。双击RTL-SDR接收机模块,查看它的参数窗口。你可以看到中心频率和增益参数是由输入口指定的。把这些参数这样传入可以在模型运行时更改。其他参数可以在对话框里设置。
RTL-SDR的地址
RTL-SDR的采样率
RTL-SDR调谐器频率准确度
模块输出数据类型
输出帧里的采样量
是否允许测试输出
你可以在对话框里看到这些
回到1.7节,确认一下你知道这些参数与RTL-SDR硬件的关系。完成后点击取消按钮,回到Simulink。
(f)准备运行。熟悉模型后,可以试试了,看一下信号吧!RTL-SDR要插在电脑上,并且要有天线,请参考练习2.3。参照练习2.3(c)在Matlab命令行里输入sdrinfo,检查Matlab能够与RTL-SDR通信。
看看Simulink上方的工具栏,注意结束时间框里设置了inf。表示程序会不停运行(结束时间是无限),从你开始运行一直到你手动点击停止,这样你想看多久就看多久。看一下运行和停止按钮。
(g)运行程序。点一下运行按钮。左下角的初始化出现几秒后,程序会开始运行,你会看到两个频谱仪。如果必要你可以拖动它们的位置。你会看到一些熟悉的信号,只要它们正好在你周围。我们的例子默认设置为观察100MHz的频率,这是FM频段,所以你看到的应该是你周围的FM信号。如果你没有看到明显的信号,也不要担心。
(h)如果你在频谱图里可以看到任何信号,你都成功了。你所有的设置都正常。如果不行,请点击停止按钮,再检查一下天线正确连接在RTL-SDR上,Matlab可以通过sdrinfo命令来检查与RTL-SDR的连接。如果频谱观察仍然没有信号,请上desktopSDR.com的疑难解决页面,或者访问MathWorks的RTL-SDR硬件支持包的文档。
如果你对频谱图展示的信号不熟悉也不要紧,你可以在后面的章节学到更多有关信息,我们会详细讲频谱观察的知识。如果你觉得看够了,请点击停止按钮。
练习2.6 初次使用RTL-SDR: Matlab
SDR接收机在本练习中和练习2.5的Simulink里的功能一样,它都用RTL-SDR获取RF信号并显示出来,只不过这次是使用Matlab的m代码实现的。本例子中,我们会告诉你如何在Matlab中调谐RTL-SDR,以及如何控制硬件参数,比如前端增益,中心频率等。完成练习后,你也能验证Matlab里调用的硬件支持包是否配置正确,并且RTL-SDR正常运行。如果你想要学习Matlab的m代码基础,你可以先看看第四章。
(a)打开Matlab。如果你没有打开Matlab,回到练习2.1(a)。等到Matlab初始化完毕,把当前文件夹改为/intro/
(b)你要打开的文件是rtlsdr_rx_startup_matlab.m,你会在当前文件夹的面板里找到。你可以双击文件,或者直接在pdf文件里点击如下链接。
(c)阅读代码。你会看到如何用这个函数的简介,分了好几段,它们的标题是:
参数
系统对象
计算
仿真
(d)观察参数。参数部分有许多变量,它们与练习2.5中的Simulink的RTL-SDR接收机模块对应。中心频率设置成100MHz(100e6),采样率是2.4MHz(2.4e6),这些值都跟前面一样。其他参数包括输出数据的帧大小、类型和程序运行时间。注意这个脚本只会运行60秒。如果需要,你也可以把这个参数改大一些。
(e)观察系统对象。这个模型只是一个上手教程,没有用到多少对象,我们只用了3个系统对象。第一个是RTL-SDR对象,它读取了之前设定好的参数值并送入模块。第二个模块是频谱分析仪,类型与Simulink里的一样。它设置成了FFT类型。最后还有一个频谱分析仪模块,它设成了瀑布图类型。这两个都与练习2.5一样。如果你觉得你没有完全了解系统对象的原理,我们推荐你看4.5节。
(f)观察计算部分。rtlsdr_frmtime值是通过计算一帧的数据量除以采样率得到的,它用来控制仿真运行的时间。
(g)观察仿真部分。最后部分是仿真运行的地方,接收功能也在这里实现。确认Matlab可以与RTL-SDR通信后,进入while循环,这个循环只要不超过sim_time就不停止。使用step函数,从RTL-SDR里获取一帧数据,存储到rtlsdr_data变量中。这个帧是一个矩阵,长度时rtlsdr_frmlen,默认时4096个采样值。再使用一次step函数把它送入频谱分析仪,这样就能用FFT函数来对这些数据进行运算并显示出结果。最后run_time计数器在每次运行的最后增加了每一帧需要消耗的时间。
(h)打开接收机文档。这个接收机在Matlab里实现,我们无法在这里加入一个包含文档的长方形模块,我们做了一个函数来代替这个操作。输入如下命令到Matlab的命令行,就能看到文件信息,对应练习,以及本书pdf电子版。
(i)准备运行脚本。你熟悉脚本以后,你马上就能试试看信号了!保证RTL-SDR接入电脑,然后它的天线也插好了,参考练习2.3。使用sdrinfo命令,检查Matlab能够与RTL-SDR通信,参照练习2.3©
(j)运行脚本。如果你看到Matlab界面上方的Editor选项卡,你会找到一个运行按钮。
单击运行按钮,等待几秒钟,Matlab就会与RTL-SDR建立连接并开始运行,你会在频谱分析仪里看到频域信息。函数在sim_time规定的时间里,会不停之行while循环,不停地从RTL-SDR里把数据帧给Matlab,并且更新到频谱分析仪里。
如果你想要在sim_time时间到达前就停止程序,可以回到命令窗口并按下Ctrl-C,这样会终止循环。注意:这会使程序输出一个红色的错误信息!你没有做错,只是一个异常提示。
(k)FFT和瀑布型频谱分析仪在运行的过程中会同时出现。你应该能看到和下图类似的信号,比较明显的一个波峰。与练习2.5一样,RTL-SDR调谐到100MHz,这是FM频段,你看到的很有可能就是FM信号。如果你没有看到明显的信号不要担心。
(I)如果你什么都看不到,或者有报错,按Ctrl-C停止程序,然后检查天线是否正确插入RTL-SDR,并且Matlab能与RTL-SDR通信。如果还是不行,请查看本书网站上的疑难解答,或者访问MathWorks的RTL-SDR硬件支持包文档。
总结
本章讲述了一些基础知识,你能掌握使用Matlab和Simulink来运行RTL-SDR的应用。需要做一些工作来保证MathWorks的工具盒安装正常,路径设置,安装本书的练习文件,并且你也学会了本书后文的一些标准。这一章的目的是帮助你完成一些例子,你可以确认设备正常运行,并且实时观察空中的无线信号。下一章我们会进一步讲频谱观察,我们还会讲其他信号的例子,包括FM广播,GSM信号,LTE信号,还有你身边的其他种类的信号。