首页/文章/ 详情

射频进阶——MATLAB仿真之DPD代码

6小时前浏览0

前面我发过一篇DPD的过程解析,很多朋友都很感兴趣。问我要仿真代码

前段时间一直忙,一直没有时间整理。周末得空整理了一下。

射频进阶——数字预失真DPD过程解析

其实仿真的代码不难,难的是对DPD实现过程的理解。

如上文所讲,DPD仿真最关键的是功放模型的获取及功放数据的导入。其他的记忆深度可以通过经验调整。(仅代表本人的理解)

代码如下,大家可以加载一下试试。

load('simrfV2_powamp_dpd_data.mat')

DataRate = 15.36e6;

Tstep = 1/DataRate;

memLen = 3;               %记忆长度3

degLen = 7;                  %深度7  凭经验

numDataPts = length(inDataPA);


halfDataPts = round(numDataPts/2);  %只有一半的数用于计算



modType = 'memPoly';            

fitCoefMat = simrfV2_powamp_dpd_helper('coefficientFinder',             ...

    inDataPA(1:halfDataPts),outDataPA(1:halfDataPts),memLen,degLen,modType);           %返回矩阵


[errSig] = simrfV2_powamp_dpd_helper('errorMeasure',                    ...

    inDataPA, outDataPA, fitCoefMat, modType);

disp(['Signal standard deviation = ' num2str(errSig) '%'])       %验证拟合,用辅助函数来计算偏差//


modType = 'ctMemPoly';

fitCoefMat = simrfV2_powamp_dpd_helper('coefficientFinder',             ...

    inDataPA(1:halfDataPts),outDataPA(1:halfDataPts),memLen,degLen,modType);    %用交叉记忆模型来改进拟合


[errSig] = simrfV2_powamp_dpd_helper('errorMeasure',                    ...

    inDataPA, outDataPA, fitCoefMat, modType);

disp(['Signal standard deviation = ' num2str(errSig)])


save('PAcoefficients.mat','fitCoefMat')



model = 'simrfV2_powamp_dpd';

open_system(model)

sim(model)

如需文本代码,可以加我微 信在微 信群获取。

祝好!



来源:射频通信链
SystemMATLABUM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2025-07-28
最近编辑:6小时前
匹诺曹
签名征集中
获赞 6粉丝 39文章 311课程 0
点赞
收藏
作者推荐

AM/AM,AM/PM的重要性

AM-AM,AM-PM,在概念上很好理解,就是幅度和幅度,幅度和相位的对应关系。这组参数一般用来表征功放的线性特征。在理想的线性PA中,输入输出之间的相位差应该是常数,即输出信号只是输入信号经过幅度放大和加入一定的延时。在实际PA中,由于其非线性的影响,会发生AM-AM失真和AM-PM失真。AM-AM失真是指输出信号和输入信号幅度上的失真,比如当输入信号摆幅进入阈值电压之下或者饱和电压之上时,输出电压信号就会发生截断或削顶,即为AM-AM失真。AM-PM失真是指,非线性PA输入信号幅度上的变化,导致了输出和输入信号之间的相位差的变化。下图为带有记忆效应的功放AM-PM数据,可以看到功放的AM-PM在一定的程度上呈现发散特性。功放记忆效应产生的原因有很多输入输出的匹配电路功放的发热功放的输入输出电容对不同频率的表现等现在我们很少用AM-AM,AM-PM来表征功放的非线性。做雷达的用IM3,做通信的用ACLR/EVM。AM-PM的重要性体现在什么地方?在前文讲过DPD的仿真过程,通过对仿真过程的研究发现,DPD的难点并不是射频工程师认为的算法。其实DPD实现的好坏取决于——功放数据的准确获取。功放算法模型描述的就是射频板输入——输出的关系。准确功放输入—输出的关系就关系到DPD实现的程度。预失真针对的就是不同频率的幅度和相位的变化关系而在数字域表征功放输入输出变化的量就是幅度和相位。测试功放的AM-AM,AM-PM可以建立相对准确的输入输出数据。DPD的算法模型就是建立一个相对准确描述射频板输入-输出特性的数据,然后通过迭代算法产生一组数据去对消射频板的AM-AM,AM-PM失真。现在我们再回头看一些有预失真功能的芯片。SC1887可以提升邻道指标10dB左右。ADRV9002提升在20dB左右这些预失真都没有实现到仿真的结果,究其原因就是他们的DPD模型不是针对相应的功放设计的,而是用了一个通用数据构建的预失真模型,具有普遍性,而不具备针对性,所以只能设计到10~20左右的提升。而华为中兴这些大厂能够实现40左右的提升,是因为DPD的功放算法模型数据针对的是每一个功放而建立,所以结果往往要好很多。总结写到这里,又发现了射频工程师的重要性,射频工程师的处境并没有我们想象的那么糟,虽然也没有很好。往前走,走到一定深度才能真正的认清楚到这个行业。祝好!来源:射频通信链

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