TONAL.C
上传用户:njqiyou
上传日期:2007-01-08
资源大小:574k
文件大小:47k
源码类别:

mpeg/mp3

开发平台:

C/C++

  1. /**********************************************************************
  2.  * ISO MPEG Audio Subgroup Software Simulation Group (1996)
  3.  * ISO 13818-3 MPEG-2 Audio Multichannel Encoder
  4.  *
  5.  * $Id: tonal.c 1.8 1996/02/12 07:13:35 rowlands Exp $
  6.  *
  7.  * $Log: tonal.c $
  8.  * Revision 1.8  1996/02/12 07:13:35  rowlands
  9.  * Release following Munich meeting
  10.  *
  11.  * Revision 1.5.2.1  1995/11/06  04:19:12  rowlands
  12.  * Received from Uwe Felderhoff (IRT)
  13.  *
  14.  * Revision 1.7  1995/08/14  08:06:37  tenkate
  15.  * ML-LSF added Warner ten Kate 7/8/95 (Philips)
  16.  * II_psycho_one() split into II_psycho_one() for audio data and
  17.  * II_psycho_one_ml() for MultiLingual data.
  18.  * Variables crit_band, cbound and sub_size has been made local to
  19.  * these functions.
  20.  * Tables "cb" and "th" are copied from LSF-directory.
  21.  * ltg has found its ml counterpart.
  22.  *
  23.  * Revision 1.6  1995/07/31  07:47:50  tenkate
  24.  * bugs correction (if center==1 in Psycho_One), 25/07/95 WtK
  25.  *
  26.  * Revision 1.4.2.1  1995/06/16  03:46:42  rowlands
  27.  * Input from Susanne Ritscher (IRT)
  28.  *
  29.  **********************************************************************/
  30. /**********************************************************************
  31.  *   date   programmers         comment                               *
  32.  * 2/25/91  Douglas Wong        start of version 1.1 records          *
  33.  * 3/06/91  Douglas Wong        rename: setup.h to endef.h            *
  34.  *                              updated I_psycho_one and II_psycho_one*
  35.  * 3/11/91  W. J. Carter        Added Douglas Wong's updates dated    *
  36.  *                              3/9/91 for I_Psycho_One() and for     *
  37.  *                              II_Psycho_One().                      *
  38.  * 5/10/91  W. Joseph Carter    Ported to Macintosh and Unix.         *
  39.  *                              Located and fixed numerous software   *
  40.  *                              bugs and table data errors.           *
  41.  * 6/11/91  Davis Pan           corrected several bugs                *
  42.  *                              based on comments from H. Fuchs       *
  43.  * 01jul91  dpwe (Aware Inc.)   Made pow() args float                 *
  44.  *                              Removed logical bug in I_tonal_label: *
  45.  *                              Sometimes *tone returned == STOP      *
  46.  * 7/10/91  Earle Jennings      no change necessary in port to MsDos  *
  47.  * 11sep91  dpwe@aware.com      Subtracted 90.3dB from II_f_f_t peaks *
  48.  * 10/1/91  Peter W. Farrett    Updated II_Psycho_One(),I_Psycho_One()*
  49.  * to include comments.       *
  50.  *11/29/91  Masahiro Iwadare    Bug fix regarding POWERNORM           *
  51.  *                              fixed several other miscellaneous bugs*
  52.  * 2/11/92  W. Joseph Carter    Ported new code to Macintosh.  Most   *
  53.  *                              important fixes involved changing     *
  54.  *                              16-bit ints to long or unsigned in    *
  55.  *                              bit alloc routines for quant of 65535 *
  56.  *                              and passing proper function args.     *
  57.  *                              Removed "Other Joint Stereo" option   *
  58.  *                              and made bitrate be total channel     *
  59.  *                              bitrate, irrespective of the mode.    *
  60.  *                              Fixed many small bugs & reorganized.  *
  61.  * 2/12/92  Masahiro Iwadare    Fixed some potential bugs in          *
  62.  *          Davis Pan           subsampling()                         *
  63.  * 2/25/92  Masahiro Iwadare    Fixed some more potential bugs        *
  64.  * 92-11-06 Soren H. Nielsen Corrected power calculation in I_ and *
  65.  * II_f_f_t.               *
  66.  **********************************************************************
  67.  *                                                                    *
  68.  *                                                                    *
  69.  *  MPEG/audio Phase 2 coding/decoding multichannel                   *
  70.  *                                                                    *
  71.  *  7/27/93        Susanne Ritscher,  IRT Munich                      *
  72.  *  8/27/93        Susanne Ritscher, IRT Munich                       *
  73.  *                 Channel-Switching is working                       *
  74.  *  9/1/93         Susanne Ritscher,  IRT Munich                      *
  75.  *                 all channels normalized                            *
  76.  *                                                                    *
  77.  *  9/20/93        channel-switching is only performed at a           *
  78.  *                 certain limit of TC_ALLOC dB, which is included    *
  79.  *                 in encoder.h                                       *
  80.  *                                                                    *
  81.  * 10/18/93        seperated smr and ltmin                            *
  82.  *                                                                    *
  83.  *  Version 1.0                                                       *
  84.  *                                                                    *
  85.  *  07/12/94       Susanne Ritscher,  IRT Munich                      *
  86.  *                 Tel: +49 89 32399 458                              *
  87.  *                 Fax: +49 89 32399 415                              *
  88.  *                                                                    *
  89.  *  Version 1.1                                                       *
  90.  *                                                                    *
  91.  *  02/23/95    Susanne Ritscher,  IRT Munich                      *
  92.  *                 corrected some bugs                                *
  93.  *                 extension bitstream is working                     *
  94.  *                                                                    *
  95.  **********************************************************************/
  96. #define TONAL_WIDTH 0.1 /* When more than one tonal component is within
  97.                            this width in Bark, the weaker one(s) are
  98.                            eliminated */
  99. #include "common.h"
  100. #include "encoder.h"
  101. /**********************************************************************/
  102. /*
  103. /*        This module implements the psychoacoustic model I for the
  104. /* MPEG encoder layer II. It uses simplified tonal and noise masking
  105. /* threshold analysis to generate SMR for the encoder bit allocation
  106. /* routine.
  107. /*
  108. /**********************************************************************/
  109. int read_crit_band(int lay, int freq) 
  110. {
  111.  int crit_band;
  112.  FILE *fp;
  113.  char r[16], t[80];
  114.  strcpy(r, "2cb1");
  115.  r[0] = (char) lay + '0';
  116.  r[3] = (char) freq + '0';
  117.  if( !(fp = OpenTableFile(r)) ){       /* check boundary values */
  118.     printf("Please check %s boundary tablen",r);
  119.     exit(0);
  120.  }
  121.  fgets(t,80,fp);
  122.  sscanf(t,"%dn",&crit_band);
  123.  fclose(fp);
  124.  return(crit_band);
  125. }        
  126. void read_cbound(int lay, int freq, int crit_band, int *cbound) 
  127.  /* this function reads in critical band boundaries */
  128. {
  129.  int i,j,k;
  130.  FILE *fp;
  131.  char r[16], t[80];
  132.  strcpy(r, "2cb1");
  133.  r[0] = (char) lay + '0';
  134.  r[3] = (char) freq + '0';
  135.  if( !(fp = OpenTableFile(r)) ){       /* check boundary values */
  136.     printf("Please check %s boundary tablen",r);
  137.     exit(0);
  138.  }
  139.  fgets(t,80,fp);               /* skip input for critical bands */
  140.  sscanf(t,"%dn",&k);
  141.  for(i=0;i<crit_band;i++){ 
  142.     fgets(t,80,fp);
  143.     sscanf(t,"%d %dn",&j, &k);
  144.     if(i==j) cbound[j] = k;
  145.     else {                     /* error */
  146.        printf("Please check index %d in cbound table %sn",i,r);
  147.        exit(0);
  148.     }
  149.  }
  150.  fclose(fp);
  151. }        
  152. void read_freq_band(int *sub_size, g_ptr *ltg, int lay, int freq) 
  153.   /* this function reads in frequency bands and bark values  */
  154. {
  155.  int i,j, k;
  156.  double a,b,c;
  157.  FILE *fp;
  158.  char r[16], t[80];
  159.  strcpy(r, "2th1");
  160.  r[0] = (char) lay + '0';
  161.  r[3] = (char) freq + '0';
  162.  if( !(fp = OpenTableFile(r)) ){   /* check freq. values  */
  163.     printf("Please check frequency and cband table %sn",r);
  164.     exit(0);
  165.  }
  166.  fgets(t,80,fp);              /* read input for freq. subbands */
  167.  sscanf(t,"%dn",sub_size);
  168.  *ltg = (g_ptr) mem_alloc (sizeof(g_thres) * (*sub_size), "ltg");
  169.  (*ltg)[0].line = 0;          /* initialize global masking threshold */
  170.  (*ltg)[0].bark = 0;
  171.  (*ltg)[0].hear = 0;
  172.  for(i=1;i<(*sub_size);i++){    /* continue to read freq. subband */
  173.     fgets(t,80,fp);          /* and assign                     */
  174.     sscanf(t,"%d %d %lf %lfn",&j, &k, &b, &c);
  175.     if(i == j){
  176.        (*ltg)[j].line = k;
  177.        (*ltg)[j].bark = b;
  178.        (*ltg)[j].hear = c;
  179.     }
  180.     else {                   /* error */
  181.        printf("Please check index %d in freq-cb table %sn",i,r);
  182.        exit(0);
  183.     }
  184.  }
  185.  fclose(fp);
  186. }
  187. void make_map (int sub_size, mask *power, g_thres *ltg)
  188. /* this function calculates the global masking threshold */
  189. {
  190.     int i, j;
  191.    
  192.     for (i = 1; i < sub_size; i++)
  193. for (j = ltg[i-1].line; j <= ltg[i].line; j++)
  194.     power[j].map = i;
  195. }
  196. double add_db(double a, double b)
  197. {
  198.  a = pow(10.0,a/10.0);
  199.  b = pow(10.0,b/10.0);
  200.  return 10 * log10(a+b);
  201. }
  202. /****************************************************************/
  203. /*
  204. /*        Fast Fourier transform of the input samples.
  205. /*
  206. /****************************************************************/
  207. void II_f_f_t (double *sample, mask *power) /* this function calculates an */
  208.     /* FFT analysis for the freq.  */
  209.     /* domain                      */
  210. {
  211.     int i,j,k,ll,l=0;
  212.     int ip, le, le1;
  213.     double t_r, t_i, u_r, u_i;
  214.     static int M, MM1, init = 0, N, NV2, NM1;
  215.     double *x_r, *x_i, *energy;
  216.     static int *rev;
  217.     static double *w_r, *w_i;
  218.     x_r = (double *) mem_alloc (sizeof (DFFT), "x_r");
  219.     x_i = (double *) mem_alloc (sizeof (DFFT), "x_i");
  220.     energy = (double *) mem_alloc (sizeof (DFFT), "energy");
  221.     if (!init)
  222.     {
  223. rev = (int *) mem_alloc (sizeof (IFFT), "rev");
  224. w_r = (double *) mem_alloc (sizeof (D10), "w_r");
  225. w_i = (double *) mem_alloc (sizeof (D10), "w_i");
  226. M = 10;
  227. MM1 = 9;
  228. N = FFT_SIZE;
  229. NV2 = FFT_SIZE >> 1;
  230. NM1 = FFT_SIZE - 1;
  231. for (ll = 0; ll < M; ll++)
  232. {
  233.     le = 1 << (M-ll);
  234.     le1 = le >> 1;
  235.     w_r[ll] = cos (PI / le1);
  236.     w_i[ll] = -sin (PI / le1);
  237. }
  238. for (i = 0; i < FFT_SIZE; rev[i] = l, i++)
  239.     for (j = 0, l = 0; j < 10; j++)
  240.     {
  241. k = (i >> j) & 1;
  242. l |= (k << 9 - j);                
  243.     }
  244. init = 1;
  245.     }
  246.     for (i = 0; i < FFT_SIZE; i++)
  247.     {
  248.        x_r[i] = sample[i];
  249.        x_i[i] = energy[i] = 0;
  250.     }
  251. /*
  252.     memcpy ((char *) x_r, (char *) sample, sizeof (double) * FFT_SIZE);
  253. */
  254.     for (ll = 0; ll < MM1; ll++)
  255.     {
  256. le = 1 << (M - ll);
  257. le1 = le >> 1;
  258. u_r = 1;
  259. u_i = 0;
  260. for (j = 0; j < le1; j++)
  261. {
  262.     for (i = j; i < N; i += le)
  263.     {
  264. ip = i + le1;
  265. t_r = x_r[i] + x_r[ip];
  266. t_i = x_i[i] + x_i[ip];
  267. x_r[ip] = x_r[i] - x_r[ip];
  268. x_i[ip] = x_i[i] - x_i[ip];
  269. x_r[i] = t_r;
  270. x_i[i] = t_i;
  271. t_r = x_r[ip];
  272. x_r[ip] = x_r[ip] * u_r - x_i[ip] * u_i;
  273. x_i[ip] = x_i[ip] * u_r + t_r * u_i;
  274.     }
  275.     t_r = u_r;
  276.     u_r = u_r * w_r[ll] - u_i * w_i[ll];
  277.     u_i = u_i * w_r[ll] + t_r * w_i[ll];
  278. }
  279.     }
  280.     for (i = 0; i < N; i += 2)
  281.     {
  282. ip = i + 1;
  283. t_r = x_r[i] + x_r[ip];
  284. t_i = x_i[i] + x_i[ip];
  285. x_r[ip] = x_r[i] - x_r[ip];
  286. x_i[ip] = x_i[i] - x_i[ip];
  287. x_r[i] = t_r;
  288. x_i[i] = t_i;
  289. energy[i] = x_r[i] * x_r[i] + x_i[i] * x_i[i];
  290.     }
  291.     for (i = 0; i < FFT_SIZE; i++)
  292. if (i < rev[i])
  293. {
  294.     t_r = energy[i];
  295.     energy[i] = energy[rev[i]];
  296.     energy[rev[i]] = t_r;
  297. }
  298.     for (i = 0; i < HAN_SIZE; i++)
  299.     {
  300. /* calculate power density spectrum */
  301. if (energy[i] < 1E-20)
  302.     energy[i] = 1E-20;
  303. /* power calculation corrected with a factor 4, both positive
  304.    and negative frequencies exist, 1992-11-06 shn */
  305. power[i].x = 10 * log10 (energy[i] * 4.0) + POWERNORM;
  306. power[i].next = STOP;
  307. power[i].type = FALSE;
  308.     }
  309.     mem_free ((void **) &x_r);
  310.     mem_free ((void **) &x_i);
  311.     mem_free ((void **) &energy);
  312. }
  313. /****************************************************************/
  314. /*
  315. /*         Window the incoming audio signal.
  316. /*
  317. /****************************************************************/
  318. void II_hann_win (double *sample)   /* this function calculates a  */
  319.     /* Hann window for PCM (input) */
  320. {     /* samples for a 1024-pt. FFT  */
  321.     register int i;
  322.     register double sqrt_8_over_3;
  323.     static int init = 0;
  324.     static double *window;
  325.     
  326.     if (!init)
  327.     {
  328. /* calculate window function for the Fourier transform */
  329. window = (double *) mem_alloc (sizeof (DFFT), "window");
  330. sqrt_8_over_3 = pow (8.0 / 3.0, 0.5);
  331. for (i = 0; i < FFT_SIZE; i++)
  332. {
  333.     /* Hann window formula */
  334.     window[i] = sqrt_8_over_3 * 0.5 * (1 - cos (2.0*PI*i / (FFT_SIZE-1))) / FFT_SIZE;
  335. }
  336. init = 1;
  337.     }
  338.     for (i = 0; i < FFT_SIZE; i++)
  339. sample[i] *= window[i];
  340. }
  341. /*******************************************************************/
  342. /*
  343. /*        This function finds the maximum spectral component in each
  344. /* subband and return them to the encoder for time-domain threshold
  345. /* determination.
  346. /*
  347. /*******************************************************************/
  348. void II_pick_max (mask *power, double *spike)
  349. {
  350.  double max;
  351.  int i,j;
  352.  for(i=0;i<HAN_SIZE;spike[i>>4] = max, i+=16)      /* calculate the      */
  353.  for(j=0, max = DBMIN;j<16;j++)                    /* maximum spectral   */
  354.     max = (max>power[i+j].x) ? max : power[i+j].x; /* component in each  */
  355. }                                                  /* subband from bound */
  356.                                                    /* 4-16               */
  357. /****************************************************************/
  358. /*
  359. /*        This function labels the tonal component in the power
  360. /* spectrum.
  361. /*
  362. /****************************************************************/
  363. void II_tonal_label(mask *power, int *tone) /* this function extracts (tonal) */
  364.     /* sinusoidals from the spectrum  */
  365. {
  366.  int i,j, last = LAST, first, run, last_but_one = LAST; /* dpwe */
  367.  double max;
  368.  *tone = LAST;
  369.  for(i=2;i<HAN_SIZE-12;i++){
  370.     if(power[i].x>power[i-1].x && power[i].x>=power[i+1].x){
  371.        power[i].type = TONE;
  372.        power[i].next = LAST;
  373.        if(last != LAST) power[last].next = i;
  374.        else first = *tone = i;
  375.        last = i;
  376.     }
  377.  }
  378.  last = LAST;
  379.  first = *tone;
  380.  *tone = LAST;
  381.  while(first != LAST){               /* the conditions for the tonal          */
  382.     if(first<2 || first>499) run = 0;/* otherwise k+/-j will be out of bounds */
  383.     else if(first<62) run = 2;       /* components in layer II, which         */
  384.     else if(first<126) run = 3;      /* are the boundaries for calc.          */
  385.     else if(first<254) run = 6;      /* the tonal components                  */
  386.     else run = 12;
  387.     max = power[first].x - 7;        /* after calculation of tonal   */
  388.     for(j=2;j<=run;j++)              /* components, set to local max */
  389.        if(max < power[first-j].x || max < power[first+j].x){
  390.           power[first].type = FALSE;
  391.           break;
  392.        }
  393.     if(power[first].type == TONE){   /* extract tonal components */
  394.        int help=first;
  395.        if(*tone==LAST) *tone = first;
  396.        while((power[help].next!=LAST)&&(power[help].next-first)<=run)
  397.           help=power[help].next;
  398.        help=power[help].next;
  399.        power[first].next=help;
  400.        if((first-last)<=run){
  401.           if(last_but_one != LAST) power[last_but_one].next=first;
  402.        }
  403.        if(first>1 && first<255){     /* calculate the sum of the */
  404.           double tmp;                /* powers of the components */
  405.           tmp = add_db(power[first-1].x, power[first+1].x);
  406.           power[first].x = add_db(power[first].x, tmp);
  407.        }
  408.        for(j=1;j<=run;j++){
  409.           power[first-j].x = power[first+j].x = DBMIN;
  410.           power[first-j].next = power[first+j].next = STOP;
  411.           power[first-j].type = power[first+j].type = FALSE;
  412.        }
  413.        last_but_one=last;
  414.        last = first;
  415.        first = power[first].next;
  416.     }
  417.     else {
  418.        int ll;
  419.        if(last == LAST); /* *tone = power[first].next; dpwe */
  420.        else power[last].next = power[first].next;
  421.        ll = first;
  422.        first = power[first].next;
  423.        power[ll].next = STOP;
  424.     }
  425.  }
  426. }
  427. /****************************************************************/
  428. /*
  429. /*        This function groups all the remaining non-tonal
  430. /* spectral lines into critical band where they are replaced by
  431. /* one single line.
  432. /*
  433. /****************************************************************/
  434.         
  435. void noise_label(int crit_band, int *cbound, mask *power, int *noise, g_thres *ltg)
  436. {
  437.  int i,j, centre, last = LAST;
  438.  double index, weight, sum;
  439.                               /* calculate the remaining spectral */
  440.  for(i=0;i<crit_band-1;i++){  /* lines for non-tonal components   */
  441.      for(j=cbound[i],weight = 0.0,sum = DBMIN;j<cbound[i+1];j++){
  442.         if(power[j].type != TONE){
  443.            if(power[j].x != DBMIN){
  444.               sum = add_db(power[j].x,sum);
  445.               weight += pow(10.0, power[j].x/10.0) * (ltg[power[j].map].bark-i);
  446.               power[j].x = DBMIN;
  447.            }
  448.         }   /* check to see if the spectral line is low dB, and if  */
  449.      }      /* so replace the center of the critical band, which is */
  450.             /* the center freq. of the noise component              */
  451.      if(sum <= DBMIN)  centre = (cbound[i+1]+cbound[i]) /2;
  452.      else {
  453.         index = weight/pow(10.0,sum/10.0);
  454.         centre = cbound[i] + (int) (index * (double) (cbound[i+1]-cbound[i]) );
  455.      }     /* locate next non-tonal component until finished; */
  456.            /* add to list of non-tonal components             */
  457.      if(power[centre].type == TONE) centre++;
  458.      if(last == LAST) *noise = centre;
  459.      else {
  460.         power[centre].next = LAST;
  461.         power[last].next = centre;
  462.      }
  463.      power[centre].x = sum;
  464.      power[centre].type = NOISE;        
  465.      last = centre;
  466.  }        
  467. }
  468. /****************************************************************/
  469. /*
  470. /*        This function reduces the number of noise and tonal
  471. /* component for further threshold analysis.
  472. /*
  473. /****************************************************************/
  474. void subsampling (mask *power, g_thres *ltg, int *tone, int *noise)
  475. {
  476.     int i, old;
  477.    
  478.     i = *tone;
  479.     old = STOP;
  480.     /* calculate tonal components for */
  481.     while (i != LAST)
  482.     {
  483. /* reduction of spectral lines    */
  484. if (power[i].x < ltg[power[i].map].hear)
  485. {
  486.     power[i].type = FALSE;
  487.     power[i].x = DBMIN;
  488.     if (old == STOP)
  489. *tone = power[i].next;
  490.     else
  491. power[old].next = power[i].next;
  492. }
  493. else
  494.     old = i;
  495. i = power[i].next;
  496.     }
  497.     i = *noise;
  498.     old = STOP;
  499.     /* calculate non-tonal components for */
  500.     while (i != LAST)
  501.     {
  502. /* reduction of spectral lines        */
  503.         if (power[i].x < ltg[power[i].map].hear)
  504. {
  505.     power[i].type = FALSE;
  506.     power[i].x = DBMIN;
  507.     if (old == STOP)
  508. *noise = power[i].next;
  509.     else
  510. power[old].next = power[i].next;
  511. }
  512. else
  513.     old = i;
  514. i = power[i].next;
  515.     }
  516.     i = *tone;
  517.     old = STOP;
  518.     while (i != LAST)
  519.     {
  520. /* if more than one */
  521. if (power[i].next == LAST)
  522.     break;             /* tonal component  */
  523. if (ltg[power[power[i].next].map].bark -     /* is less than .5  */
  524.     ltg[power[i].map].bark < TONAL_WIDTH)
  525. {
  526.     /* bark, take the   */
  527.     if (power[power[i].next].x > power[i].x)
  528.     {
  529. /* maximum          */
  530. if (old == STOP)
  531.     *tone = power[i].next;
  532. else
  533.     power[old].next = power[i].next;
  534. power[i].type = FALSE;
  535. power[i].x = DBMIN;
  536.     }
  537.     else
  538.     {
  539. power[power[i].next].type = FALSE;
  540. power[power[i].next].x = DBMIN;
  541. power[i].next = power[power[i].next].next;
  542.     }
  543. }
  544. else
  545.     old = i;
  546. i = power[i].next;
  547.     }
  548. }
  549. /* ----------------------------------------------------------------------------
  550. The masking function parameters are here set according to the parameters in
  551. the IRT real time implementation. The constant definitions are for convenience.
  552. 1993-07-23 shn
  553. ---------------------------------------------------------------------------- */
  554. #define AV_TONAL_K    -9.0 /* Masking index, tonal, constant part  [dB] */
  555. #define AV_NOISE_K    -5.0 /* Masking index, noisy, constant part  [dB] */
  556. #define AV_TONAL_DZ   -0.3 /* Masking index, tonal, CBR dependence [dB/Bark] */
  557. #define AV_NOISE_DZ   -0.3 /* Masking index, noisy, CBR dependence [dB/Bark] */
  558. #define LOW_LIM_1     -1.0 /* 1st lower slope from 0         to LOW_LIM_1 [Bark] */
  559. #define LOW_LIM_2     -3.0 /* 2nd lower slope from LOW_LIM_1 to LOW_LIM_2 [Bark] */
  560. #define LOW_DZ_K_1     6.0 /* 1st lower slope, constant part [dB/Bark] */
  561. #define LOW_DZ_SPL_1   0.4 /* 1st lower slope, SPL dependence [dB/(Bark*dB)] */
  562. #define LOW_DZ_MIN_1  17.0 /* 1st lower slope, minimum value [dB/Bark] */
  563. #define LOW_DZ_2      17.0 /* 2nd lower slope [dB/Bark] */
  564. #define UP_LIM_1       1.0 /* 1st upper slope from 0        to UP_LIM_1 [Bark] */
  565. #define UP_LIM_2       8.0 /* 2nd upper slope from UP_LIM_1 to UP_LIM_2 [Bark] */
  566. #define UP_DZ_1      -18.0 /* 1st upper slope, constant part [dB/Bark] */
  567. #define UP_SPL_1       0.0 /* 1st upper slope, SPL dependence [dB/(Bark*dB)] */
  568. #define UP_DZ_2      -17.0 /* 2nd upper slope, constant part [dB/Bark] */
  569. #define UP_SPL_2      -0.1 /* 2nd upper slope, SPL dependence [dB/(Bark*dB)] */
  570. #define H_THR_OFFSET -12.0 /* Hearing threshold offset [dB] */
  571. #define H_THR_OS_BR    0 /*96*/   /* Minimum datarate for offset, [kbit/s per channel] */
  572. #define MASK_ADD       2.0 /* Addition of maskers                 [dB] */
  573. #define QUIET_ADD      3.0 /* Addition of masker and threshold in quiet [dB] */
  574. /****************************************************************
  575. *
  576. *        This function calculates the individual threshold and
  577. * sum with the quiet threshold to find the global threshold.
  578. *
  579. ****************************************************************/
  580. void threshold(int sub_size, mask *power, g_thres *ltg, int *tone, int *noise, int bit_rate)
  581. {
  582.   int k, t;
  583.   double z, dz, spl, vf, tmps;
  584.   for (k=1; k<sub_size; k++) /* Target frequencies */
  585.   {
  586.     ltg[k].x = DBMIN;
  587.     t = *tone;          /* calculate individual masking threshold  */
  588.     while(t != LAST)    /* for tonal components, t,  to find LTG   */
  589.     {
  590.       z   = ltg[power[t].map].bark; /* critical band rate of masker */
  591.       dz  = ltg[k].bark - z ;       /* distance of bark value*/
  592.       spl = power[t].x;             /* sound pressure level of masker */
  593.       if (dz >= LOW_LIM_2 && dz <  UP_LIM_2)
  594.       {
  595.         tmps = spl + AV_TONAL_K + AV_TONAL_DZ * z;
  596.         /* masking function for lower & upper slopes */
  597.         if (LOW_LIM_2<=dz && dz<LOW_LIM_1)
  598.           if (LOW_DZ_SPL_1 * spl + LOW_DZ_K_1 > LOW_DZ_MIN_1)
  599.             vf = LOW_DZ_2 * (dz - LOW_LIM_1) + 
  600.                 (LOW_DZ_SPL_1 * spl + LOW_DZ_K_1) * LOW_LIM_1;
  601.           else
  602.             vf = LOW_DZ_2 * (dz - LOW_LIM_1) + LOW_DZ_MIN_1 * LOW_LIM_1;
  603.         else if (LOW_LIM_1<=dz && dz<0)
  604.           if (LOW_DZ_SPL_1 * spl + LOW_DZ_K_1 > LOW_DZ_MIN_1)
  605.             vf = (LOW_DZ_SPL_1 * spl + LOW_DZ_K_1) * dz;
  606.           else
  607.             vf = LOW_DZ_MIN_1 * dz;
  608.         else if (0<=dz && dz<UP_LIM_1)
  609.           vf = (UP_DZ_1 * dz);
  610.         else if (UP_LIM_1<=dz && dz<UP_LIM_2)
  611.           vf = (dz - UP_LIM_1) * (UP_DZ_2 - UP_SPL_2 * spl) +
  612.                UP_DZ_1 * UP_LIM_1;
  613.         tmps += vf;        
  614.         ltg[k].x = non_lin_add(ltg[k].x, tmps, MASK_ADD);
  615.       }
  616.       t = power[t].next;
  617.     } /* while */
  618.     t = *noise;        /* calculate individual masking threshold   */
  619.     while(t != LAST)   /* for non-tonal components, t, to find LTG */
  620.     {
  621.       z   = ltg[power[t].map].bark; /* critical band rate of masker */
  622.       dz  = ltg[k].bark - z ;       /* distance of bark value*/
  623.       spl = power[t].x;             /* sound pressure level of masker */
  624.       if (dz >= LOW_LIM_2 && dz <  UP_LIM_2)
  625.       {
  626.         tmps = spl + AV_NOISE_K + AV_NOISE_DZ * z;
  627.         /* masking function for lower & upper slopes */
  628.         if (LOW_LIM_2<=dz && dz<LOW_LIM_1)
  629.           if (LOW_DZ_SPL_1 * spl + LOW_DZ_K_1 > LOW_DZ_MIN_1)
  630.             vf = LOW_DZ_2 * (dz - LOW_LIM_1) + 
  631.                 (LOW_DZ_SPL_1 * spl + LOW_DZ_K_1) * LOW_LIM_1;
  632.           else
  633.             vf = LOW_DZ_2 * (dz - LOW_LIM_1) + LOW_DZ_MIN_1 * LOW_LIM_1;
  634.         else if (LOW_LIM_1<=dz && dz<0)
  635.           if (LOW_DZ_SPL_1 * spl + LOW_DZ_K_1 > LOW_DZ_MIN_1)
  636.             vf = (LOW_DZ_SPL_1 * spl + LOW_DZ_K_1) * dz;
  637.           else
  638.             vf = LOW_DZ_MIN_1 * dz;
  639.         else if (0<=dz && dz<UP_LIM_1)
  640.           vf = (UP_DZ_1 * dz);
  641.         else if (UP_LIM_1<=dz && dz<UP_LIM_2)
  642.           vf = (dz - UP_LIM_1) * (UP_DZ_2 - UP_SPL_2 * spl) +
  643.                UP_DZ_1 * UP_LIM_1;
  644.        tmps += vf;        
  645.        ltg[k].x = non_lin_add(ltg[k].x, tmps, MASK_ADD);
  646.      }
  647.       t = power[t].next;
  648.     }
  649.     if (bit_rate < H_THR_OS_BR)
  650.       ltg[k].x = non_lin_add(ltg[k].hear, ltg[k].x, QUIET_ADD);
  651.     else
  652.       ltg[k].x = non_lin_add(ltg[k].hear + H_THR_OFFSET, ltg[k].x, QUIET_ADD);
  653.  
  654.   } /* for */
  655.   fflush(stderr);
  656. }
  657. /* --------------------------------------------------------------
  658. non_lin_add
  659. A flexible addition function for levels.
  660. Input: a,b: the levels to be added.
  661.  c: the number of dB increase when a and b are equal.
  662. Common values for c are 3.01 (power addition)
  663.     and 6.02 (voltage addition).
  664. 10.0/(10*log10(2)) = 3.3219
  665. Function added 1993-04-14 Soren H. Nielsen
  666. -------------------------------------------------------------- */
  667. double non_lin_add(double a, double b, double c)
  668. {
  669.   c *= 3.3219;
  670.   a = pow(10.0, a/c); b = pow(10.0, b/c);
  671.   return(c*log10(a+b));
  672. }
  673. /****************************************************************/
  674. /*
  675. /*        This function finds the minimum masking threshold and
  676. /* return the value to the encoder.
  677. /*
  678. /****************************************************************/
  679. void II_minimum_mask(int sub_size, g_thres *ltg, double *ltmin, int sblimit)
  680. {
  681.  double min;
  682.  int i,j;
  683.  
  684.  j=1;
  685.  for(i=0;i<sblimit;i++)
  686.     if(j>=sub_size-1)                   /* check subband limit, and       */
  687.        ltmin[i] = ltg[sub_size-1].hear; /* calculate the minimum masking  */
  688.     else {                              /* level of LTMIN for each subband*/
  689.        min = ltg[j].x;
  690.        while(ltg[j].line>>4 == i && j < sub_size){
  691.        if(min>ltg[j].x)  min = ltg[j].x;
  692.        j++;
  693.     }
  694.     ltmin[i] = min;
  695.  }
  696. }
  697. /*****************************************************************/
  698. /*
  699. /*        This procedure is called in musicin to pick out the
  700. /* smaller of the scalefactor or threshold.
  701. /*
  702. /*****************************************************************/
  703. void II_smr (double *ltmin, double *smr, double *spike, double *scale, int sblimit, int l, int m)
  704. {
  705.     int i,j;
  706.     double max;
  707.    
  708.     for (i = l; i < m; i++)
  709.     {
  710. /* determine the signal   */
  711. max = 20 * log10 (scale[i] * 32768) - 10;   /* level for each subband */
  712. if (spike[i] > max)
  713.     max = spike[i];     /* for the maximum scale  */
  714. max -= ltmin[i];     /* factors                */
  715. smr[i] = max;
  716.     }
  717. }
  718.         
  719. /****************************************************************/
  720. /*
  721. /*        This procedure calls all the necessary functions to
  722. /* complete the psychoacoustic analysis.
  723. /*
  724. /****************************************************************/
  725. void II_Psycho_One (double (*buffer)[1152],
  726.     double (*scale)[32],
  727.     double (*ltmin)[32],
  728.     frame_params *fr_ps,
  729.     double (*smr)[32],
  730.     double (*spiki)[32],
  731.     int aiff)
  732. {
  733.     layer *info = fr_ps->header;
  734.     int   stereo = fr_ps->stereo;
  735.     int   stereomc = fr_ps->stereomc;
  736.     int   stereoaug = fr_ps->stereoaug;
  737.     int   sblimit = fr_ps->sblimit;
  738.     int k,i, tone=0, noise=0;
  739.     static char init = 0;
  740.     static int  off[12] = {256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256, 256}; /* max 7 MC channels + 5 compatible channels */
  741.     double *sample;
  742.     DSBL *spike;
  743.     static D1408 *fft_buf;
  744.     static mask_ptr power;
  745.     static g_ptr ltg;
  746.     int j, l, z, q;
  747.     static int crit_band;
  748.     static int *cbound;
  749.     static int sub_size;
  750.    
  751.     sample = (double *) mem_alloc (sizeof (DFFT), "sample");
  752.     spike = (DSBL *) mem_alloc (sizeof (D12SBL), "spike");
  753.    
  754.     if (!init)
  755.     {
  756. /* bands, bark values, and mapping */
  757. /* changed 5 to 7 for matricing 8/10/93,SR */
  758. /* changed 7 to 12 for aug matricing 8/11/96,FdB */
  759. fft_buf = (D1408 *) mem_alloc ((long) sizeof (D1408) * 12, "fft_buf");
  760.      power = (mask_ptr) mem_alloc (sizeof (mask) * HAN_SIZE, "power");
  761. /* call functions for critical boundaries, freq. */
  762. crit_band = read_crit_band (info->lay, info->sampling_frequency);
  763. cbound = (int *) mem_alloc (sizeof (int) * crit_band, "cbound");
  764. read_cbound (info->lay, info->sampling_frequency, crit_band, cbound);
  765. read_freq_band (&sub_size, &ltg, info->lay, info->sampling_frequency);
  766. make_map (sub_size, power, ltg);
  767. for (i = 0; i < 1408; i++)
  768.     fft_buf[0][i] = fft_buf[1][i] = fft_buf[2][i] =
  769.     fft_buf[3][i] = fft_buf[4][i] = fft_buf[5][i] =
  770.     fft_buf[6][i] = fft_buf[7][i] = fft_buf[8][i] =
  771.     fft_buf[9][i] = fft_buf[10][i] = fft_buf[11][i] = 0;
  772. init = 1;
  773.     }
  774.  
  775.     if (aiff != 1)
  776.     {
  777. j = 0;
  778. l = 2;
  779.     }
  780.     else
  781.     {    
  782. j = 0;
  783. if (stereoaug == 2) l = 12; /*fr_ps->stereo + fr_ps->stereomc + fr_ps->stereoaug + 5 compatible */
  784. else                l =  7; /*fr_ps->stereo + fr_ps->stereomc + 2 compatible */
  785.     } 
  786.     for (k = j; k < l; k++)
  787.     {
  788.         for (i = 0; i < 1152; i++)
  789.     fft_buf[k][(i + off[k]) % 1408] = (double) buffer[k][i] / SCALE;
  790. for (i = 0; i < FFT_SIZE; i++)
  791.     sample[i] = fft_buf[k][(i + 1216 + off[k]) % 1408];
  792.    
  793. off[k] += 1152;
  794. off[k] %= 1408;
  795. /* call functions for windowing PCM samples,*/
  796. II_hann_win (sample); /* location of spectral components in each  */
  797. for (i = 0; i < HAN_SIZE; i++)
  798.     power[i].x = DBMIN; /* subband with labeling */
  799. II_f_f_t (sample, power); /* locate remaining non- */
  800.        
  801. if (fr_ps->header->center == 3 && k == 2)
  802. {
  803.     /* set center to 0, 9/2/93,SR*/
  804.     /* add to Left and Right ? WtK */
  805.     for (z = 184; z < HAN_SIZE; z++)
  806. power[z].x = -103.670;    /* DBMIN + 96.330; */
  807. }
  808. II_pick_max (power, spike[k]); /* tonal sinusoidals,   */
  809. #ifdef PRINTOUT
  810. if (verbosity >= 3)
  811. {
  812.     printf ("nChannel %d", k);
  813.     printf ("nSignal value per subband, from the FFT:n");
  814.     for (i = 0; i < sblimit; i++)
  815. printf ("%5.1f dB  ", spike[k][i]);
  816.     printf ("nMax. signal peak per subband, SCF SPL:n");
  817.     for (i = 0; i < sblimit; i++)   /* from [II_smr] determine the SCF SPL */
  818. printf ("%5.1f dB  ", 20 * log10(scale[k][i] * 32768)); 
  819.     fflush (stdout);
  820. }
  821. #endif
  822. II_tonal_label (power, &tone);                /* reduce noise & tonal components , find */
  823. noise_label (crit_band, cbound, power, &noise, ltg); 
  824. #ifdef PRINTOUT
  825. if (verbosity >= 3)
  826. {
  827.     printf ("nMaskers before sorting, FFT based levels:n");
  828.     for (i = 0; i < 511; i++)
  829.     {
  830. if ((power[i].type == NOISE) && (power[i].x > -200))
  831.     printf ("N:%3u %5.1f dB  ", i, power[i].x);
  832. if ((power[i].type == TONE) && (power[i].x > -200))
  833.     printf ("T:%3u %5.1f dB  ", i, power[i].x);
  834.     }
  835.     printf ("tone = %d noise = %d n", tone, noise);
  836.     fflush (stdout);
  837. }
  838. #endif
  839. subsampling (power, ltg, &tone, &noise);      /* global & minimal     */
  840.     
  841. #ifdef PRINTOUT
  842. if (verbosity >= 3)
  843. {
  844.     printf ("nMaskers after sorting:n");
  845.     for (i = 0; i < 511; i++)
  846.     {
  847. if ((power[i].type == NOISE) && (power[i].x > -200))
  848.     printf ("N:%3u %5.1f dB  ", i, power[i].x);
  849. if ((power[i].type == TONE) && (power[i].x > -200))
  850.     printf ("T:%3u %5.1f dB  ", i, power[i].x);
  851.     }
  852.     fflush (stdout);
  853. }
  854. #endif
  855. threshold (sub_size, power, ltg, &tone, &noise,
  856.    bitrate[info->lay-1][info->bitrate_index] / (stereo+stereomc+stereoaug)); /*to-mask ratio*//* 21/03/1995 JMZ BUG ???!!!???*/
  857. II_minimum_mask (sub_size, ltg, &ltmin[k][0], sblimit);
  858.     
  859. #ifdef PRINTOUT
  860. if (verbosity >= 3)
  861. {
  862.     printf ("nMinimum masking threshold:n");
  863.     for (i = 0; i < sblimit; i++)
  864. printf ("%5.1f dB  ", ltmin[k][i]);
  865.     fflush (stdout);
  866. }
  867. #endif
  868. for (i = 0; i < SBLIMIT; i++)
  869.     spiki[k][i] = spike[k][i];
  870.      
  871. i = 0;
  872. q = sblimit;
  873. II_smr (ltmin[k], smr[k], spike[k], scale[k], sblimit, i, q);
  874.     }
  875.     
  876.     mem_free ((void **) &sample);
  877.     mem_free ((void **) &spike); 
  878. } /*II_Psycho_One*/
  879. void II_Psycho_One_ml (
  880. double (*buffer)[1152],
  881. double (*scale)[32],
  882. double (*ltmin)[32],
  883. frame_params *fr_ps,
  884. double (*smr)[32],
  885. double (*spiki)[32]
  886. )
  887. {
  888.     layer *info = fr_ps->header;
  889.     int n_ml_ch   = info->multiling_ch;
  890.     int sblimit_ml = fr_ps->sblimit_ml;
  891.     int k,i, tone=0, noise=0;
  892.     static char init = 0;
  893.     static int off[7] = {256, 256, 256, 256, 256, 256, 256};   /* max 7 ML channels */
  894.     double *sample;
  895.     DSBL *spike;
  896.     static D1408 *fft_buf;
  897.     static mask_ptr power;
  898.     static g_ptr ltg_ml;
  899.     static int crit_band_ml;
  900.     static int *cbound_ml;
  901.     static int sub_size_ml;
  902.     int j, l, z, q;
  903.     sample = (double *) mem_alloc (sizeof (DFFT), "sample");
  904.     spike = (DSBL *) mem_alloc (sizeof (D7SBL), "spike");
  905.    
  906.     if (!init)
  907.     {
  908. /* bands, bark values, and mapping */
  909. fft_buf = (D1408 *) mem_alloc ((long) sizeof (D1408) * 7, "fft_buf");
  910. power = (mask_ptr) mem_alloc (sizeof (mask) * HAN_SIZE, "power");
  911. /* call functions for critical boundaries, freq. */
  912. if (info->multiling_fs == 0)
  913. {
  914.     crit_band_ml = read_crit_band (info->lay, info->sampling_frequency);
  915.     cbound_ml = (int *) mem_alloc (sizeof (int) * crit_band_ml, "cbound_ml");
  916.     read_cbound (info->lay, info->sampling_frequency, crit_band_ml, cbound_ml);
  917.     read_freq_band (&sub_size_ml, &ltg_ml, info->lay, info->sampling_frequency);
  918.     /* values are equal to those for the mc audio data */
  919. }
  920. else
  921. {
  922.     crit_band_ml = read_crit_band (info->lay, info->sampling_frequency + 4);
  923.     cbound_ml = (int *) mem_alloc (sizeof (int) * crit_band_ml, "cbound_ml");
  924.     read_cbound (info->lay, info->sampling_frequency + 4, crit_band_ml, cbound_ml);
  925.     read_freq_band (&sub_size_ml, &ltg_ml, info->lay, info->sampling_frequency + 4);
  926. }
  927. make_map (sub_size_ml, power, ltg_ml);
  928. for (i = 0; i < 1408; i++)
  929.     fft_buf[0][i] = fft_buf[1][i] = fft_buf[2][i] =     
  930.     fft_buf[3][i] = fft_buf[4][i] = fft_buf[5][i] = fft_buf[6][i] = 0;
  931. init = 1;
  932.     }
  933.  
  934.     if (n_ml_ch > 0) 
  935.     {
  936. for (k = 0; k < n_ml_ch; k++)
  937.     for (i = 0; i < 1152; i++)
  938. fft_buf[k][(i+off[k]) % 1408]= (double) buffer[7+k][i] / SCALE;
  939.     for (i = 0; i < FFT_SIZE; i++)
  940. sample[i] = fft_buf[k][(i+1216+off[k]) % 1408];
  941.     
  942.     off[k] += 1152;
  943.     off[k] %= 1408;
  944.     /* call functions for windowing PCM samples,*/
  945.     II_hann_win (sample); /* location of spectral components in each  */
  946.     for (i = 0; i < HAN_SIZE; i++)
  947. power[i].x = DBMIN; /* subband with labeling */
  948.     II_f_f_t (sample, power); /* locate remaining non- */
  949.     
  950.     II_pick_max (power, spike[k]);
  951. /* tonal sinusoidals,   */
  952.     II_tonal_label (power, &tone); /* reduce noise & tonal components , find */
  953.     noise_label (crit_band_ml, cbound_ml, power, &noise, ltg_ml); 
  954.     subsampling (power, ltg_ml, &tone, &noise); /* global & minimal     */
  955.     
  956.     threshold (sub_size_ml, power, ltg_ml, &tone, &noise,
  957.        bitrate[info->lay-1][info->bitrate_index] / 2); /* to-mask ratio */
  958. /* threshold, and sgnl- */
  959.     /* fprintf(stderr,  "sblimit_ml : %dn",  sblimit_ml); fflush(stderr); */
  960.     II_minimum_mask (sub_size_ml, ltg_ml, &ltmin[7+k][0], sblimit_ml);
  961.     
  962.     for (i = 0; i < SBLIMIT; i++)
  963. spiki[7+k][i] = spike[k][i];
  964.  
  965.     i = 0;
  966.     q = sblimit_ml;
  967.     II_smr (ltmin[7+k], smr[7+k], spike[k], scale[7+k], sblimit_ml, i, q);
  968. } /* k-loop*/
  969.     } /*n_ml_ch>0*/
  970.     mem_free ((void **) &sample);
  971.     mem_free ((void **) &spike); 
  972. } /* II_psycho_One_ml */
  973. /**********************************************************************/
  974. /*
  975. /*        This module implements the psychoacoustic model I for the
  976. /* MPEG encoder layer I. It uses simplified tonal and noise masking
  977. /* threshold analysis to generate SMR for the encoder bit allocation
  978. /* routine.
  979. /*
  980. /**********************************************************************/
  981. /****************************************************************/
  982. /*
  983. /*        Fast Fourier transform of the input samples.
  984. /*
  985. /****************************************************************/
  986. void I_f_f_t (double *sample, mask *power)  /* this function calculates */
  987.     /* an FFT analysis for the  */
  988.     /* freq. domain             */
  989. {
  990.  int i,j,k,ll,l=0;
  991.  int ip, le, le1;
  992.  double t_r, t_i, u_r, u_i;
  993.  static int M, MM1, init = 0, N, NV2, NM1;
  994.  double *x_r, *x_i, *energy;
  995.  static int *rev;
  996.  static double *w_r, *w_i;
  997.  x_r = (double *) mem_alloc(sizeof(DFFT2), "x_r");
  998.  x_i = (double *) mem_alloc(sizeof(DFFT2), "x_i");
  999.  energy = (double *) mem_alloc(sizeof(DFFT2), "energy");
  1000.  for(i=0;i<FFT_SIZE/2;i++) x_r[i] = x_i[i] = energy[i] = 0;
  1001.  if(!init){
  1002.     rev = (int *) mem_alloc(sizeof(IFFT2), "rev");
  1003.     w_r = (double *) mem_alloc(sizeof(D9), "w_r");
  1004.     w_i = (double *) mem_alloc(sizeof(D9), "w_i");
  1005.     M = 9;
  1006.     MM1 = 8;
  1007.     N = FFT_SIZE/2;
  1008.     NV2 = FFT_SIZE/2 >> 1;
  1009.     NM1 = FFT_SIZE/2 - 1;
  1010.     for(ll=0;ll<M;ll++){
  1011.        le = 1 << (M-ll);
  1012.        le1 = le >> 1;
  1013.        w_r[ll] = cos(PI/le1);
  1014.        w_i[ll] = -sin(PI/le1);
  1015.     }
  1016.     for(i=0;i<FFT_SIZE/2;rev[i] = l,i++) for(j=0,l=0;j<9;j++){
  1017.        k=(i>>j) & 1;
  1018.        l |= (k<<8-j);                
  1019.     }
  1020.     init = 1;
  1021.  }
  1022.  memcpy( (char *) x_r, (char *) sample, sizeof(double) * FFT_SIZE/2);
  1023.  for(ll=0;ll<MM1;ll++){
  1024.     le = 1 << (M-ll);
  1025.     le1 = le >> 1;
  1026.     u_r = 1;
  1027.     u_i = 0;
  1028.     for(j=0;j<le1;j++){
  1029.        for(i=j;i<N;i+=le){
  1030.           ip = i + le1;
  1031.           t_r = x_r[i] + x_r[ip];
  1032.           t_i = x_i[i] + x_i[ip];
  1033.           x_r[ip] = x_r[i] - x_r[ip];
  1034.           x_i[ip] = x_i[i] - x_i[ip];
  1035.           x_r[i] = t_r;
  1036.           x_i[i] = t_i;
  1037.           t_r = x_r[ip];
  1038.           x_r[ip] = x_r[ip] * u_r - x_i[ip] * u_i;
  1039.           x_i[ip] = x_i[ip] * u_r + t_r * u_i;
  1040.        }
  1041.        t_r = u_r;
  1042.        u_r = u_r * w_r[ll] - u_i * w_i[ll];
  1043.        u_i = u_i * w_r[ll] + t_r * w_i[ll];
  1044.     }
  1045.  }
  1046.  for(i=0;i<N;i+=2){
  1047.     ip = i + 1;
  1048.     t_r = x_r[i] + x_r[ip];
  1049.     t_i = x_i[i] + x_i[ip];
  1050.     x_r[ip] = x_r[i] - x_r[ip];
  1051.     x_i[ip] = x_i[i] - x_i[ip];
  1052.     x_r[i] = t_r;
  1053.     x_i[i] = t_i;
  1054.     energy[i] = x_r[i] * x_r[i] + x_i[i] * x_i[i];
  1055.  }
  1056.  for(i=0;i<FFT_SIZE/2;i++) if(i<rev[i]){
  1057.     t_r = energy[i];
  1058.     energy[i] = energy[rev[i]];
  1059.     energy[rev[i]] = t_r;
  1060.  }
  1061.  for(i=0;i<HAN_SIZE/2;i++){                     /* calculate power  */
  1062.     if(energy[i] < 1E-20) energy[i] = 1E-20;    /* density spectrum */
  1063.        /* power calculation corrected with a factor 4, both positive
  1064.   and negative frequencies exist, 1992-11-06 shn */
  1065.        power[i].x = 10 * log10(energy[i]*4) + POWERNORM;
  1066.        power[i].next = STOP;
  1067.        power[i].type = FALSE;
  1068.  }
  1069.     mem_free ((void **) &x_r);
  1070.     mem_free ((void **) &x_i);
  1071.     mem_free ((void **) &energy);
  1072. }
  1073. /****************************************************************/
  1074. /*
  1075. /*         Window the incoming audio signal.
  1076. /*
  1077. /****************************************************************/
  1078. void I_hann_win (double *sample)    /* this function calculates a  */
  1079.     /* Hann window for PCM (input) */
  1080. {     /* samples for a 512-pt. FFT   */
  1081.  register int i;
  1082.  register double sqrt_8_over_3;
  1083.  static int init = 0;
  1084.  static double *window;
  1085.  if(!init){  /* calculate window function for the Fourier transform */
  1086.     window = (double *) mem_alloc (sizeof (DFFT2), "window");
  1087.     sqrt_8_over_3 = pow(8.0/3.0, 0.5);
  1088.     for(i=0;i<FFT_SIZE/2;i++){
  1089.       /* Hann window formula */
  1090.       window[i]=sqrt_8_over_3*0.5*(1-cos(2.0*PI*i/(FFT_SIZE/2-1)))/(FFT_SIZE/2);
  1091.     }
  1092.     init = 1;
  1093.  }
  1094.  for(i=0;i<FFT_SIZE/2;i++) sample[i] *= window[i];
  1095. }
  1096. /*******************************************************************/
  1097. /*
  1098. /*        This function finds the maximum spectral component in each
  1099. /* subband and return them to the encoder for time-domain threshold
  1100. /* determination.
  1101. /*
  1102. /*******************************************************************/
  1103. void I_pick_max (mask *power, double *spike)
  1104. {
  1105.  double max;
  1106.  int i,j;
  1107.  /* calculate the spectral component in each subband */
  1108.  for(i=0;i<HAN_SIZE/2;spike[i>>3] = max, i+=8)
  1109.     for(j=0, max = DBMIN;j<8;j++) max = (max>power[i+j].x) ? max : power[i+j].x;
  1110. }
  1111. /****************************************************************/
  1112. /*
  1113. /*        This function labels the tonal component in the power
  1114. /* spectrum.
  1115. /*
  1116. /****************************************************************/
  1117. void I_tonal_label (mask *power, int *tone) /* this function extracts   */
  1118.     /* (tonal) sinusoidals from */
  1119.     /* the spectrum             */
  1120. {
  1121.  int i,j, last = LAST, first, run;
  1122.  double max;
  1123.  int last_but_one=LAST;
  1124.  *tone = LAST;
  1125.  for(i=2;i<HAN_SIZE/2-6;i++){
  1126.     if(power[i].x>power[i-1].x && power[i].x>=power[i+1].x){
  1127.        power[i].type = TONE;
  1128.        power[i].next = LAST;
  1129.        if(last != LAST) power[last].next = i;
  1130.        else first = *tone = i;
  1131.        last = i;
  1132.     }
  1133.  }
  1134.  last = LAST;
  1135.  first = *tone;
  1136.  *tone = LAST;
  1137.  while(first != LAST){                /* conditions for the tonal     */
  1138.     if(first<2 || first>249) run = 0; /* otherwise k+/-j will be out of bounds*/
  1139.     else if(first<62) run = 2;        /* components in layer II, which */
  1140.     else if(first<126) run = 3;       /* are the boundaries for calc.   */
  1141.     else run = 6;                     /* the tonal components          */
  1142.     max = power[first].x - 7;
  1143.     for(j=2;j<=run;j++)  /* after calc. of tonal components, set to loc.*/
  1144.        if(max < power[first-j].x || max < power[first+j].x){   /* max   */
  1145.           power[first].type = FALSE;
  1146.           break;
  1147.        }
  1148.     if(power[first].type == TONE){    /* extract tonal components */
  1149.        int help=first;
  1150.        if(*tone == LAST) *tone = first;
  1151.        while((power[help].next!=LAST)&&(power[help].next-first)<=run)
  1152.           help=power[help].next;
  1153.        help=power[help].next;
  1154.        power[first].next=help;
  1155.        if((first-last)<=run){
  1156.           if(last_but_one != LAST) power[last_but_one].next=first;
  1157.        }
  1158.        if(first>1 && first<255){     /* calculate the sum of the */
  1159.           double tmp;                /* powers of the components */
  1160.           tmp = add_db(power[first-1].x, power[first+1].x);
  1161.           power[first].x = add_db(power[first].x, tmp);
  1162.        }
  1163.        for(j=1;j<=run;j++){
  1164.           power[first-j].x = power[first+j].x = DBMIN;
  1165.           power[first-j].next = power[first+j].next = STOP; /*dpwe: 2nd was .x*/
  1166.           power[first-j].type = power[first+j].type = FALSE;
  1167.        }
  1168.        last_but_one=last;
  1169.        last = first;
  1170.        first = power[first].next;
  1171.     }
  1172.     else {
  1173.        int ll;
  1174.        if(last == LAST) ; /* *tone = power[first].next; dpwe */
  1175.        else power[last].next = power[first].next;
  1176.        ll = first;
  1177.        first = power[first].next;
  1178.        power[ll].next = STOP;
  1179.     }
  1180.  }
  1181. }                        
  1182.                                 
  1183. /****************************************************************/
  1184. /*
  1185. /*        This function finds the minimum masking threshold and
  1186. /* return the value to the encoder.
  1187. /*
  1188. /****************************************************************/
  1189. void I_minimum_mask(int sub_size, g_thres *ltg, double *ltmin)
  1190. {
  1191.  double min;
  1192.  int i,j;
  1193.  j=1;
  1194.  for(i=0;i<SBLIMIT;i++)
  1195.     if(j>=sub_size-1)                   /* check subband limit, and       */
  1196.        ltmin[i] = ltg[sub_size-1].hear; /* calculate the minimum masking  */
  1197.     else {                              /* level of LTMIN for each subband*/
  1198.        min = ltg[j].x;
  1199.        while(ltg[j].line>>3 == i && j < sub_size){
  1200.           if (min>ltg[j].x)  min = ltg[j].x;
  1201.           j++;
  1202.        }
  1203.        ltmin[i] = min;
  1204.     }
  1205. }
  1206. /*****************************************************************/
  1207. /*
  1208. /*        This procedure is called in musicin to pick out the
  1209. /* smaller of the scalefactor or threshold.
  1210. /*
  1211. /*****************************************************************/
  1212. void I_smr (double *ltmin, double *spike, double *scale)
  1213. {
  1214.  int i,j;
  1215.  double max;
  1216.                 
  1217.  for(i=0;i<SBLIMIT;i++){                      /* determine the signal   */
  1218.     max = 20 * log10(scale[i] * 32768) - 10;  /* level for each subband */
  1219.     if(spike[i]>max) max = spike[i];          /* for the scalefactor    */
  1220.     max -= ltmin[i];
  1221.     ltmin[i] = max;
  1222.  }
  1223. }
  1224.         
  1225. /****************************************************************/
  1226. /*
  1227. /*        This procedure calls all the necessary functions to
  1228. /* complete the psychoacoustic analysis.
  1229. /*
  1230. /****************************************************************/
  1231. void
  1232. I_Psycho_One(
  1233. double (*buffer)[1152],
  1234. double (*scale)[32],
  1235. double (*ltmin)[32],
  1236. frame_params *fr_ps
  1237. ) {
  1238.  int stereo = fr_ps->stereo;
  1239.  the_layer info = fr_ps->header;
  1240.  int k,i, tone=0, noise=0;
  1241.  static char init = 0;
  1242.  static int off[2] = {256,256};
  1243.  double *sample;
  1244.  DSBL *spike;
  1245.  static D640 *fft_buf;
  1246.  static mask_ptr power;
  1247.  static g_ptr ltg;
  1248.  static int crit_band;
  1249.  static int *cbound;
  1250.  static int sub_size;
  1251.  sample = (double *) mem_alloc(sizeof(DFFT2), "sample");
  1252.  spike = (DSBL *) mem_alloc(sizeof(D2SBL), "spike");
  1253.             /* call functions for critical boundaries, freq. */
  1254.  if(!init){ /* bands, bark values, and mapping              */
  1255.     fft_buf = (D640 *) mem_alloc(sizeof(D640) * 2, "fft_buf");
  1256.     power = (mask_ptr) mem_alloc(sizeof(mask) * HAN_SIZE/2, "power");
  1257.     crit_band = read_crit_band(info->lay,info->sampling_frequency);
  1258.     cbound = (int *) mem_alloc(sizeof(int) * crit_band, "cbound");
  1259.     read_cbound(info->lay,info->sampling_frequency,crit_band,cbound);
  1260.     read_freq_band(&sub_size,&ltg,info->lay,info->sampling_frequency);
  1261.     make_map(sub_size,power,ltg);
  1262.     for(i=0;i<640;i++) fft_buf[0][i] = fft_buf[1][i] = 0;
  1263.     init = 1;
  1264.  }
  1265.  for(k=0;k<stereo;k++){    /* check PCM input for a block of */
  1266.     for(i=0;i<384;i++)     /* 384 samples for a 512-pt. FFT  */
  1267.        fft_buf[k][(i+off[k])%640]= (double) buffer[k][i]/SCALE;
  1268.     for(i=0;i<FFT_SIZE/2;i++)
  1269.        sample[i] = fft_buf[k][(i+448+off[k])%640];
  1270.     off[k] += 384;
  1271.     off[k] %= 640;
  1272.                         /* call functions for windowing PCM samples,   */
  1273.     I_hann_win(sample); /* location of spectral components in each     */
  1274.     for(i=0;i<HAN_SIZE/2;i++) power[i].x = DBMIN;   /* subband with    */
  1275.     I_f_f_t(sample, power);              /* labeling, locate remaining */
  1276.     I_pick_max(power, &spike[k][0]);     /* non-tonal sinusoidals,     */
  1277.     I_tonal_label(power, &tone);         /* reduce noise & tonal com., */
  1278.     noise_label(crit_band,cbound,power, &noise, ltg);     /* find global & minimal      */
  1279.     subsampling (power, ltg, &tone, &noise);  /* threshold, and sgnl-   */
  1280.     threshold(sub_size,power, ltg, &tone, &noise,     /* to-mask ratio          */
  1281.       bitrate[info->lay-1][info->bitrate_index]/stereo);
  1282.     I_minimum_mask(sub_size,ltg, &ltmin[k][0]);
  1283.     I_smr(&ltmin[k][0], &spike[k][0], &scale[k][0]);        
  1284.  }
  1285.     mem_free ((void **) &sample);
  1286.     mem_free ((void **) &spike);
  1287. }