mmserv

Minimum Mean Square Error detection on RISC-V Vector Extention
git clone https://git.ea.contact/mmserv
Log | Files | Refs | README

common.h (1822B)


      1 #ifndef COMMON_H
      2 #define COMMON_H
      3 
      4 #include <stdint.h> /* for uint64_t, uint32_t */
      5 
      6 
      7 /*
      8  * Typedefs
      9  */
     10 
     11 #if defined(DATA_TYPE_float)
     12 typedef float data_t;
     13 typedef float acc_t;
     14 #elif defined(DATA_TYPE_fixed)
     15 typedef int32_t data_t;
     16 typedef int64_t acc_t;
     17 #define FP_Q 31
     18 #else
     19 #error "Please define DATA_TYPE_float or DATA_TYPE_fixed"
     20 #endif
     21 
     22 typedef struct {
     23   data_t *re;
     24   data_t *im;
     25 } vcomplex;
     26 
     27 
     28 /*
     29  * Global variables
     30  */
     31 
     32 /* Raw data */
     33 /* Transmitted signal */
     34 extern data_t x_re[NUM_TX * NUM_SC];
     35 extern data_t x_im[NUM_TX * NUM_SC];
     36 /* Channel */
     37 extern data_t H_re[NUM_RX * NUM_TX * NUM_SC];
     38 extern data_t H_im[NUM_RX * NUM_TX * NUM_SC];
     39 /* Noise covariance matrix */
     40 extern data_t R_re[NUM_TX * NUM_TX * NUM_SC];
     41 extern data_t R_im[NUM_TX * NUM_TX * NUM_SC];
     42 /* Received signal */
     43 extern data_t y_re[NUM_RX * NUM_SC];
     44 extern data_t y_im[NUM_RX * NUM_SC];
     45 /* MMSE raw data */
     46 extern data_t G_re[NUM_TX * NUM_TX * NUM_SC];
     47 extern data_t G_im[NUM_TX * NUM_TX * NUM_SC];
     48 extern data_t L_re[NUM_TX * NUM_TX * NUM_SC];
     49 extern data_t L_im[NUM_TX * NUM_TX * NUM_SC];
     50 extern data_t g_D[NUM_TX * NUM_SC]; /* no imaginary part in D */
     51 extern data_t HHy_re[NUM_TX * NUM_SC];
     52 extern data_t HHy_im[NUM_TX * NUM_SC];
     53 extern data_t z_re[NUM_TX * NUM_SC];
     54 extern data_t z_im[NUM_TX * NUM_SC];
     55 /* Result of MMSE approximation */
     56 extern data_t x_MMSE_re[NUM_TX * NUM_SC];
     57 extern data_t x_MMSE_im[NUM_TX * NUM_SC];
     58 
     59 /* Same data but casted to vcomplex */
     60 extern vcomplex g_x;
     61 extern vcomplex g_H;
     62 extern vcomplex g_R;
     63 extern vcomplex g_y;
     64 extern vcomplex g_G;
     65 extern vcomplex g_L;
     66 extern vcomplex g_HHy;
     67 extern vcomplex g_z;
     68 extern vcomplex g_x_MMSE;
     69 
     70 
     71 /*
     72  * Complex matrix operations
     73  */
     74 
     75 extern void cmatgram();
     76 extern void ccholesky();
     77 extern void cmatvecmul();
     78 extern void cforwardsub();
     79 extern void cbackwardsub();
     80 
     81 #endif