睿诚科技协会

Matlab分层调制技术如何实现与优化?

什么是分层调制?

想象一下一个调色盘:

  • 传统调制:就像只用一种颜色(只使用红色)来画画,颜色的深浅代表不同的信息(浅红=0,深红=1)。
  • 分层调制:就像混合颜色,我们可以用一种颜色作为“基础层”(比如黄色),然后在上面用另一种颜色“叠加”细节(比如蓝色),接收端可以只看黄色层得到基本信息,或者同时看黄色和蓝色层得到全部的详细信息。

在数字通信中,这具体表现为:

  • 基础层:使用高鲁棒性、低阶的调制方式(如 BPSK, QPSK),它传输的是最重要的数据,对噪声不敏感,即使在信噪比较低的情况下也能被正确解调。
  • 增强层:使用高阶的调制方式(如 16-QAM, 64-QAM),它传输的是次要的、细节性的数据,它叠加在基础层之上,只有在信噪比较高时才能被正确解调,如果信噪比不够,增强层的数据会丢失,但基础层的数据仍然可以保留。

最常见的分层调制方案:16-QAM 星座图

标准的 16-QAM 星座图有 16 个点,每个点代表 4 个比特,而分层 16-QAM(通常称为 QPSK + 4QAM16-QAM with hierarchical modulation)会将这 16 个点重新排列:

Matlab分层调制技术如何实现与优化?-图1

  • 基础层:使用 4 个外角的点(黑色点),构成一个 QPSK 调制,传输 2 个比特(00, 01, 10, 11),这 2 个比特是抗干扰能力最强的。
  • 增强层:使用 12 个内部的点,这 12 个点相对于 4 个外角点,可以看作是在基础层 QPSK 的每个象限内,又增加了 3 个点(类似于一个 4-PAM 调制),它传输额外的 2 个比特。

这样,总共还是传输 4 个比特,但被分成了两个优先级不同的数据流。


为什么使用分层调制?

  1. 提高频谱效率:在不增加带宽和发射功率的情况下,通过一个载波同时传输两路不同优先级的数据,相当于用更少的资源传输了更多的信息。
  2. 实现 unequal error protection (UEP - 不等错误保护):这是分层调制最核心的优势,可以根据数据的重要性分配不同的保护等级,在视频广播中,视频的关键帧可以作为基础层,而增量帧可以作为增强层,这样,即使信号变差,用户也能看到基本的、可理解的图像(基础层),而不会完全“黑屏”。
  3. 向后兼容性:在广播系统中,旧接收机(只支持基础层,如 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_baseber_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 为研究和实现分层调制提供了强大而便捷的工具,通过其对象化编程,可以轻松构建、仿真和分析各种分层调制系统。

分享:
扫描分享到社交APP
上一篇
下一篇