[Predistorsión digital DPD] Desarrollo del sistema de predistorsión digital de la serie Volterra del amplificador de potencia de RF

1. Versión de software

MATLAB2013b

2. Conocimiento teórico de este algoritmo

La serie Volterra es una serie de Taylor con memoria. Su fórmula matemática es similar a la serie de Taylor. La señal de salida del modelo de la serie Volterra se expresa por la potencia de la señal de entrada. La diferencia entre la serie Volterra y la serie Taylor es que la serie Volterra tiene una función de retardo, por lo que la serie Volterra es más adecuada para el proceso de linealización del amplificador de potencia con efecto memoria. Por lo que su expresión matemática es la siguiente:

La expresión para la variable y k(*) es:

         Cuando la señal de entrada es una señal compleja, la fórmula yk se puede reescribir como la siguiente expresión:

 

        Dado que el ancho de banda de la señal aumenta con el aumento del orden no lineal, cuando la señal de entrada pasa por el modelo de Volterra, el ancho de banda de la señal aumentará con el aumento del orden del dispositivo no lineal. Tomando como ejemplo un sistema de tercer orden, el ancho de banda de su señal se triplicará y el ancho de banda de su señal de salida final depende del orden más alto del sistema no lineal. Esto da como resultado que la señal de salida de un sistema de banda ancha sea filtrada por el filtro antes de ser capturada.En este caso, simplemente usando el modelo de la serie Volterra, el ancho de banda de la señal de salida del sistema y el ancho de banda de la señal de entrada tendrán una gran diferencia. y, en última instancia, afectan la precisión del modelo.

       El modelo de predistorsión digital de toda la serie Volterra de banda limitada se puede expresar mediante la siguiente expresión:

La señal de salida y (n) se puede expresar como:

 

 

 3. Código central


clc;
clear;
close all;
warning off;
addpath 'func\'

%%
%信号产生高旁瓣频谱的信号
load Rs.mat
L   = 2^13;%根据电脑速度选择信号长度
fs  = 1.8432*10^8;
fc  = 7*10^7;%载波70MHZ
ts  = 1/fs;
Scal= 8;
Ns  = 1;
%original input
Xn  = signal(1:L)/max(abs(signal(1:L)))/2; 
Xn0 = Xn;
m   = length(Xn);

figure;
[psdx,freq] = func_psd(Xn,m,ts,Scal); 
plot(freq/1e6,psdx,'g','linewidth',2);
grid on
hold on
axis([-fc/1e6,fc/1e6,-110,0]);

%%
%论文DPD
K  = 127;
Wn = [0.01,0.5];%修改0.1的值,获得不同情况下的band limit效果,0.0001~0.1
w  = fir1(K,Wn,'bandpass');

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]; 
  
G_MP=[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 = X_NxL * C_Lx1
U_Nx1 = func_volterra0(Xn,w,G_BL,K,Ns);
 
[psdu,freq] = func_psd(U_Nx1,m,ts,Scal); 
plot(freq/1e6,psdu,'b','linewidth',2);
grid on
hold on
axis([-fc/1e6,fc/1e6,-110,0]);


%is the expected inverse output matrix generated from the PA input (the output of the predistorter) u~, 
%u~根据公式22计算得到。
%1st:LS
U    = func_volterra_Matrix(Xn,w2,G_BL,G_MP,K2,Ns);
%构造Y,LS estimate
Out  = func_volterra1(U,w2,G_BL,K2,Ns);
%公式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');
Cest0= pinv(Y2)*U(3:m).';
Cest = Cest0;
 
%LMS算法的参数
step = 0.002;
Xn2  = Xn;
for ii = 1:5
    %变步长LMS estimate
    U    = func_volterra_Matrix(Xn2,w2,G_BL,G_MP,K2,Ns);
    Out  = func_volterra1(U,w2,G_BL,K2,Ns);
  
    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');
    
    err  = (Xn2(3:end) - [Y2*Cest].')/25;
    Cest = Cest - [step*err*Y2].';
 
    Xn2  = func_volterra1(U_Nx1,w2,Cest,K2,Ns);
end

Yn2   = func_volterra1(U_Nx1,w2,Cest0,K2,Ns);
%通过功放
U_Nx2 = func_volterra0(Yn2,w,G_BL,K,Ns);

[psdy,freq] = func_psd(U_Nx2,m,ts,Scal); 
plot(freq/1e6,psdy,'r','linewidth',2);
grid on
hold on
axis([-fc/1e6,fc/1e6,-110,0]);
legend('标准信号','无预失真时功放频谱','有预失真时功放频谱');
xlabel('Frequency Offset(MHz)'); 
ylabel('Normalized power Spectral Density (dB)'); 
 

save R2.mat freq psdy




 4. Pasos de operación y conclusión de la simulación.

 5. Referencias

[01]Pág. Singerl, H. Koeppl. Un método de identificación de baja velocidad para predistorsionadores digitales basado en la interpolación del kernel de Volterra. El 48º Simposio del Medio Oeste sobre circuitos y sistemas. 2005, 2: 1533~1536. 

[02] Guan Bao. Diseño e implementación de DPD basado en FPGA [D]. Wuhan: Instituto de Correos y Telecomunicaciones de Wuhan, 2014.

[03]Hao Lin, Taijun Liu, Yan Ye. Diseño de optimización de tablas de consulta basadas en FPGA o amplificadores de potencia de RF de linealización [J]. 2011, 03(21): 8-11.

A01-145

Supongo que te gusta

Origin blog.csdn.net/ccsss22/article/details/124418829
Recomendado
Clasificación