OFDM峰均比(PAPR)仿真与分析

 

OFDM峰均比(PAPR)仿真与分析

峰均比(Peak-to-Average Power Ratio, PAPR)是OFDM系统的关键性能指标,指信号峰值功率与平均功率之比。过高的PAPR会导致功放非线性失真,需通过仿真分析其统计特性及降低方法。

一、OFDM PAPR基本原理

1. PAPR定义

对于OFDM复基带信号 ,PAPR定义为:

其中 为子载波数, 为调制符号, 为OFDM符号周期。

2. 过采样处理

实际仿真中,为准确估计PAPR,需对OFDM信号进行过采样(通常4倍),通过零填充IFFT实现:

二、MATLAB仿真程序

主函数:OFDM PAPR仿真

clear; clc; close all;

%% 参数设置
N = 64;              % 子载波数量
CP = 16;             % 循环前缀长度
M = 4;               % 调制阶数 (4-QPSK)
numSymbols = 1e4;    % 仿真符号数
OSR = 4;             % 过采样率
L = OSR * N;         % 过采样后IFFT点数

% SLM参数
U_slm = 8;           % SLM候选序列数

% PTS参数
V_pts = 4;           % PTS子块数
W_pts = 2^(V_pts-1); % PTS相位因子数 (通常为2^(V-1))

% Clipping参数
clipRatio = 0.8;     % 削波门限 (平均功率的倍数)

%% 生成OFDM信号并计算PAPR
% 原始OFDM
[paprOrig, paprVecOrig] = ofdm_papr_simulation(N, CP, M, numSymbols, OSR, 0, [], []);

% SLM方法
[paprSlm, ~] = ofdm_papr_simulation(N, CP, M, numSymbols, OSR, 1, U_slm, []);

% PTS方法
[paprPts, ~] = ofdm_papr_simulation(N, CP, M, numSymbols, OSR, 2, [], V_pts);

% Clipping方法
[paprClip, ~] = ofdm_papr_simulation(N, CP, M, numSymbols, OSR, 3, [], [], clipRatio);

%% 绘制CCDF曲线
figure('Name', 'OFDM PAPR CCDF曲线', 'Position', [100, 100, 800, 600]);
[PaprTh, ~, ccdfOrig] = calc_ccdf(paprVecOrig, 100);
semilogy(PaprTh, ccdfOrig, 'b-', 'LineWidth', 2, 'DisplayName', '原始OFDM');

[PaprTh, ~, ccdfSlm] = calc_ccdf(paprSlm, 100);
semilogy(PaprTh, ccdfSlm, 'r--', 'LineWidth', 2, 'DisplayName', ['SLM (U=', num2str(U_slm), ')']);

[PaprTh, ~, ccdfPts] = calc_ccdf(paprPts, 100);
semilogy(PaprTh, ccdfPts, 'g-.', 'LineWidth', 2, 'DisplayName', ['PTS (V=', num2str(V_pts), ')']);

[PaprTh, ~, ccdfClip] = calc_ccdf(paprClip, 100);
semilogy(PaprTh, ccdfClip, 'm:', 'LineWidth', 2, 'DisplayName', ['Clipping (γ=', num2str(clipRatio), ')']);

grid on; xlabel('PAPR门限 (dB)'); ylabel('CCDF (P(PAPR>PAPR_0))');
title('OFDM系统PAPR性能对比'); legend('Location', 'southwest');
set(gca, 'FontSize', 12);

核心函数1:OFDM信号生成与PAPR计算

function [paprMean, paprVec] = ofdm_papr_simulation(N, CP, M, numSymbols, OSR, method, U, V, clipRatio)
    % 参数说明:
    % method: 0-原始OFDM, 1-SLM, 2-PTS, 3-Clipping
    % U: SLM候选序列数, V: PTS子块数, clipRatio: 削波门限
    
    L = OSR * N;          % 过采样后IFFT点数
    paprVec = zeros(numSymbols, 1);  % 存储每个符号的PAPR
    
    for sym = 1:numSymbols
        % 1. 生成随机调制符号 (QPSK/M进制)
        if M == 4  % QPSK
            data = (randi([0,1], N, 1) * 2 - 1) + 1j*(randi([0,1], N, 1)*2 - 1);
        else  % 其他调制方式 (如16QAM)
            data = qammod(randi([0,M-1], N, 1), M, 'UnitAveragePower', true);
        end
        
        % 2. 根据方法处理信号
        switch method
            case 0  % 原始OFDM
                txSig = ofdm_mod(data, N, CP, L);
            case 1  % SLM方法
                txSig = slm_process(data, N, CP, L, U);
            case 2  % PTS方法
                txSig = pts_process(data, N, CP, L, V);
            case 3  % Clipping方法
                txSig = ofdm_mod(data, N, CP, L);
                txSig = clipping(txSig, clipRatio);
        end
        
        % 3. 计算PAPR
        power = abs(txSig).^2;
        peakPower = max(power);
        avgPower = mean(power);
        paprDb = 10*log10(peakPower / avgPower);
        paprVec(sym) = paprDb;
    end
    
    paprMean = mean(paprVec);  % 平均PAPR
end

核心函数2:OFDM调制(含过采样)

