信息论与编码实习报告(3)

2020-02-20 14:03

Y 结束本次循环 把最后一个字符设为’/0’

for(i=0;i

p=sb[i].pb;

for(j=0;j

p=p*2; if(p>=1) {

sb[i].m[j]='1'; p=p-1; }

else sb[i].m[j]='0'; }

sb[i].m[sb[i].l]='\\0'; }

3、函数调用关系图

仅有main()函数。概率排序、求累加概率、自信息量、码字长度、码字的

函数均包含在main()函数内。 九、用户手册及总结 用户手册:

1.按照提示先输入信源的总个数

2.依次输入各信源的名称 3.再按上序输入信源的概率 4.得出结果 总结:

本次编程中没有用到特别复杂的算法。按照香农编码的编码方法依次实现各模块即可。在编程中要注意的是数字的类型,利用log函数时求得的值是double型。 附源代码:

#include #include #include

typedef struct symbol {

char s[50];

double pa,pb,h; //分别为符号概率,累加概率,自信息量 int l; //码字长度 char m[100]; //码字 }symbol;

int N;

void main() {

int i,j;

symbol sb[100];

printf(\请输入符号的个数:\ scanf(\

printf(\请依次输入消息符号:\\n\ for(i=0;i

scanf(\ }

printf(\请依次输入各消息符号的概率:\\n\ for(i=0;i

scanf(\ }

int x; symbol z;

for(i=0;i

x=i;

for(j=i+1;j

if(sb[x].pa

z=sb[i];sb[i]=sb[x];sb[x]=z; }

sb[0].pb=0;

for(i=1;i

sb[i].pb=sb[i-1].pb+sb[i-1].pa; }

double y;

for(i=0;i

sb[i].h=-log(sb[i].pa)/log(2); y=sb[i].h;

if(sb[i].h-(int)y==0) sb[i].l=(int)y; else sb[i].l=(int)(y+1); }

double p;

for(i=0;i

p=sb[i].pb;

for(j=0;j

p=p*2; if(p>=1) {

sb[i].m[j]='1'; p=p-1; }

else sb[i].m[j]='0'; }

sb[i].m[sb[i].l]='\\0'; }

printf(\消息符号 符号概率 累加概率码字\\n\

for(i=0;i

printf(\ %1.4lf %1.4lf %1.4lf 信息量 = 码字长度 %s\\n\

b[i].s,sb[i].pa,sb[i].pb,sb[i].h,sb[i].l,sb[i].m); }


信息论与编码实习报告(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:毕奥-萨伐尔定律是怎样建立的

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: