LimeSDR 中文教程 (五)

这是本教程的第五篇,我们上一次看了软件无线电的软件部分,使用了一个相对简单的流图开发环境Pothos。从理论的角度比再之前的几篇文章简单些。

 

这次我们要稍微深入看一下,我们这次的例子用代码来写。

 

快速复习

根据维基百科的定义,软件无线电是:

 

把以往用硬件实现的组件(混频器、滤波器、放大器、调制/解调器、检波器)用软件方式实现的无线电通信系统

 

现在是时候复习下前面学到的东西了:

第一篇:介绍 第二篇:匹配和LMS7002M

这两篇文章我们讲了软件无线电的射频部分,是用硬件实现的。

 

第三篇:一个实际的例子

我们开始调整一些与SDR硬件有关的参数,这是数据在纯硬件中处理的最后阶段了,其它地方的数据全部在软件中处理(有一些特殊情况也会用到FPGA)。

 

第四篇:Pothos使用

从这里开始灵活性更高了。之前我们还在物理世界中,受到硬件模块的限制。虽然可以从100kHz调谐到3.8GHz,很神奇,但是硬件还是要用硅实现,受限于它的设计,它还是只能做有限的事情。而从这一篇文章开始,我们着手研究软件:我们在FM例子里加入了滤波器、解调器、检波器,这些都是用软件实现的。

 

有一段漏了

第三篇和第四篇文章中间有一些不连贯,我们先讲了用LimeSuiteGUI,然后直接跳到Pothos,后者是一个很上层的软件开发环境,因此大多数底层参数都做了抽象。我们怎么知道哪些设置开启了?是否有东西在它们之间呢?为了回答这些问题,我们现在深入看一下LMS7002M的控制。

 

进入深水区

我们现在想要深入了解,那么就会进入一些比较复杂的领域。如果你把之前文章的公式都理解透彻了,还想来学点东西,也许我们下面讲的就是你需要的。那么我们现在来介绍另一个软件GNU Octave。Ocatave是一个类似Matlab的开源软件,支持数学计算,也可以当作一个软件开发环境。如果你需要做一些复杂的数学实验,octave很适合你。而其他不怎么研究数学的人也不用台担心,因为有很多现成的例子,而且用的编程语言也很好懂。

 

如果你想要真正使用Octave,可以看看这里的安装教程,安装起来比Pothos和LimeSuite麻烦些。我们会用ASK的例子,这个例子更接近一个试验品,而不是一个商用软件。

 

在写这些例子的时候,我用的环境是Windows。我没有测试过Linux下的情况,可能会有些小问题,但是应该还是可以解决的。

 

如果你要用Linux,你要确保安装了所需的软件包,包括信号和通信软件包,还有Lime的软件包。除此以外,还要安装gnuplot,你可以输入sudo apt-get install gnuplot,如果没有它你可能会碰到错误。这是对全新安装的Ubuntu来说的。

 

如果你直接从上面的链接里下载了这些文件,你要注意:只有ASK和FSK例子可以直接运行。其他人的例子都是蜂窝网络频段的,你需要有使用许可才可以在那些频段发射。

 

GNU Octave

我们安装这些应用就是为了探索SDR的软件部分,Octave应该能满足需要。在说SDR的参数之前,我们先来看看这个软件包的介绍。Matlab和Octave本来都是为了解决数学问题的。这样用它们来实现的混频器、滤波器、放大器、调制解调器、检波器的原型就很合适。因为我们需要很多数学工具。

简单举个例子,要用软件实现增益,我们只需要在数字部分做一个简单的乘法实现增益或者除法实现衰减就行。尽管概念很简单,但是实现比较难,因为采样点太多,我们会得到一个很大规模的复数矩阵。用Python或者C语言来做处理很麻烦,因为这样会产生一个多维数组。

 

Octave/Matlab(矩阵实验室)就是为矩阵处理设计的,这样就会简单好多。为了验证这一点,我们来生成一个带有IQ分量的正弦波。这些代码可以直接写成一个完整的程序,也可以在命令行里输入。

 

这段代码就可以生成任何频率的正弦波。很简单,但是这还不是IQ数据,我们还要做点修改,注意用j表示复数:

 

输入如下命令来绘制图形:

 

 

我们要绘制一半的波形可以输入:iqsinehalf = iqsine/2。这就是数学语言的力量。尽管自己生成信号很有趣,ocatave还可以用于帮助你调制波形。比如,在通信软件包里有一个命令fmmod,你可以通过名字猜到,这是FM调制。

信号软件包里提供了滤波器和测量工具,比如FFT和频谱图。如果你想要研究SDR,你可能很难找到一个更强大的软件。

如果你还没认可Octave的能力,你可以边看ASK例子,边考虑,我们如何生成并发射这个波形。

 

调幅键控(ASK)

ASK是一个很常见的编码方式,在简易无线电设备中经常使用,比如你的车库门钥匙。技术很简单,你可以直接读波形来理解,下图的数据是1101 0010编码后产生的,用一个单音来表示1,当单音不存在时表示0.

 

这是一个非常简单的技术。除此之外,而且这种技术一般都用于开放频段,所以我们打算把这个例子作为基础。

 

重要:尽管在英国866MHz是开放的,但是其它国家可能不是,你可能要根据当地法规修改参数。在欧洲,这个频段有最大的发射功率限制。所以和别的例子一样,你不能用高增益天线发射,如果你不确定,可以考虑用内部环路或者电缆代替。

 

现在加载ASK.m文件,根据你的安装环境不同你可能要在你的代码里加入一行:在pkg load communications下面加上pkg load limesdr。

 

接下来运行例子,你就能发射波形了。你也可以设置useLimeSDR=false,这样你就不需要LimeSDR也能测试。

 

 

 

还是个黑盒

你可能还会有疑惑,到底在做什么?我们现在来讲讲在做什么。你可以看到文件夹下有一个类似第三篇文章里讲的ini文件。我们打开.m文件,可以看到里面调用了这个.ini文件并传入了LimeLoadConfig变量。

 

那么我们如何更改设置呢?很简单,用LimeSuiteGUI打开.ini文件,像之前我们改self_test.ini里的参数一样更改参数。更改发射频率、采样率、滤波器,参照之前的方法就行,这就是为什么我们先讲了那些背景知识。

 

直到现在,这个例子都在Windows环境运行。octave还是实验性质的,可能会碰到些小问题。在Linux下我们发现只能接收不能发射。

 

注意在运行例子时会产生大量的变量。观察这些变量很有趣。比如iqDataTx和iqDataTxo,后者是前者过采样后的变量。过采样可以减少混叠的可能性,因为它把可能可能混叠的信号隔远了,这样TX通道里的滤波要求就降低了。

 

观察octave的例子,我们可以把代码分为几部分:

变量和波形产生

 

Lime启动命令

 

接收波形

 

Lime关闭命令

 

其它代码都是为了绘图和增加可读性。关键点在于启动命令,里面包括了一个发射函数,接收也很重要,你可以学习如何接收。注意,如果你只要发射一个单一波形,有一个LimeTransmitSamples命令,看上去和接收命令有点像。

 

最后

我们测试了另一种用LimeSDR接收和发射信号的方法。我们介绍了一个很强大的DSP软件,以及SDR的软件部分。使用这个方法,我们建立了无线电通信中软硬件的桥梁,我们看到ini文件是如何输入给硬件的。下一篇文章我们会讲到更多的LimeSDR发射信号的内容,但愿我们不会讲到太多代码和数学公式。

你可能感兴趣的:(LimeSDR中文教程)