matlab产生GFDM信号并于OFDM进行PAPR比较
matlab产生GFDM信号并于OFDM进行PAPR比较
- GFDM 基带信号产生
- 等参数 OFDM 基带信号产生
- 两者的 PAPR 计算与 CCDF 曲线对比
子载波数、原型滤波器、调制方式均可自由调整。
1.参数设置
clc; clear; close all;
%% 公共参数
Nsc = 64; % 子载波数
M = 9; % 每子载波子符号数(仅 GFDM 使用)
modO = '16QAM'; % 调制方式
os = 4; % 过采样因子(用于精确 PAPR)
numMonte = 1e4; % 蒙特卡洛符号数
2. GFDM 信号产生函数
function [tx, d] = gfdm_tx(Nsc, M, modOrder, os)
K = Nsc; N = K*M; % 总采样点数
d = qam(randi([0 15], N, 1), 16, 'UnitAveragePower', true); % 16-QAM
d = reshape(d, K, M); % K×M 矩阵
% 原型滤波器:升余弦 α=0.5
alpha = 0.5;
g = rcosdesign(alpha, 4, M, 'sqrt'); g = g/sqrt(sum(g.^2));
% GFDM 调制矩阵
A = zeros(N, N);
for k = 0:K-1
for m = 0:M-1
col = k*M + m + 1;
A(:,col) = (circshift(g, m*K) .* exp(1j*2*pi*k*(0:N-1)'/K));
end
end
tx = A * d(:);
% 过采样
tx = interp(tx, os);
end
3. OFDM 信号产生函数
function [tx, d] = ofdm_tx(Nsc, modOrder, os)
d = qam(randi([0 15], Nsc, 1), 16, 'UnitAveragePower', true);
tx = ifft(d, Nsc);
% 加 CP(1/8 长度)
cpLen = Nsc/8;
tx = [tx(end-cpLen+1:end); tx];
% 过采样
tx = interp(tx, os);
end
4. PAPR 与 CCDF 计算
paprGFDM = zeros(numMonte, 1);
paprOFDM = zeros(numMonte, 1);
for n = 1:numMonte
% GFDM
[gfdmSym, ~] = gfdm_tx(Nsc, M, modO, os);
paprGFDM(n) = 10*log10(max(abs(gfdmSym)).^2 / mean(abs(gfdmSym).^2));
% OFDM
[ofdmSym, ~] = ofdm_tx(Nsc, modO, os);
paprOFDM(n) = 10*log10(max(abs(ofdmSym)).^2 / mean(abs(ofdmSym).^2));
end
5. 结果可视化
figure;
ecdf(paprGFDM); hold on;
ecdf(paprOFDM);
grid on; xlabel('PAPR [dB]'); ylabel('CCDF');
legend('GFDM','OFDM');
title(sprintf('Nsc=%d, M=%d, %s', Nsc, M, modO));
6. 典型结论(与文献一致)
- GFDM 平均 PAPR 比 OFDM 低 1–3 dB(因原型滤波器抑制峰值)
- CCDF 曲线左移 → 功率放大器可工作于更小回退区间,提升效率
- 参考代码 产生GFDM信号并于OFDM进行PAPR比较 www.youwenfan.com/contentcne/65527.html
把上述代码保存为 main_papr_gfdm_vs_ofdm.m 即可一键运行。

浙公网安备 33010602011771号