前面我发过一篇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)