这是这个系列教程的第三篇。我们会以之前的教程为基础,如果你没看可以点这里。

上一次我们详细看了RX部分,这样就能更好理解LimeSuite程序里的设置选项。上一篇文章理论比较多,这一篇文章理论会少一些,我们会做更多实际操作。

开始

我们会使用“self test”例子作为本文的基础。原因是只要你有LimeSDR,你不需要额外的硬件(比如RF口上不需要接东西)就能使用。如果你想看一下步骤,可以点击这个链接并观察例子3.7。(self test中的例子)

这个例子中使用的频率是2100MHz,在英国是3G蜂窝网络的频段,你大多数情况下都没有在这个频段发射的许可。我们使用了内部环路,这样就不会真正发射出信号,但是任然会有一小部分射频能量从我们接着天线的口上漏出来。因此做这个测试时最好移除天线(或者你也可以换到你有权使用的频段上去),这样你就不会不小心地在这个频段发射出信号了。我们的内部环路加在高频率的通道上,因此你选择的频段也必须在这个范围内。

当你根据步骤到达3.7并得到上面的FFT图像后,我们可以具体理解一下这个例子到底做了些什么。

加载”self_test.ini”

在LMS7002M芯片内部有上千个寄存器,因此要手动设置会非常麻烦。我们使用ini文件来解决这个问题,它里面包含了LMS7002M的寄存器设置,可以自动设置它们,我们不需要关心。如果你对这个感兴趣,可以看看这个文档。

下面是self_test.ini中的一部分,我们提取出来作为例子。

[file_info]

type=lms7002m_minimal_config

version=1

[lms7002_registers_a]

0x0020=0xFFFD < Reset and PWR settings

0x0021=0x0E9F < SPI/I2C control

0x0022=0x07DF < Pad Drive control settings

SXT/SXR

SXT是用来控制TX PLL(发射部分的锁相环)和时钟发生器的,它和SXR非常类似,所以我们可以同时观察。我们暂时不需要调整参数,只需要点击calculate和tune按钮,但是最好还是理解一下到底是怎么回事。

接下来要说的东西需要更多的知识:

之前的文章我们讲过RX PLL(锁相环),以及如何合成一个时钟。实际上PLL只是把时钟的相位与另一个时钟源做了同步。我们说的另一个时钟源是由参考时钟和乘法器、除法器一起生成的。PLL保证了所有这些合成的时钟都是同步的,这样我们可以减少相位差和相位噪声。

我们可以看一下下面的PLL结构图,可以发现PLL由3部分组成:

  • Inputs (Nint,Nfract & PLLCLK(ref)) 输入参数
  • A feedback loop 负反馈环路
  • A VCO  压控振荡器

回到self test例子中,我们可以看到当按下calculate按钮后,这个选项卡中的许多参数都自动调整了。你可以试试改变频率,然后看看那几个参数会对应变化(记得看完了要改回来,然后按一下calculate)。

CLKGEN

这个时钟发生器部分和前面说的有点相似,它用来控制LMS7002M的数字部分,因此有些参数需要优化一下。我们的主要目标是在发射部分的DAC(数模转换)中做过采样,以此提升SNR(信噪比),更高的时钟一般来说效果都会更好。

内部环路

这个顾名思义就能知道是什么,它控制了SKY13323射频芯片,把它选为了环路模式。

加载WCDMA波形

FPGA的一部分功能是波形回放功能,它能够按照正确的格式给LMS7002M提供已知的波形数据。

当我们加载波形后,还需要勾选MIMO,这样波形就会在两条发射通道上同时播放。如果你没有把相应的波形文件放到LimeSuite要求的文件夹下时,WCDMA按钮是无效的。如果你碰到这个问题,可以点击Custom按钮来加载你那里的WCDMA波形。

改变参数

我们终于可以来调节信号了。我们可以只对A通道做更改,而不更改B通道,这样就能看出效果。你先要保证你能做到self test中的两个波形看上去差不多的样子。波形的IQ图像应该和我们的截图一致。现在两个通道的图形应该是一样的,但是我们马上会做一些更改。

在开始之前,我们需要知道选项卡中的某些选项是对两个通道同时有效的,比如SXT中的asan。我们之前看过LMS7002M的结构了,从中我们可以看到这些细枝末节。在我们前面看到的资料里,可以发现PLL模块是被两个通道共享的,因此改变这个参数对两个通道同时起作用。这就是为什么我让你们先了解了背景知识,这样你在这里才会理解。

