如何用MATLAB和Simulink进行RF系统级的设计以及PA的建模和仿真
RF系统级设计
对RF系统的架构设计者来说,系统级的链路仿真是一个非常典型的应用。MATLAB中提供了一个叫做RF Budget Analyzer的App, 利用该App,您可以很方便地搭建如下超外差接收机的架构并且对您关心的所有RF系统指标进行仿真。
相信有读者不禁会问,做链路预算的工具五花八门,甚至Excel都能胜任,那么MATLAB and Simulink的差异化在哪里?编者从个人的经验认为,MATLAB and Simulink的优势在于两个方面。
第一,我们可以将如下在App中建立的链路,一键导出给RF Blockset或者一键生成Testbench,进入到Simulink环境以后,我们不仅可以对对中导入的模块进行自定义,还可以对该链路进行进一步的完善,比如添加各类激励以及诸多的放大器,滤波器等模块。如果生成Testbench,会自动将这个链路生成为一个Testbench,在顶层看到的将是被封装的RF链路和结果视窗,而相关参数调节也被做成了旋钮或者滚动条形式,这将很便于我们做演示和分享。
第二, 我们可以通过上述的App,将搭建的架构导出成MATLAB代码。将架构导出成MATLAB代码以后,一方面方便于跟其他算法进行集成,另一方面便于将一些常用算法进行打包,发布和共享。我们在很多成熟的客户那里已经看到了他们使用MATLAB编写了很多企业内部的应用,比如特定专用收发链路仿真软件,S参数可视化及去嵌入软件等等,您在MATLAB Community中看到的很多共享应用也是如此编写的。MATLAB 有强大的发布共享功能,您可以去官网查找打包发布相关的文章。
对于RF链路仿真,最大的痛点是软件工具提供的模型有限,比如混频器,功放等模型,架构设计者有时候并不满足于在软件自带的模型中输入几个参数来进行仿真,因为这样的结果太粗略,从链路预算的角度来讲,希望行为级的模型可以更准。但是问题来了,厂家提供的模型有限,并且用在系统仿真有些大材小用,而软件本身提供的模型几乎是不能定制化的。这种情况下,MATLAB就很好地体现出了作为数学语言的优势,我们在下一个部分中用PA的建模来加以说明。
PA建模及DPD技术
功放作为RF发射链路中的重要部件一直是领域内的研究热点,其线性度和效率直接影响到系统的性能。在现代通信技术的催化下,Doherty, DPD等技术都被运用在LTE,5G等无线通信系统中。接下来会通过“Power Amplifier Characterization with DPD for Reduced Signal Distortion”这个示例来解析MATLAB和Simulink在PA的建模和DPD的应用。您可以在MATLAB的自带示例中找到它。这个例子中,我们将用带交叉项的记忆多项式模型去拟合一个实际功放的测试数据,然后将这个拟合得的PA模型代入系统中,进行了系统级仿真。该系统包括一个自适应DPD算法模块,可以在仿真过程中使用开关启用,可以很明显的看到启用DPD后,射频发射机系统输出信号的线性度是有很大提高的。
首先,将测量数据导入MATLAB并且进行可视化,该功放是用符合LTE标准的信号去激励,采样率为15.36MHz。我们先绘制了以时间函数表示的输入和输出信号的幅度,同时还画出该功放的功率传输特性。从传输特性的分布看,该功放存在一定的非线性,同时可以从分布在主线条的散点看出存在记忆效应。
接下来,我们就可以借助MATLAB提供的一个白盒拟合程序“simrfV2_powamp_dpd_helper“ 来拟合包含记忆效应的PA模型系数了。该程序是基于如下广义记忆多项式模型,akm是 记忆多项式的复系数,k 是非线性度,K 是多项式的阶数,代表功放的非线性 ,m 是记忆深度值,M 是 多项式的记忆深度。该模型考虑了记忆深度和非线性度,由于是目前比较主流的拟合模型,可以很快地用于PA模型系数的提取。
当 M 为1 时,上述模型描述的是纯静态特征,例如 AM-AM/AM-PM。该拟合程序使用来自 PA 的输入和输出数据,基于选择的 K 值和 M 值提取 PA 模型系数。在完成拟合并创建 PA 模型后,会评估拟合的质量。然后,对多项式阶数 K 的值和记忆深度 M 的值进行迭代,直到模型可以按预 期执行。迭代可以手动处理,也可以在 MATLAB 中自动处理。另外,该拟合程序包含两个模式,即考虑记忆交叉项的多项式模型和普通多项式模型。在本例中,我们先切到普通多项式模型,设置M=3,K=7.本例中使用一半的数据集用于创建模型,然后使用完整数据集评估拟合质量,拟合得到的PA模型系数代入以后得到的输出数据与从真实 PA 的测试数据进行比较,得到一个误差估计。
初次拟合后,我们将PA模型的传输特性与PA测试结果绘制到一张图中,可以看到,真实数据(蓝色)和模型数据(红色)拟合的已经还不错了,模型数据已经能显现出记忆效应和非线性,只是记忆效应和非线性度相对较少,此时用于衡量拟合质量的信号标准差为 4.8083%。
前面提到,我们内置的白盒拟合程序还有一种更高级的模式可以考虑记忆交叉项。因此接下来再尝试切到“ctMemPoly“这个模式来进行拟合。这部分的代码跟普通模式的代码类似,读者可通过示例运行,考虑记忆交叉项的模式得到的信号标准差改善到2.7045%。我们可以看到拟合数据(红色)覆盖了更多的记忆效应散点。如果您手上正好有测试的PA数据,那么您可以直接使用该代码,将测试数据替换为您的数据即可,接下来您就可以通过不同的拟合模式来拟合出您的PA模型了。
PA+DPD仿真
对于功放的线性度优化而言,从功率回退,前馈,负反馈等传统方法一步步经过前人的积累和实践,数字预失真无疑是一项实用并且越来越成熟的方法。更巧妙的是从3G以来的通信技术中将Doherty和数字预失真技术相结合,真可谓将功放的线性化提高到了高水准。本文中不会对数字预失真的算法的开发本身展开讨论,我们会重点介绍如何利用MATAB和Simulink提供的参考示例来高效地实现PA结合DPD算法的仿真。
在这个示例的第二部分,我们将拟合的模型加载到Simulink中Power Amplifier这个模块中,另外Simulink中同样地可以找到DPD模块和自适应DPD系数估计模块。 由于 PA 受记忆效应影响,DPD 算法必须 能够自适应,并且必须在闭合的反馈回路中进行运算,才能补偿 PA 效应。此外,DPD 算法是在基带中实现的数字化算法,而 PA 是在高频运行的射频组件,所以需要上变频和下变频来使两个系统一起运行,另外也需要考虑天线的负载效应。
因此在这个示例中我们提供了一个类似于模版的上/下变频架构,对于您来讲,您只需要改动相应的模块参数,加载您的拟合数据,就可以使用MATLAB内置的DPD算法和自适应系数估计来进行仿真。同样,您也可以用您的算法来进行替换。
对于DPD的记忆多项式系数估计模块,都是自适应的,我们的模块中内置了最小二乘法,递归最小二乘法,在其他的示例中我们还提供了递归预测误差算法。您可以在这些自适应算法中进行切换选择。这个参考示例中使用了一个双音的激励源,然后对整个系统进行包络仿真。另外在链路中加入了一个开关来启用/禁用DPD模块。通过运行仿真我们可以看到,DPD模块未被禁用的时候,系统输出频谱显示三阶的交调分量约为-32dBc左右,OIP3为35.85dBm,一旦启用DPD模块,OIP3为48.37dBm。线性度得到了明显的改善。
我们同样可以用实际的调制信号比如QAM等进行对该功放的激励,您只需要替换掉Source模块就可以,从而您可以观察DPD在启用/禁用下EVM的变化。您可通过该示例去修改 DPD 算法的阶数和记忆长度,并观察对系统级别 DPD 策略性能的影响。该模型为不同 DPD 配置的快速迭代测试提供了便利,帮助更轻松、快速地优化算法。它还为您在建立物理原型之前对DPD 方法进行早期验证。
在您的DPD算法得到仿真验证以后,下一步您可以使用真实 PA 去进行测试。具体做法是,将DPD算法模块放在Simulink环境中,并让该算法与测试和测量硬件进行接口通信,以通过该DPD来驱动基带信号,输出到真实PA,然后PA的输出返回到 Simulink 进行分析和 DPD 调整。这个过程可通过 MATLAB Instrument Control Toolbox 来实现。最后是算法的部署实现过程,这个过程中会涉及到定点化和代码生成,本文中将不再涉及,您可以去MathWorks官网搜索“Fixed Point”和“HDL Coder”等关键字查看相关的文章。
总结
总之,在PA的建模和DPD算法的开发到实现,MATLAB和Simulink提供了一个便利高效的闭环设计流程。 对于PA建模,Simulink支持多种数据加载诸如s2d参数,S参数,Y参数等来进行功放建模,MATLAB则支持基于数学表达式的PA模型建模,Simscape相关套件则支持从晶体管级进行放大电路的建模。在下一期的文章中,笔者将介绍S参数的后处理相关内容。
了解更多 (LEARN MORE)
- 如何使用MATLAB对S参数进行后处理 – 文章
- 如何借助MATLAB来进行电路甚至组件级别的设计 – 文章
2022 年发布