这是第九篇教程。从第一篇教程开始,我们一步步教会你各种SDR相关工具,现在你应该会用LimeSDR做各种操作了。
上一篇文章,我们看了C代码,以及如何实现一个简单的扫频仪。这次我们要看一下pyLMS7002M,它是LimeSDR的python库。我们这次不是要创建一个程序,而是解释一下一个现成的例子,矢量网络分析仪VNA。
注意,这个VNA精度不会很高,不是罗德施瓦茨产的够买辆豪华轿车的仪器,但是它也能工作,让你i大概知道某个电路在特定频率下会如何表现。
我们需要一些组件:
定向耦合器
SMA连接线
SMA衰减器(10dB)
SMA接口的“校准过的”短路负载
开始
VNA例子需要一些依赖包,但是安装不会太麻烦,首先你需要有一个LimeSDR环境(windows或者linux都行)。你还需要python 2.7或者3.x。
接下来,到 https://github.com/myriadrf/pyLMS7002M/ 下载python 2.7.x版本。还有个python 3.x分支,但是还没完全测试好,所以推荐使用主分支。
你可以在这里找到pySmithPlot:https://github.com/vMeijin/pySmithPlot 我们用的就是这个版本,下载下来然后放到合适的目录。
首先我们要安装pyLMS7002M。用终端到这个文件夹下。
你应该能找到setup.py,你可以输入python2 setup.py install来安装,注意一定要强制使用python2。
接下来pySmithPlot也是用类似步骤安装,只不过这次运行python3 setup.py install。在windows里,我们需要手动用pip来安装依赖。
安装完成
到这里VNA就应该能工作了,会生成s.2p文件(S参数),但是不会显示史密斯圆图,这个图对VNA很重要。
在pyLMS7002M的examples文件夹中,分为两个子文件夹,basic和VNA,我们先试试basic文件夹下的findLimeSDR.py,它的功能就是它的名字,只需要输入命令python2 findLimeSDR.py,就会得到下面的输出:
这样就代表pyLMS7002M库工作正常了。接下来我们看看VNA文件夹下的例子。
VNA分为两部分:测量和计算。首先要做的就是测量。但是开始之前,我们要设置硬件。可以看看下面的图片:
从左往右,我们需要把接上TX2_1这个发射口。并使用RX1_H这个接收口。还需要一个10dB的衰减器,理论上这个值可以是别的,因为会被校准掉。它的功能只是为了提供一个固定的功率衰减,并控制输出功率,这样负载变化的时候影响就会减小,同时也可以提高测量精度。
定向耦合器
这可能是最难理解的部分了。我们不深入研究传输线理论,定向耦合器基本做两件事:
耦合
定向
一条通道从输入到达输出,它被称作主通道。这条通道与另一个端口形成耦合(通过微带线和波导等方式)。你可以看看这里的介绍。这样信号中的一小部分就会出现在耦合端口。方向性意味着,耦合通道的其中一个端口接入了一个匹配的阻抗。这样会把那个方向大多数能量吸收掉。意味着只有一个方向的信号会从匹配的端口发射出去。
你可能会想,我们可以自制一个定向耦合器吗?当然是肯定的,但是它没有经过校准,那么耦合和方向性可能无法保证。微带线版本的定向耦合器可能非常简单,只是2条并行的路径,其中有一头的阻抗是50欧(这是对于LimeSDR来说的,也有系统的要用阻抗75欧的)。一个输出口接入50欧后连到地上,另一个口就是耦合口。
你应该会想到,定向耦合器有几个方面是重要的:耦合信号的大小、方向性和损耗。推荐的耦合器是Mini Circuits ZHDC-16-63-S+。它的方向性是30dB,这个数字是信号导通和隔离的比例。也就是说定向耦合器在两个方向所看到的信号的比例。主线损耗是2dB,也就是信号从输入到输出的损耗。耦合大小是17dB。
我们手头没有Mini Circuits的耦合器,我们使用的是AtlanTecRF A2023-20。这样就有一些问题:
首先,这耦合器的频率范围是500MHz到2GHz,第二它的方向性只有25dB。
这样就产生了另一个问题,因为这个例子的默认设置是使用2.4GHz,所以我们需要把它改到适合我们的耦合器的范围,我们选择1.5GHz。还有一点要注意的是,这已经接近LNAH的频段边缘了,就会有一些问题,最好完全保持在支持的频段内,或者更改匹配网络,使得它能够更好地对要测量的频率做匹配。这有点像先有蛋还是先有鸡的问题,因为VNA就是用来解决这个问题的。
比如,我们的LNAH输入口相位噪声问题,那么要做866MHz的精确测量就是不可能的。如果你看了这一段但是没理解,你可以看看教程第二篇,我们说到过匹配问题。
初次测量
在开始调整频率前。注意我们选择LNAH路径作为默认的LNA,那么我们必须选择1500MHz以上,否则会降低灵敏度。
打开“measureVNA.py”,我们需要更改下面几行(你可以根据你的需求来改):
startFreq = 2.3e9
endFreq = 2.4e9
nPoints = 101
改为
startFreq = 1500e6
endFreq = 1510e6
nPoints = 101
保存文件,并输入“python2 measureVNA.py test1”
这样就会在命令行输出很多内容,然后会要求你连上短路负载用于校准。
这一步会校准VNA。最好用校准过的短路负载来做。有个难以理解的地方是,射频电路的短路负载可能跟常识里的短路负载不同。导线和PCB中的寄生电感和寄生电容可能就能实现这个电路,你不信的话可以用万用表测量WiFi天线的直流电阻(这句话不确定)
做完校准后,脚本会要求你接入DUT(待测设备)。
接下来就会像校准一下运行相同的操作。简单来说VNA的原理就是比较这两组数据的相位和振幅,用来计算电抗(虚部)的损失和电阻(实部)的损失。
然后会使用一种特殊的图形来清楚的展示这个信息,这个图形叫作史密斯圆图。
搞定后,我们会生成两个文件:
vna_test1_short_1500000000.0_1510000000.0_101
vna_test1_DUT_1500000000.0_1510000000.0_101
绘制结果
接下来我们要处理这些文件,得到S-参数和图形。我们要改一下代码。在 “calculateVNA.py” 中,我们需要把下面的几行改掉,这样就能支持0.2.0版本的smithplot.py support.
这里:
from smithplot.smithaxes import update_scParams
改为:
from smithplot.smithaxes import SmithAxes
文件最下面:
subplot(1, 1, 1, projection=’smith’,grid_major_fancy=True,
grid_minor_fancy=True, plot_hacklines=True)
改为
subplot(1, 1, 1, projection=’smith’,grid_major_fancy=True,
grid_minor_fancy=True)
这样就算是改好了。
接下来运行“python3 calculateVNA.py test1 plot”
第一个图形是校准过的短路负载的相位,相位随频率变化很小,如果DUT就是短路负载,那么结果应该与之类似。
类似短路负载的相位图,这个图也是相位/频率图。当负载带有电抗成分后会产生相位变化。简单来说,短路负载和DUT的相位差会做比较,这样就能生成史密斯圆图的复数阻抗了。
这是电压驻波比,用来测量待测器件的反射功率比。
这是S11图,表示负载反射回来的能量。
最后还有史密斯圆图,展示的是用电抗分量和电阻分量来表示的负载的图形,这里有史密斯圆图的基础。
最后
希望LimeSDR教程对你有帮助。现在,我们已经把最有用的射频开发的工具给你了,这就是VNA。根据我们的经验,这个例子还可以再改进一下,用更大的射频功率和更好的外部LNA。我们还注意到用更大的衰减器,我们会看到一些奇怪的结果,比如相位变化,可能是因为接收到的信号处于底噪上。
你可以开始自己写一些SDR程序了,就像这个VNA例子一样。
注意要做这个实验还有一些额外的步骤要做:
1. 安装cython 直接apt安装这个包
2.要到cylimelib目录里也运行一下python setup.py install
此处感谢热心买家:antboy1979