You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

矩形脉冲BPSK信号PAPR计算结果不为1的问题排查

问题:BPSK信号PAPR计算结果不符合理论值的原因

我在Matlab中执行以下操作:

  1. 生成BPSK调制信号:
N=1e4;
bits=randi([0,1],N,1);% 生成随机比特
bpskModulator = comm.BPSKModulator;
bpskModulator.PhaseOffset = pi/16;
modData = bpskModulator(bits);
  1. 生成矩形脉冲:
Rc = 1e2; % [b/s] 码片速率
T =1; % [s/b] 码片速率的倒数
Tc = 0.5* T;
Fs = 2e2; % [Hz] 采样频率
dt = 1/Fs; % [s]  
ov1 = Fs/Rc;   % 采样因子
sps = 10;
dt2=dt/sps;
t = [0:dt2:2*T];  % [s]
pulse_rect = rectpuls(t,T) ;
  1. 将BPSK信号与矩形脉冲卷积:
n=upsample(modData,2);
signal1 = conv(pulse_rect,n);
signal=signal1';

理论上该信号的PAPR(峰值平均功率比)应为1,但我通过以下代码计算得到的结果大于1:

pb = max(abs(signal));
avb = mean(abs(signal));
PAPR = pb/avb

请问我哪里操作出错了?


问题分析与解决方案

你的核心错误出在PAPR的定义理解,以及信号处理中的过渡段影响:

1. PAPR计算方式完全错误

PAPR的标准定义是峰值功率与平均功率的比值,而非峰值幅度与平均幅度的比值。功率是幅度的平方,你当前的计算逻辑完全偏离了定义。正确的计算代码应该是:

peak_power = max(abs(signal).^2);
avg_power = mean(abs(signal).^2);
PAPR_linear = peak_power / avg_power; % 线性比值,理论值为1
PAPR_dB = 10*log10(PAPR_linear); % 常用dB表示,理论值为0dB

2. 卷积结果包含过渡段,拉低了统计均值

使用conv计算卷积时,输出信号的开头和结尾会出现脉冲未完全对齐的过渡区域,这些区域的幅度小于稳态值,会拉低平均幅度(或平均功率),导致你错误计算的比值偏大。

你可以截取卷积后的稳态段来消除这个影响:

% 计算稳态段的起止索引
pulse_len = length(pulse_rect);
start_idx = pulse_len;
end_idx = length(signal1) - pulse_len + 1;
signal_steady = signal1(start_idx:end_idx);
signal = signal_steady';

3. 上采样与脉冲设置的冗余问题

你代码中upsample(modData,2)的操作和脉冲采样参数存在冗余,可能导致符号速率与脉冲成型的匹配问题。BPSK符号幅度恒定(±A),经过矩形脉冲成型后,稳态段的信号幅度应保持恒定,此时峰值功率等于平均功率,PAPR必然为1。

将上述修正点整合后,重新计算就能得到符合理论预期的结果。


内容的提问来源于stack exchange,提问作者Rory

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 22:45:37