基于LS+变步长LMS的Volterra级数DPD系统仿真

1.算法描述

DPD是数字预失真的首字母缩写,许多射频(RF)工程师、信号处理爱好者和嵌入式软件开发人员都熟悉这一术语。DPD在蜂窝通信系统中随处可见,使功率放大器(PA)能够有效地为天线提供最大功率。随着5G使基站中的天线数量增加,频谱变得更加拥挤,DPD开始成为一项关键技术,支持开发经济高效且符合规格要求的蜂窝系统。


对于DPD,无论从纯粹的数学角度出发,还是在微处理器上实现更受限制,我们许多人都有自己独特的见解。您可能是负责评估RF基站产品中DPD性能的工程师,或者是一名算法开发人员,很想知道数学建模技术在实际系统中的实现方式。


当基站射频装置输出RF信号时(参见图1),需要先将其放大,然后再通过天线发射。我们使用RF PA来执行此操作(放大)。在理想情况下,PA接收输入信号,然后输出与其输入成正比的更高功率信号。在执行此操作期间,PA会尽可能保持高能效,将提供给放大器的大部分直流电源都转化为信号输出功率。



Volterra 级数是一种泛函级数,由意大利数学家Volterra于1880年首先提出,当时是作为对Taylor级数的推广而提出的。Volterra将这种泛函级数用于研究某些积分方程和积分---微分方程的解。直到1942年,美国著名科学家、控制论的奠基人N.Wiene:才首次将Volterra泛函级数用于非线性系统的分析。后来其他人继续N.Wiene:的工作,将Volterra泛函级数用于发展非线性算子理论以及非线性方程和系统分析。二十世纪七十年代后Volterra泛函级数开始受到人们的普遍重视。


Volterra级数即含记忆的泰勒级数,其数学公式与泰勒级数及其相似,Volterra 级数模型的输出信号,其计算公式是通过输入信号的幂次方来表达的。Volterra级数与泰勒级数不同之处在于Volterra级数具有延迟功能,因此Volterra级数更适合应用在具有记忆效应的功率放大器线性化处理过程中。



2.仿真效果预览

matlab2022a仿真结果如下:




3.MATLAB核心程序

load PA_OUT_-3dbm.txt

Xn =[PA_OUT__3dbm(1:2^13,1) + sqrt(-1)*PA_OUT__3dbm(1:2^13,2)]';


%original input

% Xn  = 0.4*signal(1:L)/max(abs(signal(1:L)));

Xn0 = Xn;

m   = length(Xn);



figure;




%%

%论文DPD

%w(.)This band-limiting function can be a linear filter

K  = 127;

Wn = [0.36,0.7];%修改0.1的值,获得不同情况下的band limit效果

w  = fir1(K,Wn,'stop');


K2 = 0;

w2 = [1,1];


%计算C_Lx1,Volterra kernel of the system

G_BL=[ 1.0513+j*0.0904,-0.0542-j*0.2900,-0.9657-j*0.7028,...

-0.0680-j*0.0023, 0.2234+j*0.2317,-0.2451-j*0.3735,...

0.0289-j*0.0054,-0.0621-j*0.0932, 0.1229+j*0.1508];


U_Nx1 = Xn;



[psdu,freq] = func_psd(U_Nx1,m,ts,Scal);

plot(freq/1e6,psdu,'b','linewidth',2);

grid on

hold on



%is the expected inverse output matrix generated from the PA input (the output of the predistorter) u~,

%u~根据公式22计算得到。

for ii = 1:3

if ii == 1

U   = func_volterra_Matrix(Xn,w,G_BL,K,Ns);

Out = func_volterra1(U,w2,G_BL,K2,Ns);

else

U   = func_volterra_Matrix(Xn,w,Cest,K,Ns);

Out = func_volterra1(U,w2,Cest,K2,Ns);%构造Y,LS estimate

end


%公式26

ya   = (abs(Out.^0)).*Out;

yb   = (abs(Out.^2)).*Out;

yc   = (abs(Out.^4)).*Out;  

Y1   = [ya(3:m);yb(3:m);yc(3:m);ya(2:m-1);yb(2:m-1);yc(2:m-1);ya(1:m-2);yb(1:m-2);yc(1:m-2)];

Y2   =  conj(Y1');


Cest = inv(Y2.'*Y2)*Y2.'*U(3:m).';


Xn   = func_volterra1(U_Nx1,w,Cest,K,Ns);

end


%预失真处理

Yn2   = func_volterra1(Xn0,w,Cest,K,Ns);


%通过功放

U_Nx2 = func_volterra0(Yn2,w,G_BL,K,Ns);

QR Code
微信扫一扫,欢迎咨询~

联系我们
武汉格发信息技术有限公司
湖北省武汉市经开区科技园西路6号103孵化器
电话:155-2731-8020 座机:027-59821821
邮件:tanzw@gofarlic.com
Copyright © 2023 Gofarsoft Co.,Ltd. 保留所有权利
遇到许可问题?该如何解决!?
评估许可证实际采购量? 
不清楚软件许可证使用数据? 
收到软件厂商律师函!?  
想要少购买点许可证,节省费用? 
收到软件厂商侵权通告!?  
有正版license,但许可证不够用,需要新购? 
联系方式 155-2731-8020
预留信息,一起解决您的问题
* 姓名:
* 手机:

* 公司名称:

姓名不为空

手机不正确

公司不为空