什么是分层调制?
想象一下一个调色盘:
- 传统调制:就像只用一种颜色(只使用红色)来画画,颜色的深浅代表不同的信息(浅红=0,深红=1)。
- 分层调制:就像混合颜色,我们可以用一种颜色作为“基础层”(比如黄色),然后在上面用另一种颜色“叠加”细节(比如蓝色),接收端可以只看黄色层得到基本信息,或者同时看黄色和蓝色层得到全部的详细信息。
在数字通信中,这具体表现为:
- 基础层:使用高鲁棒性、低阶的调制方式(如 BPSK, QPSK),它传输的是最重要的数据,对噪声不敏感,即使在信噪比较低的情况下也能被正确解调。
- 增强层:使用高阶的调制方式(如 16-QAM, 64-QAM),它传输的是次要的、细节性的数据,它叠加在基础层之上,只有在信噪比较高时才能被正确解调,如果信噪比不够,增强层的数据会丢失,但基础层的数据仍然可以保留。
最常见的分层调制方案:16-QAM 星座图
标准的 16-QAM 星座图有 16 个点,每个点代表 4 个比特,而分层 16-QAM(通常称为 QPSK + 4QAM 或 16-QAM with hierarchical modulation)会将这 16 个点重新排列:

- 基础层:使用 4 个外角的点(黑色点),构成一个 QPSK 调制,传输 2 个比特(
00,01,10,11),这 2 个比特是抗干扰能力最强的。 - 增强层:使用 12 个内部的点,这 12 个点相对于 4 个外角点,可以看作是在基础层 QPSK 的每个象限内,又增加了 3 个点(类似于一个 4-PAM 调制),它传输额外的 2 个比特。
这样,总共还是传输 4 个比特,但被分成了两个优先级不同的数据流。
为什么使用分层调制?
- 提高频谱效率:在不增加带宽和发射功率的情况下,通过一个载波同时传输两路不同优先级的数据,相当于用更少的资源传输了更多的信息。
- 实现 unequal error protection (UEP - 不等错误保护):这是分层调制最核心的优势,可以根据数据的重要性分配不同的保护等级,在视频广播中,视频的关键帧可以作为基础层,而增量帧可以作为增强层,这样,即使信号变差,用户也能看到基本的、可理解的图像(基础层),而不会完全“黑屏”。
- 向后兼容性:在广播系统中,旧接收机(只支持基础层,如 QPSK)可以正常接收新信号(16-QAM),但只能看到基础信息,新接收机(支持 16-QAM)则可以同时接收两层信息,实现“平滑升级”。
MATLAB 实现步骤
我们将通过一个完整的例子,展示如何在 MATLAB 中使用 Communications Toolbox 实现分层调制与解调。
示例目标
实现一个 QPSK (基础层) + 4QAM (增强层) 的 16-QAM 分层调制系统。
步骤 1:生成源数据
我们需要两路独立的二进制数据流:
data_base:基础层数据,速率较慢,对误码率要求高。data_enhance:增强层数据,速率较快。
% 参数设置 M_base = 4; % 基础层调制阶数 (QPSK) M_enhance = 4; % 增强层调制阶数 (4-PAM within each quadrant) M_total = 16; % 总调制阶数 (M_base * M_enhance) % 生成随机二进制数据 N_bits = 10000; % 每层比特数 data_base = randi([0 1], 1, N_bits); data_enhance = randi([0 1], 1, N_bits);
步骤 2:分层调制
MATLAB 的 modulate 函数和 comm.HierarchicalModulator 对象都可以实现,这里我们使用更直观的 comm.HierarchicalModulator 对象。
% 创建分层调制器对象
hMod = comm.HierarchicalModulator(...
'BaseModulation', 'QPSK', ...
'EnhancementModulation', 'PAM', ...
'M', 4, ... % 增强层 PAM 的阶数
'AveragePower', true ... % 保证平均功率为1
);
% 将二进制数据映射成比特流
% 基础层和增强层的数据需要交织成一个比特流
% comm.HierarchicalModulator 会自动处理,我们只需要将两个数据向量作为输入
% 但更标准的方式是先合并成一个向量
% 假设输入格式为 [base_bit1, enhance_bit1, base_bit2, enhance_bit2, ...]
% 这需要将 data_base 和 data_enhance 交织
data_interleaved = zeros(1, 2*N_bits);
data_interleaved(1:2:end) = data_base; % 基础层比特放在奇数位
data_interleaved(2:2:end) = data_enhance; % 增强层比特放在偶数位
% 执行调制
modulated_signal = modulate(hMod, data_interleaved);
% 绘制星座图
scatterplot(modulated_signal);'分层 16-QAM 星座图');
grid on;
axis equal;
运行上述代码,你会看到前面提到的那个由外圈 QPSK 和内圈 PAM 点组成的星座图。
步骤 3:通过 AWGN 信道
模拟信号在传输过程中受到加性高斯白噪声的影响。
% 设置信噪比 SNR_dB = 15; % 尝试不同的值,如 10, 15, 20 SNR_linear = 10^(SNR_dB/10); % 计算噪声功率 % 对于复信号,信号功率 Es/N0 与比特信噪比 Eb/N0 的关系为 Es/N0 = (Eb/N0) * k % 这里 k=4 bits/symbol EbN0_linear = SNR_linear / 4; % 计算噪声方差 noise_variance = 1 / (2 * EbN0_linear); % 添加噪声 received_signal = awgn(modulated_signal, SNR_dB, 'measured');
步骤 4:分层解调
解调过程是调制的逆过程,解调器会尝试恢复出两路原始数据。
% 创建分层解调器对象
hDemod = comm.HierarchicalDemodulator(...
'BaseModulation', 'QPSK', ...
'EnhancementModulation', 'PAM', ...
'M', 4, ...
'AveragePower', true ...
);
% 执行解调
[data_base_rx, data_enhance_rx] = demodulate(hDemod, received_signal);
步骤 5:性能评估
计算基础层和增强层的误码率,以验证不等错误保护的效果。
% 计算误码率
ber_base = biterr(data_base, data_base_rx) / length(data_base);
ber_enhance = biterr(data_enhance, data_enhance_rx) / length(data_enhance);
% 显示结果
fprintf('信噪比 = %d dB\n', SNR_dB);
fprintf('基础层 误码率 = %e\n', ber_base);
fprintf('增强层 误码率 = %e\n', ber_enhance);
% 绘制星座图
figure;
scatterplot(received_signal);sprintf('接收信号星座图 (SNR = %d dB)', SNR_dB));
grid on;
axis equal;
观察结果:
- 当
SNR_dB较低时(10 dB),你会发现ber_base远小于ber_enhance,基础层数据非常可靠,而增强层数据误码率很高,甚至可能完全无法恢复。 - 当
SNR_dB较高时(20 dB),ber_base和ber_enhance都会变得非常小,两层数据都能被高质量地恢复。
步骤 6:性能曲线分析
我们可以通过循环改变 SNR,绘制出两条 BER 曲线,直观地展示 UEP 特性。
% 性能曲线仿真
SNR_range = 0:2:25;
ber_base_sim = zeros(size(SNR_range));
ber_enhance_sim = zeros(size(SNR_range));
N_sim_bits = 1e5; % 仿真比特数,用于性能曲线
for i = 1:length(SNR_range)
SNR_dB_loop = SNR_range(i);
% 生成新数据
data_base_loop = randi([0 1], 1, N_sim_bits);
data_enhance_loop = randi([0 1], 1, N_sim_bits);
data_interleaved_loop = zeros(1, 2*N_sim_bits);
data_interleaved_loop(1:2:end) = data_base_loop;
data_interleaved_loop(2:2:end) = data_enhance_loop;
% 调制
modulated_signal_loop = modulate(hMod, data_interleaved_loop);
% 加噪
received_signal_loop = awgn(modulated_signal_loop, SNR_dB_loop, 'measured');
% 解调
[data_base_rx_loop, data_enhance_rx_loop] = demodulate(hDemod, received_signal_loop);
% 计算BER
ber_base_sim(i) = biterr(data_base_loop, data_base_rx_loop) / N_sim_bits;
ber_enhance_sim(i) = biterr(data_enhance_loop, data_enhance_rx_loop) / N_sim_bits;
end
% 绘制性能曲线
figure;
semilogy(SNR_range, ber_base_sim, '-o', 'LineWidth', 1.5, 'DisplayName', '基础层 (QPSK)');
hold on;
semilogy(SNR_range, ber_enhance_sim, '-s', 'LineWidth', 1.5, 'DisplayName', '增强层 (PAM)');
grid on;
axis([0 25 1e-4 1]);
xlabel('SNR (dB)');
ylabel('误码率');'分层调制性能曲线');
legend('show', 'Location', 'southwest');
这张图会清晰地显示,在相同的 SNR 下,基础层的 BER 性能始终优于增强层,完美诠释了 UEP。
MATLAB 相关函数和对象总结
| 类别 | 函数/对象 | 描述 |
|---|---|---|
| 核心对象 | comm.HierarchicalModulator |
创建分层调制器,指定基础层和增强层的调制类型(QPSK, PAM等)。 |
comm.HierarchicalDemodulator |
创建分层解调器,与调制器对应。 | |
| 星座图 | scatterplot |
绘制信号的星座图,是调试和理解调制方式的利器。 |
| 信道 | awgn |
添加加性高斯白噪声,是最基本的信道模型。 |
| 辅助函数 | randi |
生成随机整数,用于产生二进制源数据。 |
biterr |
计算误码数或误码率,用于性能评估。 | |
semilogy |
绘制对数坐标图,常用于绘制 BER 曲线。 |
应用场景
- 数字电视广播:如 DVB 标准,提供标准清晰度和高清晰度电视信号,旧电视接收标准清晰度信号(基础层),新电视接收高清信号(基础层+增强层)。
- 卫星通信:为不同类型的用户提供差异化服务,付费用户(增强层)享受更高带宽的服务,而免费用户(基础层)只能获得基本服务。
- 无线局域网:在信道条件好的情况下,自动切换到高阶调制以获得更高速率;在信道条件差时,切换到低阶调制以保证连接的稳定性,分层调制是这种自适应调制的一种具体实现形式。
MATLAB 的 Communications Toolbox 为研究和实现分层调制提供了强大而便捷的工具,通过其对象化编程,可以轻松构建、仿真和分析各种分层调制系统。
