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

📄 sync_cor.c

📁 TI的DSP C55X的应用程序
💻 C
📖 第 1 页 / 共 2 页
字号:
0x5fff, 0x6014, 0x6029, 0x603f, 0x6054, 0x6069, 0x607e, 0x6094, 0x60a9,
0x60be, 0x60d3, 0x60e8, 0x60fd, 0x6113, 0x6128, 0x613d, 0x6152, 0x6167,
0x617c, 0x6191, 0x61a6, 0x61bb, 0x61d0, 0x61e5, 0x61fa, 0x620e, 0x6223,
0x6238, 0x624d, 0x6262, 0x6277, 0x628b, 0x62a0, 0x62b5, 0x62ca, 0x62de,
0x62f3, 0x6308, 0x631c, 0x6331, 0x6346, 0x635a, 0x636f, 0x6384, 0x6398,
0x63ad, 0x63c1, 0x63d6, 0x63ea, 0x63ff, 0x6413, 0x6428, 0x643c, 0x6451,
0x6465, 0x6479, 0x648e, 0x64a2, 0x64b6, 0x64cb, 0x64df, 0x64f3, 0x6508,
0x651c, 0x6530, 0x6544, 0x6559, 0x656d, 0x6581, 0x6595, 0x65a9, 0x65bd,
0x65d1, 0x65e6, 0x65fa, 0x660e, 0x6622, 0x6636, 0x664a, 0x665e, 0x6672,
0x6686, 0x669a, 0x66ae, 0x66c2, 0x66d6, 0x66ea, 0x66fd, 0x6711, 0x6725,
0x6739, 0x674d, 0x6761, 0x6774, 0x6788, 0x679c, 0x67b0, 0x67c4, 0x67d7,
0x67eb, 0x67ff, 0x6812, 0x6826, 0x683a, 0x684d, 0x6861, 0x6875, 0x6888,
0x689c, 0x68af, 0x68c3, 0x68d6, 0x68ea, 0x68fd, 0x6911, 0x6924, 0x6938,
0x694b, 0x695f, 0x6972, 0x6986, 0x6999, 0x69ac, 0x69c0, 0x69d3, 0x69e7,
0x69fa, 0x6a0d, 0x6a20, 0x6a34, 0x6a47, 0x6a5a, 0x6a6e, 0x6a81, 0x6a94,
0x6aa7, 0x6aba, 0x6ace, 0x6ae1, 0x6af4, 0x6b07, 0x6b1a, 0x6b2d, 0x6b40,
0x6b53, 0x6b67, 0x6b7a, 0x6b8d, 0x6ba0, 0x6bb3, 0x6bc6, 0x6bd9, 0x6bec,
0x6bff, 0x6c12, 0x6c25, 0x6c37, 0x6c4a, 0x6c5d, 0x6c70, 0x6c83, 0x6c96,
0x6ca9, 0x6cbc, 0x6cce, 0x6ce1, 0x6cf4, 0x6d07, 0x6d1a, 0x6d2c, 0x6d3f,
0x6d52, 0x6d65, 0x6d77, 0x6d8a, 0x6d9d, 0x6daf, 0x6dc2, 0x6dd5, 0x6de7,
0x6dfa, 0x6e0d, 0x6e1f, 0x6e32, 0x6e44, 0x6e57, 0x6e69, 0x6e7c, 0x6e8f,
0x6ea1, 0x6eb4, 0x6ec6, 0x6ed9, 0x6eeb, 0x6efd, 0x6f10, 0x6f22, 0x6f35,
0x6f47, 0x6f5a, 0x6f6c, 0x6f7e, 0x6f91, 0x6fa3, 0x6fb5, 0x6fc8, 0x6fda,
0x6fec, 0x6fff, 0x7011, 0x7023, 0x7035, 0x7048, 0x705a, 0x706c, 0x707e,
0x7091, 0x70a3, 0x70b5, 0x70c7, 0x70d9, 0x70eb, 0x70fd, 0x7110, 0x7122,
0x7134, 0x7146, 0x7158, 0x716a, 0x717c, 0x718e, 0x71a0, 0x71b2, 0x71c4,
0x71d6, 0x71e8, 0x71fa, 0x720c, 0x721e, 0x7230, 0x7242, 0x7254, 0x7266,
0x7278, 0x728a, 0x729b, 0x72ad, 0x72bf, 0x72d1, 0x72e3, 0x72f5, 0x7306,
0x7318, 0x732a, 0x733c, 0x734e, 0x735f, 0x7371, 0x7383, 0x7394, 0x73a6,
0x73b8, 0x73ca, 0x73db, 0x73ed, 0x73ff, 0x7410, 0x7422, 0x7434, 0x7445,
0x7457, 0x7468, 0x747a, 0x748b, 0x749d, 0x74af, 0x74c0, 0x74d2, 0x74e3,
0x74f5, 0x7506, 0x7518, 0x7529, 0x753b, 0x754c, 0x755e, 0x756f, 0x7580,
0x7592, 0x75a3, 0x75b5, 0x75c6, 0x75d8, 0x75e9, 0x75fa, 0x760c, 0x761d,
0x762e, 0x7640, 0x7651, 0x7662, 0x7674, 0x7685, 0x7696, 0x76a7, 0x76b9,
0x76ca, 0x76db, 0x76ec, 0x76fd, 0x770f, 0x7720, 0x7731, 0x7742, 0x7753,
0x7765, 0x7776, 0x7787, 0x7798, 0x77a9, 0x77ba, 0x77cb, 0x77dc, 0x77ed,
0x77ff, 0x7810, 0x7821, 0x7832, 0x7843, 0x7854, 0x7865, 0x7876, 0x7887,
0x7898, 0x78a9, 0x78ba, 0x78cb, 0x78dc, 0x78ed, 0x78fd, 0x790e, 0x791f,
0x7930, 0x7941, 0x7952, 0x7963, 0x7974, 0x7985, 0x7995, 0x79a6, 0x79b7,
0x79c8, 0x79d9, 0x79ea, 0x79fa, 0x7a0b, 0x7a1c, 0x7a2d, 0x7a3d, 0x7a4e,
0x7a5f, 0x7a70, 0x7a80, 0x7a91, 0x7aa2, 0x7ab2, 0x7ac3, 0x7ad4, 0x7ae5,
0x7af5, 0x7b06, 0x7b16, 0x7b27, 0x7b38, 0x7b48, 0x7b59, 0x7b6a, 0x7b7a,
0x7b8b, 0x7b9b, 0x7bac, 0x7bbc, 0x7bcd, 0x7bdd, 0x7bee, 0x7bff, 0x7c0f,
0x7c20, 0x7c30, 0x7c41, 0x7c51, 0x7c61, 0x7c72, 0x7c82, 0x7c93, 0x7ca3,
0x7cb4, 0x7cc4, 0x7cd5, 0x7ce5, 0x7cf5, 0x7d06, 0x7d16, 0x7d26, 0x7d37,
0x7d47, 0x7d57, 0x7d68, 0x7d78, 0x7d88, 0x7d99, 0x7da9, 0x7db9, 0x7dca,
0x7dda, 0x7dea, 0x7dfa, 0x7e0b, 0x7e1b, 0x7e2b, 0x7e3b, 0x7e4c, 0x7e5c,
0x7e6c, 0x7e7c, 0x7e8c, 0x7e9d, 0x7ead, 0x7ebd, 0x7ecd, 0x7edd, 0x7eed,
0x7efe, 0x7f0e, 0x7f1e, 0x7f2e, 0x7f3e, 0x7f4e, 0x7f5e, 0x7f6e, 0x7f7e,
0x7f8e, 0x7f9e, 0x7fae, 0x7fbe, 0x7fce, 0x7fde, 0x7fee};


