📄 s_conv_detection.c
字号:
/* | Project: WCDMA simulation environment | Module: | Author: Maarit Melvasalo | Date: February 23, 1999 | | History: | June 10, 1999 Maarit Melvasalo | Function rewritten * * File : s_conv_detection.c * Abstract: * * USER GIVEN PARAMETERS * * 1: B = the input block size * 2: C = the spreading code * 3: SF = spreading factor * 4: nSlot = Number of slots in a frame (=used for sample timing) * * * DEPENDS ON FILES * spreading.c * mealy.c * bitroutines.c * conversions.c * utility.c | | Copyright disclaimer: | This software was developed at the National Institute of Standards | and Technology by employees of the Federal Government in the course | of their official duties. Pursuant to title 17 Section 105 of the | United States Code this software is not subject to copyright | protection and is in the public domain. | */#define S_FUNCTION_NAME s_conv_detection#define S_FUNCTION_LEVEL 2#include <math.h>#include "simstruc.h"#include "tmwtypes.h"#include "config_wcdma.h"#include "wcdma_simulink.h"/* USER GIVEN PARAMETERS AND DEFINITIONS /**//* General Parameters /**/#define NPARAMS 5 /* Number of parameters /**//* Spreading parameters /**/#define C_PARAM(S) ssGetSFcnParam(S,1) /* Code */#define nC mxGetN(C_PARAM(S)) /* Code length */ #define SF_PARAM(S) ssGetSFcnParam(S,2) /* Block size*/#define SF (int_T)(mxGetPr(SF_PARAM(S))[0]) /* Number of inputs*/#define SLOTS(S) ssGetSFcnParam(S,3)#define nSlots (int_T)(mxGetPr(SLOTS(S))[0]) #define PILOT(S) ssGetSFcnParam(S,4)#define nPilot (int_T)(mxGetPr(PILOT(S))[0]) /* Input and Output Size parameters /**/#define SIZE_P(S) ssGetSFcnParam(S,0) /* Block size*/#define nIn (int_T)(mxGetPr(SIZE_P(S))[0]) /* Number of inputs*/#define nOut (int_T)(nIn / SF -nPilot) /* Number of outputs /**/#define U(element) (*uPtrs[element]) /* Pointer to Input Port0 */#define td TD_FRAME / (real_T)nSlots /*====================* * S-function methods * *====================*//* Function: mdlInitializeSizes =============================================== * Abstract: * The sizes information is used by Simulink to determine the S-function * block's characteristics (number of inputs, outputs, states, etc.). */static void mdlInitializeSizes(SimStruct *S){ ssSetNumSFcnParams(S, NPARAMS); /* Number of expected parameters */ if (ssGetNumSFcnParams(S) != ssGetSFcnParamsCount(S)) { return; } if (!ssSetNumInputPorts(S, 1)) return; ssSetInputPortWidth(S, 0, nIn); ssSetInputPortDirectFeedThrough(S, 0, 1); if (!ssSetNumOutputPorts(S, 1)) return; ssSetOutputPortWidth(S, 0,nOut); ssSetNumSampleTimes(S, 1); ssSetNumIWork(S, nC); ssSetSFcnParamNotTunable(S,0); ssSetSFcnParamNotTunable(S,1); ssSetSFcnParamNotTunable(S,2); ssSetSFcnParamNotTunable(S,3); ssSetSFcnParamNotTunable(S,4); /* Take care when specifying exception free code - see sfuntmpl.doc */ ssSetOptions(S, SS_OPTION_EXCEPTION_FREE_CODE);} /* do not use mxCalloc or mexErrMsgTxt functions *//* Function: mdlInitializeSampleTimes ========================================= * Abstract: * Specifiy that sampletime is given by the user */static void mdlInitializeSampleTimes(SimStruct *S){ ssSetSampleTime(S, 0, td); ssSetOffsetTime(S, 0, 0.0);}#define MDL_INITIALIZE_CONDITIONS/* Function: mdlInitializeConditions ======================================== * Abstract: * Stores the spreading code to IWork vector */static void mdlInitializeConditions(SimStruct *S){ int_T *iwork = ssGetIWork(S); real_T *cpr = mxGetPr(C_PARAM(S)); int_T i; for (i = 0; i < nC; i++){ iwork[i] = (int_T)cpr[i]; }}/* Function: mdlOutputs ======================================================= * Abstract: * */static void mdlOutputs(SimStruct *S, int_T tid){ real_T *y = ssGetOutputPortRealSignal(S,0); InputRealPtrsType uPtrs = ssGetInputPortRealSignalPtrs(S,0); real_T inputs[nIn]; int_T *iwork = ssGetIWork(S); /*spreading code/**/ int_T i,lp,tmp; for (lp = (nPilot*SF), i = 0 ; lp<nIn; lp++,i++){ inputs[i]=U(lp); } wcdma_soft_despread(inputs, nIn-nPilot*SF, iwork, nC, SF, y,0,nIn); }/* Function: mdlTerminate ===================================================== * Abstract: */static void mdlTerminate(SimStruct *S){ }#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 + -