#include #include #include #include #include #include #include "ipp.h" #include "correlation_CUDA.h" #define UMTS_NORM_CUTOFF_FREQ (2e6/(256*OSR)/9.75e6) // ??? *** Check Normalized cut-off frequency, should be in the range (0,0.5). #define UMTS_RESAMPLE_TAP_LEN (64) #define UMTS_UPSAMPLE_RATE (256*OSR) #define UMTS_DOWNSAMPLE_RATE (325) #define UMTS_UPSAMPLE_PHASE (0) #define UMTS_DOWNSAMPLE_PHASE (0) #define SAMPLING_RATE (9750000) // Number of baseband samples per second. #define CHIP_RATE (3840000) #define OSR (2.5390625) //325/128 // Oversampling rate (= samples per chip) in the BB signal #define N_BASEBAND_SAMP (int)(16.1*2560*OSR) // Number of bawseband re-sampled samples >= (15*2560*OSR + N_SAMP_CPICH_CORR) #define N_SLOTS_PER_FRAME (15) #define FRAME_PERIOD_SEC (0.01) // Frame duration in seconds #define SLOT_PERIOD_SEC (FRAME_PERIOD_SEC/N_SLOTS_PER_FRAME) // Slot duration in seconds #define N_SAMP_PER_SLOT (int)(SLOT_PERIOD_SEC*SAMPLING_RATE) // Number of samples per slot #define N_SAMP_PER_FRAME (N_SAMP_PER_SLOT*N_SLOTS_PER_FRAME) #define PSCHSize (int)(256*OSR) // PSCH length in samples #define PSCHSpace (int)(2560*OSR) // Slot/PSCH spacing in samples #define N_SAMP_PER_SCR_CODE (int)(1024*OSR) // (38400*OSR per frame) Number of resampled samples per scr code available in memory #define N_SAMP_CPICH_CORR (int)(1024*OSR) //(2*2560*OSR) Total length of CPICH correlation in samples, which are broken into parts #define N_PARTS_CPICH_CORR (4) // Number of parts for which CPICH correlation is non-coherently combined #define N_SAMP_PER_PART_CPICH_CORR (N_SAMP_CPICH_CORR/N_PARTS_CPICH_CORR) #define N_CAND_POS_CPICH_CORR (50) // (200) Number of candidate positions selected from correlations of 512 p-scr. codes, where #define N_CAND_PER_SCR_CODE (10) // (10) multiple candidate-positions may correspond to a single P-scr-code #define N_POS_CPICH_CORR_LONG (10) // Number of positions for long-CPICH-correlate in next cell search (Fast mode) // <= N_CAND_POS_CPICH_CORR [Done at known frame-boundaries] #define N_SAMP_CPICH_CORR_LONG (int)(4*2560*OSR) // Total length of long-CPICH-correlation in samples (broken into parts) #define N_PARTS_CPICH_CORR_LONG (8) // Number of parts for which long CPICH-correlation is non-coherently combined #define N_SAMP_PER_PART_CPICH_CORR_LONG (N_SAMP_CPICH_CORR_LONG/N_PARTS_CPICH_CORR_LONG) #define N_SAMP_MAX_CORR_SPREAD (5) // Number of samples correlation is spread on each side //========================================================================================== // Class - Cell Search Candidate //========================================================================================== class cellSearchCandidate { public: int scrCodeNum, idxFrameStarts, corrSpreadInSamples; // corr spread = {0,1,2,3,4,5} __int64 timeFrameStarts; // In micro frames (10^8 micro frames/sec) double cpichCorrRMS, sigRMS; // cpichCorrRMS: CPICH amplitude, sigRMS: RMS of received baseband signal void set_values (int code_num, int idx_frStarts, __int64 time_frStarts); }; void Alpha_cell_search(Ipp32fc *BBsig, int len_BBsig, __int64 time_snapShotStarts, double sampRate, Ipp32fc *CPICHsig, int len_corrSegment, int num_corrSegments, cellSearchCandidate *scrCodeTbl, int num_elemScrCodeTbl); void Beta(Ipp32fc *BBsig, int len_BBsig, __int64 time_snapShotStarts, double sampRate, Ipp32fc *CPICHsig, int len_corrSegment, int num_corrSegments, cellSearchCandidate *scrCodeTbl, int num_candToScan); // CUDA Stuff #define CUDACORR 1 //#define IPPCORR 1 #ifdef CUDACORR #ifdef IPPCORR #define CUDACORRCHECK 1 #endif #endif //#define CUDACORRCHECK 1 void CUDAtest();