费诺编码

功能简介:首先输入信源符号的个数,然后输入各个信源符号的概率。(概率之和等于1)

主程序:   李松林

#include<stdio.h>      湖北师范学院

#include<math.h>

#define G 20

int function1(int c,int M);

void function2(int c,int num1,int M,int cs);

void function3(int c,int M);

float a[G]={0},tmp=0,m[G]={0},k=0,H=0,num[G]={0},sum1=0,sum2=0;

int K[G]={0},i,j,N,s[G][G],c,cs=0,num1=0,ks[G],zj[G],zh[G];

void main()

{

loop:printf("请输入信源符号个数N:");

scanf("%d",&N);

for(i=0;i<N;i++)

{

scanf("%f",&a[i]);

tmp+=a[i];

}

if(tmp<0.9999||tmp>1.0001)

{

printf("输入的数据不符合要求,请重新输入\n");

tmp=0;

goto loop;

}

else

{

for(i=0;i<N-1;i++)

for(j=i+1;j<N;j++)

{

if(a[i]<a[j])  //从大到小排序

{

tmp=a[i];

a[i]=a[j];

a[j]=tmp;

}

}

for(i=0;i<N;i++)

{

m[i]=-log10(a[i])/log10(2.0);//求出-log p(ai)并保存在数组m里

}

/

function3(0,N);

for(i=0;i<N;i++)

{

H+=a[i]*m[i];//求信源熵

k+=a[i]*K[i];//平均码长

}

printf("信源消息符号ai  符号概率p(ai)    码长Ki      二元码字\n");

for(i=0;i<N;i++)

{

printf("     a%d           %-4.2f              %d           ",i+1,a[i],K[i]);

for(j=0;j<K[i];j++)

printf("%d",s[i][j]);

printf("\n");

}

printf("信源熵H=%5.3f bit/符号    费诺码的平均码长k=%5.3f 码元/符号    编码效率n=%4.1f%% \n",H,k,100*(H/k));

}

}

int function1(int c,int M)//求出分界点

{

int d=c;

for(i=c;i<M-1;i++)

{

for(j=c;j<i+1;j++)

sum1+=a[j];

for(j=i+1;j<M;j++)

sum2+=a[j];

num[i]=fabs(sum1-sum2);//取绝对值

sum1=0;

sum2=0;

}

for(i=c;i<M-1;i++)

{

if(num[d]>num[i])

d=i;

}

d+=1;

return d;

}

void function2(int c,int num1,int M,int cs)//进行分组并计算码长、码字

{

for(i=c;i<num1;i++)

{

s[i][cs]=0;

K[i]+=1;

}

for(j=num1;j<M;j++)

{

s[j][cs]=1;

K[j]+=1;

}

}

void function3(int c,int M)

{

num1=function1(c,M);

function2(c,num1,M,cs);

ks[cs]=c;

zj[cs]=num1;

zh[cs]=M;

cs++;

if((zj[cs-1]-ks[cs-1])>1)

{

function3(ks[cs-1],zj[cs-1]);

}

if((zh[cs-1]-zj[cs-1])>1)

{

function3(zj[cs-1],zh[cs-1]);

}

cs--;

}

第一次输入:6   0.32  0.22  0.18  0.16  0.08  0.04

结果:

第二次输入:7   0.20  0.19  0.18  0.17  0.15  0.10  0.01

结果:

第三次输入:8   0.1   0.18  0.4   0.05  0.06  0.1   0.07  0.04

结果:

