DSPRelated.com
Forums

Issues regarding the implementation of integrator in GMSK modulator

Started by Souparnika512 3 weeks ago4 replieslatest reply 2 weeks ago104 views
I'm trying to implement a GMSK modulator using simulink. Initially, I've passed the signal to a Gaussian filter, then it is passed to an integrator, but I'm not getting the results as expected. Can you please provide an insight regarding the type of integrators that can be used or designed for this purpose within simulink.
[ - ]
Reply by napiermAugust 20, 2024

This block works for me and seems to match what is in the communication block.  It will do GMSK and GFSK.

First is the FIR to provide the shaping of a raw bit and interpolation.  Next is a simple unipolar to bipolar conversion.  Then the modulation gain with is the modulation index/(2 * samples_per_symbol).  Next is the phase accumulator.  Note this is scaled so that 1 = 2*pi.  Also note the modulus function so that the phase is always in the range of [0,1).  Next is the gain by 2*pi and the sin/cos lookup.  The output from this block is baseband modulation so it must be interpolated and rotated up to your final IF frequency.

gmsk_25970.jpg

gmsk2_57396.jpg

%Init code for the mask:

ph_init = ph_off/(2*pi); % Initial phase

Ts = Tb/sps; % Sample time (seconds)

t = linspace(-span/2,span/2,(sps*span+1));

alpha = sqrt(log(2)/2)/(bt);

h = exp(-(t*pi/alpha).^2);

h = h./sum(h); % FIR filter taps







[ - ]
Reply by Souparnika512August 27, 2024

Thank you so much for the great response, I really appreciate it. I also found the masking technique in simulink through your response only and found it very convenient.

I have implemented gmsk modulator with reference to your response and also tried with the implementation of gmsk demodulator. In demodulator, since the phase of the modulated signal needs to be extracted since the information is encoded in phase changes between symbols, I made use of a differential discriminator for that purpose using the multipliers and delay units. And then used a switch to provide a threshold level to get the output in binary. The below shown is the rough draft of the blocks. But however, I'm not getting a good value during error rate calculation. If possible, could you provide an insight on where I went wrong.

In the below shown figure, I and Q are the given inputs.
gmsk_demod.png

gmsk_demod_50556.png


[ - ]
Reply by napiermAugust 27, 2024

There isn't a figure in your response.

I will also say that demod of continuous phase modulation is a difficult problem.  At least it is for me.  I put together a few blocks tinkering with methods for burst demod.  The receiver needs to get a close estimate of frequency, phase, and timing sync and start of packet in the preamble.  These need to be close enough to be able to track with PLLs during the rest of the packet RX.

I could do some of these with various methods but the full solution would be to sample the whole packet and then post process.  Not something I can do with a very modest FPGA.

I couldn't crack it and didn't find anyone who was able/willing help out so I gave up.

Also turns out that the class of IOT devices I am working with widely support GFSK so I used this as the lowest common denominator.

This type of receiver is much simpler.  It finds the average frequency offset in the preamble by averaging.  It also uses cross-correlation to find the center of the data eye.  Then track the timing in the rest of the packet.

BTW, if you sign up for the DSP Online Conference there is a presentation from a couple of years ago that does a wonderful job covering timing synchronization in a receiver.

Hope some of this helps.

Mark Napier

[ - ]
Reply by Souparnika512August 27, 2024

Sure, this was helpful. Will check out the conference presentation.

Also, I've added the figure as an image, I hope it is visible now.