⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 redundancy.c

📁 视频编码的码率控制
💻 C
字号:
/* REDUNDANCY.C - PROGRAM TO CALCULATE MAXIMUM CODING INEFFICIENCY. */

#include <stdio.h>
#include <math.h>


/* This program calculates a bound on the expected number of extra bits
   produced as a result of doing arithmetic coding using divides of a given 
   precision, expressed as a percentage of the optimal coding size. The
   expectation is calculated on the assumption that the model's symbol
   probabilities are correct.

   The bound assumes that the coding range and total frequencies are such
   as to cause maximum truncation in the division, with the minimum true
   quotient. The bound varies as a function of the probability, p, of
   the most probable symbol. All but at most one of the remaining symbols
   are assumed to have probabilities equal to p (this gives minimum optimal
   coding size, and hence maximum relative inefficiency). */

main()
{
    double p;

    printf(
     "\nPrecision:    2      3      4      5      6      7      8      9\n\n");
   
    for (p = 0.001; p<0.0095; p+=0.001) do_p(p);
    for (p = 0.010; p<0.9905; p+=0.010) do_p(p);
    for (p = 0.991; p<0.9995; p+=0.001) do_p(p);
  
    exit(0);
}

do_p(p)
  double p;
{
    int precision, n;
    double e, opt, excess;

    printf("  p=%5.3f ",p);
    for (precision = 2; precision<10; precision++) {
        e = pow(2.0,-(double)precision)/(0.25+pow(2.0,-(double)precision));
        n = (int)(1/p);
        opt = - n*p*log(p);
        if (n*p!=1) opt -= (1-n*p)*log(1-n*p);
        excess = - (1-p)*log(1-e) - p*log(1-e+e/p);
        printf("  %5.2f",100*excess/opt);
    }
    printf("\n");
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -