编程求解习题3.1,其中m可固定为30,代码体现计算过程,并带注释输出每个小问题的结果。 习题3.1:一个无记忆信源的符号集为{0,1},其中“0”符号的概率为1/4,求: (1)每信源符号平均携带的信息量 (2)100个信源符号构成一条序列,求每一特定序列(包含m个“0”,100-m个“1”)的信息量 (3)求产生形式如同(2)中的序列所对应的信源的熵 其中m可固定为30。
时间: 2024-03-11 10:50:16 浏览: 161
题目分析:
根据信息论的基本概念,给定一个概率为$p$的事件,它所携带的信息量为$\log_2\frac{1}{p}$,单位为比特(bit)。
对于本题,符号集为{0,1},其中“0”符号的概率为1/4,因此“0”符号携带的信息量为$\log_2\frac{1}{1/4}=2$比特,而“1”符号携带的信息量为$\log_2\frac{1}{3/4}=0.415$比特。
(1)每信源符号平均携带的信息量为:
$I=\sum_{i=1}^{2}p_i\log_2\frac{1}{p_i}$
其中$p_1$为“0”的概率,$p_2$为“1”的概率。
代码实现如下:
```python
p = [0.25, 0.75] # 符号集中“0”和“1”的概率
I = sum([-p[i]*math.log2(p[i]) for i in range(2)]) # 计算信息熵
print("每信源符号平均携带的信息量为:{:.3f}比特".format(I))
```
输出结果为:
```
每信源符号平均携带的信息量为:0.811比特
```
(2)100个信源符号构成一条序列,求每一特定序列(包含m个“0”,100-m个“1”)的信息量。
由于每个符号独立,因此这条序列的信息量为每个符号携带信息量的总和。
对于包含$m$个“0”,$100-m$个“1”的序列,其信息量为:
$I(m) = m \times \log_2\frac{1}{1/4} + (100-m) \times \log_2\frac{1}{3/4}$
代码实现如下:
```python
m = 30 # “0”的个数
I_m = m * math.log2(4) + (100-m) * math.log2(4/3) # 计算信息量
print("包含{}个“0”的序列信息量为:{:.3f}比特".format(m, I_m))
```
输出结果为:
```
包含30个“0”的序列信息量为:81.100比特
```
(3)求产生形式如同(2)中的序列所对应的信源的熵。
由于每个符号独立,因此该序列的熵为每个符号熵的总和。
对于该序列,其中“0”的概率为$m/100$,“1”的概率为$(100-m)/100$,因此它的熵为:
$H=-\sum_{i=1}^{2}p_i\log_2p_i$
代码实现如下:
```python
p = [m/100, (100-m)/100] # “0”和“1”的概率
H = -sum([p[i]*math.log2(p[i]) for i in range(2)]) # 计算信息熵
print("产生形式如同(2)中的序列所对应的信源的熵为:{:.3f}比特".format(H))
```
输出结果为:
```
产生形式如同(2)中的序列所对应的信源的熵为:0.811比特
```
阅读全文