#include #include "mkl.h" #ifndef PI # ifdef M_PI # define PI M_PI # else # define PI 3.14159265358979323846 # endif #endif // Defines: #define SAMPSYMBTUR 20 // SampFreqTx/SymbolRate -PABTURBO.4 #define SAMPSYMB 10 // SampFreqTx/SymbolRate #define SAMPSYMB5 5 // SampFreqTx/SymbolRate -AddGmPRS -AddPNB26x1 #define RACHLEN 690 // Raw data bit length incl UW. #define BCCHLEN 458 // Raw data bit length incl UW. #define AGCHLEN 458 // Raw data bit length incl UW. #define FACCH3LEN 112 // Raw data bit length incl UW. #define NT6LEN 434+24 // Raw data bit length incl UW. -AddNT6n9 #define NT9LEN 662+30 // Raw data bit length incl UW. -AddNT6n9 #define PABLEN 106+72+24 // Raw bit length=202, incl CW & UW.-AddGmPRS #define PNB16LEN 414+44 // Raw bit length=458, incl UW. -AddGmPRS #define PNB26LEN 858+68 // Raw bit length=926, incl UW. -AddGmPRS #define PKAB16LEN 48+14 // Raw bit length=62, incl UW. -AddGmPRS #define PKAB26LEN 48+36 // Raw bit length=84, inc UW. -AddGmPRS #define DKABLEN 5 // Bits in a KAB #define DC2LEN 146 // Raw data bit length incl UW. -AddDC2 #define SHIFTBLACKMAN 7 // #define SHIFTBLACKMANVIP 40 // #define TXPADDING 9 // #define SAMPLEN2TS 780 // Sample Length for 2TS @ Fs=234KHz -AddDC2 #define SAMPLEN3TS 1170 // Sample Length for 3TS @ Fs=234KHz #define SAMPLEN6TS 2340 // Sample Length for 6TS @ Fs=234KHz #define SAMPLEN9TS 3510 // Sample Length for 9TS @ Fs=234KHz #define SAMPLEN12TS 4680 // Sample Length for 12TS @ Fs=234KHz #define TXFILENGTH 52 // Transmit filter length -D230 -TIC6X #define TXFILENTURB0 144 // Transmit Turbo filter length -PABTURBO.4 #define RADFREQ 2.013854548 // RADFREQ = 2*pi*(CarrFreq/SampFreq) #define BKTPRECISION 10000 // Precision of Bucket algorithm #define BURSTOFF 15 // Burst Offset within 3TS LEGACY CENTER #define BURSTOFF_PAB 3+55 // Burst Offset within 3TS AddGmPRS -BRSTPOS //#define BURSTOFF_PABter 194 // Burst Offset within 3TS -PABTURBO #define BURSTOFF_PABter 97 // Burst Offset within 3TS -PABTURBO.4 #define BURSTOFF_PNB16 3 // Burst Offset within 3TS AddGmPRS.27 -BRSTPOS #define BURSTOFF_PNB26 0 // Burst Offset within 3TS AddGmPRS.27 -BRSTPOS enum Burst { GMRRACHMODE, // GMR-RACH GMRBCCHMODE, // GMR-BCCH GMRAGCHMODE, // GMR-AGCH GMRFACCH3MODE, // GMR-FACCH3 GMRFACCH6MODE, // GMR-FACCH6 GMRFACCH9MODE, // GMR-FACCH9 GMRTCH3MODE, // GMR-TCH3 GMRTCH6MODE, // GMR-TCH6 GMRTCH9MODE, // GMR-TCH9 GMRNT3MODE, // GMR-NT3 GMRNT6MODE, // GMR-NT6 GMRNT9MODE, // GMR-NT9 GMRSACCHMODE, // GMR-SACCH GMRPNB16MODE, // GMPRS-PNB16 GMRPNB26MODE, // GMPRS-PNB26 GMRPKAB16MODE, // GMPRS-PKAB16 GMRPKAB26MODE, // GMPRS-PKAB26 GMRPABMODE, // GMPRS-PAB GMRDC2MODE, DKABMODE }; class GMR1_Modulator { public: GMR1_Modulator(); void FCCHgen(short FCCHwave_I[], double TxGain, int CarrierNum, int TxFreqShift); void DKAB_Modulator_Test(int TxFreqShift, double Gain, int CarrierNum, int KABLocation, int FFN); void DKAB_Modulator(unsigned char *StatusPower, unsigned char *StatusNoise, int TxFreqShift, double Gain, int CarrierNum, int KABLocation, int FFN); void BurstModulator_Test(Burst BurstType, int FACCHMode, int TxFreqShift, double Gain, int TurboMode, int CarrierNum); void BurstModulator(unsigned char *input, Burst BurstType, int FACCHMode, int TxFreqShift, double Gain, int TurboMode, int CarrierNum); inline int GetBurstSampLen() {return BurstSampLen;} inline short *getModBurst() {return TxMod;} void CopyModBurst(short *InBuffer); #ifdef MASON_NO_IMPLEMENTATION void Set_CosTable(double *CosTable); // was Set_SinT() -JCSU #endif void TxDKAB(unsigned char *StatusPower, unsigned char *StatusNoise, int TestMode, int TxFreqShift, double Gain, int CarrierNum, int KABLocation, int FFN); void TxBurstCQPSK(unsigned char *input, Burst BurstType, int FACCHMode, int TestMode, int TxFreqShift, double Gain, int TurboMode, int CarrierNum); void TxSinWaveVip(int BlockLen, int* startIndex, int freq, int freq2, double gain, double sampleRate); // -JCSU private: Burst MyBurstType; int MyFACCHMode; int MyTestMode; int MyTurboMode; int MyCarrierNum; int MyKABLocation; int MyKABFN; int BurstBitLen; int BurstSampLen; MKL_Complex16 Baseband[1024*5]; MKL_Complex16 Baseband_2[1024*5]; MKL_Complex16 Carrier[1024*5]; short TxMod[1024*5]; unsigned char Databits[1024*5]; int GetCarrierValTurbo(); int Unpackbits(unsigned char EncOut[],int j,int i,int len,int mask); void TxGetData(unsigned char *input); #ifdef MASON_NO_IMPLEMENTATION void TxGetDataDKAB(unsigned char StatusPower[], unsigned char StatusNoise[], int FFN); #endif };