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

📄 correlation.cpp

📁 分别在visual c++和ccs环境中实现求相关数
💻 CPP
字号:
#include"stdio.h"
#include"string.h"
typedef short Word16;
typedef int  Word32 ;
#define L_WINDOW 240
void main()
{
	Word16 x[240]={0x000A,
0x001C,
0x0010,
0x0001,
0xFFD9,
0x0001,
0x003A,
0x000A,
0xFFFC,
0xFFFD,
0xFFE2,
0xFFDC,
0xFFE4,
0xFFE7,
0xFFC6,
0xFFD8,
0x001F,
0x0034,
0x0037,
0x0027,
0xFFEE,
0xFFD2,
0xFFF7,
0x0042,
0x0033,
0xFFF4,
0xFFF0,
0xFFDF,
0x0013,
0x0057,
0x0056,
0x001C,
0xFFD9,
0x0054,
0x00AF,
0x00C0,
0xFFFC,
0x004B,
0x018C,
0xFD78,
0xF8A7,
0xFB39,
0x01DD,
0x05C9,
0x0440,
0xFF91,
0xFD6D,
0xFF7E,
0x030A,
0x049E,
0x0291,
0xFEBA,
0xFD0B,
0xFFA6,
0xFFF3,
0xFC4E,
0xFA23,
0xFBA0,
0xFFC7,
0x03C0,
0x04D6,
0x0287,
0xFFDC,
0xFEBE,
0x008F,
0x031E,
0x02FB,
0x000D,
0xFCF3,
0xFCD0,
0xFF27,
0x01D7,
0x0221,
0x003F,
0xFE06,
0xFD66,
0xFEDE,
0x0078,
0x0126,
0x004D,
0xFF71,
0xFFC3,
0x00E7,
0x01A1,
0x00B0,
0xFF8B,
0xFF54,
0x0048,
0x013D,
0x00F1,
0xFFD5,
0xFECF,
0xFECB,
0xFF2D,
0xFF4B,
0xFF30,
0xFF63,
0x0009,
0x00B2,
0x0113,
0x00C0,
0x002A,
0xFFCC,
0x0009,
0x0060,
0x0056,
0x004E,
0xFFD3,
0xFF81,
0xFFCF,
0x0022,
0x0071,
0xFFFF,
0xFF5A,
0xFF50,
0xFF51,
0xFFC9,
0x0098,
0x0123,
0x00AA,
0xFF91,
0xFF18,
0xFFC7,
0x00F4,
0x00E5,
0x0044,
0xFF75,
0xFF0C,
0xFFBC,
0x006C,
0x0101,
0x0071,
0xFF2B,
0xFEEF,
0xFFE1,
0x009B,
0x0024,
0xFFD6,
0xFFD0,
0xFFC9,
0xFF7A,
0xFF86,
0x0063,
0x009A,
0x004D,
0xFFCD,
0xFFD5,
0x0071,
0x00CC,
0x0013,
0xFEB5,
0xFF07,
0x003D,
0x00E2,
0x0030,
0xFF4D,
0xFF12,
0xFF1E,
0x00E4,
0x01E6,
0x0104,
0x000F,
0xFF1E,
0xFFDE,
0x01A7,
0x022F,
0x0232,
0x009A,
0x0054,
0x025E,
0x0036,
0xFBF0,
0xF966,
0xFA28,
0xFC9D,
0xFF02,
0xFF6E,
0xFDFE,
0x0125,
0x03E8,
0x05BD,
0x06AF,
0x035C,
0x00BE,
0xFF19,
0xFF85,
0xFF6F,
0xFE73,
0xFDE2,
0xFBAE,
0xFC1F,
0xFE3F,
0x006F,
0x01C8,
0x016C,
0x0137,
0x01A1,
0x0333,
0x035C,
0x0332,
0x01AB,
0x00CC,
0x019B,
0xFD08,
0xF990,
0xFA38,
0xFC49,
0xFEA8,
0x0027,
0x0077,
0xFDCE,
0xFF1E,
0x0234,
0x0461,
0x0613,
0x0386,
0x010E,
0xFED2,
0xFE8D,
0xFEEA,
0xFF86,
0x014C,
0xFDEC,
0xFC3D,
0xFCAA,
0xFD60,
0x0208,
0x02A8,
0x029A,
0x01B4,
0xFED5,
0x0051,
0x00D9,
0x02B9,
0x0186,
0xFE6B,
0xFED2,
0xFBD8,
0xFE47,
0x00E1
} ;
  Word16 m=10     ;  
  
  Word32 outputdata[11] ;   
  Word16 Overflow;

  Word16 i, j, norm;
  Word16 y[L_WINDOW]={2621,  2623,  2629,  2638,  2651,  2668,  2689,  2713,  2741,  2772,
  2808,  2847,  2890,  2936,  2986,  3040,  3097,  3158,  3223,  3291,
  3363,  3438,  3517,  3599,  3685,  3774,  3867,  3963,  4063,  4166,
  4272,  4382,  4495,  4611,  4731,  4853,  4979,  5108,  5240,  5376,
  5514,  5655,  5800,  5947,  6097,  6250,  6406,  6565,  6726,  6890,
  7057,  7227,  7399,  7573,  7750,  7930,  8112,  8296,  8483,  8672,
  8863,  9057,  9252,  9450,  9650,  9852, 10055, 10261, 10468, 10677,
 10888, 11101, 11315, 11531, 11748, 11967, 12187, 12409, 12632, 12856,
 13082, 13308, 13536, 13764, 13994, 14225, 14456, 14688, 14921, 15155,
 15389, 15624, 15859, 16095, 16331, 16568, 16805, 17042, 17279, 17516,
 17754, 17991, 18228, 18465, 18702, 18939, 19175, 19411, 19647, 19882,
 20117, 20350, 20584, 20816, 21048, 21279, 21509, 21738, 21967, 22194,
 22420, 22644, 22868, 23090, 23311, 23531, 23749, 23965, 24181, 24394,
 24606, 24816, 25024, 25231, 25435, 25638, 25839, 26037, 26234, 26428,
 26621, 26811, 26999, 27184, 27368, 27548, 27727, 27903, 28076, 28247,
 28415, 28581, 28743, 28903, 29061, 29215, 29367, 29515, 29661, 29804,
 29944, 30081, 30214, 30345, 30472, 30597, 30718, 30836, 30950, 31062,
 31170, 31274, 31376, 31474, 31568, 31659, 31747, 31831, 31911, 31988,
 32062, 32132, 32198, 32261, 32320, 32376, 32428, 32476, 32521, 32561,
 32599, 32632, 32662, 32688, 32711, 32729, 32744, 32755, 32763, 32767,
 32767, 32741, 32665, 32537, 32359, 32129, 31850, 31521, 31143, 30716,
 30242, 29720, 29151, 28538, 27879, 27177, 26433, 25647, 24821, 23957,
 23055, 22117, 21145, 20139, 19102, 18036, 16941, 15820, 14674, 13505,
 12315, 11106,  9879,  8637,  7381,  6114,  4838,  3554,  2264,   971};
  
  Word32 sum;
  Word16 norm_l(Word32 L_var1);
  Word32 L_mac(Word32 L_var3, Word16 var1, Word16 var2);
  Word16 mult_r(Word16 var1, Word16 var2);



  for(i=0; i<L_WINDOW; i++)
  {
    y[i] = mult_r(x[i], y[i]);
  }

  /* Compute r[0] and test for overflow */
  do {
    Overflow = 0;
    sum = 1;                   /* Avoid case of all zeros */
    for(i=0; i<L_WINDOW && sum>0; i++)
      sum = L_mac(sum, y[i], y[i]);

	if(sum<=1)
	{
		Overflow=1;
	}


    /* If overflow divide y[] by 4 */
    if(Overflow != 0)
    {
      for(i=0; i<L_WINDOW; i++)
      {
        y[i] = y[i]>>2;
      }
    }
  }while (Overflow != 0);

  /* Normalization of r[0] */
  	sum-=1;
  norm = norm_l(sum);

  sum <<=norm;

  outputdata[0]=sum;    /* Put in DPF format (see oper_32b) */

  /* r[1] to r[m] */

  for (i = 1; i <= 10; i++)
  {
    sum = 0;
    for(j=0; j<L_WINDOW-i; j++)
      sum = L_mac(sum, y[j], y[j+i]);

	  sum <<=norm;

    outputdata[i]=sum;
  }
  for(int k=0;k<10;k++)
  {
	  printf("%d\n",outputdata[k]);
  }
  return;
}


