| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 307 人关注过本帖
标题:求高手解释一下关于信息熵的C程序
只看楼主 加入收藏
笨石头555
Rank: 1
等 级:新手上路
帖 子:3
专家分:3
注 册:2012-11-29
结帖率:0
收藏
已结贴  问题点数:10 回复次数:1 
求高手解释一下关于信息熵的C程序
#include <stdio.h>
#include <math.h>
#include <string.h>
#include <malloc.h>

#define MAX_VALUE 256

void main(int argc, char **argv)
{
    char infile[30];
    int i,j;

    FILE *ifp;
    unsigned char*img;   
    int size;
    int    freq[MAX_VALUE];
    float prob[MAX_VALUE];

    float entropy;

    strcpy(infile , "GABE.RAW");//打开语音文件
    ifp = fopen(infile,"rb");
    if(ifp ==NULL)//如果文件是空,则报错
    {
       printf("Image file %s cannot be opened for input.\n", infile);
       getchar();
       return;
    }

    //计算语音文件大小
    fseek(ifp, 0, SEEK_END);
    size = ftell(ifp);
    ++size;
    fseek(ifp, 0, SEEK_SET);

    img = (unsigned char*) malloc (size * sizeof(unsigned char));
    if (img == NULL)
    {
        printf("无法打开文件.\n");
        fclose(ifp);
        getchar();
        return;
    }

    //读取文件
    fread(img, sizeof(unsigned char), size, ifp);
    fclose(ifp);

    //计算灰度值的概率
    for(j=0; j<MAX_VALUE; j++)
        freq[j] = 0;

    for(i=0; i<size; i++)
        freq[ img[i] ] ++;   

    free(img);

    for(j=0; j<MAX_VALUE; j++)
        prob[j] = (float)freq[j] / (float)size;

   //计算熵
   entropy = 0.0;
   for(i=0; i<MAX_VALUE; i++)
      if(prob[i] > 0.0)
         entropy = entropy - prob[i] * (float) log( (double) prob[i]);
         entropy = entropy/ (float) log ((double) 2.0);
    printf("first-order entropy of the speech is: %f\n",entropy);
getchar();
}
搜索更多相关主题的帖子: 信息 include cannot opened 
2012-11-29 21:11
w527705090
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:11
帖 子:441
专家分:1882
注 册:2011-6-28
收藏
得分:10 
这个不懂。。。。。帮顶啊

有心者,千方百计;无心者,千难万难。
2012-11-29 22:51
快速回复:求高手解释一下关于信息熵的C程序
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016964 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved