矩形脉冲BPSK信号PAPR计算结果不为1的问题排查
问题:BPSK信号PAPR计算结果不符合理论值的原因
我在Matlab中执行以下操作:
- 生成BPSK调制信号:
N=1e4; bits=randi([0,1],N,1);% 生成随机比特 bpskModulator = comm.BPSKModulator; bpskModulator.PhaseOffset = pi/16; modData = bpskModulator(bits);
- 生成矩形脉冲:
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) ;
- 将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
相关产品推荐
相关产品推荐

