基于 Python 的限失真信源编码定理理论分析与仿真实现(D124307012 潘梓州)
一、问题描述与背景
在实际的数字通信系统设计与多媒体压缩中,信道传输速率是有限的,绝对无失真的传输(香农第一定理)往往由于成本或带宽限制而无法实现。限失真信源编码定理(香农第三定理)解决了在允许一定失真的前提下,数据压缩的理论极限问题。
本课题的目标是通过数学推导与Python仿真,深度剖析限失真信源编码定理的核心物理意义。在给定的平均失真度约束
下,通过仿真离散二元信源和连续高斯信源的有损压缩过程,定量展示信息的传输率损失与失真度放大之间的妥协关系。此外,本系统需重点解决传统仿真在数值计算边界点处的奇异值问题,从而为工程实际中的有损编码压缩系统提供精准的模型边界。
二、系统设计与核心算法原理
限失真信源编码定理的核心数学表达为:对于一个已知信息熵为H(X)的离散无记忆信源,只要给定的平均失真限制为D,总能找到一种编码方法,使得编码输出的平均码率R满足R>R(D),从而在理论上保证平均失真不大于D。
系统主要采用以下两个核心算法模块进行设计与指标求解:
1.离散对称二进制信源(汉明失真测度)
设信源输入与输出集均为{0,1},先验分布概率为P(0)=p,P(1)=1-p(仿真默认取等概率p=0.5)。在汉明失真测度(即错码元计为1,对码元计为0)下,若允许的最大平均失真度为D,其理论信息率下界算法为:

其中二进制香农信息熵函数表达式为H(x)=-xx-(1-x)
(1-x)。
物理边界:当D=0时,信息率R(0)=H(p)=1.0 bit/symbol(退化为无失真编码);当D0.5时,由于接收端瞎猜的正确率都有50%,因此系统无需传输任何有效信息(R(D)=0)。
2.连续高斯信源(平方误差失真测度)
设信源服从均值为0、方差为的连续高斯分布X
N(0,
)。采用平方误差失真测度d(x,y)=(x-y)^2。定理对应的率失真性能界限为:

