管中窥豹数字预失真(DPD)


管中窥豹数字预失真(DPD)

数字预失真在通信领域发挥了巨大的作用,对提高功放效率、改善误码率起了不可忽略的作用,广泛运用与通信、雷达等各种领域。但是对于普通用户,它显得及其高深神秘。今天就用这个短文,管中窥豹,权当科普。


一、数字预失真原理

1.1 非线性失真问题

功率放大器(PA)在无线通信系统中存在非线性特性,当输入信号幅度较大时,会产生:

  • 带内失真(EVM恶化)
  • 带外频谱再生(ACPR指标恶化)
  • 谐波分量

y P A ( n ) = ∑ k = 1 K a k x ( n ) ∣ x ( n ) ∣ k − 1 + e ( n ) y_{PA}(n) = \sum_{k=1}^{K} a_k x(n)|x(n)|^{k-1} + e(n) yPA(n)=k=1Kakx(n)x(n)k1+e(n)

1.2 DPD核心思想

通过在PA前级联预失真器,使得整体系统呈现线性特性:
x D P D ( n ) = f − 1 ( x ( n ) ) x_{DPD}(n) = f^{-1}(x(n)) xDPD(n)=f1(x(n))
y P A ( n ) = f ( x D P D ( n ) ) ≈ G ⋅ x ( n ) y_{PA}(n) = f(x_{DPD}(n)) \approx G\cdot x(n) yPA(n)=f(xDPD(n))Gx(n)


二、Volterra级数

研究预失真就躲不开神奇Volterra级数,其在预失真技术中有着举足轻重的作用。

1. Volterra级数的数学定义

Volterra级数是描述非线性时变系统的泛函级数展开,可视为泰勒级数在时域中的扩展。其核心思想是将系统输出表示为输入信号的多重积分(或离散时间的多重求和),形式为:

y ( n ) = ∑ k = 1 ∞ ∑ m 1 = 0 M ⋯ ∑ m k = 0 M h k ( m 1 , … , m k ) ∏ i = 1 k x ( n − m i ) y(n) = \sum_{k=1}^{\infty} \sum_{m_1=0}^{M} \cdots \sum_{m_k=0}^{M} h_k(m_1, \dots, m_k) \prod_{i=1}^{k} x(n - m_i) y(n)=k=1m1=0Mmk=0Mhk(m1,,mk)i=1kx(nmi)

其中:

  • h k ( m 1 , … , m k ) h_k(m_1, \dots, m_k) hk(m1,,mk):第 k k k阶Volterra核(多维系数),描述系统对 k k k阶非线性项的响应。
  • M M M:记忆深度,决定系统依赖过去输入的时间范围。
简化形式(离散时间)

实际应用中常截断到有限阶数 K K K和记忆深度 M M M
y ( n ) = h 0 + ∑ k = 1 K ∑ m 1 = 0 M ⋯ ∑ m k = 0 M h k ( m 1 , … , m k ) ∏ i = 1 k x ( n − m i ) y(n) = h_0 + \sum_{k=1}^{K} \sum_{m_1=0}^{M} \cdots \sum_{m_k=0}^{M} h_k(m_1, \dots, m_k) \prod_{i=1}^{k} x(n - m_i) y(n)=h0+k=1Km1=0Mmk=0Mhk(m1,,mk)i=1kx(nmi)


2. Volterra级数与泰勒级数的关键区别

特性泰勒级数Volterra级数
适用范围无记忆非线性系统含记忆效应的非线性系统
输入依赖仅当前输入 x ( n ) x(n) x(n)当前及历史输入 x ( n − m ) x(n-m) x(nm)
数学结构单变量多项式展开多变量多重求和/积分
参数复杂度 O ( K ) O(K) O(K) O ( K ⋅ M K ) O(K \cdot M^K) O(KMK)(指数增长)

3.Volterra级数在功放建模中的作用

3.1 功放的非线性与记忆效应
  • 非线性失真:输出信号幅度与输入不成正比,产生谐波和交调失真。
  • 记忆效应:输出不仅依赖当前输入,还与历史输入相关,主要由以下因素引起:
    • 电路中的电抗元件(电容/电感)
    • 温度漂移
    • 电源调制效应
