2
$\begingroup$

I'm trying to modulate array of bits with GMSK modulation with BT=0.3 . What I'm doing is making O-QPSK modulation for given bits, then applying Gaussian filter on I and Q arrays and after that converting it to MSK modulation. Gaussian filter seems to be applied correctly. However the resulting MSK signal does not look similar to the example from book.

Here's my code to convert O-QPSK to MSK:

def msk_mod (i,q,samples_per_symbol):
    i_res=i
    q_res=q
    for k in range(0,int(samples_per_symbol/2)):
        i_res.append(0)
        q_res.insert(0,0)
    for k in range(0,len(i_res)):
        i_res[k]*=np.cos(np.pi*k/(samples_per_symbol)-np.pi/2)
        q_res[k]*=np.sin(np.pi*k/(samples_per_symbol)-np.pi/2)
    return i_res,q_res

that results in I/Q data looking like that I and Q plots respectively

but in the book I/Q data looks like that

enter image description here

$\endgroup$
2
  • $\begingroup$ Just use QPSK! It's much easier in comparison with GMSK. $\endgroup$
    – Johnny
    Aug 30, 2022 at 13:14
  • $\begingroup$ Seems like moderator moved this answer to comment section. I'm gonna mention again, that is not a solution for me. I have to use GMSK in my task. $\endgroup$
    – A N
    Aug 30, 2022 at 14:15

1 Answer 1

4
$\begingroup$

GMSK means that you treat MSK as frequency shift keying, then filter the frequency shift, then generate your signal.

It's done that way because it's almost as easy to generate and demodulate as plain old MSK, the side bands are much suppressed, and it retains the constant-envelope character of MSK.

So this is where you're going wrong:

then applying Gaussian filter on I and Q arrays and after that converting it to MSK modulation

(Note that when you do it your way, you lose the constant envelope character of GMSK -- this is important if you're transmitting with class C amplifiers).

What you should be doing is first finding the frequency deviation, as a non return to zero binary signal (i.e., $f_{msk}(t) \in \pm \frac B 2$ where $B$ is the baud rate). Then find $f(t) = h\left(f_{msk}(t)\right)$ where $h(x(t))$ is a Gaussian filter. Then generate the signal $$x(t) = \cos \left( \int f(t) dt \right).$$

$\endgroup$
1
  • $\begingroup$ If you know the phase, how do you generate a unit-amplitude I/Q signal of that phase? If you know the frequency, how do you generate the phase? Answer those two questions, and I think your question will be answered. $\endgroup$
    – TimWescott
    Aug 31, 2022 at 13:47

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.