/* External Data */

/* Code */

int sync_corr( int *I_SRC, int *Q_SRC, int *filt )
{
    int     i, j, sync_point,index, corr_mag, max, I_temp, Q_temp;
    int     *sync_ptr, *rc_data, sync_i, sync_q, rc_i, rc_q;        
    long    I_ltemp, Q_ltemp;    

/**************************************/
/* Filter just enough data to span    */
/* correlation window                 */
/*                                    */
/* Store resultant 76 I,Q pairs       */
/* into temp_rc[] storage.            */
/**************************************/

    rc_data = temp_rc;  /* Set pointer to temporary storage for filter output */
    
    I_SRC += 8;         /* Intentional offset to start 2 symbols */
    Q_SRC += 8;         /* to left of expected sync point.       */
    
    for (i = 0 ; i < 76 ; i++)
    {
        I_ltemp = _lsmpy((*(I_SRC++)), (*filt) );
        Q_ltemp = _lsmpy((*(Q_SRC++)), (*filt++) );
        for (j = 47 ; j > 0 ; j--)
        {
            /* I_temp += (*(I_SRC++)) * (*filt); */
            /* Q_temp += (*(Q_SRC++)) * ((*filt++)); */; 
            I_ltemp = _smac(I_ltemp, (*(I_SRC++)), (*filt) );
            Q_ltemp = _smac(Q_ltemp, (*(Q_SRC++)), (*filt++) );
        } 
        
        filt  -= 48;    /* Set Filter pointer back to start */
        
        I_SRC -= 47;    /* Start 1 sample over next time */
        Q_SRC -= 47;
        
        *(rc_data++) = (I_ltemp>>18);   /* Store Filter Output I term in Q13 format */
        *(rc_data++) = (Q_ltemp>>18);   /* Store Filter Output Q term in Q13 format */
    }

/****************************************/
/* Correlate with Sync Word for Slot #0 */  
/* Keep track of correlation peak.      */
/****************************************/

    max = 0;                    /* Correlation Magnetude Maximum */
    
    sync_point = 0;             /* Index into data to sync point */
     
    rc_data = temp_rc;          /* Set pointer to beginning of filtered data */
    
    for (i = 0 ; i < 16 ; i++)
    {  
      /* Zero resultant correlation vector components */
        I_ltemp = 0;
        Q_ltemp = 0;                              
        
      /* Point to M.E.P. buffer for slot #0 Sync word */    
        sync_ptr = cor_sync;    
     
      /* Perform Correlation at offset 'i' into data */
        for (j = 15 ; j > 0 ; j--)  
        {
            sync_i = *(sync_ptr++);
            sync_q = *(sync_ptr++);
            rc_i   = *(rc_data++);
            rc_q   = *(rc_data++); 
            rc_data += 6;
            I_ltemp = _smac(I_ltemp, sync_i, rc_i);
            I_ltemp = _smac(I_ltemp, sync_q, rc_q); 
            Q_ltemp = _smac(Q_ltemp, sync_i, rc_q);
            Q_ltemp = _smas(Q_ltemp, sync_q, rc_i); 
        }
        rc_data -= 118;  /* 120 would set pointer back to start              */
                         /* we will start 1 sample (I,Q pair) over next time */

      /* Compute Correlation Magnetude & Maximize */
        /* corr_mag = (float)sqrt(I_temp*I_temp + Q_temp*Q_temp); */
		I_temp = (I_ltemp>>16);
		Q_temp = (Q_ltemp>>16);
		
		I_ltemp = _lsmpy(I_temp, I_temp);
		I_ltemp = _smac(I_ltemp, Q_temp, Q_temp); 
		index = (I_ltemp>>16);
 		corr_mag = sqrt_tab[index>>5];

        if( corr_mag > max )
        {
            sync_point = i;
            max = corr_mag;
        }
    }
    
    return( sync_point + 8 );   /* Note that we started at offset = 8 */
}


⌨️ 快捷键说明

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