我们暂时不更改发射参数,先更改接收部分的参数,改一下上一篇文章提到过的参数。我们现在看到的I/Q图像,可以注意到这个形状是一大块点(理论上应该填满这一块)。如果我们用的是别的信号,比如QAM64,那么这种形状就是不对的,因为那种调制对应的应该是离散的点。看懂星座图很有用,它能帮助你更改参数,你可以先随意调整一下,最终再做优化。

更改增益

我们知道LMS7002M的最前面一级是LNA,那么我们先来调整它,它现在的设置应该是GMAX,也就是达标了最大值。我们把它降低为GMAX-12,可以发现星座图看起来更紧密了,这意味着我们开始丢失信息了。

所以我们减少接收端的输入会造成这个现象。那么我们如果减少发射端的输出会得到相同结果吗?我们试试。先把RX的LNA改回GMAX,然后到TX PAD gain control处改为16,它是TX LNA的一部分(在TRF选项卡里)。

你可以看到,结果和之前的类似。另外,TBB选项卡里还有一个frontend gain,它调整的是基带增益。我们现在调整一组参数,先把TXPAD调整为12(TRF选项卡),然后再把frontend gain调整为60(TBB选项卡),这样还原到原来的增益。

我们看到增益确实增加了,但是信号出现了失真。不止是星座图变成了很大的一个点,而且对临近频段也造成了干扰。这是为什么?

这是因为我们对滤波器过载了,你可以看到IQ星座图里的严重失真(变成方的了)。在相邻频段还出现了毛刺。显然这个设置是不对的,这可以作为错误的设置的例子。一般来说,在调整完大多数设置后,我们只要调整TXPAD。大多数设置已经在self_test.ini里设置好了,所以我们可以直接按照那个文件里的参数为基础。对于RX增益也是如此,我们还没改过TIA和PGA增益,但是大多数应用中最好别改。

滤波器

回到self_test.ini(重新加载文件,并在TX和CLK中点击Calculate和Tune按钮)。我们知道TX和RX中的第二级都是滤波器,改变它们会有什么影响?

TBB(发射部分滤波器设置)

我们现在把TX滤波器设置为52MHz,我们可以更改这个滤波器参数,这么修改会造成更差的结果。幸运的是,下面还有一个Tune按钮会自动计算滤波器系数。输入100MHz,然后点击Tune按钮,你会得到一个稍微小一点的IQ图,因为我们发出了更多的噪声(这里不理解?噪声多了不是应该更大么)。注意我们在这里使用的是TXLPFL滤波器。

我们还可以去掉LPFLAD_TBB和LPFS5_TBB的勾选,绕过这些滤波器。这样我们会看到最大的星座图。我们对临近频率造成了很大的干扰,因为我们没有滤波器了,无法过滤高阶谐波。你最好不要发射这种信号,因为它会干扰其它频段,无委会会来找你。最后记得重新把滤波器加入,并且把滤波器调整为52MHz。

RBB(接收部分滤波器设置)

这个部分对许多要接收信号的人来说很有用,因为要提高接收质量就要做滤波。问题在于我们的WCDMA波形是很干净的。比如,我们选择LPF_Bypass,即去掉10MHz的输入滤波器后可能看不到什么区别。

手动调整输入滤波器参数可能会比较容易理解,这些滤波器是RC滤波器。再次选上LPFL,并把电容值增加到1200,我们可以看到,波形严重失真了,因为我们把高频率的信息过滤掉了。虽然我们可以手动调整滤波器,但是我还是推荐你自动选择这些值,这就和TX里面一样。点击Tune按钮会还原原本的设置。

最后

现在我们已经对上一篇文章里说到的大多数模块都做过设置了。尽管还有许多地方我们没有说到,比如Bias设置,ADC/DAC模块,以及LMS7002M的数字部分。但是这些设置对于新用户来说不太重要,我们以后再说。

大多数情况下,我们的修改都把信号越改越差,但是知道原理后可以帮助我们以后改得更好。

下一篇文章我们会看一些应用例子,做一些优化,这样你以后在使用LimeSDR时会更有信心。

