# Simplest All Digital GMSK Modulator

How to simply implement an all digital GMSK modulator with no multipliers? The implementation approach should be applicable to GMSK modulation with $$BT=0.5$$ or less (where intentional ISI is introduced to obtain higher spectral efficiency).

By "all digital" I am referring to the baseband modulation. The result will be IQ samples that fully represent the GMSK modulation at baseband.

The acceptable answer will be the simplest implementation with no multipliers needed that will generate a GMSK modulated signal that has a correlation coefficient with a "perfect" GMSK signal $$> 0.999$$ and a spectrum that will meet the spectral mask for GSM as shown in the plot below (which has a symbol period of $$\frac{48}{13}\ \mu s$$ (i.e., $$270.8333 \ \rm kHz$$), that I got from this website.

• So, it’s been 5 years and still no conclusive answer? :) Aug 11, 2022 at 15:42
• @Gilles I will give hints if you want to take a shot at it Aug 11, 2022 at 22:32
• I’m simply fascinated by the question. I’ll sit and learn from the upcoming answers. Aug 12, 2022 at 7:30

I don't actually have an answer, just ideas, but since this is a riddle, I might of contribute these as (hidden as spoiler text) hints for others, which might have ideas that I miss:

So, MSK is often introduced as

represented by a half-symbol time-offset BPSK on the I and Q components. That comes in very handy here (avoiding multiplicators) – BPSK can be implemened as $\pm 1$ on the respective axis. The idea is that at the boundary between symbols periods, the phase is continuous, which w.l.o.g cannot be realized in any other way than by having zeros exactly at the point where the other component carries the BPSK constellation point. Thus, the minimal viable MSK modulation has

\begin{align} I&= [- {s_1} && 0 && -{s_2} && 0 && -{s_3}&\dots ]\\Q&= [ 0 && s_1 && 0 && s_2 && 0 & \dots ] \end{align}

as samples, with $s_n$ being the bits to be transmitted represented as $\pm 1$ differentially. That doesn't look very much like CPFSK at all, but one has to realize that the advance between two consecutive samples takes two different values:

• For samples that have an even index $n$, the following sample always is -90° further, no matter which value $s_{n/2}$ has

• For samples that have an odd index $n$, the phase advance is -90° if $s_{\lfloor n/2\rfloor}=s_{(n+1)/2}$, and +90° in case the bits differ.

Considering the phase difference of consecutive samples as the instantaneous frequency, we thus see that we get an alternation of a constant $-\frac \pi2$ between samples and either $0$ or $-\frac \pi2$, carrying the information. I'm not even convinced any more this fulfills the criteria for being MSK.

Since we'd probably want spectral symmetry, we'd employ the usual tricks to shift the signal in frequency by half the sampling rate (i.e. "multiplication" with $[-1\,+1\,-1\,+1\,\dots]$).

Oooh and I'd have an approach for the Gaussian pulse shaper, but that simply applies

the fact that repeated convolution of something with itself converges against a Gaussian – same reason the CLT works.

That means I can just cascade a set of moving average filters – all of which work without multipliers to get an approximated Gauss filter.

Sadly, that doesn't inherently solve the issue

that my MSK approach above basically only allows 1 sample per symbol – but we might at least recreate the inter-symbol dependence characteristic of GMSK trellises.

• Good and helpful contribution Marcus! Apr 14, 2017 at 17:34
• Thanks! Had another idea, extended. Wondering why I didn't think of this yesterday. Apr 15, 2017 at 17:50
• @MarcusMueller- Let me say that you are so nearly there! I think you solved the tough part including referencing CLT, and note that you can do exactly what you said quite well with 2 pt moving averages. Please continue!! It is in your reach. The solution in mind does require multiple samples per symbol so would be limited to lower rate solutions... The solution is interesting to me as converges as one and the same what is commonly shown as two different approaches/architectures to implementing GMSK. I say no more... Apr 15, 2017 at 17:54
• Hm, what I'm considering now is a simple interpolating CIC with a short impulse response, truncated at every symbol boundary, but there's something wrong with that approach Apr 15, 2017 at 17:57
• Did you give up on this? You are almost there along the path of your Gaussian pulse shaper! I may have to start giving hints. How do you make a partial response GMSK transmitter with a Gaussian pulse shaping filter?? Apr 18, 2017 at 11:10