bchcore.c

来自「Proakis《contemporarycommunication system」· C语言 代码 · 共 66 行

C
66
字号
/*============================================================================
 *      Syntax: [msg, err, ccode] = bchcore(code, pow_dim, dim, k, t, tp)
 *BCHCORE The core part of the BCH decode.
 *     [MSG, ERR, CCODE] = BCHCORE(CODE, POW_DIM, DIM, K, T, TP) decodes
 *     a BCH code, in which CODE is a code word row vector,  with its column
 *     size being POW_DIM. POW_DIM equals 2^DIM -1. K is the message length,
 *     T is the error correction capability. TP is a complete list of the
 *     elements in GF(2^DIM).
 *
 *     This function is can share the information between a SIMULINK file and
 *     MATLAB functions. It is not designed to be called directly. There is
 *     no error check in order to eliminate overhead.
 *============================================================================
 *     Original designed by Wes Wang,
 *     Jun Wu,     The Mathworks, Inc.
 *     Dec-12, 1995
 *
 *     Copyright (c) 1995-96 by The MAthWorks, Inc.
 *     All Rights Reserved
 *     $Revision: 1.1 $  $Date: 1996/04/01 18:13:45 $
 *==========================================================================
 */
#include <math.h>
#include "mex.h"
#include "gflib.c"
void mexFunction(int nlhs, Matrix *plhs[], int nrhs, Matrix *prhs[])
{
    int     i, np, mp;
    int     pow_dim, dim, k, t;
    int     *code, *pp, *ccode, *err, *Iwork;
    double  *Msg, *Err, *CCode;

    np = mxGetM(prhs[5]);
    mp = mxGetN(prhs[5]);
    pow_dim = (int)mxGetPr(prhs[1])[0];
    code = (int *)mxCalloc(pow_dim,sizeof(int));
    for(i=0; i<pow_dim; i++)
        code[i] = (int)mxGetPr(prhs[0])[i];
    dim = (int)mxGetPr(prhs[2])[0];
    k = (int)mxGetPr(prhs[3])[0];
    t = mxGetPr(prhs[4])[0];
    pp = (int *)mxCalloc(np*mp,sizeof(int));
    for(i=0; i<np*mp; i++)
        pp[i] = (int)mxGetPr(prhs[5])[i];

    /* set up a integer working space (int *)Iwork. */
    Iwork = (int *)mxCalloc( (2+dim)*(2*pow_dim+1)+t*t+15*t+17, sizeof(int));

    ccode= (int *)mxCalloc(pow_dim,sizeof(int));
    err = Iwork;
    bchcore(code,pow_dim,dim,k,t,pp,Iwork+1,err,ccode);    

    Msg = mxGetPr(plhs[0] = mxCreateFull(1, k, 0));
    Err = mxGetPr(plhs[1] = mxCreateFull(1, 1, 0));
    CCode = mxGetPr(plhs[2] = mxCreateFull(1, pow_dim, 0));
    for(i=0; i < pow_dim; i++)
        CCode[i] = (double)ccode[i];
    for(i=pow_dim-k; i < pow_dim; i++)
        Msg[i-pow_dim+k] = CCode[i];
    Err[0] = (double)err[0];
    return;
}
/* end of bchcore.c */


⌨️ 快捷键说明

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