关注我,追更更多通信仿真代码!

摘要

正交频分复用(OFDM)技术因具有频谱利用率高、抗多径衰落能力强等优势,已成为第四代及第五代移动通信系统的核心调制技术。然而,OFDM信号在时域上由于多个子载波同相叠加会产生较高的峰均功率比(PAPR),导致信号通过功率放大器时易产生非线性失真,导致带内干扰和带外辐射,降低系统性能。本文围绕OFDM系统PAPR抑制问题,研究了一种基于深度学习的PAPR抑制方案,并与限幅滤波、选择映射(SLM)、部分传输序列(PTS)和Golay编码等经典方法进行了系统对比,最后通过仿真验证了方案的有效性与可靠性。

1 研究背景和意义

1.1 研究背景

  • 正交频分复用(Orthogonal Frequency Division Multiplexing, OFDM)是一种特殊的多载波调制技术,其基本思想是将高速数据流分配到多个正交的子载波上并行传输。由于各子载波频谱相互重叠但保持正交,OFDM具有极高的频谱利用率;同时,通过插入循环前缀(CP),OFDM能够有效对抗多径时延扩展引起的符号间干扰(ISI)。凭借这些优越特性,OFDM已被广泛应用于无线局域网(IEEE 802.11a/g/n/ac)、数字视频广播(DVB)、WiMAX以及LTE/5G移动通信等标准中。

  • 然而,OFDM系统在实际工程应用中面临一个严峻挑战——高峰均功率比(Peak-to-Average Power Ratio, PAPR)。OFDM发射信号是多个子载波信号的叠加,当各子载波在某时刻相位一致时,叠加信号会产生远高于平均功率的瞬时峰值。尽管这种高峰值出现的概率较低,但其对系统的影响不可忽视:高峰均比信号经过发射端高功率放大器(HPA)时,会迫使放大器工作于非线性区,产生带内失真和带外频谱再生,进而导致系统误码率性能恶化。因此,如何有效降低OFDM信号的PAPR,一直是无线通信领域的研究热点。

1.2 研究意义

传统的PAPR降低方法可归纳为三大类:

  1. 信号预畸变类:如限幅(Clipping)、压扩(Companding)等,直接对信号幅度进行非线性处理。这类方法实现简单、复杂度低,但会引入信号失真,影响误码率性能。
  2. 编码类:如Golay互补序列编码、Reed-Muller编码等,通过选择具有低PAPR特性的码字进行传输。这类方法不引入失真,但会降低有效数据速率,且当子载波数较大时编码效率急剧下降。
  3. 概率类:如选择映射(SLM)、部分传输序列(PTS)、预留子载波(TR)等,通过生成多个候选信号并选择PAPR最低者发送。这类方法不引入失真,但计算复杂度高,且需要传输边带信息。

近年来,深度学习(Deep Learning, DL)技术在通信物理层中的应用取得了显著进展。深度学习能够有效捕捉信号中的复杂非线性特征,具有较强的自适应性,在信号检测、信道估计、调制识别等任务中表现出良好性能。将深度学习引入PAPR抑制领域,有望突破传统方法在“PAPR抑制效果—信号失真—计算复杂度”三者之间的固有折中。

本文基于这一思路,研究了一种发射端限幅 + 接收端DNN逐子载波补偿的联合PAPR抑制方案。发射端采用简单的时域限幅操作快速降低PAPR,接收端利用深度神经网络逐子载波学习并补偿限幅引入的非线性失真。该方案兼具限幅法实现简单的优势和深度学习强大非线性拟合能力的优势,为PAPR抑制提供了一条新的技术路径。

2 理论基础

2.1 OFDM系统模型

在这里插入图片描述

2.2 PAPR的定义与统计特性

在这里插入图片描述

2.3 经典PAPR降低方法

2.3.1 限幅法(Clipping)

在这里插入图片描述

2.3.2 选择映射法(SLM)

在这里插入图片描述

2.3.3 部分传输序列法(PTS)

