1. 高峰均比(PAPR)的数学分析
OFDM信号的时域波形由多个正交子载波的叠加产生,当多个子载波在某一时刻相位对齐时,信号幅度会达到极大值,导致高PAPR。以下是关键公式推导:
(1) OFDM时域信号
假设OFDM符号有
N
N
N 个子载波,调制符号为
X
k
X_k
Xk(如QPSK或QAM),则时域离散信号为:
x
[
n
]
=
1
N
∑
k
=
0
N
−
1
X
k
e
j
2
π
k
n
N
,
n
=
0
,
1
,
…
,
N
−
1
x[n] = \frac{1}{\sqrt{N}} \sum_{k=0}^{N-1} X_k e^{j \frac{2\pi kn}{N}}, \quad n = 0,1,\dots,N-1
x[n]=N1k=0∑N−1XkejN2πkn,n=0,1,…,N−1
其中,归一化因子
1
/
N
1/\sqrt{N}
1/N 保证信号平均功率为1。
(2) PAPR定义
峰均比(PAPR)定义为信号的峰值功率与平均功率的比值:
PAPR
=
max
n
∣
x
[
n
]
∣
2
E
[
∣
x
[
n
]
∣
2
]
\text{PAPR} = \frac{\max_{n} |x[n]|^2}{E\left[ |x[n]|^2 \right]}
PAPR=E[∣x[n]∣2]maxn∣x[n]∣2
其中,分母为平均功率,分子为瞬时峰值功率。
(3) PAPR的理论上限
若所有子载波相位对齐(
X
k
X_k
Xk 均为同相位),时域信号幅度达到最大:
max
∣
x
[
n
]
∣
=
1
N
∑
k
=
0
N
−
1
∣
X
k
∣
\max |x[n]| = \frac{1}{\sqrt{N}} \sum_{k=0}^{N-1} |X_k|
max∣x[n]∣=N1k=0∑N−1∣Xk∣
假设
X
k
X_k
Xk 为归一化调制符号(如QPSK,
∣
X
k
∣
=
1
|X_k|=1
∣Xk∣=1),则:
max
∣
x
[
n
]
∣
=
N
⇒
PAPR
理论
=
N
\max |x[n]| = \sqrt{N} \quad \Rightarrow \quad \text{PAPR}_{\text{理论}} = N
max∣x[n]∣=N⇒PAPR理论=N
实际中,所有子载波相位对齐的概率极低,但PAPR仍随
N
N
N 增大而显著升高。
单载波与OFDM系统的PAPR对比分析
1. 数学原理对比
-
单载波系统:
单载波信号(例如QPSK或QAM)的时域幅度恒定(假设无脉冲成形),因此其峰均比理论值为0 dB:
PAPR 单载波 = 10 log 10 ( max ∣ x [ n ] ∣ 2 E [ ∣ x [ n ] ∣ 2 ] ) = 10 log 10 ( 1 ) = 0 dB \text{PAPR}_{\text{单载波}} = 10 \log_{10}\left(\frac{\max |x[n]|^2}{E[|x[n]|^2]}\right) = 10 \log_{10}(1) = 0 \, \text{dB} PAPR单载波=10log10(E[∣x[n]∣2]max∣x[n]∣2)=10log10(1)=0dB -
OFDM系统:
OFDM信号的时域波形由多子载波叠加,相位对齐时产生高峰值:
PAPR OFDM ≈ 10 log 10 ( N ) dB ( N = 子载波数 ) \text{PAPR}_{\text{OFDM}} \approx 10 \log_{10}(N) \, \text{dB} \quad (N = \text{子载波数}) PAPROFDM≈10log10(N)dB(N=子载波数)
2. Python代码对比PAPR的CCDF曲线
以下代码生成单载波(QPSK)和OFDM信号的PAPR分布,并绘制对比图:
import numpy as np
import matplotlib.pyplot as plt
def generate_single_carrier(num_symbols, mod_order=4):
"""生成单载波信号(QPSK调制,假设无脉冲成形)"""
data = np.random.randint(0, mod_order, num_symbols)
constellation = np.exp(1j * (np.pi/4 + 2 * np.pi * data / mod_order))
return constellation
def generate_ofdm_symbol(N_subcarrier, mod_order=4):
"""生成OFDM符号(QPSK调制)"""
data = np.random.randint(0, mod_order, N_subcarrier)
constellation = np.exp(1j * (np.pi/4 + 2 * np.pi * data / mod_order))
time_signal = np.fft.ifft(constellation, n=N_subcarrier)
return time_signal
def calculate_papr(signal):
"""计算PAPR(单位:dB)"""
peak_power = np.max(np.abs(signal)**2)
avg_power = np.mean(np.abs(signal)**2)
return 10 * np.log10(peak_power / avg_power)
def plot_ccdf_comparison(N_subcarrier=64, num_symbols=1000):
"""绘制单载波与OFDM的PAPR对比CCDF曲线"""
# 生成单载波信号(每个符号对应一个采样点)
sc_signals = generate_single_carrier(num_symbols) # 单载波信号
ofdm_signals = [generate_ofdm_symbol(N_subcarrier) for _ in range(num_symbols)] # OFDM信号
# 计算PAPR
sc_papr = [calculate_papr(sc_signals)] * num_symbols # 单载波PAPR恒为0 dB
ofdm_papr = [calculate_papr(signal) for signal in ofdm_signals]
# 绘制CCDF
plt.figure()
# 单载波CCDF(理论值0 dB)
plt.axvline(x=0, color='r', linestyle='--', label='Single Carrier (QPSK)')
# OFDM CCDF
values, base = np.histogram(ofdm_papr, bins=100, density=True)
ccdf = 1 - np.cumsum(values) * np.diff(base)[0]
plt.plot(base[:-1], ccdf, label=f'OFDM (N={N_subcarrier})')
plt.xlabel('PAPR (dB)')
plt.ylabel('Probability (PAPR > x)')
plt.title('PAPR CCDF Comparison: Single Carrier vs. OFDM')
plt.grid(True)
plt.legend()
plt.show()
# 执行对比
plot_ccdf_comparison(N_subcarrier=64, num_symbols=1000)
3. 代码解释
- 信号生成:
- 单载波:直接生成QPSK符号,每个符号对应一个采样点。
- OFDM:通过IFFT生成时域信号,每个符号包含(N=64)个子载波
4. 直观解释
- 子载波叠加效应:当多个子载波同相位叠加时,时域信号幅度显著增大。
- 统计特性:OFDM时域信号的实部和虚部近似为高斯分布,但其包络分布(幅度)会导致高PAPR。
- 子载波数影响:子载波数 N N N 越大,出现极端峰值的概率越高。
5. 数学与代码结论
参数 | 数学关系 | 代码验证 |
---|---|---|
理论PAPR上限 | PAPR max = 10 log 10 ( N ) \text{PAPR}_{\text{max}} = 10\log_{10}(N) PAPRmax=10log10(N) | 仿真显示PAPR随 N N N 增大而升高 |
子载波数 N N N | PAPR与 N N N 正相关 | 对比 N = 64 N=64 N=64 和 N = 256 N=256 N=256 结果 |
信号叠加机制 | 多子载波同相位叠加导致高峰值 | CCDF曲线右移,高PAPR概率增大 |
6. 降低PAPR的常用方法
尽管OFDM天然存在高PAPR,但可通过以下技术缓解:
- 削峰(Clipping):直接限制信号幅度,但引入失真。
- 选择性映射(SLM):选择PAPR最低的信号版本。
- 预编码(PTS):优化相位序列降低峰值。
- 压扩变换:非线性压缩动态范围。
- DFT-S-OFDM:对于高功率的 2 级功率应用或者当用户设备位于基站蜂窝的边缘位置,远离信号塔时,DFT-S-OFDM 可能是首选波形。
DFT-S-OFDM降低PAPR的原理
1. DFT-S-OFDM的基本原理
DFT-S-OFDM(离散傅里叶变换扩频正交频分复用)通过以下步骤降低PAPR:
- DFT预处理:将多个数据符号通过DFT转换到频域,形成频域扩展符号。
- 子载波映射:将DFT后的频域符号映射到OFDM子载波的中心位置(类似单载波特性)。
- IFFT变换:通过IFFT生成时域信号,最终信号表现为类似单载波的低PAPR特性。
2. 降低PAPR的数学解释
假设输入数据符号为
d
0
,
d
1
,
…
,
d
M
−
1
d_0, d_1, \dots, d_{M-1}
d0,d1,…,dM−1,经过
M
M
M-点DFT扩展到频域:
D
k
=
∑
m
=
0
M
−
1
d
m
e
−
j
2
π
k
m
M
,
k
=
0
,
1
,
…
,
M
−
1
D_k = \sum_{m=0}^{M-1} d_m e^{-j \frac{2\pi km}{M}}, \quad k = 0,1,\dots,M-1
Dk=m=0∑M−1dme−jM2πkm,k=0,1,…,M−1
将
D
k
D_k
Dk 映射到OFDM的
N
N
N 个子载波(通常
N
>
M
N > M
N>M,未映射的位置填零),再通过IFFT生成时域信号:
x
[
n
]
=
1
N
∑
k
=
0
N
−
1
D
k
e
j
2
π
k
n
N
x[n] = \frac{1}{\sqrt{N}} \sum_{k=0}^{N-1} D_k e^{j \frac{2\pi kn}{N}}
x[n]=N1k=0∑N−1DkejN2πkn
由于频域符号的扩展,时域信号的幅度波动显著降低,PAPR接近单载波系统。
3. Python代码实现
以下代码生成传统OFDM和DFT-S-OFDM的时域信号,并对比两者的PAPR分布。
(1) 生成DFT-S-OFDM信号
import numpy as np
import matplotlib.pyplot as plt
def generate_dft_s_ofdm_symbol(M_subcarrier, N_fft, mod_order=4):
"""生成DFT-S-OFDM符号(QPSK调制)"""
# 生成QPSK数据符号
data = np.random.randint(0, mod_order, M_subcarrier)
constellation = np.exp(1j * (np.pi/4 + 2 * np.pi * data / mod_order))
# DFT预处理(M点DFT)
dft_output = np.fft.fft(constellation, n=M_subcarrier)
# 子载波映射到中心位置(假设N_fft > M_subcarrier)
subcarrier_mapping = np.zeros(N_fft, dtype=complex)
start_idx = (N_fft - M_subcarrier) // 2
subcarrier_mapping[start_idx:start_idx + M_subcarrier] = dft_output
# IFFT变换生成时域信号
time_signal = np.fft.ifft(subcarrier_mapping, n=N_fft)
return time_signal
def calculate_papr(signal):
"""计算PAPR(单位:dB)"""
peak_power = np.max(np.abs(signal)**2)
avg_power = np.mean(np.abs(signal)**2)
return 10 * np.log10(peak_power / avg_power)
def plot_papr_comparison(M_subcarrier, N_fft, num_symbols=1000):
"""绘制OFDM与DFT-S-OFDM的PAPR对比CCDF曲线"""
ofdm_papr = []
dfts_ofdm_papr = []
for _ in range(num_symbols):
# 传统OFDM(占用全部子载波)
ofdm_symbol = generate_ofdm_symbol(N_fft)
ofdm_papr.append(calculate_papr(ofdm_symbol))
# DFT-S-OFDM(占用M个子载波)
dfts_symbol = generate_dft_s_ofdm_symbol(M_subcarrier, N_fft)
dfts_ofdm_papr.append(calculate_papr(dfts_symbol))
# 计算CCDF
def compute_ccdf(papr_list):
values, base = np.histogram(papr_list, bins=100, density=True)
ccdf = 1 - np.cumsum(values) * np.diff(base)[0]
return base[:-1], ccdf
plt.figure()
# 传统OFDM
x_ofdm, y_ofdm = compute_ccdf(ofdm_papr)
plt.plot(x_ofdm, y_ofdm, label=f'OFDM (N={N_fft})')
# DFT-S-OFDM
x_dfts, y_dfts = compute_ccdf(dfts_ofdm_papr)
plt.plot(x_dfts, y_dfts, label=f'DFT-S-OFDM (M={M_subcarrier}, N={N_fft})')
plt.xlabel('PAPR (dB)')
plt.ylabel('Probability (PAPR > x)')
plt.title('PAPR CCDF: OFDM vs. DFT-S-OFDM')
plt.grid(True)
plt.legend()
plt.show()
# 参数设置:M为有效子载波数,N_fft为OFDM的总子载波数
M_subcarrier = 64 # DFT-S-OFDM有效子载波数
N_fft = 256 # OFDM总子载波数
plot_papr_comparison(M_subcarrier, N_fft)
4. 代码说明与结果分析
-
DFT预处理:
- 输入数据符号通过 M M M-点DFT扩展,映射到OFDM的 N N N 个子载波中心位置。
- 代码中
M_subcarrier=64
和N_fft=256
表示DFT-S-OFDM仅使用64个子载波,而OFDM使用全部256个子载波。
-
PAPR对比:
- 传统OFDM:高PAPR(例如,当 N = 256 N=256 N=256 时,理论PAPR为 10 log 10 ( 256 ) ≈ 24 10\log_{10}(256) \approx 24 10log10(256)≈24 dB)。
- DFT-S-OFDM:通过频域扩展和子载波映射,信号类似单载波,PAPR显著降低(接近单载波的0 dB)。
-
仿真结果:
- 传统OFDM的CCDF曲线位于右侧(高PAPR概率大),DFT-S-OFDM的曲线左移,显示PAPR改善明显。
5. DFT-S-OFDM的优缺点
优点 | 缺点 |
---|---|
PAPR接近单载波,适合功率受限场景 | 频谱效率略低于传统OFDM(需预留保护子载波) |
兼容OFDM接收机设计 | 复杂度略高(需DFT预处理) |
通过上述分析,DFT-S-OFDM通过频域扩展和子载波映射,在保持OFDM优势的同时显著降低PAPR,适用于上行链路等对功率效率要求高的场景。
(DFT-S-OFDM通过DFT预处理生成类似单载波的低PAPR信号,降低终端功率放大器(PA)的非线性失真风险,使PA能高效工作在接近饱和区,从而延长电池寿命并提升发射效率,尤其适合移动终端功率受限的上行链路场景,同时保留OFDM抗多径衰落和频域调度的优势。)
-
传统OFDM,因为峰值功率很高,PA必须工作在远离饱和区的线性区域,以避免峰值部分被削波,从而产生失真。(对应下图前面)但这样效率低下,因为PA在低功率输出时效率较低。
-
DFT-S-OFDM,通过预编码技术,将信号转换成类似单载波的特性,PAPR较低,接近0 dB。这样PA可以工作在接近饱和区的非线性区域,此时PA的效率更高,因为饱和区附近是PA转换效率最高的区域。