内容发布更新时间 : 2024/11/10 9:39:02星期一 下面是文章的全部内容请认真阅读。
实用文档
最大信道容量:c= 0.0365
2)计算信源个数为3,信宿个数为5的信道容量: 运行aa.m
输入信源的个数:3 输入信宿的个数:5
输入信道容量的精度:0.000001
信宿转移概率矩阵:p =0.0484 0.1385 0.3058 0.2845 0.2227 0.2104 0.2471 0.1077 0.3762 0.0585 0.3430 0.0800 0.1808 0.3428 0.0534 原始信源分布:q = 0.3333 0.3333 0.3333 最佳信源分布:q =0.4691 0.1794 0.3515 最大信道容量:c =0.1559
七、实验总结
通过实验,我们对信道容量的理解更加深刻了。信道容量是指信道能无错误传送的最大信息率。信道的输入、输出都取值于离散符号集,且都用一个随机变量来表示的信道就是离散单符号信道。由于信道中存在干扰,因此输入符号在传输中将会产生错误,这种信道干扰对传输的影响可用传递概率来描述。为了评价实际信道的利用率,应具体计算已给信道的容量。这是一个求最大值的问题。由于互信息对输入符号概率而言是凸函数,其极值将为最大值,因此这也就是求极值的问题。对于离散信道,P(x)是一组数,满足非负性和归一性等条件,可用拉格朗日乘子法求得条件极值。对于连续信道,P(x)是一函数,须用变分法求条件极值。
实验过程中,我们虽然也遇到了很多困难,但也正是因为如此,我们才能发
现自己基础的薄弱点,学的更有方向。对于编程方面,我们也有了很大的提升。
实验五 率失真函数
.
实用文档
一、 实验目的
验证率失真函数的极值特性,理解相关参数的变化对率失真函数的影响。
二、实验原理
(1)输入S,d的初始值、条件概率、输出分布等值; (2)计算输出分布qj??piipjij;
i?1M(3)进入迭代,标志为0或者误差大于指定eps则迭代,否则退出迭代; (4)计算一个互信息I(qj;pji)???piipjiijlog(i?1j?1MMpjiijqj);
(5)计算一个条件概率分布P(j;i)?qjeMkk?1Sdij;
Sdik?qeMi?1(6)重算一次(4),并计算D??piipjiijdij;
(7)重算(3)-(7)步骤,直到退出迭代;
三、实验环境
Microsoft Windows 7、 Visual Studio 2005 profession
四、编码程序
#include
#include
static double Pi[M] = {0.4, 0.1, 0.25, 0.1, 0.05, 0.05, 0.01, 0.02, 0.005, 0.015}; //初始化信源的概率分布 const int systemDefine = 2; //定义进制(默认为2进制,结果为bit,为e时,结果为nat) const double eps = 1e-8; //允许误差
.
实用文档
//计算输出分布(qj)
void calcOutDistribution() { int i, j; for(j=0; j //计算条件概率分布pji void calcProbabilityDistribution() { int i, j, k; double temp = 0; for(i=0; i //取得R(r,r)=I(qj;Pji)【实际上就是根据互信息量公式求互信息】 double getSelfInformation() { int i, j; double I=0; for(i=0; i . 实用文档 { I += Pi[i] * Pji[i][j] * log(Pji[i][j]/q[j])/log(systemDefine); //求互信息量 } } return I; } int main(int argc, char *argv[]) { double probabilityCount = 0.0; //概率和 for(int k=0; k double mutualInformation1, mutualInformation2, D; int i, j, flag, nCount; //初始值 mutualInformation1 = 0; mutualInformation2 = 0; D = 0; flag = 0; nCount = 0; //迭代次数指示器 //init mothod //输出分布的初始化 for(i=0; i . 实用文档 for(i=0; i if(i == j) { d[i][j] = 0; } else { d[i][j] = 1; } } } for(i=0; i //计算输出分布 calcOutDistribution(); //迭代算法 cout<<\误差精度:\ while(flag == 0 || fabs(mutualInformation2-mutualInformation1) > eps) { cout< mutualInformation1 = getSelfInformation(); //计算下一个条件概率分布 calcProbabilityDistribution(); //在上面的原来的输出分布q和新生成的条件概率分布Pji的基础上获得新的互信息R(r, r+1) mutualInformation2 = getSelfInformation(); .