源代码:huffman.m
。
运行结果如下。
>> huffman
信源符号:6, 3, 8, 9, 6, 3, 2, 6, 2, 1.
编码规则:
1 → 100
2 → 000
3 → 010
4 → 00110
5 → 001111
6 → 011
7 → 001110
8 → 101
9 → 0010
10 → 11
编码后:0110101010010011010000011000100.
解码后:6, 3, 8, 9, 6, 3, 2, 6, 2, 1.
✓ 一致。
源代码:sim_channel.m
、sim_source.m
。Simulink:linear_BSC.slx
。
此部分为视频讲解内容。
信源为二元均匀分布信源;编码为线性分组码,其生成矩阵如下。
运行结果如下。
![](fig/bar-屏幕截图 2022-11-06 140509.png)
![](fig/simulink-屏幕截图 2022-11-21 153851.jpg)
![成功-屏幕截图 2022-11-06 135856](fig/成功-屏幕截图 2022-11-06 135856.png)
红线没编码,误码率就是信道错误概率。
信道为二元对称信道,错误概率为 0.05;编码同上。
运行结果如下。
由图,对于线性分组码、二元对称信道,误码率和信源分布无关!
这并非不合理。注意译码过程:校验矩阵
因此,无论发送什么码字,这一条件下的误码率都相等。进而总误码率与各个码字的发送比例无关,即误码率与信源分布无关。
模拟次数 = Sample time × Samples per frame,这两项的默认值分别是1、4。最开始我没改,误码率一直是零,莫名其妙。
此节的图都是“改变信道错误概率”。
调试就是调一调试一试,我把信道错误概率改得特别大(最大 5% → 90%),发现误码率不是零了。后来又转了几个弯,最终发觉是模拟次数太少——如果只模拟四次,全都正确的概率不低于
经过试验,我发现采样频率一万次(下图右)曲线比较平滑(⇒ 误差足够小),时间也勉强能接受(两三分钟)。
采样频率 100(左)、10000(右)时的图象可用随机变量
误码率
相对误差远小于一即