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

📄 dqpskmodulation.c

📁 DQPSK调制的程序
💻 C
📖 第 1 页 / 共 2 页
字号:
  }
#endif /* MDL_INITIALIZE_CONDITIONS */



#undef MDL_START  /* Change to #undef to remove function */
#if defined(MDL_START) 
  /* Function: mdlStart =======================================================
   * Abstract:
   *    This function is called once at start of model execution. If you
   *    have states that should be initialized once, this is the place
   *    to do it.
   */
  static void mdlStart(SimStruct *S)
  {
  }
#endif /*  MDL_START */



/* Function: mdlOutputs =======================================================
 * Abstract:
 *    In this function, you compute the outputs of your S-function
 *    block. Generally outputs are placed in the output vector, ssGetY(S).
 */
static void mdlOutputs(SimStruct *S, int_T tid)
{
    real_T *output = (real_T *)ssGetOutputPortSignal(S,0);
    InputRealPtrsType input = ssGetInputPortRealSignalPtrs(S,0);
    int_T m,n;
      int_T cyclic;
      //the number of frame in 96ms
      real_T angle;
      real_T realpart;
      real_T imagpart;
   switch(mode)
   {
       case 1:
        for (m=0;m<48;m++)
        {
           for(n=0;n<32;n++)
           {
               angle = (h_value[indextablemodea[0][m]][n]+indextablemodea[1][m])*PIhalf;
               output[m*64+2*n] = cos(angle);
               output[m*64+2*n+1] = sin(angle);
           }
        }
        //the value of phase reference symbol;
        for(m=0;m<NumberSymbolModeABD-1;m++)
        {
            for(n=0;n<NumberCarrierModeC*8;n++)
            {
            realpart = output[m*16*NumberCarrierModeC+2*n]**input[m*16*NumberCarrierModeC+2*n] - output[m*16*NumberCarrierModeC+2*n+1]**input[m*16*NumberCarrierModeC+2*n+1];
            imagpart = output[m*16*NumberCarrierModeC+2*n]**input[m*16*NumberCarrierModeC+2*n+1] + output[m*16*NumberCarrierModeC+2*n+1]**input[m*16*NumberCarrierModeC+2*n];
            output[(m+1)*16*NumberCarrierModeC+2*n] = realpart;
            output[(m+1)*16*NumberCarrierModeC+2*n+1] = imagpart; 
            }
         }
        //the rest differential symbol with configous symbol
        break;
      case 2:
        for(cyclic=0;cyclic<4;cyclic++)
        {
            //the number of frame in 96ms;
          for (m=0;m<12;m++)
        {
           for(n=0;n<32;n++)
           {
               angle = (h_value[indextablemodeb[0][m]][n]+indextablemodeb[1][m])*PIhalf;
               output[cyclic*NumberSymbolModeABD*4*NumberCarrierModeC+m*64+2*n] = cos(angle);
               output[cyclic*NumberSymbolModeABD*4*NumberCarrierModeC+m*64+2*n+1] = sin(angle);
           }
        }
        for(m=0;m<NumberSymbolModeABD-1;m++)
        {
            for(n=0;n<NumberCarrierModeC*2;n++)
            {
                //**input[cyclic*(NumberSymbolModeABD-1)*4*NumberCarrierModeC+m*4*NumberCarrierModeC+2*n] :     NumberSymbolModeABD-1而不是NumberSymbolModeABD,因为没有加PRS
            realpart = output[cyclic*NumberSymbolModeABD*4*NumberCarrierModeC+m*4*NumberCarrierModeC+2*n]**input[cyclic*(NumberSymbolModeABD-1)*4*NumberCarrierModeC+m*4*NumberCarrierModeC+2*n] 
            - output[cyclic*NumberSymbolModeABD*4*NumberCarrierModeC+m*4*NumberCarrierModeC+2*n+1]**input[cyclic*(NumberSymbolModeABD-1)*4*NumberCarrierModeC+m*4*NumberCarrierModeC+2*n+1];
            imagpart = output[cyclic*NumberSymbolModeABD*4*NumberCarrierModeC+m*4*NumberCarrierModeC+2*n]**input[cyclic*(NumberSymbolModeABD-1)*4*NumberCarrierModeC+m*4*NumberCarrierModeC+2*n+1] 
            + output[cyclic*NumberSymbolModeABD*4*NumberCarrierModeC+m*4*NumberCarrierModeC+2*n+1]**input[cyclic*(NumberSymbolModeABD-1)*4*NumberCarrierModeC+m*4*NumberCarrierModeC+2*n];
            output[cyclic*NumberSymbolModeABD*4*NumberCarrierModeC+(m+1)*4*NumberCarrierModeC+2*n] = realpart;
            output[cyclic*NumberSymbolModeABD*4*NumberCarrierModeC+(m+1)*4*NumberCarrierModeC+2*n+1] = imagpart; 
            }
         }
        //the rest differential symbol with configous symbol
        }
        break;
      case 3:
        for(cyclic=0;cyclic<4;cyclic++)
        {
            //the number of frame in 96ms;
          for (m=0;m<6;m++)
        {
           for(n=0;n<32;n++)
           {
               angle = (h_value[indextablemodec[0][m]][n]+indextablemodec[1][m])*PIhalf;
               output[cyclic*NumberSymbolModeC*2*NumberCarrierModeC+m*64+2*n] = cos(angle);
               output[cyclic*NumberSymbolModeC*2*NumberCarrierModeC+m*64+2*n+1] = sin(angle);
           }
        }
        //the value of phase reference symbol;
        for(m=0;m<NumberSymbolModeC-1;m++)
        {
            for(n=0;n<NumberCarrierModeC;n++)
            {
            realpart = output[cyclic*NumberSymbolModeC*2*NumberCarrierModeC+m*2*NumberCarrierModeC+2*n]**input[cyclic*(NumberSymbolModeC-1)*2*NumberCarrierModeC+m*2*NumberCarrierModeC+2*n] 
            - output[cyclic*NumberSymbolModeC*2*NumberCarrierModeC+m*2*NumberCarrierModeC+2*n+1]**input[cyclic*(NumberSymbolModeC-1)*2*NumberCarrierModeC+m*2*NumberCarrierModeC+2*n+1];
            imagpart = output[cyclic*NumberSymbolModeC*2*NumberCarrierModeC+m*2*NumberCarrierModeC+2*n]**input[cyclic*(NumberSymbolModeC-1)*2*NumberCarrierModeC+m*2*NumberCarrierModeC+2*n+1] 
            + output[cyclic*NumberSymbolModeC*2*NumberCarrierModeC+m*2*NumberCarrierModeC+2*n+1]**input[cyclic*(NumberSymbolModeC-1)*2*NumberCarrierModeC+m*2*NumberCarrierModeC+2*n];
            output[cyclic*NumberSymbolModeC*2*NumberCarrierModeC+(m+1)*2*NumberCarrierModeC+2*n] = realpart;
            output[cyclic*NumberSymbolModeC*2*NumberCarrierModeC+(m+1)*2*NumberCarrierModeC+2*n+1] = imagpart; 
            }
         }
        //the rest differential symbol with configous symbol
        }
        break; 
      case 4:
          for(cyclic=0;cyclic<2;cyclic++)
        {
            //the number of frame in 96ms;
          for (m=0;m<24;m++)
        {
           for(n=0;n<32;n++)
           {
               angle = (h_value[indextablemoded[0][m]][n]+indextablemoded[1][m])*PIhalf;
               output[cyclic*NumberSymbolModeABD*8*NumberCarrierModeC+m*64+2*n] = cos(angle);
               output[cyclic*NumberSymbolModeABD*8*NumberCarrierModeC+m*64+2*n+1] = sin(angle);
           }
        }
        //the value of phase reference symbol;
        for(m=0;m<NumberSymbolModeABD-1;m++)
        {
            for(n=0;n<NumberCarrierModeC*4;n++)
            {
            realpart = output[cyclic*NumberSymbolModeABD*8*NumberCarrierModeC+m*8*NumberCarrierModeC+2*n]**input[cyclic*(NumberSymbolModeABD-1)*8*NumberCarrierModeC+m*8*NumberCarrierModeC+2*n]
            - output[cyclic*NumberSymbolModeABD*8*NumberCarrierModeC+m*8*NumberCarrierModeC+2*n+1]**input[cyclic*(NumberSymbolModeABD-1)*8*NumberCarrierModeC+m*8*NumberCarrierModeC+2*n+1];
            imagpart = output[cyclic*NumberSymbolModeABD*8*NumberCarrierModeC+m*8*NumberCarrierModeC+2*n]**input[cyclic*(NumberSymbolModeABD-1)*8*NumberCarrierModeC+m*8*NumberCarrierModeC+2*n+1]
            + output[cyclic*NumberSymbolModeABD*8*NumberCarrierModeC+m*8*NumberCarrierModeC+2*n+1]**input[cyclic*(NumberSymbolModeABD-1)*8*NumberCarrierModeC+m*8*NumberCarrierModeC+2*n];
            output[cyclic*NumberSymbolModeABD*8*NumberCarrierModeC+(m+1)*8*NumberCarrierModeC+2*n] = realpart;
            output[cyclic*NumberSymbolModeABD*8*NumberCarrierModeC+(m+1)*8*NumberCarrierModeC+2*n+1] = imagpart; 
            }
         }
        //the rest differential symbol with configous symbol
        }
        break;
        default:break;
   }
}



