【数字预失真(DPD)】静态DPD设计扩展为自适应设计及评估两种自适应DPD设计:基于(最小均方)LMS算法、使用递归预测误差方法(RPEM)算法研究(Matlab&Simulink实现)

 👨‍🎓个人主页:研学社的博客   

💥💥💞💞欢迎来到本博客❤️❤️💥💥

🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。

⛳️座右铭:行百里者,半于九十。

📋📋📋本文目录如下:🎁🎁🎁

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

数字预失真(DPD)是一种基带信号处理技术,用于校正射频功率放大器(pa)固有的损伤。这些损伤导致带外发射或光谱再生和带内失真,这与误码率(BER)的增加有关。作为LTE/4G发射机的特点,具有高峰均比的宽带信号特别容易受到这些有害影响。在本文中,我们举例说明了一个建模和模拟PAs和dpd的工作流。本文所示的模型基于两篇技术论文[1]和[2]。我们从PA测量开始。从测量中,我们推导出基于内存多项式的静态DPD设计。这样的多项式校正了PA中的非线性和记忆效应。出于仿真目的,我们构建了一个系统级模型来评估DPD的有效性。由于任何PAs特性都会随时间和操作条件而变化,因此我们将静态DPD设计扩展为自适应设计。我们评估了两种自适应DPD设计,一种基于(最小均方)LMS算法,另一种使用递归预测误差方法(RPEM)算法。

详细讲解见第4部分。

📚2 运行结果

 

  

 

 

 部分代码:

%% Test data used to derive coefs
load meas_pa;
pa_in   = pa_in;
pa_out  = pa_out;

toss  = 500;             % ignore initial data that could have transients 
pad   = 600;             % room to play at the end of the data set. 
traininglen = 20e4; % Arbitrary subset of pa_in data used to derive coefs
if traininglen > (length(pa_in)-pad-toss)
    error('Pick smaller subset for traininglen');
end

%% PA and DPD model parameters
memorylen_pa    = 3; %M
degree_pa       = 3; %K
degree_pd       = 5; 
memorylen_pd    = 5; 

coef_pd=complex(zeros(degree_pd*memorylen_pd,1));
coef_pa=complex(zeros(degree_pa*memorylen_pa,1));
%% Compute input scaling factor with overrange
% and scale raw input accordingly 
u = pa_in(toss+1:(traininglen+pad)); % select data and transpose
umax_inv = 1/(max(abs(u)));   
umax_inv = 1;
u = u*umax_inv; 
v = pa_out(toss+1:(traininglen+pad)); % select data  
% Normalize output data to the maximum data. Needed
% to make numeric algorithms work. Note that this step might cause problems
% if there is outlying data OR if one does not account for this scaling.
vmax_inv = 1/(max(abs(v)));  
%vmax_inv = 1;
v = v*vmax_inv;
% In general there is no point in deriving the PA model since we
% are not implementing it. Sometimes you may only have PA
% measurements however and from those you wish to simulate the PA
% in the time domain. You can in that case derive a PA model
% but keep in mind it may not be an excellent model if you're
% PA is predominantly IIR in nature. This is true since the 
% memory polynomial assumes an FIR model. An FIR filter is great for
% equalizing the effects of an IIR filter but not necessarily great at 
% modeling it. What we have found experimentially is that if you have 
% an IIR-dominant PA, then you can model the passband quite effectively with this technique
% but the stopband may suffer particularly when there is significant
% dynamic range, i.e. a lot of attenuation in the stop band.
if 0
    offset = 0;
    up = u(1:end-offset);
    vp = v(1+offset:end);
    % Compute PA model coefficients. 
    coef_pa   = fit_memory_poly_model(up, vp, traininglen, memorylen_pa, degree_pa);   

    figure;plot([1:length(coef_pa)],real(coef_pa),'r+-',[1:length(coef_pa)],imag(coef_pa),'b+-');grid
    title('PA coefficients');
end

