I'm looking at the GNU Radio GMSK modulator block. The Gaussian taps are somehow convolved with a rectangular window with 4 * samples-per-symbol taps owing to the fact for GMSK, the filter spans four symbols. I was wondering if anyone could elaborate why do we convolve the Gaussian taps with the square wave?

self.gaussian_taps = filter.firdes.gaussian(
        1,             # gain
        samples_per_symbol,    # symbol_rate
        bt,            # bandwidth * symbol time
        ntaps                  # number of taps
self.sqwave = (1,) * samples_per_symbol       # rectangular window
self.taps = numpy.convolve(numpy.array(self.gaussian_taps),numpy.array(self.sqwave))
self.gaussian_filter = filter.interp_fir_filter_fff(samples_per_symbol, self.taps)

1 Answer 1


Let's say you want to filter a signal $x[n]$ through a Gaussian filter with impulse response $h_g[n]$ and a Moving Average (the "sqwave") filter with impulse response $h_s[n]$. Then the resulting operation is

$$y[n] = h_s[n] * (h_g[n] * x[n]) = (h_s[n] * h_g[n]) * x[n]$$

So the a priori convolution of the two filter tap sets into one filter taps set, just reduces the two filtering operations into one filtering operation.

The Moving Average filter is just a low pass filter with a poor transition band and poor sidelobe supression. (The one used here isn't even normalized to unity gain.)

I can't definitely answer "why?", except to say that it looks like someone wanted to add a cheap low pass filter as a sort of channel filter. That moving average filter has been there since 2007, when GNURadio's git history starts. The old CVS repositories aren't on-line anymore, so the original rationale is probably lost to history.

  • $\begingroup$ Yes in implementations I have seen you would properly pass an impulse through the filter, and additionally you can space the impulses shorter than the symbol duration for partial response signalling approaches (intentional ISI for more bandwidth efficiency). I believe you are correct that it's only purpose is a (rather ineffective 1/f roll-off) low pass filter, or a misunderstood implementation approach. $\endgroup$ Commented Jun 26, 2019 at 12:03
  • 1
    $\begingroup$ @Dan_Boschen Yes, GNURadio's stock GMSK implementation uses a Gaussian Pulse filter that has a duration of 4 symbol times IIRC (even though 3 would probably suffice) to produce the spectral containment and the resulting ISI. $\endgroup$
    – Andy Walls
    Commented Jun 26, 2019 at 12:40

Your Answer

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

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