#undef MDL_UPDATE  /* Change to #undef to remove function */
#if defined(MDL_UPDATE)
  /* Function: mdlUpdate ======================================================
   * Abstract:
   *    This function is called once for every major integration time step.
   *    Discrete states are typically updated here, but this function is useful
   *    for performing any tasks that should only take place once per
   *    integration step.
   */
  static void mdlUpdate(SimStruct *S, int_T tid)
  {
  }
#endif /* MDL_UPDATE */



#undef MDL_DERIVATIVES  /* Change to #undef to remove function */
#if defined(MDL_DERIVATIVES)
  /* Function: mdlDerivatives =================================================
   * Abstract:
   *    In this function, you compute the S-function block's derivatives.
   *    The derivatives are placed in the derivative vector, ssGetdX(S).
   */
  static void mdlDerivatives(SimStruct *S)
  {
  }
#endif /* MDL_DERIVATIVES */



/* Function: mdlTerminate =====================================================
 * Abstract:
 *    In this function, you should perform any actions that are necessary
 *    at the termination of a simulation.  For example, if memory was
 *    allocated in mdlStart, this is the place to free it.
 */
static void mdlTerminate(SimStruct *S)
{
}


/*======================================================*
 * See sfuntmpl_doc.c for the optional S-function methods *
 *======================================================*/

/*=============================*
 * Required S-function trailer *
 *=============================*/

#ifdef  MATLAB_MEX_FILE    /* Is this file being compiled as a MEX-file? */
#include "simulink.c"      /* MEX-file interface mechanism */
#else
#include "cg_sfun.h"       /* Code generation registration function */
#endif

⌨️ 快捷键说明

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