摘要
信息率失真函数 R(D) 描述在允许平均失真不超过 D 的条件下,信源压缩所需的最小信息率。它把“压缩多少”和“允许损失多少”放在同一个数学框架中,是有失真信源编码理论的核心。本文依据所学内容关于平均失真、允许试验信道、R(D) 定义及其曲线性质的内容,推导出离散系统与连续系统的信息率失真函数。离散部分以二元等概信源和汉明失真为代表,推出;连续部分以高斯信源和均方误差失真为代表,推出
。最后结合 MATLAB 曲线说明两类系统在 D=0 附近、Dmax 处以及曲线形态上的差异。
关键词:信息率失真函数;平均失真;离散信源;高斯信源;有失真压缩;MATLAB
1. 研究背景
无失真编码要求接收端完全恢复原信源,因此最低平均码长与熵 H(X) 紧密相关。但在图像、语音、测量数据等实际系统中,完全无误地恢复每一个样本往往既不必要,也会造成过高的码率。有失真编码允许恢复符号 Y 与原符号 X 存在一定差别,只要这种差别的平均程度控制在给定范围内即可。因此,信息率失真理论要回答的问题不是“能否完全恢复”,而是:在允许失真 D 的条件下,至少还需要保留多少关于 X 的信息。
图片中的框图把信源编码器看成一个假想信道:输入为信源 X,输出为重构符号 Y,编码方案对应某种条件概率 p(y|x)。这个视角把压缩问题转化为互信息最小化问题。与信道容量 C=max I(X;Y) 不同,率失真函数是在失真约束下求 min I(X;Y)。前者追求信道能传多少,后者追求在可接受失真下最少要传多少。
2. 平均失真与信息率失真函数的定义
2.1 离散信源的平均失真
设离散无记忆信源 X 的符号集为,重构符号集为
。若采用有失真编码,则原符号
可以被恢复为
。失真函数
用来度量这一次恢复的损失大小。当编码器或等效试验信道的转移概率为
时,单符号平均失真为
如果对长度为 L 的序列进行编码,并且每个位置的失真函数相同,则序列平均失真可以写成各位置平均失真的算术平均:
这个定义强调:失真不是某一次编码的偶然误差,而是在概率意义下长期平均的损失。
2.2 连续信源的平均失真
对于连续随机变量,求和需要换成积分。若 X 和 Y 的联合概率密度为,则平均失真为
连续系统中常用的失真函数是均方误差。它不仅便于数学分析,也符合许多模拟信号处理中对误差能量的度量方式。
2.3 R(D) 的数学定义
给定一个允许失真上限 D,所有满足的条件分布
构成允许试验信道集合。在这些候选方案中,选择使互信息
最小的方案,其最小值就定义为信息率失真函数:
其中互信息可写为
从这个定义可以看出,R(D) 不是某个具体编码器的码率,而是理论上所有有失真编码方案能达到的最低信息率。实际编码器越接近 R(D),说明它在给定失真下越接近理论极限。
3. R(D) 的基本性质
3.1 非负性与端点
互信息始终非负,因此 R(D)≥0。若 D 很大,大到接收端不需要依赖 X 也能满足失真要求,就可以让 Y 与 X 独立,此时 I(X;Y)=0,所以 R(D)=0。这个临界失真通常记为 Dmax。
对离散信源而言,若零失真要求每个符号都被唯一恢复,则 D=0 时必须完整保留信源信息,因而 R(0)=H(X)。对连续信源而言,若要求均方误差趋近 0,就相当于要求无限精度地描述连续值,因此 R(D) 在 D→0 时通常趋于无穷大。
3.2 单调不增性
若 D1<D2,则满足的编码方案一定也满足
。也就是说,D2 对应的可选方案集合更大,最小互信息不可能更大。因此有
D1 < D2 => R(D1) ≥ R(D2).
这说明允许的失真越大,所需信息率越小;但是减小的速度并不是固定的,这一点由凸性进一步刻画。
3.3 凸性推导
取两个失真水平 D1、D2 及其近似最优试验信道。若以概率
使用第一种方案,以概率
使用第二种方案,就得到一个混合编码策略。该策略的平均失真为
互信息对试验信道是凸函数,因此混合方案的信息率不超过两个方案信息率的加权和:
所以 R(D) 是关于 D 的下凸函数。这个性质表明:在低失真区域,继续降低失真需要付出很高码率;在高失真区域,再放宽一点失真带来的码率下降较小。
4. 离散系统的信息率失真曲线推导
4.1 二元等概信源与汉明失真模型
考虑最典型的离散系统:二元等概信源 X∈{0,1},且 P(X=0)=P(X=1)=1/2。重构符号 Y 也取 0 或 1。采用汉明失真:若 Y=X,失真为 0;若 Y≠X,失真为 1。于是平均失真就是恢复错误的概率:
D = P(Y ≠ X).
因为二元等概信源的熵为 H(X)=1 bit/symbol,所以 D=0 时必须用 1 bit/symbol 表示;当 D=1/2 时,即使完全不看 X 而随机猜测,也能达到平均错误率 1/2,此时不需要传输关于 X 的信息,R(D)=0。
4.2 下界推导
互信息可写为 I(X;Y)=H(X)-H(X|Y)。为了让 I(X;Y) 尽量小,需要让 H(X|Y) 尽量大。设错误指示变量 E=X⊕Y,其中 E=1 表示恢复错误,E=0 表示恢复正确。因为 P(E=1)=D,故
给定 Y 后,如果还知道 E,就能确定 X,因为 X=Y⊕E。因此 X 的剩余不确定性不会超过错误指示变量 E 的不确定性,即。于是得到
由于 R(D) 是所有满足失真约束的互信息最小值,所以必有。
4.3 可达性说明
下面说明这个下界可以达到。构造一个对称试验信道:以概率 1-D 正确输出 X,以概率 D 翻转 X。也就是 Y=X⊕E,且 E 与 X 独立,P(E=1)=D。由于 X 等概,Y 仍然等概,因此 H(Y)=1。同时,于是
下界可达,所以二元等概信源在汉明失真下的信息率失真函数为
这条曲线从 R(0)=1 开始,随 D 增大而下降,并在 D=0.5 处降为 0。
5. 连续系统的信息率失真曲线推导
5.1 高斯信源与均方误差模型
连续系统以高斯信源为代表。设,采用均方误差失真
。若只输出一个与 X 无关的常数,最佳常数是均值 0,此时最小平均失真
。因此
,并且
时 R(D)=0。
5.2 下界推导
对任意重构变量 Y,记误差 Z=X-Y。若平均均方误差不超过 D,则。互信息可以由微分熵表示:
在给定 Y 时,X 的不确定性等价于误差 X-Y 的不确定性,因此 h(X|Y)=h(X-Y|Y)。条件只会减少熵,所以 h(X-Y|Y)≤h(X-Y)。又因为在给定方差限制下,高斯分布的微分熵最大,若,则
而高斯信源本身的微分熵为
代入互信息表达式,得到任意方案都必须满足
5.3 可达性说明
取,再令 Z~N(0,D),且 Y 与 Z 独立,并设 X=Y+Z。这样 X 的方差为
,重构误差 X-Y=Z 的均方值正好为 D。由于误差为高斯且与重构量独立,上述下界取等号。因此高斯信源在均方误差下的信息率失真函数为
当 D 趋近 0 时,趋近无穷大。这反映了连续信源的本质:若要求几乎无误差地描述连续取值,就需要无限精度,理论码率会无限增长。
6. 离散系统与连续系统曲线对比
图 1 离散二元信源与连续高斯信源的信息率失真曲线示意
图 1 根据 MATLAB 绘制。左图为二元等概离散信源在汉明失真下的曲线,右图在归一化失真尺度下比较离散二元信源和连续高斯信源。从图形和公式可以归纳出以下差异。
1.零失真附近:离散信源 R(0)=H(X),二元等概时为 1 bit/symbol;连续高斯信源在 D→0 时 R(D)→∞。
2.最大失真处:离散二元信源 Dmax=0.5,高斯信源 Dmax=σ^2;达到或超过 Dmax 后均有 R(D)=0。
3.曲线形态:两者都随 D 增大而下降,且具有凸性,说明越追求低失真,单位失真改善所需的码率代价越高。
4.物理含义:离散符号的精确恢复只需有限信息量,而连续幅值的精确恢复需要无限精度,这是两类曲线在原点附近差别最大的原因。
比较项目 | 离散系统 | 连续系统 |
研究对象 | 有限符号集合,例如 {0,1} | 连续取值,例如高斯随机变量 |
常用失真度量 | 汉明失真 d(x,y)=0 或 1 | 均方误差 d(x,y)=(x-y)^2 |
零失真极限 | R(0)=H(X),通常有限 | D→0 时 R(D)→∞ |
最大失真 | 可由不传信息时的最优重构得到 | 高斯零均值时 Dmax=σ^2 |
典型公式 |
7. MATLAB 验证思路与数值说明
实现代码如下:
function RD_report_curve_comparison_cn() clc; close all; set(groot, 'defaultAxesFontName', 'Microsoft YaHei'); set(groot, 'defaultTextFontName', 'Microsoft YaHei'); %% 2. 参数设置 % 离散系统:二元等概信源 X in {0,1} pOne = 0.5; % P(X=1) DmaxDiscrete = min(pOne, 1 - pOne); % 二元等概信源的最大有效失真,等于 0.5 % 连续系统:高斯信源 X ~ N(0, sigma^2) sigma2 = 1; % 高斯信源方差 DmaxContinuous = sigma2; % 高斯信源均方误差下的最大有效失真 %% 3. 离散二元信源的 R(D) % 二元等概信源 + 汉明失真: % R(D) = 1 - H2(D), 0 <= D <= 0.5 % R(D) = 0, D >= 0.5 Ddiscrete = linspace(0, DmaxDiscrete, 800); Rdiscrete = binaryDiscreteRD(Ddiscrete, pOne); %% 4. 归一化失真下的离散/连续对比 % 为了把离散系统和连续系统画在同一横轴上,使用归一化失真: % d = D / Dmax dNorm = linspace(1e-4, 1, 800); RdiscreteNorm = binaryDiscreteRD(dNorm * DmaxDiscrete, pOne); RcontinuousNorm = gaussianContinuousRD(dNorm * DmaxContinuous, sigma2); %% 5. 绘制报告中的曲线对比图 fig = figure('Color', 'w', ... 'Name', '信息率失真函数曲线示意', ... 'Position', [100, 100, 1250, 620]); t = tiledlayout(1, 2, 'TileSpacing', 'compact', 'Padding', 'compact'); % 子图 1:离散二元信源 R(D) nexttile; plot(Ddiscrete, Rdiscrete, 'r-', 'LineWidth', 2.2); hold on; plot([DmaxDiscrete DmaxDiscrete], [0 1], 'k:', 'LineWidth', 1.1); grid on; xlabel('失真 D'); ylabel('信息率 R(D) / 比特每符号'); title('离散二元信源的率失真曲线'); legend('R(D)=1-H_2(D)', 'D_{max}=0.5', 'Location', 'northeast'); xlim([0 DmaxDiscrete]); ylim([0 1.05]); % 子图 2:归一化坐标下离散/连续系统对比 nexttile; plot(dNorm, RdiscreteNorm, 'r-', 'LineWidth', 2.2); hold on; plot(dNorm, RcontinuousNorm, 'b--', 'LineWidth', 2.2); grid on; xlabel('归一化失真 d = D / D_{max}'); ylabel('信息率 R(D)'); title('离散系统与连续系统曲线对比'); legend('离散二元信源', '连续高斯信源', 'Location', 'northeast'); xlim([0 1]); ylim([0 4]); title(t, '信息率失真函数曲线示意', ... 'FontSize', 18, 'FontWeight', 'bold'); %% 6. 可选:保存图片 % 自动保存到 output 文件夹,方便插入报告。 outDir = fullfile(pwd, 'output'); if ~exist(outDir, 'dir') mkdir(outDir); end outFile = fullfile(outDir, 'RD_report_curve_comparison_matlab.png'); exportgraphics(fig, outFile, 'Resolution', 250); fprintf('曲线对比图已保存到:%s\n', outFile); end function R = binaryDiscreteRD(D, pOne) % 二元 Bernoulli 离散信源在汉明失真下的率失真函数。 % 当 pOne=0.5 时,R(D)=1-H2(D), 0<=D<=0.5。 p = min(pOne, 1 - pOne); Dmax = p; Dclip = min(max(D, 0), Dmax); R = binaryEntropy(p) - binaryEntropy(Dclip); R(D >= Dmax) = 0; R = max(R, 0); end function R = gaussianContinuousRD(D, sigma2) % 高斯连续信源在均方误差失真下的率失真函数: % R(D)=1/2*log2(sigma^2/D), 0<D<=sigma^2。 Dsafe = max(D, realmin); R = 0.5 * log2(sigma2 ./ Dsafe); R(D >= sigma2) = 0; R = max(R, 0); end function H = binaryEntropy(p) % 二元熵函数 H2(p)。 p = min(max(p, 0), 1); H = zeros(size(p)); mask = p > 0 & p < 1; H(mask) = -p(mask) .* log2(p(mask)) ... - (1 - p(mask)) .* log2(1 - p(mask)); endMATLAB 程序采用解析公式直接计算两类曲线。离散部分设置 p=0.5,计算,失真范围为 0≤D≤0.5;连续部分设置 σ^2=1,计算
,失真范围为 0<D≤1。为了便于同图比较,程序还使用归一化失真 d=D/Dmax。
二元熵函数和两类 R(D) 函数的核心计算式为
归一化/实际失真 D | 离散二元信源 R(D) | 连续高斯信源 R(D), σ^2=1 |
0 | 1.000 | 趋于无穷大 |
0.10 | 0.531 | 1.661 |
0.20 | 0.278 | 1.161 |
0.30 | 0.119 | 0.868 |
0.50 | 0.000 | 0.500 |
1.00 | 不适用 | 0.000 |
表中的数值显示:在同样的相对失真水平下,连续高斯信源通常需要更高的信息率,尤其是在失真很小的区域。 不能单凭“高斯信源更复杂”直观解释此结论,它是连续变量无限取值特性与微分熵理论推导共同作用的结果。
8. 结论
信息率失真函数 R(D) 是有失真信源编码的理论边界。它以平均失真 D 为横轴,以最小必要信息率为纵轴,定量描述了压缩率和重构质量之间的折中关系。从定义上看,R(D) 是在允许试验信道集合中对互信息求最小值;从曲线上看,它具有非负、单调不增和凸的基本性质。
离散二元信源在汉明失真下的,说明允许错误概率越大,必须保留的信息越少。连续高斯信源在均方误差下的
,说明若要求连续幅值接近无误差地恢复,理论码率会迅速增大并趋向无穷。两类曲线都体现了同一条基本规律:失真容忍度越高,压缩可以越强;但在低失真区域,任何进一步的质量提升都需要付出更大的码率代价。