费诺编码C程序及演示结果
费诺编码
功能简介:首先输入信源符号的个数,然后输入各个信源符号的概率。(概率之和等于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程序及演示结果相关推荐
- 用MATLAB实现费诺编码
一.简述 <信息论与编码>是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充.其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能, ...
- java实现.费诺编码_使用递归算法编写的费诺编码
内容与设计思想 按照教材方式建立数据成员变量.设有离散无记忆信源X,P(X).二进制费诺编码为:1.将信源符号按概率从大到小的顺序排列2.将信源分成两组――按两组概率之差为最小分.3.上面一组编码为0 ...
- 费诺码设计matlab,费诺编码的matlab实现.doc
费诺编码的matlab实现.doc 多媒体技术实验报告学院:城南学院 姓名:学号:指导老师:尹波时间:2015年11月25日 教师评语:成绩 评阅教师 日期 实验一:费诺编码的matlab实现1实验目 ...
- 信源编码算法(费诺编码哈夫曼编码)
信源编码算法 费诺编码 Fano coding 哈夫曼编码 Huffman coding 费诺编码 编码步骤 将信源符号按照其概率大小,从大到小排列: 将这一组信源符号分成概率之和尽可能接近或者相等的 ...
- 信源编码的代码实现 (香农编码、费诺编码、哈夫曼编码、游程编码、算术编码)
文章目录 香农编码 费诺编码 哈夫曼编码 C++版 C语言版 游程编码 算术编码 香农编码 (1) 将信源消息符号按其出现的概率大小依次排列 p1 ≥ p2 ≥ - ≥ pn (2) 确定满足下列不等 ...
- java费诺编码_费诺编码的分析与实现.doc
费诺编码的分析与实现 吉林建筑大学 电气与电子信息工程学院 设计题目: 费诺编码的分析与实现 专业班级: 电子信息工程 111 学生姓名: 马 超 学 号: 指导教师: 吕卅 王超 设计时间: 201 ...
- 香农费诺编码 c语言实现,对于香农编码、费诺编码和哈夫曼编码,编码方法惟一的是()。...
问题标题 对于香农编码.费诺编码和哈夫曼编码,编码方法惟一的是(). 2019-8-15来自ip:15.170.14.227的网友咨询 浏览量:533 手机版 问题补充: 题目类型:[填空题] 对于香 ...
- 费诺编码 c++代码实现 信息论实验
费诺编码 1.实验目的 (1)进一步熟悉费诺编码过程: (2)掌握Matlab 或C语言递归程序的设计和调试技术 2.实验要求 (1)输入:信源符号个数 ,每个信源符号的概率分布P从键盘输入 (2)输 ...
- 费诺编码实验报告c语言,信息论编码实验报告费诺编码附源代码..doc
信息论编码实验报告费诺编码附源代码. 中南大学 信息论与编码实验报告 选 题: 费诺编码 学生姓名: 学 号: 专业班级: 通信工程 指导老师: 学 院: 信息科学与工程学院 时 间: 2015 目录 ...
最新文章
- Androidx FloatingActionButton 中间图片颜色值修改
- 和12岁小同志搞创客开发:如何驱动LCD1602液晶显示屏?
- java中常用的字符串的截取方法
- 聊聊Elasticsearch的ExponentiallyWeightedMovingAverage
- webpack构建vue项目
- 图解WordPress主题(模板)架构
- BU_DATE_CHAR abap screen 日期字段搜索帮助
- Win11手机应用大改!全新界面来袭
- mysql 表单属性_php表单常用属性有什么?
- ONENET平台简介及简单的接入方法
- F5讲坛:虚拟化数据中心的安全问题-F5白皮书
- Unity 脚本生成瓦片地图TileMap
- 计算机营销专业毕业生自我评价,市场营销专业毕业生自我评价
- Vue.js 开篇---Vue的介绍及准备工作
- 互联网产品常用英语单词
- Facebook登陆SDK接入(Android)
- 作宾语,不定式与动名词的区别——脑动词和手动词
- java随机点名器_Java实现简单随机点名器
- 巴比特《8问》专访 Conflux 创始人龙凡教授
- catia锥齿轮cad三视图_catia直齿圆锥齿轮有限元分析
热门文章
- 云原生运行时的下一个五年
- 集体所有制的企业是属于国企吗
- Windows 11最新版中恢复IE11浏览器的方法2023更新
- 山东省初中计算机考试分数段,山东中考等级录取
- android同时预览多个监控,基于VLC的Android多路视频监控系统.pdf
- 在Linux上搭建Socks5 Proxy代理服务器
- 文本分类——特征选择概述
- 使用二进制包在生产环境部署 Kubernetes v1.13.2 集群
- Spring Cloud架构教程 (二)Hystrix监控数据聚合
- 敏捷转型行动笔记:内部敏捷教练培训资料分享——基础篇(夯实精益敏捷思想,掌握相关实践)