使用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中的抽象类与abstract 关键字使用详解

《Java中的抽象类与abstract关键字使用详解》:本文主要介绍Java中的抽象类与abstract关键字使用详解,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧... 目录一、抽象类的概念二、使用 abstract2.1 修饰类 => 抽象类2.2 修饰方法 => 抽象方法,没有

MyBatis ParameterHandler的具体使用

《MyBatisParameterHandler的具体使用》本文主要介绍了MyBatisParameterHandler的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、概述二、源码1 关键属性2.setParameters3.TypeHandler1.TypeHa

Spring 中的切面与事务结合使用完整示例

《Spring中的切面与事务结合使用完整示例》本文给大家介绍Spring中的切面与事务结合使用完整示例,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录 一、前置知识:Spring AOP 与 事务的关系 事务本质上就是一个“切面”二、核心组件三、完

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

使用Python实现Word文档的自动化对比方案

《使用Python实现Word文档的自动化对比方案》我们经常需要比较两个Word文档的版本差异,无论是合同修订、论文修改还是代码文档更新,人工比对不仅效率低下,还容易遗漏关键改动,下面通过一个实际案例... 目录引言一、使用python-docx库解析文档结构二、使用difflib进行差异比对三、高级对比方

sky-take-out项目中Redis的使用示例详解

《sky-take-out项目中Redis的使用示例详解》SpringCache是Spring的缓存抽象层,通过注解简化缓存管理,支持Redis等提供者,适用于方法结果缓存、更新和删除操作,但无法实现... 目录Spring Cache主要特性核心注解1.@Cacheable2.@CachePut3.@Ca

C#下Newtonsoft.Json的具体使用

《C#下Newtonsoft.Json的具体使用》Newtonsoft.Json是一个非常流行的C#JSON序列化和反序列化库,它可以方便地将C#对象转换为JSON格式,或者将JSON数据解析为C#对... 目录安装 Newtonsoft.json基本用法1. 序列化 C# 对象为 JSON2. 反序列化

RabbitMQ 延时队列插件安装与使用示例详解(基于 Delayed Message Plugin)

《RabbitMQ延时队列插件安装与使用示例详解(基于DelayedMessagePlugin)》本文详解RabbitMQ通过安装rabbitmq_delayed_message_exchan... 目录 一、什么是 RabbitMQ 延时队列? 二、安装前准备✅ RabbitMQ 环境要求 三、安装延时队

Python ORM神器之SQLAlchemy基本使用完全指南

《PythonORM神器之SQLAlchemy基本使用完全指南》SQLAlchemy是Python主流ORM框架,通过对象化方式简化数据库操作,支持多数据库,提供引擎、会话、模型等核心组件,实现事务... 目录一、什么是SQLAlchemy?二、安装SQLAlchemy三、核心概念1. Engine(引擎)

Java Stream 并行流简介、使用与注意事项小结

《JavaStream并行流简介、使用与注意事项小结》Java8并行流基于StreamAPI,利用多核CPU提升计算密集型任务效率,但需注意线程安全、顺序不确定及线程池管理,可通过自定义线程池与C... 目录1. 并行流简介​特点:​2. 并行流的简单使用​示例:并行流的基本使用​3. 配合自定义线程池​示