使用RTL-SDR和Matlab Simulink玩转软件无线电(十)

2023-12-12 10 0

2.4 运行第一个RTL-SDR接收机程序

现在你已经安装好硬件支持包、驱动,并且把我们的自定义库加入了Matlab路径,你就可以开始尝试第一个程序了!这一节包含两个练习,第一个练习你可以运行Simulink实现的频谱分析仪,另一个是功能一样但是使用Matlab代码实现。在两个例子中,RF信号都由RTL-SDR接收,下变频,数字化,最后显示到MathWorks提供的频谱分析仪中(频域示波器)。我们对于这两个练习都录制了视频。

如果你之前没有使用MatlabSimulink的经验,没有信心直接使用RTL-SDR,你可能要先看一下第四章,然后再回来看练习2.52.6

练习2.5 初次使用RTL-SDRSimulink

这个练习帮助你尝试在Simulink里使用RTL-SDR。系统会获取并显示一些你身边的真实RF信号(实际的结果跟你的地理位置有关)。我们会展示在SimulinkRTL-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的疑难解决页面,或者访问MathWorksRTL-SDR硬件支持包的文档。

如果你对频谱图展示的信号不熟悉也不要紧,你可以在后面的章节学到更多有关信息,我们会详细讲频谱观察的知识。如果你觉得看够了,请点击停止按钮。

练习2.6 初次使用RTL-SDR: Matlab

SDR接收机在本练习中和练习2.5Simulink里的功能一样,它都用RTL-SDR获取RF信号并显示出来,只不过这次是使用Matlabm代码实现的。本例子中,我们会告诉你如何在Matlab中调谐RTL-SDR,以及如何控制硬件参数,比如前端增益,中心频率等。完成练习后,你也能验证Matlab里调用的硬件支持包是否配置正确,并且RTL-SDR正常运行。如果你想要学习Matlabm代码基础,你可以先看看第四章。

(a)打开Matlab。如果你没有打开Matlab,回到练习2.1(a)。等到Matlab初始化完毕,把当前文件夹改为/intro/

(b)你要打开的文件是rtlsdr_rx_startup_matlab.m,你会在当前文件夹的面板里找到。你可以双击文件,或者直接在pdf文件里点击如下链接。

(c)阅读代码。你会看到如何用这个函数的简介,分了好几段,它们的标题是:

参数

系统对象

计算

仿真

(d)观察参数。参数部分有许多变量,它们与练习2.5中的SimulinkRTL-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通信。如果还是不行,请查看本书网站上的疑难解答,或者访问MathWorksRTL-SDR硬件支持包文档。

总结

本章讲述了一些基础知识,你能掌握使用MatlabSimulink来运行RTL-SDR的应用。需要做一些工作来保证MathWorks的工具盒安装正常,路径设置,安装本书的练习文件,并且你也学会了本书后文的一些标准。这一章的目的是帮助你完成一些例子,你可以确认设备正常运行,并且实时观察空中的无线信号。下一章我们会进一步讲频谱观察,我们还会讲其他信号的例子,包括FM广播,GSM信号,LTE信号,还有你身边的其他种类的信号。

代码编程
赞赏

相关文章

关于红外相机热成像相机的一些sdk使用方法
typedef 函数指针用法
树莓派安装线性代数库 armadillo(debian系统)
树莓派下编译多个.cpp文件
泛在电力物联网、能源互联网与虚拟电厂
树莓派上跑一个opencv小程序(没有使用makefile)