GMSK Non Coherent demodulation

Started by LoganathanN 6 years ago4 replieslatest reply 6 years ago426 views

Hi all,

I'm just trying to demodulate the GMSK signal with BT of 0.5 and 224Kbps data rate. Hence F1 - F2 = 112KHz. I'm little bit confused on this demodulation algorithm. I wanted to start from the non coherent demodulation algorithm. Here I'll explain that up to now what I've done and the respective results.

Algorithm : Initially I shift the received signal to Base band by beating with the carrier frequency. Then the shifted signal will be passed through a FIR LPF filter which is having a pass band of 120KHz. This down converted IQ data will be given to block where phase difference will be calculated. The output will be positive for F1 frequency & negative for F2 frequency. Then I'm doing own bit latching algorithm by considering only sign bit of the phase to extract the bit information for every bit interval. This logic working fine up to 20dB SNR (BER 3E-3).

I want to clarify the following things.

1. The implemented algorithm will be correct for the transmitter where F1 & F2 will be switched based on the digital information coming from the gaussian filter. This will not support for the transmitter where Quadrature algorithm (Even bits in I-arm, Qdd bits in Q-arm and delay it one bit time interval) implemented. Is it right?

2. Whether the 240KHz bandwidth will be sufficient to demodulate this 224Kbps data rate signal?

3. With the implemented algorithm, How can I extract the binary information to improve the BER performance?

4.Is any other method is there to improve the BER performance?

I simply want to demodulate the GMSK signal where F1 & F2 is switched based on binary stream.



[ - ]
Reply by dudelsoundSeptember 26, 2017


GMSK is a special case of GFSK and can thus be demodulated as any FM based modulation can be:

A very simple implementation:

Roughly filter your RF signal to exclude disturbing signals (bandwidth = a few MHz), then count zero-crossings per second on the rf signal and integrate it. Subtract the crossings per second your carrier (F1/2 + F2/2) would create. The resilt should be a gauss-filtered ASK signal which you can demodulate very simply (positive amplitude = 1, negative amplitude = -1).

Considering Question 2:

240kHz will be sufficient to demodulate it SOMEHOW - it is pretty narrow and will cut part of the signal energy and cause further inter symbol interference (ISI) and thus worsen your performance.

Considering Question 3:

You could measure the fixed inter symbol interference of your transmission system (that is: send a known sequence and find out, how symbol #1 influences symbol #2 and so on). You can then eliminate this influence by decision feedback (google "decision feedback equalization"). This method is simple, but has certain drawbacks - decision errors worsen your subsequent results. Anothe rmore optimal method in terms of BER performance would be a Viterbi decoder that finds the most likely symbol sequence in a received block of symbols given a know ISI.

[ - ]
Reply by LoganathanNSeptember 26, 2017


Thanks for your reply. Actually the band of interest will be 136MHz to 176MHz (40MHz BW). Within this 99 diifferent channels are operating with the channel spacing of 375KHz. So I cannot open more than 350KHz bandwidth for each channel to avoid adjacent channel rejection. 

Can you please elaborate your implemetation in detail?

Counting zero crossing for every sec and subtract the zero crossing that the carrier would create is fine. In which data I've to perform the integration and in what rate I've to perform it?



[ - ]
Reply by dudelsoundSeptember 26, 2017

Firstly, you will run into trouble if you want good results with a channel spacing this narrow and a data rates that high. Your single channel carrier will significantly reduce the sensitivity in the adjescent channels - it will work if you have enough SNR, but it will reduce your sensitivity a lot.

My simple implementation:

It might be too simple if you need a channel spacing as dense as you said, but anyway:

If your data rate is ~200kHz, you might want to check the integrator every 10^(-6)s or 1us (~5*oversampling). This is what you do: Everytime you detect a zero crossing (or only positive crossings) in your rf signal, you add 1 to the integrator. Every microsecond you subtract 1us*f_carrier from the integrator and read the result. This result is one sample of your approximately five times oversampled GASK data. To eliminate incrementing errors, you might want to add some leakage to the integrator (equivalent to high-passing).

So again:

on every positive zero crossing of your RF signal:

Integrator += 1;

on every microsecond:

Integrator -= f_carrier/1000000;
// Add some leakage - I didn't check if it is a good value
Integrator -= 0.99999 * Integrator;
GASK_out = Integrator;


[ - ]
Reply by LoganathanNSeptember 26, 2017

Hi Markus,

Thanks for your interest towards my query. Surely I'll workout this and come back soon with the results.


Loganathan N