在这里插入图片描述

2.3.4 Golay互补序列编码

在这里插入图片描述

3 基于深度学习的PAPR降低算法设计

本节详细阐述所提出的深度神经网络逐子载波补偿器的结构设计、训练数据生成方法以及训练策略。该补偿器的核心思想是:在发射端对过采样时域信号进行简单限幅以降低 PAPR,在接收端利用 DNN 对均衡后的频域符号逐子载波进行非线性失真补偿,恢复出逼近原始无失真符号的估计值。

3.1 参数设计

参数取值说明
子载波数 ( N )256
过采样倍数 ( L )4精确捕捉峰值
循环前缀长度 ( N_{\text{CP}} )64( N/4 )
信道模型ETU扩展典型城市(多径)
调制方式自适应BPSK / QPSK / 16QAM / 64QAM / 256QAM
自适应调制 SNR 门限[6, 12, 18, 24] dB对应调制切换边界
训练符号数20000用于 DNN 训练
测试符号数5000用于性能评估
限幅比(CR)1.2发射端限幅门限系数
训练 SNR30 dB使 DNN 专注学习限幅失真
测试 SNR 范围0 : 2 : 30 dBBER 扫描范围
超参数取值说明
网络结构
输入层神经元数4 [ ℜ ( X ^ ) ,   ℑ ( X ^ ) ,   m norm ,   h norm ] [\Re(\hat{X}),\ \Im(\hat{X}),\ m_{\text{norm}},\ h_{\text{norm}}] [(X^), (X^), mnorm, hnorm]
隐藏层 1 神经元数128ReLU 激活
隐藏层 2 神经元数64ReLU 激活
输出层神经元数2 [ ℜ ( X rec ) ,   ℑ ( X rec ) ] [\Re(X_{\text{rec}}),\ \Im(X_{\text{rec}})] [(Xrec), (Xrec)]
训练配置
损失函数MSE均方误差,定义为: L = 1 B ∑ i = 1 B [ ( I ^ i − I i ) 2 + ( Q ^ i − Q i ) 2 ] \mathcal{L} = \frac{1}{B} \sum_{i=1}^{B} \left[ \left(\hat{I}_i - I_i\right)^2 + \left(\hat{Q}_i - Q_i\right)^2 \right] L=B1i=1B[(I^iIi)2+(Q^iQi)2]
优化器Adam学习率 10 − 3 10^{-3} 103
训练轮数30
批量大小1024
总训练样本数5,120,000 20000 × 256 20000 \times 256 20000×256
训练 SNR30 dB高 SNR 下专注学习限幅失真

3.2 网络结构

DNN 采用全连接前馈网络结构,所有子载波共享同一网络参数。网络的输入为一个 4 维特征向量,输出为 2 维补偿后符号的实部和虚部。具体结构如下:

神经元数激活函数说明
输入层4特征向量 f k \mathbf{f}_k fk(见式 (3.2))
隐藏层 1128ReLU全连接
隐藏层 264ReLU全连接
输出层2线性预测值 [ ℜ ( X ~ k ) ,   ℑ ( X ~ k ) ] [\Re(\tilde{X}_k),\ \Im(\tilde{X}_k)] [(X~k), (X~k)]

对于第 k k k 个子载波,接收端均衡后的符号记为 X ^ k \hat{X}_k X^k,其对应的原始发送符号为 X k X_k Xk网络输入特征定义为

f k = [ ℜ ( X ^ k ) ,   ℑ ( X ^ k ) ,   m norm ,   h norm ] T (3.2) \mathbf{f}_k = \left[ \Re(\hat{X}_k),\ \Im(\hat{X}_k),\ m_{\text{norm}},\ h_{\text{norm}} \right]^T \tag{3.2} fk=[(X^k), (X^k), mnorm, hnorm]T(3.2)