function txSig = ofdm_mod(data, N, CP, L)
    % 过采样处理:零填充至L点IFFT
    data_os = zeros(L, 1);
    data_os(1:N) = data;  % 前N点为有效数据,其余为零
    
    % IFFT变换
    ifft_out = ifft(data_os) * sqrt(L);  % 能量归一化
    
    % 添加循环前缀
    cp = ifft_out(L-N+CP+1:L);  % 取后CP点作为CP
    txSig = [cp; ifft_out(1:L)];  % 拼接CP和IFFT结果
end

核心函数3:SLM(选择性映射)方法

function txSig = slm_process(data, N, CP, L, U)
    % 生成U个随机相位序列
    phaseSeq = exp(1j*2*pi*rand(U, N));  % U×N相位矩阵
    
    minPapr = inf;
    bestSig = [];
    
    for u = 1:U
        % 相位旋转
        data_rot = data .* phaseSeq(u, :).';
        
        % OFDM调制
        sig = ofdm_mod(data_rot, N, CP, L);
        
        % 计算PAPR
        power = abs(sig).^2;
        papr = 10*log10(max(power)/mean(power));
        
        % 选择PAPR最小的序列
        if papr < minPapr
            minPapr = papr;
            bestSig = sig;
        end
    end
    
    txSig = bestSig;
end

核心函数4:PTS(部分传输序列)方法

function txSig = pts_process(data, N, CP, L, V)
    % 将数据分V块
    blkSize = ceil(N/V);
    dataBlk = mat2cell(data, blkSize*ones(1, V-1), 1);  % 前V-1块
    dataBlk{V} = data((V-1)*blkSize+1:end);  % 最后一块(可能不足blkSize)
    
    % 生成相位因子 (±1)
    W = 2^(V-1);  % 候选相位组合数
    wSet = dec2bin(0:W-1, V-1) - '0';  % 二进制相位因子
    wSet = 2*wSet - 1;  % 转换为±1
    
    minPapr = inf;
    bestSig = [];
    
    for wIdx = 1:W
        w = wSet(wIdx, :);
        w = [w, 1];  % 最后一块相位固定为1 (减少复杂度)
        
        % 加权求和
        dataSum = zeros(N, 1);
        for v = 1:V
            dataSum = dataSum + w(v) * dataBlk{v}(1:min(length(dataBlk{v}), N/V));
        end
        
        % OFDM调制
        sig = ofdm_mod(dataSum, N, CP, L);
        
        % 计算PAPR
        power = abs(sig).^2;
        papr = 10*log10(max(power)/mean(power));
        
        % 选择PAPR最小的序列
        if papr < minPapr
            minPapr = papr;
            bestSig = sig;
        end
    end
    
    txSig = bestSig;
end

核心函数5:Clipping(削波)方法

function sig_clip = clipping(sig, gamma)
    % gamma: 削波门限 (平均功率的倍数)
    power = abs(sig).^2;
    avgPower = mean(power);
    threshold = gamma * sqrt(avgPower);  % 幅度门限
    
    % 削波处理
    sig_clip = sig;
    mask = abs(sig) > threshold;
    sig_clip(mask) = threshold * sig(mask) ./ abs(sig(mask));  % 幅度削波
end

核心函数6:CCDF曲线计算

function [PaprTh, CCDF, ccdfVec] = calc_ccdf(paprVec, numTh)
    % 计算PAPR的互补累积分布函数(CCDF)
    maxPapr = max(paprVec);
    PaprTh = linspace(0, maxPapr, numTh);  % PAPR门限
    ccdfVec = zeros(size(PaprTh));
    
    for i = 1:numTh
        th = PaprTh(i);
        ccdfVec(i) = sum(paprVec > th) / length(paprVec);  % P(PAPR>th)
    end
    
    CCDF = ccdfVec;
end

参考代码 OFDM峰均比仿真 www.youwenfan.com/contentcsr/100590.html

三、仿真结果与分析

1. CCDF曲线对比

2. 关键参数影响

参数 影响
子载波数 增大,PAPR升高(中心极限定理,叠加信号趋近高斯分布)。
过采样率 OSR OSR越高,PAPR估计越准确(通常取4~8倍)。
SLM候选数 增大,PAPR降低效果越好,但计算复杂度 增加。
PTS子块数 增大,PAPR降低效果越好,但计算复杂度 指数增长。
削波门限 越小,PAPR越低,但信号失真越大(通常取0.6~0.8)。

四、降低PAPR的常用方法

方法 原理 优点 缺点
SLM 生成多组相位序列,选择PAPR最小的发送 无失真,性能较好 计算复杂度随 增加
PTS 将数据分块加权求和,选择PAPR最小的权重 无失真,性能接近SLM 计算复杂度随 指数增长
Clipping 削除超过门限的峰值 实现简单,实时性好 引入带外辐射和BER恶化
编码 使用PAPR低的编码序列(如Golay码) 无失真 频谱效率低,仅适用于小

五、总结

本仿真程序完整实现了OFDM PAPR的计算、统计与降低方法,通过CCDF曲线直观对比了原始OFDM与SLM/PTS/Clipping的性能差异。结果表明,SLM和PTS 可在无显著失真的情况下有效降低PAPR,而Clipping 是简单实用的次优选择。实际应用中需根据复杂度与性能需求权衡方法选择。

专注于matlab/simulink,电子电路,编程