手把手实战 MATLAB 通信系统仿真 06

第 6 章  抽样、量化与 PCM

本章目标  通过 MATLAB 直观观察采样混叠现象;理解采样定理的工程约束;手工实现均匀量化器(中间型量化);掌握量化限幅、分区、索引映射全过程;完成量化索引与 PCM 二进制比特流的编码/解码闭环,建立模拟信号数字化(ADC)的完整认知。

6.1 采样定理:不止是「Fs>2fmax」

很多教材简写采样定理为:采样率大于信号最高频率的2倍。但在仿真与工程中,这句话并不完整。

完整表述:带限信号的采样率必须严格大于2倍最高频率,才能保证频谱不重叠、无混叠,可无失真恢复原始信号。

工程补充关键细节:

  • 理想无陡峭滤波器场景下,不能将采样率刚好卡在 $$F_s=2f_\text{max}$$,会造成频谱混叠;

  • 实际硬件抗混叠滤波器存在过渡带,必须预留保护带宽,因此工程采样率通常远高于2倍最高频率;

  • 混叠是不可逆失真:一旦发生采样混叠,高频信号会折叠到低频,无法通过后续滤波恢复。

MATLAB 仿真的核心价值:肉眼观察混叠现象——同一个高频连续信号,在欠采样条件下,会完全等效为一个低频离散信号。

代码|观察混叠

f0 = 9000;         % 原始信号 9kHz
Fs = 12000;         % 采样率 12kHz(不满足奈奎斯特)
N = 120;
n = (0:N-1).';

% 对9kHz高频信号欠采样
x = cos(2*pi*f0*n/Fs);

figure;
stem(n,x,'filled'); grid on;
xlabel('n'); ylabel('x[n]');
title('9 kHz 信号以 12 kHz 采样(发生混叠)');

% 混叠折叠频率:Fs-f0 = 3kHz
xAlias = cos(2*pi*3000*n/Fs);
fprintf('max difference = %.3e\n',max(abs(x-xAlias)));

实验现象与原理

输出差值趋近于 0,说明欠采样后的 9kHz 序列,与 3kHz 低频序列完全一致

离散时间频率折叠公式:f_\text{alias}=|F_s-f_0|

这证明:计算机看到的离散波形,无法区分原始高频和混叠后的低频,混叠失真彻底不可逆。

6.2 手工实现中间型均匀量化

化是模拟信号数字化的核心步骤:将连续幅度的信号,映射为有限个离散电平。本章实现中间型均匀量化(每段量化区间取中点作为重构值),是最标准、最常用的量化模型。

均匀量化核心参数:

  • B:量化比特数

  • L=2^B:量化总层数

  • \Delta=\dfrac{x_\text{max}-x_\text{min}}{L}:量化步长

量化完整流程:限幅 → 区间划分 → 计算索引 → 中点重构

代码|B 位均匀量化器

B = 4;
L = 2^B;
xmin = -1;
xmax = 1;
Delta = (xmax-xmin)/L;  % 量化步长

% 生成超出量化范围的输入,观察饱和失真
x = linspace(-1.2,1.2,1000).';

% 1. 限幅:超出量程部分强制截断
xClip = min(max(x,xmin),xmax-eps);  

% 2. 计算量化索引 0 ~ L-1
idx = floor((xClip-xmin)/Delta);   

% 3. 中点重构:中间型均匀量化
xq = xmin + (idx+0.5)*Delta;       

figure;
plot(x,x,'--'); hold on;
plot(x,xq,'LineWidth',1.2); grid on;
xlabel('Input Amplitude');
ylabel('Quantized Output');
title('4bit 均匀量化特性曲线');

实验观察

  • 输入信号在 [-1,1] 范围内,输出呈现标准阶梯量化波形;

  • 输入超出 ±1 量程后,输出不再变化,出现量化饱和失真(过载失真)

  • 采用区间中点重构,量化误差范围严格控制在 [-\Delta/2,\Delta/2]

6.3 从量化索引到 PCM 比特流

PCM(脉冲编码调制)的本质:将模拟信号量化后的十进制索引,转为固定长度二进制比特流传输,接收端再反向恢复索引与量化电平

这是数字语音、数字通信最基础的编码框架,核心是固定比特长度、无损索引映射

代码|PCM 编码与解码【基础 MATLAB】

B = 4;
% 一组量化索引示例(0~15 合法范围)
idx = [0; 1; 5; 10; 15];

% 编码:十进制索引 → B位二进制矩阵 → 一维比特流
bitMat = dec2bin(idx,B) - '0';     % 转为数值0/1矩阵
bitStream = reshape(bitMat.',[],1);% 串行比特流

% 解码:一维比特流 → 重构比特矩阵 → 恢复索引
bitMatRx = reshape(bitStream,B,[]).';
idxHat = bin2dec(char(bitMatRx + '0'));

% 校验编解码无损
assert(isequal(idx,idxHat));
disp('PCM编解码闭环验证成功,无失真');

关键核心细节

  • dec2bin 自动补齐高位,保证每个索引严格占用 B 个比特

  • reshape 转置必须成对反向,否则比特顺序错乱、解码错误;

  • assert 无报错,证明 PCM 编解码是无损索引传输

6.4 量化信噪比的直观理解

满幅、均匀分布、无过载、均匀量化的理想条件下:

量化比特数每增加 1bit,量化信噪比大约提升 6dB

⚠️ 重要误区纠正:

  • 6dB/bit 是理想理论值,并非通用公式;

  • 实际场景中,语音信号非均匀分布、信号过载失真、非均匀量化、压扩处理,都会打破 6dB/bit 的规律;

  • 比特位数提升,可减小量化步长、降低量化噪声,是提升量化精度的唯一核心手段。

本章小结

  • 采样不足会产生不可逆频率混叠,工程采样率必须预留滤波过渡带,不能仅满足 2 倍频率下限。

  • 均匀量化四步流程:限幅 → 区间分割 → 索引计算 → 中点重构。

  • 信号超量程会出现过载饱和失真,是量化失真的重要来源。

  • PCM 本质是量化索引的固定长度二进制序列化传输,可实现无损编解码闭环。

  • 6dB/bit 量化信噪比规律仅适用于理想均匀量化场景,不可通用。

动手练习

1.  把 B 从 4 改到 8,比较量化误差均方值。

2.  设计一个输入幅度经常超过 ±1 的信号,观察过载失真。

3.  把 PCM 比特流随机翻转 1 bit,观察恢复的量化索引可能发生多大变化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值