物理边界:当允许的噪声/失真方差D时,R(D)=0,说明信号完全被噪声淹没;当D
0时,R(D)
,说明由于连续变量取值的无限性,绝对无失真传输需要无穷大的信息率。
三、函数功能描述与完整仿真代码
系统基于“数据计算与图表渲染分离”的原则进行模块化编写。程序提供双重兜底运行机制:在执行时首先会在黑窗口终端完整打印定量报表,随后尝试唤醒图形窗口。由于移除了对外部复杂主题的依赖,改用Python纯原生内置库,彻底规避了因环境兼容性导致的窗口闪退问题。
import math
def calculate_binary_entropy(prob):
"""计算二进制香农信息熵"""
if prob <= 0.0 or prob >= 1.0:
return 0.0
return -prob * math.log2(prob) - (1.0 - prob) * math.log2(1.0 - prob)
def print_terminal_data_table():
"""控制台定量报表打印模块"""
print("=" * 65)
print(f"{'限失真信源编码定理 - 核心定量指标仿真数据表':^50}")
print("=" * 65)
print(f"{'测试点':^8}|{'二元信源失真D':^12}|{'二元信源R(D)':^12}|{'高斯信源失真D':^12}|{'高斯信源R(D)':^12}")
print("-" * 65)
p_val = 0.5
h_p = calculate_binary_entropy(p_val)
sigma_sq = 2.0
for i in range(11):
d_bin = i * 0.05
r_bin = h_p - calculate_binary_entropy(d_bin) if d_bin < 0.5 else 0.0
d_gau = 0.2 + i * 0.2
r_gau = 0.5 * math.log2(sigma_sq / d_gau) if d_gau < sigma_sq else 0.0
print(f" Pt.{i:<3} | {d_bin:^11.2f} | {r_bin:^11.4f} | {d_gau:^11.2f} | {r_gau:^11.4f}")
print("=" * 65)
def plot_distortion_curves():
"""纯净图形绘制模块"""
import numpy as np
import matplotlib.pyplot as plt
print("\n[系统提示] 正在启动图形渲染后端,请查看新弹出的独立视窗...")
# 基础样式配置
plt.style.use('fast')
plt.rcParams['font.sans-serif'] = ['SimHei', 'Microsoft YaHei', 'Arial', 'sans-serif']
plt.rcParams['axes.unicode_minus'] = False
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5.5))
# 1. 离散二元对称信源
D_bin = np.linspace(0, 0.6, 400)
R_bin = [1.0 - calculate_binary_entropy(d) if d < 0.5 else 0.0 for d in D_bin]
ax1.plot(D_bin, R_bin, color='#1f77b4', linewidth=2.5, label='等概率二元对称信源 (p=0.5)')
ax1.axvline(x=0.5, color='red', linestyle='--', alpha=0.7)
ax1.scatter([0, 0.5], [1.0, 0], color='red', zorder=5)
ax1.text(0.02, 0.9, '无失真点 R(0)=H(p)=1.0', color='darkred', fontsize=10)
ax1.text(0.35, 0.1, '最小信息率截断点 D_max=0.5', color='darkred', fontsize=10)
ax1.set_title('离散二元对称信源限失真编码边界 R(D)', fontsize=12)
ax1.set_xlabel('约束平均失真度 D (汉明距离)', fontsize=11)
ax1.set_ylabel('允许的最低传输速率 R (bit/symbol)', fontsize=11)
ax1.set_xlim(-0.02, 0.55)
ax1.set_ylim(-0.05, 1.1)
ax1.grid(True, linestyle=':', alpha=0.6)
ax1.legend()
# 2. 连续高斯信源
sigma_sq_val = 2.0
D_gau = np.linspace(1e-4, 2.5, 400)
R_gau = [0.5 * np.log2(sigma_sq_val / d) if d < sigma_sq_val else 0.0 for d in D_gau]
ax2.plot(D_gau, R_gau, color='#ff7f0e', linewidth=2.5, label=f'高斯连续信源 ($\sigma^2$={sigma_sq_val})')
ax2.axvline(x=sigma_sq_val, color='red', linestyle='--', alpha=0.7)
ax2.scatter([sigma_sq_val], [0], color='red', zorder=5)
ax2.text(0.5, 1.8, r'$R(D) = \frac{1}{2}\log_2(\frac{\sigma^2}{D})$', color='blue', fontsize=12)
ax2.text(sigma_sq_val - 0.5, 0.2, f'能量截断点 D_max={sigma_sq_val}', color='darkred', fontsize=10)
ax2.set_title('连续高斯信源限失真编码边界 R(D)', fontsize=12)
ax2.set_xlabel('约束平均失真度 D (平方误差)', fontsize=11)
ax2.set_ylabel('允许的最低传输速率 R (bit/symbol)', fontsize=11)
ax2.set_xlim(-0.05, sigma_sq_val + 0.4)
ax2.set_ylim(-0.1, 3.5)
ax2.grid(True, linestyle=':', alpha=0.6)
ax2.legend()
plt.suptitle('限失真信源编码定理(香农第三定理)全景理论仿真对比图', fontsize=14, y=0.98)
plt.tight_layout()
plt.show()
# ==================== 入口 ====================
if __name__ == "__main__":
print_terminal_data_table()
plot_distortion_curves()
print("\n" + "=" * 65)
input("【安全机制提示】程序运行已进入安全挂起状态。按 [回车键/Enter] 可退出终端...")
四、仿真结果运行与定量分析
1.离散二元信源限失真指标定量分析
从仿真数据表中可以看出:
当允许失真D=0时,传输速率要求达到最大值R(0)=1.0000 bit/symbol。这完美契合了香农第一定理:在不允许任何失真的极端环境下,压缩必须以信源熵为极限。
随着失真限制D从0.0放宽到0.25,最低信息率大幅度缩减至0.1887 bit/symbol。这种陡峭的下降趋势揭示了在图像压缩早期,牺牲极小的画质可以换取成倍的带宽释放。
当D0.5时,曲线彻底归零。物理意义在于,由于二元系统总共就两个状态,错漏率达一半意味着盲猜即可,系统不需要再传输任何有效比特。
2.连续高斯信源限失真指标定量分析
在高斯信源仿真部分,当允许的失真度D非常微小时,传输所需的信息率高达1.6610 bit。
当D逐渐逼近信号自身的能量方差=2.0时,计算得到的信息率急剧滑落并在D=2.0处被强制截断为0。
定理的关键推论验证:在D0时,高斯信源的R(D)呈现垂直向上的发散趋势。这在工程设计中给出了重要启示:自然界中的模拟信号都属于连续随机变量,若要在数字通信中实现绝对零失真的无损还原,理论上必须配置无穷大的码率和传输带宽。因此,对模拟信号进行数字量化编码时,必须引入限失真编码。
3.仿真图片:

五、结论与总结
本技术报告通过对限失真信源编码定理,进行数学建模与仿真分析,定量验证了有损数据压缩的理论边界,核心结论如下:
1.二元离散对称信源的失真边界规律:在汉明失真测度下,率失真函数R(D)随失真约束的放宽呈单调递减趋势。当允许失真D=0时,最低传输码率精确等于信源熵H(p)=1.0 bit/symbol时,退化为无失真极限;当允许失真达到最大截断点D=0.5时,码率归零。这证明系统若能容忍一半的误码率,接收端仅凭先验概率盲猜即可,无需耗费任何信道传输速率。
2.连续高斯信源的有损压缩必然性:针对服从N(0,)分布的连续高斯信源,在平方误差测度下,当失真要求D
0时,理论信息率将发散至无穷大(R(D)
)。这一规律定量揭示了模拟信号数字化的本质约束:由于连续随机变量具有无限信息量,在有限带宽的实际硬件系统中实现绝对无失真的传输在理论上是不可能的。因此,必须引入限失真编码,通过将失真控制在合理范围内,换取工程上可实现的有限传输速率。
更多推荐
所有评论(0)