LimeSDR 中文教程 (三)相关推荐

  1. Swift中文教程(三)--流程控制

    Swift中文教程(三)--流程控制 原文:Swift中文教程(三)--流程控制 Swift用if和switch编写条件控制语句,用for-in,for,while和do-while编写循环.条件控制 ...

  2. LimeSDR 中文教程 (二)

    (本文所有图片请参考Myriadrf官网原文:https://myriadrf.org/blog/limesdr-made-simple-part-2-matching-lms7002m-rx-iq/ ...

  3. LimeSDR 中文教程 (八)

    这是第八篇教程.我们在第一篇就说过,我们会从SDR新手开始一步步教你,直到你学会调用API编程.前几篇说完后,现在是时候开始写程序了.如果你已经读完了前面的文章,会用GNU Octave,也熟悉Pot ...

  4. LimeSDR 中文教程 (六)

    在Pothos和GNU Radio中接收ASK/OOK信号 这是第六篇LimeSDR教程.上一篇文章我们在Octave中发射和接收ASK信号.我们没怎么详细讲调制技术. 在接下来的文章里,我们会研究单 ...

  5. OpenCV-Python (官方)中文教程(部分三)

    [部分二]:https://blog.csdn.net/Thomson617/article/details/103961274 第七章.相机标定与3D重构 42.摄像头标定 在图像测量过程以及机器视 ...

  6. Swift中文教程(五)--对象和类

    原文:Swift中文教程(五)--对象和类 Class 类 在Swift中可以用class关键字后跟类名创建一个类.在类里,一个属性的声明写法同一个常量或变量的声明写法一样,除非这个属性是在类的上下文 ...

  7. 苹果Swift语言中文教程资源汇总

    苹果swift语言中文教程(零)搭配环境以及代码运行成功http://vjiazhi.com/kaifa/1014.html 苹果Swift语言中文教程(一)基础数据类型 http://vjiazhi ...

  8. letswave7中文教程1:软件安装与脑电数据导入

    目录 1.安装 2.数据集介绍 3. 数据集导入 4.数据集检查 本分享为脑机学习者Rose整理发表于公众号:脑机接口社区 .QQ交流群:941473018 Letswave是一款非常好用的神经生理信 ...

  9. Python-EEG工具库MNE中文教程(12)-注释连续数据

    目录 注释连续数据(Annotating continuous data) 通过代码创建注释 可视化原始对象 交互式注释原始对象 对注释对象的操作 本分享为脑机学习者Rose整理发表于公众号:脑机接口 ...

  10. eeglab中文教程系列 汇总

    eeglab中文教程系列 eeglab简介 教程目录 本教程为脑机学习者Rose发表于公众号:脑机接口社区 .QQ交流群:903290195 eeglab简介 eeglab是一个交互式的matlab工 ...

最新文章

  1. 二叉树的层序遍历 II
  2. 如何在 Linux 上永久挂载一个 Windows 共享
  3. mysql导入导出数据库
  4. 如何用ipad制作精美的视频,并发布到视频网站
  5. C++ STL 线性容器的用法
  6. 拔掉数据库的电源会怎样?阿里云数据库新型灾备架构,让云端容灾有“备”无患
  7. 作者:刘大伟(1984-),男,博士,烟台中科网络技术研究所助理研究员。
  8. 信息学奥赛一本通C++语言——1002:输出第二个整数
  9. vb软件使用时间限制_GTD时间管理软件Wunderlist使用心得总结
  10. python信号端点检测_语音端点检测(Voice Activity Detection,VAD)
  11. Excel粘贴时如何跳过隐藏单元格
  12. ubuntu下amd超频工具_AMD CPU怎么超频?AMD锐龙平台内存与CPU超频图文教程
  13. HC-05/06蓝牙模块的原理及使用方法
  14. Dplayer Android播放器,呆呆播放器手机版官方下载
  15. Linux压缩包,解压缩包,vim,yum仓库,zip,用户管理
  16. 【Python可视化展示】-多维数据可视化分析
  17. Python:绘制动态地图-pyecharts
  18. textarea 中的内容自动换行
  19. 30.一张图理解EOS是什么
  20. My First Plug-in - Inventor API .NET 开发从0开始-课程3

热门文章

  1. 软件图标显示不正常的问题
  2. 注册免费许可证试用 PowerApps
  3. java Vector 在多线程使用中需要注意的问题
  4. 使用OpenCV调整图像的亮度和对比度
  5. C++关键字(static/register/atuo/extern/volatile/const/inline/define/typedef)
  6. Python Numpy
  7. C++基础学习笔记:函数
  8. 『 论文阅读』Attention-Based Recurrent Neural Network Models for Joint Intent Detection and Slot Filling
  9. 安卓机被锁屏的6种解锁方法
  10. mysql excel导入顺序错误_Excel导入MySQL数据出现字段错行原因解决方案