📄 correlation.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 + -