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)


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.

• 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. – Dan Boschen Jun 26 at 12:03
• @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. – Andy Walls Jun 26 at 12:40