Word16 mult_r(Word16 var1, Word16 var2)
  {
   Word16 var_out;
   Word32 L_produit_arr;

   L_produit_arr = (Word32)var1 * (Word32)var2; /* product */
   L_produit_arr += (Word32) 0x00004000;        /* round */
   L_produit_arr &= (Word32) 0xffff8000L;
   L_produit_arr >>= 15;                        /*arithmetic shift */

   if (L_produit_arr & (Word32) 0x00010000L)   /* sign extend when necessary */
     {
      L_produit_arr |= (Word32) 0xffff0000L;
     }

   var_out =(Word16)L_produit_arr;
   return(var_out);
}


Word16 norm_l(Word32 L_var1)
  {
   Word16 var_out;

   if (L_var1 == 0)
     {
      var_out = 0;
     }
   else
     {
      if (L_var1 == (Word32)0xffffffffL)
        {
         var_out = 31;
        }
      else
        {
         if (L_var1 < 0)
           {
            L_var1 = ~L_var1;
           }

         for(var_out = 0;L_var1 < (Word32)0x40000000L;var_out++)
           {
            L_var1 <<= 1;
           }
        }
     }

   return(var_out);
  }



Word32 L_mac(Word32 L_var3, Word16 var1, Word16 var2)
  {
   //Word32 L_var_out;
   //Word32 L_produit;
   L_var3+=(var1*var2<<1);
   //L_produit = L_mult(var1,var2);
   //L_var_out = L_add(L_var3,L_produit);
   return(L_var3);
  }



⌨️ 快捷键说明

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