数字预失真DPD详解+MATLAB仿真


前言

前段时间项目中遇到功放非线性失真问题,因此研究了数字预失真相关理论,主要参考Lei Ding博士的毕业论文【1】,对其中主要部分做一个概要抽取和总结,权当是学习记录。

简介

数字预失真 (Digital Pre-Distortion, DPD) 是一种用于改善射频功放 (PA) 非线性失真的技术,核心思想是根据PA的输入和输出信号对其非线性失真进行建模,然后在数字基带侧对原始波形进行反向处理,使得PA输出信号尽可能接近原始信号,从而提高信号质量。其在通信领域发挥了巨大的作用,对提高功放效率、改善误码率起了不可忽略的作用,广泛运用与通信、雷达等各种领域。

1、数字预失真的必要性

功率放大器是通信系统中不可缺少的器件,具有固有的非线性特性。非线性特性会产生频谱再生,导致相邻信道干扰。它还会引起带内失真,从而降低误码率(BER)性能。为了减少非线性影响,功率放大器可以在其工作曲线的线性部分内工作,但这会严重降低功放的效率。尤其是对于高峰均比的调制信号,如OFDM和WCDMA信号。因此在实际系统中,既希望得到良好的线性特性,又希望PA实现更高的效率。
为了满足以上需求,功放PA的线性化设计变得必不可少,其中DPD就是个非常有效的方法。这种方法在基带中增加了一个数字预失真器,以创建一个扩展的非线性特性,与功率放大器的非线性特性互补。理想情况下,预失真器和功率放大器的级联变为线性,使得原始输入被恒定增益放大。DPD系统的流程示意图如图1。
在这里插入图片描述

图1  DPD系统示意图

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=1Kb~kz~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,oddKbkz(t)z(t)k1(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=21k(k2k1)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  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=1Kh~k(τk)i=1kz~(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τ2dτ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=1Kh2k+1(τ2k+1)i=1k+1z(tτi)i=k+22k+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τii=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)=kl1l2k+1h2k+1(l1,l2,,l2k+1)i=1k+1z(nli)i=k+22k+1z(nli)(7)

从上式可以看出,Volterra级数的参数随着记忆深度呈指数级增加,因此实际系统往往不直接采用式(7)的模型,而通常采用如下几中Volterra级数的特殊形式:Wiener模型,Hammerstein模型,Wiener-Hammerstein模型,记忆多项式模型,Murray Hill模型。

1) Wiener-Hammerstein 模型
Wiener-Hammerstein 模型可由图3所示的示意图表示,系统由一个LTI系统、一个无记忆非线性、另一个LTI系统串联而成。
在这里插入图片描述

图3  Wiener-Hammerstein 模型

该模型中的子系统:
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=0La1alz(nl)v(n)=k=1,oddKbku(n)u(n)k1y(n)=l=0Lc1clv(nl)(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,oddPl=0L1bplz(nl)z(nl)p1(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) GH1(z)。然而计算带记忆效应非线性系统的逆有时是不现实的。

2) 间接式
间接式的数字预失真器不直接估计功放的参数,而是采用图4所示的结构:
在这里插入图片描述

图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)=Gx(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,oddKq=0QakqGy(nq) Gy(nq) k1(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(nq) Gy(nq) k1(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(N1)]TU=[u10,,uK0,u1Q,,uKQ]ukq=[ukq(1),ukq(2),,ukq(N1)]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)=10.2z11+0.5z2G(z)=10.4z110.1z2(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,oddKbku(n)u(n)k1(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.0879j0.1583,b3=1.0992j0.8891(17)

对于式(10)描述的数字预失真器,设置模型中包含两个时延抽头,非线性阶数为5阶,即 Q = 2 , K = 5 Q = 2,K = 5 Q=2,K=5。训练信号为OFDM信号,共2048个有效子载波,调制方式为QPSK。下面两个图分别是功率谱密度和频域信号的星座图。

在这里插入图片描述

图5  功率谱密度

在这里插入图片描述

图6  星座图

图中蓝色线表示信号经过理想线性功放的输出;红色线表示信号只经过非线性功放后的输出;青色线表示信号经过训练后的数字预失真器,然后经过非线性功放后的输出。从图中可以看出,相邻信道干扰没有明显改善,但是带内失真得到了明显的改善。
:相邻信道干扰确实没有明显改善,可能是参数设置或者训练信号选取的不好,后续再继续尝试尝试,如果有懂的大神,还望不吝赐教。


总结

本博客根据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
版权声明: 转载请注明出处!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值