Documentation

## GMSK vs. MSK

Compare, using eye diagrams, Gaussian minimum shift keying (GMSK) and minimum shift keying (MSK) modulation schemes.

Set the samples per symbol variable.

`sps = 8;`

Generate random binary data.

`data = randi([0 1],1000,1);`

Create GMSK and MSK modulators that accept binary inputs. Set the `PulseLength` property of the GMSK modulator to 1.

```gmskMod = comm.GMSKModulator('BitInput',true,'PulseLength',1, ... 'SamplesPerSymbol',sps); mskMod = comm.MSKModulator('BitInput',true,'SamplesPerSymbol',sps);```

Modulate the data using the GMSK and MSK modulators.

```modSigGMSK = gmskMod(data); modSigMSK = mskMod(data);```

Pass the modulated signals through an AWGN channel having an SNR of 30 dB.

```rxSigGMSK = awgn(modSigGMSK,30); rxSigMSK = awgn(modSigMSK,30);```

Plot the eye diagrams of the noisy signals. With the GMSK pulse length set to 1, the eye diagrams are nearly identical.

`eyediagram(rxSigGMSK,sps,1,sps/2)` `eyediagram(rxSigMSK,sps,1,sps/2)` Set the `PulseLength` property of `hGMSK` to 3. Because the property is nontunable, the object must be released first.

```release(gmskMod) gmskMod.PulseLength = 3;```

Generate a modulated signal using the updated GMSK modulator object and pass it through the AWGN channel.

```modSigGMSK = gmskMod(data); rxSigGMSK = awgn(modSigGMSK,30);```

Plot the eye diagram of the GMSK signal. The increased pulse length results in an increase in the number of paths showing that the CPM waveform depends on values of the previous symbols as well as the present symbol.

`eyediagram(rxSigGMSK,sps,1,sps/2)` Experiment by changing the `PulseLength` parameter of `hGMSK` to other values. If you set the property to an even number, you should set `hGMSK.InitialPhaseOffset` to `pi/4` and the offset argument of the `eyediagram` function from `sps/2` to 0 for a better view of the modulated signal. In order to more clearly view the Gaussian pulse shape, you must use scopes that display the phase of the signal, as described in the CPM Phase Tree example.