# Pulse shaping with RRC : Number of taps

I am running a BPSK flowgraph in GNU Radio which is based on RRC pulse shape. I noticed that the BER is quite poor when the number of taps is low. However, using the number of taps around $20\times Samples\_Per\_Symbol$ result in performance close to theory. I found the above number through trial and error and I was wondering if there was any general formula for determining the number of taps for RRC pulse shaping.

Regards,

Moses.

See pages 5 and 6 and the plots on the following pages specific to number of samples per symbol in this very helpful reference by Ken Gentile on designing RRC pulse shape filters:

http://www.analog.com/media/en/technical-documentation/application-notes/AN-922.pdf

An example I have previously done shows the consideration of filter length (how many symbols does the filter span) and number of samples per symbol. The top plot shows a 100 tap RRC filter with only 2 samples per symbol and the lower plot it is the same number of taps but 10 samples per symbol.

Observe the following key points that illustrate some of the important considerations involved: With 2 samples per symbol the filter impulse response extends further in time. This results in a greater stop band attenuation for the same filter roll-off factor (Alpha) and complexity (number of taps). The difference is particularly dominant close to the band edge in the area of 700 Hz in the plots. In the figures shown we see that we get approximately 70 dB of attenuation for 2 samples per symbol but only approximately 35 dB of attenuation for 10 samples per symbol. However the overall frequency of the digital spectrum is most constrained for 2 samples per symbol; this is resolved with subsequent up-sampling or consideration elsewhere in our overall system design. As long as those considerations are properly addressed, according to Nyquist sampling theorem we will achieve the full integrity of our RRC filter design (with only 2 samples per symbol!). In the second case, because of the higher number of samples per symbol, with the same number of filter taps (complexity) the impulse response of the filter does not extend as far in time, and is therefore truncated earlier. This degrades overall performance as visible here with the inferior filter rejection. However the greater overall digital frequency spectrum is wider. An efficient design would choose to do two samples per symbol for such a "shaping" filter and then upsample to the bandwidth needed to be compatible with the analog design or other bandwidth considerations, since the upsampling filter design would be relatively simpler. Also to be considered for many applications is a polyphase RRC upsampling filter structure. In this case we would choose an even number of taps and incorporate the upsampling as described further in this response: How to implement Polyphase filter?

Keep in mind, as explained further in this post: Why root raised cosine filter can eliminate intersymbol interference (ISI) ? the entire motivation to do RRC filtering is spectral efficiency: hence regulatory requirements (spectral mask) will often dictate the rejection ultimately needed in the RRC filter (as long as subsequent analog stages, in particular the power amplifier, maintain sufficient linearity to not undo the shaping we so carefully applied...resulting in "spectral regrowth!).

• Not nitpicking, but, by any chance, did you mean "frequency" here: "With 2 samples per symbol the filter impulse response extends further in time."? Aug 8, 2018 at 6:24
• @aconcernedcitizen No, I did indeed mean time. The impulse response is in the time domain (the Fourier Transform of the impulse response is the frequency response of the filter). The coefficients of the FIR filter implementing the RRC is the impulse response of the filter, so by having a longer filter, it will extend further in time. Aug 8, 2018 at 9:24
• Yes, but for some reason I thought you were referring to the picture, in the frequency domain. I might need new glasses, preferably ones that do not encourage skimming over the text. :-) Aug 8, 2018 at 19:41
• For the first case (2 sps), the Matlab snippet gives 161 taps. Shouldn't it be rcosine(1,2,'sqrt',0.25,20)? Feb 26, 2020 at 21:03
• @David I updated it to be consistent number of taps for each and migrated to a Python implementation. Feb 27, 2020 at 14:45