I am using a FIR filter to generate Root Raised Cosine pulse for an IQ modulator.

How can I predict the peak value at the output, depending on the roll-off factor of the pulse ?

Knowing that :

  • FIR taps are root raised cosine pulse, with a peak value of 1.0
  • Input of the filter is I or Q channel, valued +1 or -1, upsampled by adding 0s between each symbol

By experimenting, I can see that depending on the input sequence and the roll-off factor, the peak output varies. But I can't predict it theoretically.

This plot illustrates my question (while this particular sequence may not generates the maximum peak that I want to predict) :

RRC pulse shaped signal


You can derive an upper bound for the peak value of the output signal depending on the filter's impulse response. The output is given by


where $h[k]$ is the length $N$ impulse response, and $x[k]$ is the input signal. From $(1)$ we have

$$|y[n]|=\left|\sum_{k=0}^{N-1}h[k]x[n-k]\right|\le\sum_{k=0}^{N-1}|h[k]||x[n-k]|\le |x[n]|_{\text{max}}\sum_{k=0}^{N-1}|h[k]|\tag{2}$$

Since in your case $|x[n]|_{\text{max}}=1$, the magnitude of the peak value of the output signal is guaranteed to be smaller than the sum of the absolute value of all filter coefficients.

However, since your input signal is upsampled by a factor $L$ (i.e., it has $L-1$ zeros between two signal values), we can come up with an improved (i.e., tighter) bound:

$$|y[n]|\le\max_{l=0,1,\ldots L-1}\sum_{k=0}^{\lfloor \frac{N-1}{L}\rfloor}|h[l+kL]|$$

because in the sums $(1)$ and $(2)$ only every $L^{th}$ filter coefficient is multiplied by a non-zero input value.

The following Matlab/Octave script shows the computation of the bound:

h = randn(50,1);    % some impulse response
x = randi([-1,1],1,20); % input signal
L = 10;         % interpolation factor
x = [x;zeros(L-1,20)]; x=x(:);  % interpolate x
y = filter(h,1,x);  % compute output signal
p = max(abs(y));    % peak value

% compute bound
b = zeros(L,1);
for i = 1:L, b(i) = sum(abs(h(i:L:end))); end
b = max(b);

% show peak value and bound

A few runs of the script show that the bound is pretty tight.


EDIT: After you edited it, I see that your question is actually about the peak amplitude of an analog train of RRC pulses. This question has no simple answer. One good reference is:

Daumont, S.; Rihawi, B.; Lout, Y., "Root-Raised Cosine filter influences on PAPR distribution of single carrier signals," in Communications, Control and Signal Processing, 2008. ISCCSP 2008. 3rd International Symposium on , vol., no., pp.841-845, 12-14 March 2008. DOI Link: http://dx.doi.org/10.1109/ISCCSP.2008.4537340

Original answer:

The peak value of a root raised cosine (RRC) pulse is given by $$\frac1{\sqrt{T_p}}\left(1-\beta+\frac{4\beta}\pi\right),$$ where $\beta$ is the roll-off factor and $T_p$ is the symbol interval.

Having said this, the numerical implementation in Matlab (or similar) is slightly more nuanced. What I do is this:

First define the RRC pulse as a vector p, but normalized in such a way that the value of sum(p.*p) is 1:

nor = sum(p.*p);
p = sqrt(1/nor)*p;

Then, multiply p by the amplitude you want; this is the pulse that is transmitted:

s = a*p;

Then filter s with a matched filter (equal to p because the pulse is symmetrical):

r = conv(s,p);

The value of r will be equal to a.

  • $\begingroup$ Thanks, it seems like PAPR is the term I was looking for. To be precise, it really is a discrete train of RRC pulses, but it probably makes no difference regarding PAPR ? $\endgroup$ – omnit Feb 11 '16 at 6:42
  • $\begingroup$ I think that, as long as you oversample the pulses, it should make no noticeable difference to the PAPR with analog pulses. $\endgroup$ – MBaz Feb 11 '16 at 14:52

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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