其中 m norm = mod_map k / 8 m_{\text{norm}} = \text{mod\_map}_k / 8 mnorm=mod_mapk/8 为归一化的调制阶数( 8 8 8 对应 256QAM 的最大阶数), h norm = ∣ H k ∣ / max ⁡ ( ∣ H ∣ ) h_{\text{norm}} = |H_k| / \max(|H|) hnorm=Hk∣/max(H) 为归一化的信道增益。引入这两个辅助特征旨在帮助网络感知每个子载波所处的调制方式和信道条件,从而提升补偿的适应性和泛化能力。

网络输出为:

[ ℜ ( X ~ k ) ,   ℑ ( X ~ k ) ] = F θ ( f k ) (3.3) [\Re(\tilde{X}_k),\ \Im(\tilde{X}_k)] = \mathcal{F}_{\theta}(\mathbf{f}_k) \tag{3.3} [(X~k), (X~k)]=Fθ(fk)(3.3)

其中 F θ \mathcal{F}_{\theta} Fθ 表示由参数 θ \theta θ 定义的 DNN 映射函数, X ~ k \tilde{X}_k X~k 为补偿后的频域符号估计值。

3.3 训练方法

3.3.1训练数据生成
  1. 频域符号生成:根据自适应调制映射 ,为每个子载波随机生成符合对应星座的频域符号 X k X_k Xk,形成一个完整的 OFDM 符号向量 X ∈ C N \mathbf{X} \in \mathbb{C}^{N} XCN

  2. 过采样 IFFT:对 X \mathbf{X} X 进行 L = 4 L=4 L=4 倍过采样 IFFT,得到时域信号:

x n = 1 N L ∑ k = 0 N − 1 X k e j 2 π k n / ( N L ) , n = 0 , 1 , … , N L − 1 (3.4) x_n = \frac{1}{\sqrt{NL}} \sum_{k=0}^{N-1} X_k e^{j2\pi kn/(NL)},\quad n=0,1,\ldots,NL-1 \tag{3.4} xn=NL 1k=0N1Xkej2πkn/(NL),n=0,1,,NL1(3.4)

  1. 限幅:以限幅比 CR = 1.2 \text{CR}=1.2 CR=1.2 对时域信号进行硬限幅:

