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

2023-12-12 06:58

本文主要是介绍使用RTL-SDR和Matlab Simulink玩转软件无线电(十),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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信号,还有你身边的其他种类的信号。

这篇关于使用RTL-SDR和Matlab Simulink玩转软件无线电(十)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/483657

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Linux join命令的使用及说明

《Linuxjoin命令的使用及说明》`join`命令用于在Linux中按字段将两个文件进行连接,类似于SQL的JOIN,它需要两个文件按用于匹配的字段排序,并且第一个文件的换行符必须是LF,`jo... 目录一. 基本语法二. 数据准备三. 指定文件的连接key四.-a输出指定文件的所有行五.-o指定输出

Linux jq命令的使用解读

《Linuxjq命令的使用解读》jq是一个强大的命令行工具,用于处理JSON数据,它可以用来查看、过滤、修改、格式化JSON数据,通过使用各种选项和过滤器,可以实现复杂的JSON处理任务... 目录一. 简介二. 选项2.1.2.2-c2.3-r2.4-R三. 字段提取3.1 普通字段3.2 数组字段四.

Linux kill正在执行的后台任务 kill进程组使用详解

《Linuxkill正在执行的后台任务kill进程组使用详解》文章介绍了两个脚本的功能和区别,以及执行这些脚本时遇到的进程管理问题,通过查看进程树、使用`kill`命令和`lsof`命令,分析了子... 目录零. 用到的命令一. 待执行的脚本二. 执行含子进程的脚本,并kill2.1 进程查看2.2 遇到的

详解SpringBoot+Ehcache使用示例

《详解SpringBoot+Ehcache使用示例》本文介绍了SpringBoot中配置Ehcache、自定义get/set方式,并实际使用缓存的过程,文中通过示例代码介绍的非常详细,对大家的学习或者... 目录摘要概念内存与磁盘持久化存储:配置灵活性:编码示例引入依赖:配置ehcache.XML文件:配置

Java 虚拟线程的创建与使用深度解析

《Java虚拟线程的创建与使用深度解析》虚拟线程是Java19中以预览特性形式引入,Java21起正式发布的轻量级线程,本文给大家介绍Java虚拟线程的创建与使用,感兴趣的朋友一起看看吧... 目录一、虚拟线程简介1.1 什么是虚拟线程?1.2 为什么需要虚拟线程?二、虚拟线程与平台线程对比代码对比示例:三

k8s按需创建PV和使用PVC详解

《k8s按需创建PV和使用PVC详解》Kubernetes中,PV和PVC用于管理持久存储,StorageClass实现动态PV分配,PVC声明存储需求并绑定PV,通过kubectl验证状态,注意回收... 目录1.按需创建 PV(使用 StorageClass)创建 StorageClass2.创建 PV

Redis 基本数据类型和使用详解

《Redis基本数据类型和使用详解》String是Redis最基本的数据类型,一个键对应一个值,它的功能十分强大,可以存储字符串、整数、浮点数等多种数据格式,本文给大家介绍Redis基本数据类型和... 目录一、Redis 入门介绍二、Redis 的五大基本数据类型2.1 String 类型2.2 Hash

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Linux创建服务使用systemctl管理详解

《Linux创建服务使用systemctl管理详解》文章指导在Linux中创建systemd服务,设置文件权限为所有者读写、其他只读,重新加载配置,启动服务并检查状态,确保服务正常运行,关键步骤包括权... 目录创建服务 /usr/lib/systemd/system/设置服务文件权限:所有者读写js,其他