EDGE: Add 8-PSK modulator and demodulator

Setup correlator and detection process similar to the GMSK
receiver chain. Require 4 SPS sampling on both Rx and Tx paths
as 1 SPS sampling adds too much distoration for 8-PSK recovery.
Core receiver operations still run at 1 SPS with the exception
of fractional delay filtering, which runs at the higher rate.

Perform linear equalization to handle the Gaussian pulse
induced ISI. The fixed impulse response used for equalizer tap
calculation consists of combined EDGE pulse shape filter and
effects of the downsampling filter. Note that the non-adaptive
equalizer corrects for modulation induced band limiting and
does not account for or compensate for fading channel effects.

Signed-off-by: Tom Tsou <tom.tsou@ettus.com>
diff --git a/Transceiver52M/sigProcLib.h b/Transceiver52M/sigProcLib.h
index 8ff8246..2dcc97d 100644
--- a/Transceiver52M/sigProcLib.h
+++ b/Transceiver52M/sigProcLib.h
@@ -104,6 +104,13 @@
 			    int guardPeriodLength,
 			    int sps, bool emptyPulse = false);
 
+/** 8-PSK modulate a burst of bits */
+signalVector *modulateEdgeBurst(const BitVector &bits,
+                                int sps, bool emptyPulse = false);
+
+/** Generate a EDGE burst with random payload - 4 SPS (625 samples) only */
+signalVector *generateEdgeBurst(int tsc);
+
 /** Sinc function */
 float sinc(float x);
 
@@ -202,6 +209,33 @@
                         unsigned maxTOA);
 
 /**
+        EDGE burst detector
+        @param burst The received GSM burst of interest
+ 
+        @param detectThreshold The threshold that the received burst's post-correlator SNR is compared against to determine validity.
+        @param sps The number of samples per GSM symbol.
+        @param amplitude The estimated amplitude of received TSC burst.
+        @param TOA The estimate time-of-arrival of received TSC burst.
+        @param maxTOA The maximum expected time-of-arrival
+        @return positive if threshold value is reached, negative on error, zero otherwise
+*/
+int detectEdgeBurst(signalVector &burst,
+                    unsigned TSC,
+                    float detectThreshold,
+                    int sps,
+                    complex &amplitude,
+                    float &TOA,
+                    unsigned maxTOA);
+
+/**
+	Downsample 4 SPS to 1 SPS using a polyphase filterbank
+        @param burst Input burst of at least 624 symbols
+        @return Decimated signal vector of 156 symbols
+*/
+
+signalVector *downsampleBurst(signalVector &burst);
+
+/**
 	Decimate a vector.
         @param wVector The vector of interest.
         @param factor Decimation factor.
@@ -220,4 +254,16 @@
 */
 SoftVector *demodulateBurst(signalVector &rxBurst, int sps,
                             complex channel, float TOA);
+
+/**
+        Demodulate 8-PSK EDGE burst with soft symbol ooutput
+	@param rxBurst The burst to be demodulated.
+        @param sps The number of samples per GSM symbol.
+        @param channel The amplitude estimate of the received burst.
+        @param TOA The time-of-arrival of the received burst.
+        @return The demodulated bit sequence.
+*/
+SoftVector *demodEdgeBurst(signalVector &rxBurst, int sps,
+                           complex channel, float TOA);
+
 #endif /* SIGPROCLIB_H */