3.2 Volterra模型的优势
  1. 联合建模能力:同时捕捉非线性与记忆效应。
  2. 物理可解释性:各阶核对应不同非线性阶次的动态响应。
  3. 灵活性:通过调整阶数 K K K和记忆深度 M M M平衡精度与复杂度。

4.Volterra级数在预失真中的应用

4.1 预失真基本原理

构建预失真器 f − 1 ( ⋅ ) f^{-1}(\cdot) f1(),使得级联系统满足:
f − 1 ( x ( n ) ) → [ P A ] → G ⋅ x ( n ) f^{-1}(x(n)) \rightarrow [PA] \rightarrow G \cdot x(n) f1(x(n))[PA]Gx(n)
其中 G G G为期望的线性增益。

4.2 基于Volterra的预失真实现步骤
  1. 正向建模:通过测量数据辨识PA的Volterra核 { h k } \{h_k\} {hk}
  2. 逆模型求解:求取预失真器的Volterra核 { w k } \{w_k\} {wk},使得:
    w k ∗ h k ≈ δ ( k ) w_k \ast h_k \approx \delta(k) wkhkδ(k)
  3. 实时补偿:将输入信号通过预失真器后再送入PA。
4.3 核辨识方法

常用最小二乘法(LS)或递归最小二乘(RLS):

# 伪代码:Volterra核辨识
def identify_volterra(x, y, K, M):
    # 构建回归矩阵X(包含所有乘积项x(n-m1)x(n-m2)...)
    X = construct_volterra_matrix(x, K, M)
    # 求解最小二乘问题
    h = np.linalg.lstsq(X, y, rcond=None)[0]
    return h

5.Volterra模型的简化形式

5.1 对角记忆多项式(常见简化)

仅保留相同延迟项的乘积:
y ( n ) = ∑ k = 1 K ∑ m = 0 M a k m x ( n − m ) ∣ x ( n − m ) ∣ k − 1 y(n) = \sum_{k=1}^{K} \sum_{m=0}^{M} a_{km} x(n-m) |x(n-m)|^{k-1} y(n)=k=1Km=0Makmx(nm)x(nm)k1
参数复杂度降为 O ( K ⋅ M ) O(K \cdot M) O(KM)

5.2 广义记忆多项式(GMP)

添加交叉记忆项:
y ( n ) = ∑ k = 1 K ∑ m = 0 M a k m x ( n − m ) ∣ x ( n − m ) ∣ k − 1 + ∑ k = 2 K ∑ m = 1 M ∑ l = 1 L b k m l x ( n ) ∣ x ( n − m ) ∣ k − 1 y(n) = \sum_{k=1}^{K} \sum_{m=0}^{M} a_{km} x(n-m)|x(n-m)|^{k-1} + \sum_{k=2}^{K} \sum_{m=1}^{M} \sum_{l=1}^{L} b_{kml} x(n)|x(n-m)|^{k-1} y(n)=k=1Km=0Makmx(nm)x(nm)k1+k=2Km=1Ml=1Lbkmlx(n)x(nm)k1


6. Volterra模型的局限性

  1. 参数爆炸:三阶全Volterra模型需 M 3 M^3 M3个参数( M = 3 M=3 M=3时需27个系数)。
  2. 辨识难度:高阶核需要大量训练数据且对噪声敏感。
  3. 实时性挑战:硬件实现时乘加运算量巨大。

7. 应用案例:5G Massive MIMO功放线性化

7.1 场景特点
  • 宽带信号(100MHz+)
  • 高峰均比(PAPR > 10dB)
  • 多通道耦合效应
7.2 Volterra-DPD效果
指标无DPD传统MP-DPDVolterra-DPD
ACLR (dBc)-28-45-52
EVM (%)8.72.11.3
计算复杂度-3.5×

三、常用数学模型

预失真工程中常用的都是Volterra级数的简化模型,是Volterra级数的特殊形式,但是他们在性能损失较小的情况下,大幅度缩减了计算量,有着相当的实际工程价值。

3.1 无记忆多项式模型

y ( n ) = ∑ k = 1 K a k x ( n ) ∣ x ( n ) ∣ k − 1 y(n) = \sum_{k=1}^{K} a_k x(n)|x(n)|^{k-1} y(n)=k=1Kakx(n)x(n)k1

  • K K K:非线性阶数
  • a k a_k ak:多项式系数