x clip ( n ) = { x n , ∣ x n ∣ ≤ CR ⋅ σ CR ⋅ σ ⋅ e j ∠ x n , ∣ x n ∣ > CR ⋅ σ (3.5) x_{\text{clip}}(n) = \begin{cases} x_n, & |x_n| \le \text{CR} \cdot \sigma \\ \text{CR} \cdot \sigma \cdot e^{j\angle x_n}, & |x_n| > \text{CR} \cdot \sigma \end{cases} \tag{3.5} xclip(n)={xn,CRσejxn,xnCRσxn>CRσ(3.5)

其中 σ = E [ ∣ x n ∣ 2 ] \sigma = \sqrt{\mathbb{E}[|x_n|^2]} σ=E[xn2] 为信号的均方根值。

  1. 信道传输与加噪:将限幅后的信号添加循环前缀,通过 ETU 多径信道,并叠加 AWGN。训练阶段采用固定 SNR = 30 dB,目的是让 DNN 专注于学习限幅引入的确定性非线性失真,而非随机噪声。

  2. 接收端处理:在接收端去除 CP、执行 FFT 并进行单抽头信道均衡,得到失真后的频域符号 X ^ k \hat{X}_k X^k

  3. 构造训练样本:将每个子载波的 ( X ^ k , X k ) (\hat{X}_k, X_k) (X^k,Xk) 组合成训练对,并连同辅助特征 m norm m_{\text{norm}} mnorm h norm h_{\text{norm}} hnorm 构成输入输出样本。

所有子载波的所有训练符号被打平为独立样本,总样本数为 N train × N = 20000 × 256 = 5 , 120 , 000 N_{\text{train}} \times N = 20000 \times 256 = 5,120,000 Ntrain×N=20000×256=5,120,000

3.3.2 训练方法

DNN 的训练采用有监督学习方式,损失函数定义为预测值与标签之间的均方误差(MSE):

L = 1 B ∑ i = 1 B [ ( I ~ i − I i ) 2 + ( Q ~ i − Q i ) 2 ] (3.6) \mathcal{L} = \frac{1}{B} \sum_{i=1}^{B} \left[ \left(\tilde{I}_i - I_i\right)^2 + \left(\tilde{Q}_i - Q_i\right)^2 \right] \tag{3.6} L=B1i=1B[(I~iIi)2+(Q~iQi)2](3.6)

其中 B B B 为批量大小(取 1024), ( I ~ i , Q ~ i ) (\tilde{I}_i, \tilde{Q}_i) (I~i,Q~i) 为网络预测的实部与虚部, ( I i , Q i ) (I_i, Q_i) (Ii,Qi) 为原始无失真符号的实部与虚部。

优化器采用 Adam,学习率固定为 10 − 3 10^{-3} 103,共训练 30 个轮次(epochs)。每轮训练前对样本进行随机打乱以增强泛化性。训练过程中记录每轮的平均损失值,以监控收敛情况。

训练完成后,网络参数被固定,用于测试阶段对任意接收符号进行逐子载波的前向推理,实现快速失真补偿。

3.3.3 复杂度分析

与 SLM 或 PTS 等需要在发射端进行多次 IFFT 的方法相比,所提方案在发射端仅执行单次 IFFT 和简单的限幅操作,计算复杂度极低。接收端 DNN 推理仅包含两次全连接层的前向计算(共 4 × 128 + 128 × 64 + 64 × 2 = 1280 4\times128 + 128\times64 + 64\times2 = 1280 4×128+128×64+64×2=1280 个可学习参数),每子载波仅需约 1280 次乘加运算,远低于传统均衡后复杂的迭代补偿算法。此外,所有子载波并行处理,适合硬件加速。因此,该方案在实际系统中具有较高的实用性和实时性潜力。

4 仿真结果分析

4.1 训练收敛性

在这里插入图片描述

可以看到:DNN训练过程中的MSE损失随轮次变化呈现典型的指数衰减趋势。经过30轮训练后,损失函数收敛至较低水平,表明网络已有效学习到限幅失真从接收符号到原始符号的映射关系。

4.2 PAPR抑制性能

在这里插入图片描述

方案PAPR 均值(dB)备注
Original(原始信号)8.41无 PAPR 降低
Clip+DNN(本文方案)2.76发射端限幅 + 接收端 DNN 补偿
SLM( U = 16 U=16 U=167.23概率类方法,16 个候选相位序列
PTS( V = 4 V=4 V=47.35概率类方法,4 个子块交织分块
Golay-DJ3.01编码类方法

可以看到

  • CCDF曲线反映了PAPR的统计分布特性。从CCDF曲线可以观察到,本文方案在整个PAPR门限范围内均优于原始信号和SLM/PTS方法。特别是在高概率区域,本文方案的PAPR门限较SLM降低约4.5 dB,体现出良好的PAPR抑制能力。

4.3 误码率性能

可以看到:

  • 原始信号(无PAPR降低) 。BER曲线随SNR增加持续下降,在SNR=16 dB时BER降至3.72×10⁻⁶,SNR≥18 dB时误码率为0。该曲线代表系统的性能上界。
  • 基于DNN的方案BER在整个SNR范围内性能要优于纯限幅方案吗,特别是在高SNR区域,这一结果证明了DNN成功学习了限幅失真的非线性映射关系,在接收端对失真进行了有效补偿,显著缓解了纯限幅方案的误码平台问题。

在这里插入图片描述

4.4 星座图分析

在这里插入图片描述
在SNR=20 dB条件下的星座图对比进一步验证了上述结论。图4展示了三种情况下接收符号的星座分布。可以看到:

  • 经过DNN逐子载波补偿后,星座点的弥散程度显著降低,星座图质量接近原始信号,直观体现了DNN对限幅失真的有效补偿。

4.5 部分代码

function [net_trained, train_info] = dnn_papr_reduction(X_train, params, options, mod_map, H_ch)
% 发射端限幅降 PAPR,接收端 DNN 逐子载波补偿限幅失真。
% 网络输入:单个子载波的 (I, Q, mod_order_norm, H_norm),输出:补偿后的 (I, Q),所有子载波共享同一网络,训练数据量 = N_samples * N_fft。
%
%   输入:
%     X_train - N_fft x N_samples 频域符号矩阵
%     params  - 参数结构体
%     options - 训练选项
%     mod_map - N_fft x 1 调制阶数向量(自适应模式),或 [](非自适应模式)
%     H_ch    - N_fft x 1 信道频率响应(自适应模式),或 [](非自适应模式)
%
%   输出:
%     net_trained - 结构体,含 .net (dlnetwork).CR (限幅比)
%     train_info  - 训练损失记录

    if nargin < 3, options = struct(); end
    if nargin < 4, mod_map = []; end
    if nargin < 5, H_ch = []; end
    if ~isfield(options, 'CR'),         options.CR = 1.2; end
    if ~isfield(options, 'epochs'),     options.epochs = 30; end
    if ~isfield(options, 'lr'),         options.lr = 1e-3; end
    if ~isfield(options, 'batch_size'), options.batch_size = 1024; end

    N = params.N_fft;
    L = params.L;
    N_os = N * L;
    CR = options.CR;
    N_samples = size(X_train, 2);

    fprintf('  生成逐子载波训练对 (CR=%.2f)...\n', CR);

    % 获取信道时域冲激响应
    if ~isempty(H_ch)
        % 从 H_ch 反推 h_ch 用于训练数据生成
        H_full = zeros(N_os, 1);
        H_full(1:N/2) = H_ch(1:N/2);
        H_full(N_os - N/2 + 1:end) = H_ch(N/2+1:end);
        h_ch = ifft(H_full, N_os);
    else
        h_ch = [];
    end

    % 训练时使用高 SNR(30 dB),让 DNN 专注学习限幅失真补偿
    % 低 SNR 下噪声是随机的,DNN 无法学习噪声模式,会严重干扰收敛
    snr_train = 30;  % dB

    X_rx_clip_all = zeros(N, N_samples);  % 接收端均衡后的限幅信号
    X_orig_all = X_train;                 % 标签:原始无失真频域符号

    for i = 1:N_samples
        X_i = X_train(:, i);
        % 发射端:过采样 IFFT -> 限幅 -> 加 CP
        X_padded = [X_i(1:N/2); zeros((L-1)*N, 1); X_i(N/2+1:end)];
        x_os = sqrt(N_os) * ifft(X_padded, N_os);
        A = CR * rms(x_os);
        x_clip = min(abs(x_os), A) .* exp(1j * angle(x_os));

        % 加循环前缀
        N_cp_os = params.N_cp * L;
        x_cp = [x_clip(end - N_cp_os + 1 : end); x_clip];

        % 固定高 SNR 训练
        snr_i = snr_train;

        % 通过信道
        if ~isempty(h_ch)
            y_mp = conv(x_cp, h_ch);
            y_mp = y_mp(1:length(x_cp));
        else
            y_mp = x_cp;
        end

        % 添加 AWGN
        sig_pow = mean(abs(y_mp).^2);
        noise_pow = sig_pow / (10^(snr_i / 10));
        noise = sqrt(noise_pow / 2) * (randn(size(y_mp)) + 1j * randn(size(y_mp)));
        y_noisy = y_mp + noise;

        % 接收端:去 CP -> FFT -> 信道均衡
        y_os = y_noisy(N_cp_os + 1 : N_cp_os + N_os);
        Y_full = fft(y_os, N_os) / sqrt(N_os);
        X_hat = [Y_full(1:N/2); Y_full(N_os - N/2 + 1:end)];

        if ~isempty(H_ch)
            X_hat = X_hat ./ H_ch;
        end

        X_rx_clip_all(:, i) = X_hat;
    end

    % 构造辅助特征
    if ~isempty(mod_map)
        mod_feat = single(mod_map / 8);
    else
        mod_feat = single(ones(N, 1) * params.bps / 8);
    end
    if ~isempty(H_ch)
        h_feat = single(abs(H_ch) / max(abs(H_ch)));
    else
        h_feat = single(ones(N, 1));
    end

    % 将所有子载波展平为逐子载波训练对
    total_sc = N * N_samples;
    X_in_sc  = zeros(4, total_sc, 'single');
    X_lbl_sc = zeros(2, total_sc, 'single');

    for i = 1:N_samples
        idx = (i-1)*N + (1:N);
        X_in_sc(1, idx) = real(X_rx_clip_all(:, i));
        X_in_sc(2, idx) = imag(X_rx_clip_all(:, i));
        X_in_sc(3, idx) = mod_feat;
        X_in_sc(4, idx) = h_feat;
        X_lbl_sc(1, idx) = real(X_train(:, i));
        X_lbl_sc(2, idx) = imag(X_train(:, i));
    end

    distortion_mse = mean((X_in_sc(1:2,:) - X_lbl_sc).^2, 'all');
    fprintf('  逐子载波失真 MSE = %.6f, 总样本 = %d\n', distortion_mse, total_sc);

    %% 构建 DNN
    layers = [
        featureInputLayer(4, 'Name', 'input', 'Normalization', 'none')
        fullyConnectedLayer(128, 'Name', 'fc1')
        reluLayer('Name', 'relu1')
        fullyConnectedLayer(64, 'Name', 'fc2')
        reluLayer('Name', 'relu2')
        fullyConnectedLayer(2, 'Name', 'fc_out')
    ];
    net = dlnetwork(layerGraph(layers));

    %% 训练循环
    train_info.loss_total = zeros(options.epochs, 1);
    avg_grad = []; avg_sq = [];
    n_batches = ceil(total_sc / options.batch_size);

    fprintf('  训练逐子载波 DNN(%d 样本, %d 轮)...\n', total_sc, options.epochs);

    for epoch = 1:options.epochs
        perm = randperm(total_sc);
        epoch_loss = 0;

        for b = 1:n_batches
            b_idx = perm((b-1)*options.batch_size+1 : min(b*options.batch_size, total_sc));

            X_in  = dlarray(X_in_sc(:, b_idx), 'CB');
            X_lbl = dlarray(X_lbl_sc(:, b_idx), 'CB');

            [loss, grads] = dlfeval(@mse_loss, net, X_in, X_lbl);

            [net, avg_grad, avg_sq] = adamupdate(net, grads, avg_grad, avg_sq, ...
                (epoch-1)*n_batches+b, options.lr);

            epoch_loss = epoch_loss + double(extractdata(loss));
        end

        train_info.loss_total(epoch) = epoch_loss / n_batches;

        if mod(epoch, 5) == 0
            fprintf('  Epoch %3d/%d: MSE = %.6f\n', epoch, options.epochs, ...
                train_info.loss_total(epoch));
        end
    end

    net_out.net = net;
    net_out.CR = CR;
    net_trained = net_out;
    fprintf('  训练完成。最终 MSE = %.6f(失真上界 = %.6f)\n', ...
        train_info.loss_total(end), distortion_mse);
end

function [loss, grads] = mse_loss(net, X_in, X_lbl)
    X_pred = forward(net, X_in);
    loss = mean((X_pred - X_lbl).^2, 'all');
    grads = dlgradient(loss, net.Learnables);
end

function [x_best, b_best, papr_best] = pts(X, params, V, partition_type, W)
% 部分传输序列法降低 PAPR,将子载波划分为 V 个不相交子块,穷举所有相位旋转因子组合,选择 PAPR 最低的组合发送。
%   输入:
%     X              - 频域数据
%     params         - get_default_params() 返回的参数结构体
%     V              - 子块数量(248%     partition_type - 分块方式:'adjacent''interleaved''random'
%     W              - 相位因子集合
%   输出:
%     x_best    - PAPR 最低的时域信号
%     b_best    - 最优相位因子向量
%     papr_best - 达到的 PAPR(dB)

    N = params.N_fft;
    L = params.L;
    N_os = N * L;
    block_size = N / V;

    switch partition_type
        case 'adjacent'
            partition = reshape(1:N, block_size, V);

        case 'interleaved'
            partition = zeros(block_size, V);
            for v = 1:V
                partition(:, v) = v:V:N;
            end

        case 'random'
            perm = randperm(N);
            partition = reshape(perm, block_size, V);

        otherwise
            error('Unknown partition type: %s', partition_type);
    end

    x_sub = zeros(N_os, V);
    for v = 1:V
        X_v = zeros(N, 1);
        X_v(partition(:, v)) = X(partition(:, v));

        X_v_padded = [X_v(1:N/2); zeros((L-1)*N, 1); X_v(N/2+1:end)];
        x_sub(:, v) = sqrt(N_os) * ifft(X_v_padded, N_os);
    end

    W_size = length(W);
    n_comb = W_size^(V-1);  % 第一个子块相位固定为 1

    papr_best = inf;
    b_best = ones(V, 1);
    x_best = [];

    for idx = 0:(n_comb - 1)
        b = ones(V, 1);
        temp = idx;
        for v = V:-1:2
            b(v) = W(mod(temp, W_size) + 1);
            temp = floor(temp / W_size);
        end

        x_comb = x_sub * b;
        papr_val = compute_papr(x_comb);

        if papr_val < papr_best
            papr_best = papr_val;
            b_best = b;
            x_best = x_comb;
        end
    end
end

function [x_best, u_best, papr_best, P_all] = slm(X, params, U, P_all)
% SLM 选择映射法,用于降低 PAPR,通过将数据与 U 组不同随机相位序列相乘,生成 U 个候选 OFDM 符号,选择 PAPR 最小的一组发送。此方法不引入信号失真。
%   输入:
%     X     - 频域数据
%     params - get_default_params() 返回的参数结构体
%     U     - 候选相位序列数量(24816%     P_all - 预生成的相位序列矩阵
%   输出:
%     x_best    - PAPR 最低的时域信号
%     u_best    - 所选相位序列索引
%     papr_best - 达到的 PAPR(dB)
%     P_all     - 使用的相位序列矩阵

    N = params.N_fft;
    L = params.L;
    N_os = N * L;

    if nargin < 4 || isempty(P_all)
        P_all = exp(1j * 2 * pi * rand(N, U));
        P_all(:, 1) = ones(N, 1);
    end

    papr_best = inf;
    u_best = 1;
    x_best = [];

    for u = 1:U
        X_u = X .* P_all(:, u);

        X_padded = [X_u(1:N/2); zeros((L-1)*N, 1); X_u(N/2+1:end)];
        x_u = sqrt(N_os) * ifft(X_padded, N_os);

        papr_u = compute_papr(x_u);

        if papr_u < papr_best
            papr_best = papr_u;
            u_best = u;
            x_best = x_u;
        end
    end
end

5 总结

  • 本文围绕OFDM系统高峰均功率比问题,研究了一种发射端限幅与接收端深度神经网络逐子载波补偿的联合PAPR抑制方案,并与限幅滤波、SLM、PTS和Golay编码等经典方法进行了系统对比,体现了深度学习在PAPR降低方面的优势。
  • 未来工作可研究更具泛化能力的网络结构,如引入注意力机制以捕捉子载波间的相关性以及将DNN补偿与信道解码联合优化,实现端到端的系统性能提升。
  • 参考文献: A Neural Network Based Method for Peak-to-Average Power Ratio Reduction in Orthogonal Frequency Division Multiplexing Systems2024 2nd International Conference on Signal Processing and Intelligent Computing (SPIC)

仿真代码可见文末VX公众号(包含往期博客所有代码),所见即所得!

更多推荐