📄 dqpskmodulation.c
字号:
}
#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 + -