// -------------------------------------------------------------- #ifndef CPX_H #define CPX_H #include "radio_types.h" // -------------------------------------------------------------- // Types // -------------------------------------------------------------- typedef struct _cpx_t { radio_float_t imag, real; } cpx_t; typedef struct _cpx_arr_t { uint32_t size; radio_float_t *imag, *real; } cpx_arr_t; // -------------------------------------------------------------- #ifdef __cplusplus extern "C" { #endif // -------------------------------------------------------------- // Complex Functions // -------------------------------------------------------------- // Scalar cpx_t CpxConjS(cpx_t v1); cpx_t CpxAddS(cpx_t v1, cpx_t v2); cpx_t CpxSubS(cpx_t v1, cpx_t v2); cpx_t CpxMulS(cpx_t v1, cpx_t v2); cpx_t CpxScaleRealS(cpx_t v1, radio_float_t v2); cpx_t CpxScaleComplexS(cpx_t x, cpx_t gain); cpx_t CpxFromReal(radio_float_t v1); cpx_t Cpx(radio_float_t real, radio_float_t imag); cpx_t CpxMinS(cpx_t x1, cpx_t x2); cpx_t CpxMaxS(cpx_t x1, cpx_t x2); radio_float_t CpxMagS(cpx_t v1); radio_float_t CpxPhiS(cpx_t v1); radio_float_t cpxPowerDB(cpx_t v1, radio_float_t preScale); // Vector void CpxCopy(cpx_t *pSrc, cpx_t *pDst, uint32_t len); void CpxConj(cpx_t *pSrcDst, uint32_t len); void CpxAdd(cpx_t *pSrc, cpx_t *pSrcDst, uint32_t len); void CpxSub(cpx_t *pSrc, cpx_t *pSrcDst, uint32_t len); void CpxMul(cpx_t *pSrc1, cpx_t *pSrc2, cpx_t *pDst, uint32_t len); void CpxScale(cpx_t *pSrc1, cpx_t src2, cpx_t *pDst, uint32_t len); cpx_t CpxMulAdd(cpx_t sum, cpx_t *pSrc1, cpx_t *pSrc2, uint32_t len); cpx_t CpxMulRealAdd(cpx_t sum, cpx_t *pSrc1, radio_float_t *pSrc2, uint32_t len); radio_float_t CpxMag(cpx_t *pSrc); radio_float_t CpxPhi(cpx_t *pSrc); cpx_t csum(cpx_t *pSrc, int len); cpx_t cmean(cpx_t *pSrc, int len); // -------------------------------------------------------------- #define _cpxMulB4_blockSize 4 #define _cpxMulB1_blockSize 1 void _cpxMulB4 ( radio_float_t pV1_real[_cpxMulB4_blockSize], radio_float_t pV1_imag[_cpxMulB4_blockSize], radio_float_t pV2_real[_cpxMulB4_blockSize], radio_float_t pV2_imag[_cpxMulB4_blockSize], radio_float_t pRes_real[_cpxMulB4_blockSize], radio_float_t pRes_imag[_cpxMulB4_blockSize] ); void _cpxMulB1 ( radio_float_t *pV1_real, radio_float_t *pV1_imag, radio_float_t *pV2_real, radio_float_t *pV2_imag, radio_float_t *pRes_real, radio_float_t *pRes_imag ); #ifdef __cplusplus } #endif // __cplusplus // -------------------------------------------------------------- #endif // CPX_H