3.2 记忆多项式模型(最常用)

y ( n ) = ∑ m = 0 M ∑ k = 1 K a m k x ( n − m ) ∣ x ( n − m ) ∣ k − 1 y(n) = \sum_{m=0}^{M} \sum_{k=1}^{K} a_{mk} x(n-m)|x(n-m)|^{k-1} y(n)=m=0Mk=1Kamkx(nm)x(nm)k1

  • M M M:记忆深度
  • K K K:非线性阶数

3.3 广义记忆多项式

y ( n ) = ∑ m = 0 M ∑ k = 1 K a m k x ( n − m ) ∣ x ( n − m ) ∣ k − 1 + ∑ m = 1 M ∑ k = 2 K b m k x ( n ) ∣ x ( n − m ) ∣ k − 1 y(n) = \sum_{m=0}^{M} \sum_{k=1}^{K} a_{mk} x(n-m)|x(n-m)|^{k-1} + \sum_{m=1}^{M} \sum_{k=2}^{K} b_{mk} x(n)|x(n-m)|^{k-1} y(n)=m=0Mk=1Kamkx(nm)x(nm)k1+m=1Mk=2Kbmkx(n)x(nm)k1


四、仿真

python 仿真代码如下:

import numpy as np
import matplotlib.pyplot as plt

# 参数设置
Fs = 100e6       # 采样率
N = 8192         # 信号长度
M = 3            # 记忆深度
K = 5            # 非线性阶数
PA_GAIN = 10     # 放大器增益

# 生成输入信号(QPSK调制)
x = np.random.randn(N) + 1j*np.random.randn(N)
x = x/np.max(np.abs(x))  # 归一化

# PA非线性模型(Rapp模型)
def power_amplifier(x_in, p=2):
    return x_in / (1 + (np.abs(x_in)**p))**(1/(2*p))

# DPD参数估计(最小二乘法)
def dpd_identification(u, d, M, K):
    X = np.zeros((len(u)-M, M*K), dtype=complex)
    for m in range(M):
        for k in range(K):
            X[:, m*K + k] = u[M-m-1:-1-m] * np.abs(u[M-m-1:-1-m])**k
    w = np.linalg.lstsq(X, d[M:], rcond=None)[0]
    return w

# 应用DPD预失真
def apply_dpd(x_in, w, M, K):
    x_out = np.zeros_like(x_in)
    for n in range(M, len(x_in)):
        for m in range(M):
            for k in range(K):
                x_out[n] += w[m*K + k] * x_in[n-m] * np.abs(x_in[n-m])**k
    return x_out

# 主仿真流程
pa_out = power_amplifier(x * PA_GAIN)          # PA输出
dpd_coeff = dpd_identification(pa_out, x, M, K) # DPD系数估计
x_dpd = apply_dpd(x, dpd_coeff, M, K)          # 应用预失真
pa_dpd_out = power_amplifier(x_dpd * PA_GAIN)  # PA+DPD输出

# 频谱分析
def plot_spectrum(signal, title):
    f = np.fft.fftfreq(len(signal), 1/Fs)
    idx = np.argsort(f)
    plt.plot(f[idx]/1e6, 20*np.log10(np.abs(np.fft.fft(signal))[idx]))
    plt.title(title)
    plt.xlabel('Frequency (MHz)')
    plt.ylabel('Power (dB)')

plt.figure(figsize=(12,6))
plt.subplot(211)
plot_spectrum(pa_out, 'Without DPD')
plt.subplot(212)
plot_spectrum(pa_dpd_out, 'With DPD')
plt.tight_layout()
plt.show()

五、结果分析

在这里插入图片描述

  1. 频谱对比:应用DPD后带外频谱泄露明显降低
  2. ACPR改善:典型改善可达10-15dB
  3. EVM提升:误差矢量幅度显著降低

六、工程实践建议

  1. 模型选择:根据PA特性选择记忆深度和非线性阶数
  2. 参数辨识:建议使用LS、RLS或神经网络方法
  3. 实时更新:需设计自适应算法跟踪PA特性变化

扩展阅读方向

  • 神经网络DPD
  • 基于Volterra级数的模型
  • 混合数字模拟预失真技术
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值