VMSK Simulation

Here are the results of a straightforward software simulation of VMSK.

I've chosen to simulate the so-called (7,8,9) VMSK code using a sampling rate of 16 samples per data bit. So if the data bit is a zero, the VMSK modulator generates 7 samples of +1 followed by 9 samples of -1. If the data bit is a one, we generate 9 samples of +1 followed by 7 samples of -1. The simulation repeats this for 4096 randomly generated data bits.

Then I generate an "eye pattern" of the unfiltered VMSK baseband signal:

An eye pattern is a popular time-domain (oscilloscope) representation of a digital signal where the "horizontal sweep" is synchronized to the bit rate. Each bit begins at the left edge and ends at the right, with successive bits all graphed on top of each other. Depending on the pulse shape, noise, intersymbol interference and filtering, the waveforms for the different bits may jumble or overlap at the edges of the eye. But at the center of each bit, the waveforms are supposed to "open up" according to the bit being sent, as that's where the demodulator has to make a decision. This resemblance to an open (or closed) eye is where the term comes from. Eye patterns are a very useful tool for analyzing the quality of a digital signal.

My next step is to compute the spectrum of the encoded VMSK signal using the Fast Fourier Transform. This performs the same function as a spectrum analyzer, except that since the implementation is entirely in a digital computer the usual sources of noise and intermodulation distortion are not present. Here it is:

Here the horizontal axis represents frequency, f, relative to the RF carrier, in units equal to the data rate. For example, if the carrier frequency is 24 MHz and the data rate is 1 Mb/s, then f=0 corresponds to 24 MHz and f=+5 corresponds to 29 MHz.

Note the broad "grass" along with the big spikes at integral multiples of the data rate. The grass has a sin(x)/x shape with the first nulls occurring right at the edges of the plot, i.e., at f=+/-8. This is because the data-bearing part of the (7,8,9) VMSK data pulse is only 1/8 of a bit wide. If the pulse shape were conventional NRZ lasting the full bit, the grass would be higher in amplitude, its first null would occur at f=+/-1 with additional nulls at other non-zero integral multiples of the data rate, and there would be no narrowband spikes.

Once again we see how unfiltered VMSK is actually much wider than a conventional NRZ/BPSK signal of the same data rate, although its minimum Nyquist bandwidth is the same.

Pay special attention to the tall spike at f=+1. This is the one Walker claims as the only important part of his VMSK signal. (Because the spectrum is symmetrical around zero frequency, we could just as well look at the spike at f=-1, which would correspond to the lower sideband of an RF-modulated signal.)

Now let's do some filtering. Since Walker claims the bandwidth of VMSK is arbitrarily small, we can simply set all of the frequency domain components to zero except for the big peak at f=+1 that Walker claims is the only important part of his signal. Here's what the spectrum looks like when we're done:

I emphasize that I've applied the most ideal, perfect filter possible. It has exactly zero response (infinite dB rejection) at every frequency but one. I introduce no amplitude change, group delay or phase shift whatsoever at this one frequency; it is left completely unchanged. The only difference is that the supposedly useless "grass" at the other frequencies is now completely gone.

To be completely rigorous, my filter is not infinitely narrow; it has a bandwidth of one FFT frequency "bin". There are 65,536 such bins in our spectrum, and since I used 16 samples to encode each bit in the time domain the width of each frequency bin is (16 / 65536) = 1/4096 times the data rate. I.e., if the data rate is 1Mb/s, then one frequency bin is 1,000,000/4096 = 244 Hz wide. That's my filter bandwidth.

Now let's use an inverse FFT to convert this nice, clean, grass-free signal back into the time domain and generate a new eye pattern. Here's what we get:

We now have a simple, unmodulated sine wave that is exactly the same for every data bit. The "eye" visible in the original unfiltered eye pattern, i.e., the opening between samples 7 and 9, is now completely gone. The zero crossings now occur at the same time for every bit. There is no longer any way (other than extrasensory perception) for the receiver to tell the difference between a one and a zero.

So the conclusion is inescapable. The fact that Walker's prototype modems work (or are claimed to work) can only be due to the presence of "grass" that has not been completely removed by his filters.

Of course, to anyone familiar with Fourier theory, all this was killing a fly with a battleship. It was like writing a computer simulation to prove that 2+2=4.

Here is the complete C source code, including the FFT subroutines, for the simulation that produced these graphs. It is written for a Linux/Unix environment. The program produces four output files for the open-source xplot program that runs under the X window system.

15 March 2001