费诺编码C程序及演示结果相关推荐

  1. 用MATLAB实现费诺编码

    一.简述 <信息论与编码>是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充.其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能, ...

  2. java实现.费诺编码_使用递归算法编写的费诺编码

    内容与设计思想 按照教材方式建立数据成员变量.设有离散无记忆信源X,P(X).二进制费诺编码为:1.将信源符号按概率从大到小的顺序排列2.将信源分成两组――按两组概率之差为最小分.3.上面一组编码为0 ...

  3. 费诺码设计matlab,费诺编码的matlab实现.doc

    费诺编码的matlab实现.doc 多媒体技术实验报告学院:城南学院 姓名:学号:指导老师:尹波时间:2015年11月25日 教师评语:成绩 评阅教师 日期 实验一:费诺编码的matlab实现1实验目 ...

  4. 信源编码算法(费诺编码哈夫曼编码)

    信源编码算法 费诺编码 Fano coding 哈夫曼编码 Huffman coding 费诺编码 编码步骤 将信源符号按照其概率大小,从大到小排列: 将这一组信源符号分成概率之和尽可能接近或者相等的 ...

  5. 信源编码的代码实现 (香农编码、费诺编码、哈夫曼编码、游程编码、算术编码)

    文章目录 香农编码 费诺编码 哈夫曼编码 C++版 C语言版 游程编码 算术编码 香农编码 (1) 将信源消息符号按其出现的概率大小依次排列 p1 ≥ p2 ≥ - ≥ pn (2) 确定满足下列不等 ...

  6. java费诺编码_费诺编码的分析与实现.doc

    费诺编码的分析与实现 吉林建筑大学 电气与电子信息工程学院 设计题目: 费诺编码的分析与实现 专业班级: 电子信息工程 111 学生姓名: 马 超 学 号: 指导教师: 吕卅 王超 设计时间: 201 ...

  7. 香农费诺编码 c语言实现,对于香农编码、费诺编码和哈夫曼编码,编码方法惟一的是()。...

    问题标题 对于香农编码.费诺编码和哈夫曼编码,编码方法惟一的是(). 2019-8-15来自ip:15.170.14.227的网友咨询 浏览量:533 手机版 问题补充: 题目类型:[填空题] 对于香 ...

  8. 费诺编码 c++代码实现 信息论实验

    费诺编码 1.实验目的 (1)进一步熟悉费诺编码过程: (2)掌握Matlab 或C语言递归程序的设计和调试技术 2.实验要求 (1)输入:信源符号个数 ,每个信源符号的概率分布P从键盘输入 (2)输 ...

  9. 费诺编码实验报告c语言,信息论编码实验报告费诺编码附源代码..doc

    信息论编码实验报告费诺编码附源代码. 中南大学 信息论与编码实验报告 选 题: 费诺编码 学生姓名: 学 号: 专业班级: 通信工程 指导老师: 学 院: 信息科学与工程学院 时 间: 2015 目录 ...

最新文章

  1. Androidx FloatingActionButton 中间图片颜色值修改
  2. 和12岁小同志搞创客开发:如何驱动LCD1602液晶显示屏?
  3. java中常用的字符串的截取方法
  4. 聊聊Elasticsearch的ExponentiallyWeightedMovingAverage
  5. webpack构建vue项目
  6. 图解WordPress主题(模板)架构
  7. BU_DATE_CHAR abap screen 日期字段搜索帮助
  8. Win11手机应用大改!全新界面来袭
  9. mysql 表单属性_php表单常用属性有什么?
  10. ONENET平台简介及简单的接入方法
  11. F5讲坛:虚拟化数据中心的安全问题-F5白皮书
  12. Unity 脚本生成瓦片地图TileMap
  13. 计算机营销专业毕业生自我评价,市场营销专业毕业生自我评价
  14. Vue.js 开篇---Vue的介绍及准备工作
  15. 互联网产品常用英语单词
  16. Facebook登陆SDK接入(Android)
  17. 作宾语,不定式与动名词的区别——脑动词和手动词
  18. java随机点名器_Java实现简单随机点名器
  19. 巴比特《8问》专访 Conflux 创始人龙凡教授
  20. catia锥齿轮cad三视图_catia直齿圆锥齿轮有限元分析

热门文章

  1. 云原生运行时的下一个五年
  2. 集体所有制的企业是属于国企吗
  3. Windows 11最新版中恢复IE11浏览器的方法2023更新
  4. 山东省初中计算机考试分数段,山东中考等级录取
  5. android同时预览多个监控,基于VLC的Android多路视频监控系统.pdf
  6. 在Linux上搭建Socks5 Proxy代理服务器
  7. 文本分类——特征选择概述
  8. 使用二进制包在生产环境部署 Kubernetes v1.13.2 集群
  9. Spring Cloud架构教程 (二)Hystrix监控数据聚合
  10. 敏捷转型行动笔记:内部敏捷教练培训资料分享——基础篇(夯实精益敏捷思想,掌握相关实践)