文章目录
前言
前段时间项目中遇到功放非线性失真问题,因此研究了数字预失真相关理论,主要参考Lei Ding博士的毕业论文【1】,对其中主要部分做一个概要抽取和总结,权当是学习记录。
简介
数字预失真 (Digital Pre-Distortion, DPD) 是一种用于改善射频功放 (PA) 非线性失真的技术,核心思想是根据PA的输入和输出信号对其非线性失真进行建模,然后在数字基带侧对原始波形进行反向处理,使得PA输出信号尽可能接近原始信号,从而提高信号质量。其在通信领域发挥了巨大的作用,对提高功放效率、改善误码率起了不可忽略的作用,广泛运用与通信、雷达等各种领域。
1、数字预失真的必要性
功率放大器是通信系统中不可缺少的器件,具有固有的非线性特性。非线性特性会产生频谱再生,导致相邻信道干扰。它还会引起带内失真,从而降低误码率(BER)性能。为了减少非线性影响,功率放大器可以在其工作曲线的线性部分内工作,但这会严重降低功放的效率。尤其是对于高峰均比的调制信号,如OFDM和WCDMA信号。因此在实际系统中,既希望得到良好的线性特性,又希望PA实现更高的效率。
为了满足以上需求,功放PA的线性化设计变得必不可少,其中DPD就是个非常有效的方法。这种方法在基带中增加了一个数字预失真器,以创建一个扩展的非线性特性,与功率放大器的非线性特性互补。理想情况下,预失真器和功率放大器的级联变为线性,使得原始输入被恒定增益放大。DPD系统的流程示意图如图1。
2、功放的建模
功放的建模主要有两类,即无记忆模型和有记忆模型。其主要区别在于功放响应的时延拓展 Δ τ \Delta \tau Δτ与传输信号的符号时长 T T T的相对关系。当 T ≫ Δ τ T \gg \Delta \tau T≫Δτ时,可认为功法无记忆效应,否则认为功放有记忆效应。无记忆模型相对简单,预失真处理也相对容易;有记忆模型更加复杂,建模准确度和系统线性化效果会更好,尤其是对于WCDMA和OFDM类的信号。
2.1 功放的建模
考虑一个无记忆效应的功放,对于射频通带信号,其模型可以建立为如下:
y
~
(
t
)
=
∑
k
=
1
K
b
~
k
⋅
z
~
k
(
t
)
(1)
\tilde y\left( t \right) = \sum\limits_{k = 1}^K {{{\tilde b}_k} \cdot {{\tilde z}^k}\left( t \right)} \tag{1}
y~(t)=k=1∑Kb~k⋅z~k(t)(1)
式中,
b
~
k
{\tilde b_k}
b~k是复幅度系数,
z
~
(
t
)
\tilde z\left( t \right)
z~(t)是功放的通带输入信号,
y
~
(
t
)
\tilde y\left( t \right)
y~(t)是功放的通带输出信号。下变频到基带之后,则功放的无记忆非线性模型为【2,3】:
y
(
t
)
=
∑
k
=
1
,
o
d
d
K
b
k
⋅
z
(
t
)
⋅
∣
z
(
t
)
∣
k
−
1
(2)
y\left( t \right) = \sum\limits_{k = 1,{\rm{odd}}}^K {{b_k} \cdot z\left( t \right) \cdot } {\left| {z\left( t \right)} \right|^{k - 1}}\tag{2}
y(t)=k=1,odd∑Kbk⋅z(t)⋅∣z(t)∣k−1(2)
式中,
b
k
=
2
1
−
k
⋅
(
k
k
−
1
2
)
⋅
b
~
k
(3)
{{b}_{k}}={{2}^{1-k}}\cdot \left( \begin{matrix} k \\ \frac{k-1}{2} \\ \end{matrix} \right)\cdot {{\tilde{b}}_{k}}\tag{3}
bk=21−k⋅(k2k−1)⋅b~k(3)
z ( t ) z\left( t \right) z(t)是功放的基带输入信号, y ( t ) y\left( t \right) y(t)是功放的基带输出信号。因为偶次项在模型(1)中远离载波射频,下变频到基带之后不会对基带输出 y ( t ) y\left( t \right) y(t)产生任何贡献,所以基带模型中只包含输入信号的奇次项。
从(2)式可以看出,由于功放的非线性,功放对输入信号带来了幅度和相位失真,于是就产生了所谓的功率放大器的AM/AM和AM/PM响应。图2所示是无记忆AB类功放典型的AM/AM和AM/PM响应图。
2.2 功放的建模
当输入信号带宽变宽时,例如在WCDMA和OFDM系统中,功放响应的时延拓展变得与输入信号的符号时长相当,此时就需要考虑功放的记忆效应。对于射频通带信号,其模型可用Volterra级数进行建模:
y
~
(
t
)
=
∑
k
=
1
K
∫
⋯
∫
h
~
k
(
τ
k
)
⋅
∏
i
=
1
k
z
~
(
t
−
τ
i
)
d
τ
k
(4)
\tilde y\left( t \right) = \sum\limits_{k = 1}^K {\int { \cdots \int {{{\tilde h}_k}\left( {{{\bf{\tau }}_k}} \right) \cdot \prod\limits_{i = 1}^k {\tilde z\left( {t - {\tau _i}} \right)} } {\rm{d}}{{\bf{\tau }}_k}} }\tag{4}
y~(t)=k=1∑K∫⋯∫h~k(τk)⋅i=1∏kz~(t−τi)dτk(4)
式中,
τ
k
=
[
τ
1
,
⋯
,
τ
k
]
T
{{\bf{\tau }}_k} = {\left[ {{\tau _1}, \cdots ,{\tau _k}} \right]^T}
τk=[τ1,⋯,τk]T,
h
~
k
(
⋅
)
{\tilde h_k}\left( \cdot \right)
h~k(⋅)是实值k阶Volterra核函数,
d
τ
k
=
d
τ
1
d
τ
2
⋯
d
τ
k
{\rm{d}}{{\bf{\tau }}_k} = {\rm{d}}{\tau _1}{\rm{d}}{\tau _2} \cdots {\rm{d}}{\tau _k}
dτk=dτ1dτ2⋯dτk。下变频到基带之后,则功放的模型为:
y
(
t
)
=
∑
k
=
1
K
∫
⋯
∫
h
2
k
+
1
(
τ
2
k
+
1
)
⋅
∏
i
=
1
k
+
1
z
(
t
−
τ
i
)
⋅
∏
i
=
k
+
2
2
k
+
1
z
∗
(
t
−
τ
i
)
d
τ
2
k
+
1
(5)
y\left( t \right) = \sum\limits_{k = 1}^K {\int { \cdots \int {{h_{2k + 1}}\left( {{{\bf{\tau }}_{2k + 1}}} \right) \cdot \prod\limits_{i = 1}^{k + 1} {z\left( {t - {\tau _i}} \right)} } \cdot \prod\limits_{i = k + 2}^{2k + 1} {{z^*}\left( {t - {\tau _i}} \right)} {\rm{d}}{{\bf{\tau }}_{2k + 1}}} }\tag{5}
y(t)=k=1∑K∫⋯∫h2k+1(τ2k+1)⋅i=1∏k+1z(t−τi)⋅i=k+2∏2k+1z∗(t−τi)dτ2k+1(5)
式中,
h
2
k
+
1
(
τ
2
k
+
1
)
=
1
2
2
k
(
2
k
+
1
k
)
h
~
2
k
+
1
(
τ
2
k
+
1
)
exp
(
−
j
2
π
f
0
(
∑
i
=
1
k
+
1
τ
i
−
∑
i
=
k
+
2
2
k
+
1
τ
i
)
)
(6)
{{h}_{2k+1}}\left( {{\mathbf{\tau }}_{2k+1}} \right)=\frac{1}{{{2}^{2k}}}\left( \begin{matrix} 2k+1 \\ k \\ \end{matrix} \right){{\tilde{h}}_{2k+1}}\left( {{\mathbf{\tau }}_{2k+1}} \right)\exp \left( -j2\pi {{f}_{0}}\left( \sum\nolimits_{i=1}^{k+1}{{{\tau }_{i}}}-\sum\nolimits_{i=k+2}^{2k+1}{{{\tau }_{i}}} \right) \right)\tag{6}
h2k+1(τ2k+1)=22k1(2k+1k)h~2k+1(τ2k+1)exp(−j2πf0(∑i=1k+1τi−∑i=k+22k+1τi))(6)
(
⋅
)
∗
{\left( \cdot \right)^*}
(⋅)∗表示复共轭,
f
0
{f_0}
f0是载频。根据上述连续时间模型,可得离散时间模型:
y
(
n
)
=
∑
k
∑
l
1
⋯
∑
l
2
k
+
1
h
2
k
+
1
(
l
1
,
l
2
,
⋯
,
l
2
k
+
1
)
∏
i
=
1
k
+
1
z
(
n
−
l
i
)
∏
i
=
k
+
2
2
k
+
1
z
∗
(
n
−
l
i
)
(7)
y\left( n \right) = \sum\limits_k {\sum\limits_{{l_1}} { \cdots \sum\limits_{{l_{2k + 1}}} {{h_{2k + 1}}\left( {{l_1},{l_2}, \cdots ,{l_{2k + 1}}} \right)\prod\limits_{i = 1}^{k + 1} {z\left( {n - {l_i}} \right)} \prod\limits_{i = k + 2}^{2k + 1} {{z^*}\left( {n - {l_i}} \right)} } } } \tag{7}
y(n)=k∑l1∑⋯l2k+1∑h2k+1(l1,l2,⋯,l2k+1)i=1∏k+1z(n−li)i=k+2∏2k+1z∗(n−li)(7)
从上式可以看出,Volterra级数的参数随着记忆深度呈指数级增加,因此实际系统往往不直接采用式(7)的模型,而通常采用如下几中Volterra级数的特殊形式:Wiener模型,Hammerstein模型,Wiener-Hammerstein模型,记忆多项式模型,Murray Hill模型。
1) Wiener-Hammerstein 模型
Wiener-Hammerstein 模型可由图3所示的示意图表示,系统由一个LTI系统、一个无记忆非线性、另一个LTI系统串联而成。
该模型中的子系统:
u
(
n
)
=
∑
l
=
0
L
a
−
1
a
l
z
(
n
−
l
)
v
(
n
)
=
∑
k
=
1
,
o
d
d
K
b
k
u
(
n
)
∣
u
(
n
)
∣
k
−
1
y
(
n
)
=
∑
l
=
0
L
c
−
1
c
l
v
(
n
−
l
)
(8)
\begin{array}{l} u\left( n \right) = \sum\limits_{l = 0}^{{L_a} - 1} {{a_l}z\left( {n - l} \right)} \\ v\left( n \right) = \sum\limits_{k = 1,{\rm{odd}}}^K {{b_k}u\left( n \right){{\left| {u\left( n \right)} \right|}^{k - 1}}} \\ y\left( n \right) = \sum\limits_{l = 0}^{{L_c} - 1} {{c_l}v\left( {n - l} \right)} \end{array}\tag{8}
u(n)=l=0∑La−1alz(n−l)v(n)=k=1,odd∑Kbku(n)∣u(n)∣k−1y(n)=l=0∑Lc−1clv(n−l)(8)
式中,
a
l
{a_l}
al和
c
l
{c_l}
cl分别为无记忆非线性块前后LTI系统的脉冲响应抽头,
b
k
{b_k}
bk为非线性模块的系数。当
a
l
{a_l}
al全为0时,该模型退化为Hammerstein模型;当
c
l
{c_l}
cl全为0时,该模型退化为Wiener模型。
2) 记忆多项式模型
记忆多项式模型使用Volterra级数的对角核,在式(7)的Volterra级数中,当
l
1
=
l
2
=
⋯
=
l
2
k
+
1
=
l
{l_1} = {l_2} = \cdots = {l_{2k + 1}} = l
l1=l2=⋯=l2k+1=l时,式(7)可简化为:
y
(
n
)
=
∑
p
=
1
,
o
d
d
P
∑
l
=
0
L
−
1
b
p
l
z
(
n
−
l
)
∣
z
(
n
−
l
)
∣
p
−
1
(9)
y\left( n \right) = \sum\limits_{p = 1,{\rm{odd}}}^P {\sum\limits_{l = 0}^{L - 1} {{b_{pl}}z\left( {n - l} \right){{\left| {z\left( {n - l} \right)} \right|}^{p - 1}}} } \tag{9}
y(n)=p=1,odd∑Pl=0∑L−1bplz(n−l)∣z(n−l)∣p−1(9)
式中, b p l = h 2 k + 1 ( l , l , ⋯ , l ) {b_{pl}} = {h_{2k + 1}}\left( {l,l, \cdots ,l} \right) bpl=h2k+1(l,l,⋯,l)。如果考虑交叉记忆项,则得到广义记忆多项式GMP,这里也不展开。
2.3 预失真处理方式
采用记忆模型的预失真器具有更宽泛的适用范围,对于无记忆和有记忆效应的功放均能够有效线性化。后续主要讨论带记忆效应的模型,无记忆效应的预失真器是有记忆效应的一种特例。
对于数字预失真器的构建,主要可以采用两种方式,即直接式和间接式。
1) 直接式
参考功放模型(8),功放的输入信号为
z
(
n
)
z\left( n \right)
z(n),输出信号为
y
(
n
)
y\left( n \right)
y(n),那么可以根据参数估计的方式得到功放的脉冲响应或传递函数
H
(
z
)
H\left( z \right)
H(z),那么只要把数字预失真器设计成传递函数的逆乘以功放的放大增益
G
G
G即可,即
G
⋅
H
−
1
(
z
)
G \cdot {H^{ - 1}}\left( z \right)
G⋅H−1(z)。然而计算带记忆效应非线性系统的逆有时是不现实的。
2) 间接式
间接式的数字预失真器不直接估计功放的参数,而是采用图4所示的结构:
图中反馈路径上的”Predistorter Training(模块A)”输入是
y
(
n
)
/
G
y\left( n \right)/G
y(n)/G,
G
G
G是功放的放大增益,输出是
z
^
(
n
)
\hat z\left( n \right)
z^(n)。数字预失真器Predistorter是模块A的完全复制,其输入是
x
(
n
)
x\left( n \right)
x(n),输出是
z
(
n
)
z\left( n \right)
z(n)。理想情况下,期望
y
(
n
)
=
G
⋅
x
(
n
)
y\left( n \right) = G \cdot x\left( n \right)
y(n)=G⋅x(n),这使得
z
(
n
)
=
z
^
(
n
)
z\left( n \right) = \hat z\left( n \right)
z(n)=z^(n)并且误差项
e
(
n
)
=
0
e\left( n \right) = 0
e(n)=0。如果给定输入
y
(
n
)
y\left( n \right)
y(n)和观测值
z
(
n
)
z\left( n \right)
z(n),并知道模块A的模型结构,我们可以利用参数估计的方法估计模块A的参数,进而得到数字预失真器Predistorter。
实际在应用时,通常可以认为功放的变化是缓慢的,因此可以对功放离线输入
z
(
n
)
z\left( n \right)
z(n)并测量
y
(
n
)
y\left( n \right)
y(n),进而估计数字预失真器参数。一旦获取数字预失真器参数后,预失真器保持不变,直到功放特性发生较大变化。
注:对于功放而言,输入是 z ( n ) z\left( n \right) z(n)输出是 y ( n ) y\left( n \right) y(n);而对于模块A而言,输入是 y ( n ) / G y\left( n \right)/G y(n)/G,输出观测值是 z ^ ( n ) = z ( n ) \hat z\left( n \right) = z\left( n \right) z^(n)=z(n),需要进行参数估计的是模块A而不是功放!
3、预失真设计
如上所述,间接式数字预失真器设计的关键在于”Predistorter Training(模块A)”的设计。类似于功放模型,模块A的模型也参考Volterra级数。同样考虑到Volterra级数的复杂性,实际中通常只考虑Volterra级数的几种特殊情况,包括Hammerstein模型,记忆多项式模型,记忆多项式和Murray Hill联合模型。
这里只考虑最常用的记忆多项式模型,其他的模型后续总结。
3.1 记忆多项式预失真器设计
考虑如图3所示的间接式的预失真器结构,记忆多项式预失真器 (Predistorter,也就是模块A) 的模型可表述为:
z
(
n
)
=
∑
k
=
1
,
o
d
d
K
∑
q
=
0
Q
a
k
q
y
(
n
−
q
)
G
∣
y
(
n
−
q
)
G
∣
k
−
1
(10)
z\left( n \right) = \sum\limits_{k = 1,{\rm{odd}}}^K {\sum\limits_{q = 0}^Q {{a_{kq}}\frac{{y\left( {n - q} \right)}}{G}{{\left| {\frac{{y\left( {n - q} \right)}}{G}} \right|}^{k - 1}}} } \tag{10}
z(n)=k=1,odd∑Kq=0∑QakqGy(n−q)
Gy(n−q)
k−1(10)
式中,
y
(
n
)
/
G
y\left( n \right)/G
y(n)/G和
z
(
n
)
z\left( n \right)
z(n)分别是预失真器的输入和输出,
a
k
q
{a_{kq}}
akq是预失真器的系数。观察式(9)可以发现,对于系数
a
k
q
{a_{kq}}
akq,输入
y
(
n
)
/
G
y\left( n \right)/G
y(n)/G和输出
z
(
n
)
z\left( n \right)
z(n),式(9)是一个线性方程,因此预失真器的系数
a
k
q
{a_{kq}}
akq可以直接通过最小二乘法估计得到。
定义一个新序列:
u
k
q
(
n
)
=
y
(
n
−
q
)
G
∣
y
(
n
−
q
)
G
∣
k
−
1
(11)
{u_{kq}}\left( n \right) = \frac{{y\left( {n - q} \right)}}{G}{\left| {\frac{{y\left( {n - q} \right)}}{G}} \right|^{k - 1}}\tag{11}
ukq(n)=Gy(n−q)
Gy(n−q)
k−1(11)
式(9)可以写为矩阵形式:
z
=
U
a
(12)
{\bf{z = Ua}}\tag{12}
z=Ua(12)
式中,
z
=
[
z
(
1
)
,
z
(
2
)
,
⋯
,
z
(
N
−
1
)
]
T
U
=
[
u
10
,
⋯
,
u
K
0
,
⋯
u
1
Q
,
⋯
,
u
K
Q
]
u
k
q
=
[
u
k
q
(
1
)
,
u
k
q
(
2
)
,
⋯
,
u
k
q
(
N
−
1
)
]
T
a
=
[
a
10
,
⋯
,
a
K
0
,
⋯
a
1
Q
,
⋯
,
a
K
Q
]
T
(13)
\begin{array}{l} {\bf{z = }}{\left[ {z\left( 1 \right),z\left( 2 \right), \cdots ,z\left( {N - 1} \right)} \right]^T}\\ {\bf{U}} = \left[ {{{\bf{u}}_{10}}, \cdots ,{{\bf{u}}_{K0}}, \cdots {{\bf{u}}_{1Q}}, \cdots ,{{\bf{u}}_{KQ}}} \right]\\ {{\bf{u}}_{kq}} = {\left[ {{u_{kq}}\left( 1 \right),{u_{kq}}\left( 2 \right), \cdots ,{u_{kq}}\left( {N - 1} \right)} \right]^T}\\ {\bf{a}} = {\left[ {{a_{10}}, \cdots ,{a_{K0}}, \cdots {a_{1Q}}, \cdots ,{a_{KQ}}} \right]^T} \end{array}\tag{13}
z=[z(1),z(2),⋯,z(N−1)]TU=[u10,⋯,uK0,⋯u1Q,⋯,uKQ]ukq=[ukq(1),ukq(2),⋯,ukq(N−1)]Ta=[a10,⋯,aK0,⋯a1Q,⋯,aKQ]T(13)
根据最小二乘法可得:
a
^
=
(
U
H
U
)
−
1
U
H
z
(14)
{\bf{\hat a = }}{\left( {{{\bf{U}}^H}{\bf{U}}} \right)^{ - 1}}{{\bf{U}}^H}{\bf{z}}\tag{14}
a^=(UHU)−1UHz(14)
式中,
(
⋅
)
H
{\left( \cdot \right)^H}
(⋅)H表示矩阵的共轭转置。
3.2 记忆多项式预失真器仿真
功放的非线性模型采用Wiener-Hammerstein 模型,无记忆非线性模块前后的LTI模块分别用
H
(
z
)
H(z)
H(z)和
G
(
z
)
G(z)
G(z)表示。模型参数如下:
H
(
z
)
=
1
+
0.5
z
−
2
1
−
0.2
z
−
1
G
(
z
)
=
1
−
0.1
z
−
2
1
−
0.4
z
−
1
(15)
\begin{array}{l} H\left( z \right) = \frac{{1 + 0.5{z^{ - 2}}}}{{1 - 0.2{z^{ - 1}}}}\\ G\left( z \right) = \frac{{1 - 0.1{z^{ - 2}}}}{{1 - 0.4{z^{ - 1}}}} \end{array}\tag{15}
H(z)=1−0.2z−11+0.5z−2G(z)=1−0.4z−11−0.1z−2(15)
无记忆非线性模块的模型为:
v
(
n
)
=
∑
k
=
1
,
o
d
d
K
b
k
u
(
n
)
∣
u
(
n
)
∣
k
−
1
(16)
v\left( n \right) = \sum\limits_{k = 1,{\rm{odd}}}^K {{b_k}u\left( n \right){{\left| {u\left( n \right)} \right|}^{k - 1}}} \tag{16}
v(n)=k=1,odd∑Kbku(n)∣u(n)∣k−1(16)
式中,
u
(
n
)
u\left( n \right)
u(n)和
v
(
n
)
v\left( n \right)
v(n)分别是无记忆非线性模块的输入和输出,且参数
b
k
{b_k}
bk从一个实际的AB类功率放大器中提取:
b
1
=
1.0108
+
j
0.0858
,
b
2
=
0.0879
−
j
0.1583
,
b
3
=
−
1.0992
−
j
0.8891
(17)
{b_1} = 1.0108 + j0.0858,{b_2} = 0.0879 - j0.1583,{b_3} = - 1.0992 - j0.8891\tag{17}
b1=1.0108+j0.0858,b2=0.0879−j0.1583,b3=−1.0992−j0.8891(17)
对于式(10)描述的数字预失真器,设置模型中包含两个时延抽头,非线性阶数为5阶,即 Q = 2 , K = 5 Q = 2,K = 5 Q=2,K=5。训练信号为OFDM信号,共2048个有效子载波,调制方式为QPSK。下面两个图分别是功率谱密度和频域信号的星座图。
图中蓝色线表示信号经过理想线性功放的输出;红色线表示信号只经过非线性功放后的输出;青色线表示信号经过训练后的数字预失真器,然后经过非线性功放后的输出。从图中可以看出,相邻信道干扰没有明显改善,但是带内失真得到了明显的改善。
注:相邻信道干扰确实没有明显改善,可能是参数设置或者训练信号选取的不好,后续再继续尝试尝试,如果有懂的大神,还望不吝赐教。
总结
本博客根据Ding L博士的毕业论文总结了数字预失真DPD的基本理论,并介绍了功放非线性模型的常用的Volterra级数以及几种特殊情况下的模型:分别是Wiener模型,Hammerstein模型,Wiener-Hammerstein模型,记忆多项式模型。然后介绍了间接式的数字预失真器的设计,并给出了仿真结果。
参考文献
【1】Ding L .Digital Predistortion of Power Amplifiers for Wireless Applications[D]. 2004.DOI:10.1109/EUCAP.2006.4584692.
【2】Benedetto, S. and Biglieri, E., Principles of Digital Transmission with Wireless
Applications. New York, NY: Kluwer Academic/Plenum, 1999.
【3】Raich, R. and Zhou, G. T., “On the modeling of memory nonlinear effects of power
amplifiers for communication applications,” in Proc. IEEE Digital Signal Processing
Workshop, Oct. 2002.
本文作者: 渺小的颗星
本文链接:https://blog.csdn.net/weixin_40319158/article/details/148636596?spm=1011.2124.3001.6209
版权声明: 转载请注明出处!