if 1
% Compute DPD Algorithm Coefficients using reversed I/O's
% Adding delay to the output variable (v) was crucial in using this memory
% polynomial based derivation of the DPD. We delay the output
% to compensate for the delay inherent in the PA. 
% You must take your PA's particular delay into account. The input and output 
% are reversed for the DPD derivation. v is now the input and u is the output. By setting
% vp = v(1+offset:end) we are compensating for the delay in the PA. 
% Essentially we are making it appear that the output responds to the
% input "offset" samples earlier, non-causal ish.
% You can create this effective negative delay in the DPD coefficient 
% derivation using this "offset" varible. It is not
% necessary to get the offset value perfect. There is a range of acceptable
% values for offset. You simply need to capture the energy within the M taps you're
% alloted. One informal offset calibration procedure is to observe the derived
% DPD coefficients as you change "offset" by 1. You should see the DPD coeffs
% shift by 1 as well. If you notice an uncorrelated change in the DPD coefficients 
% then you're offset value needs correction. In some cases you may also
% need to make M larger if you're PA has multiple poles you're trying to
% compensate for. Ideally, place the largest tap in the center of your
% pipeline. So if M = 5, place the largest tap at 3 using "offset" as the
% tuning parameter. This gives you some slop on both sides in case the
% PA delay were to change a little.

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]Morgan, Ma, Kim, Zierdt, and Pastalan. “A Generalized Memory Polynomial Model for Digital

Predistortion of RF Power Amplifiers”. IEEE Trans. on Signal Processing, Vol. 54, No. 10, Oct.

2006

[2]Li Gan and Emad Abd-Elrady. “Digital Predistortion of Memory Polynomial Systems Using

Direct and Indirect Learning Architectures”. Institute of Signal Processing and Speech

Communication, Graz University of Technology.

[3]Saleh, A.A.M., "Frequency-independent and frequency-dependent nonlinear models of TWT

amplifiers," IEEE Trans. Communications, vol. COM-29, pp.1715-1720, November 1981

🌈4 Matlab代码实现

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
DPD数字失真(Digital Pre-Distortion)是一种用于补偿线性功率放大器(Linear Power Amplifier,LPA)非线性失真方法。在无线通信领域,LPA是必不可少的设备,但由于它们的非线性特性,会对信号造成失真而影响通信质量。因此,DPD技术被广泛应用于无线通信系统中。 常见的DPD算法之一是LMS算法(Least Mean Square Algorithm),它是一种经典的自适应滤波器算法。推导过程如下: 首先,假设线性功率放大器的传输函数是H(z),x(n)为输入信号,y(n)为输出信号,e(n)为预测误差。设预测结果为y_hat(n),则e(n)=y(n)-y_hat(n)。 接着,假设LPA的输入信号x(n)可以表示为线性部分x_l(n)和非线性部分x_nl(n)的和,即x(n)=x_l(n)+x_nl(n),其中x_l(n)表示理想信号(用于输入LPA的信号),x_nl(n)表示LPA的非线性失真引起的信号变化。根据这个假设,我们可以将e(n)分解为两个部分,即e(n)=e_l(n)+e_nl(n),e_l(n)表示预测线性部分的误差,e_nl(n)表示预测非线性部分的误差。 对于线性部分,我们可以根据最小误差(Mean Square Error,MSE)准则求出最优解,即 H_opt = argmin(sum([x_l(n)-H(x(n)))^2])) 对于非线性部分,我们需要使用适应滤波器来捕获和补偿。LMS算法通过不断地迭代,使得输出误差e(n)趋近于零,从而实现适应滤波。 具体地,对于非线性部分的预测误差e_nl(n),我们可以用一个自适应滤波器W(z)产生补偿信号v(n),即v(n)=W^T(z)x^2_nl(n)。其中,^T表示矩阵的转置,x^2_nl(n)表示非线性部分经过LPA后的输出信号平方。将v(n)加到输入信号x(n)中,就可以对LPA的非线性失真进行补偿,从而实现数字失真。 以上就是DPD数字失真LMS算法的推导。DPD技术的应用可以有效提升通信系统的性能和覆盖范围,对无线通信技术的发展起到了重要的推动作用。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值