# Upsampling before performing pulse shaping

I know what an upsampler does. We insert L-1 zeros between the samples. As a result, it creates spectral repetitions. What if we have a symbol impulse stream and then we apply a Root Raised Cosine Filter, this would automatically perform pulse shaping. Why do we need to upsample that symbol stream to cause interpolation? The Pulse shaping filter is doing that.

Please explain intuitively if possible because I have been stuck on this topic for a while. Thank you in advance!

• why do you think that the pulse shaping filter creates interpolation ? Commented Oct 14, 2017 at 13:34
• Interpolation is estimating values that the signal might have taken between the sample points. It can be done by either performing zero insertion or by doing a zero order hold. Now one can think of the impulse response of Root Raised cosine filter as making an analogue signal for discrete pulses, obeying the Nyquist Criterion to remove ISI. Btw to people who dislike the question, this is educational and not there to ruin your mood. Commented Oct 14, 2017 at 15:10

The reason is that you want to space the raised-cosine pulses by the symbol interval, $T_p$. Consider the signal you want to create: $$s(t) = \sum_k a_k p(t-kT_p),$$ where $p(t)$ is your prototype raised-cosine pulse, and $a_k$ are the symbols. Notice that pulses are spaced $T_p$ seconds.

To re-create this with a filter, you can write the equation for the signal as follows: $$s(t)=\sum_k p(t) \ast a_k\delta(t-kT_p),$$ where $p(t)$ is interpreted as the filter's impulse response. Notice that the impulses are spaced $T_p$ seconds, and this results in the raised-cosine pulses being spaced by the same amount.

If you want to simulate this process in discrete-time in Matlab or similar tools, then you can create a vector p for $p(t)$, and a vector d for $a_k\delta(t-kT_p)$. Let's say your symbols are stored in vector a. Then, you can create d by upsampling a in such a way that there are $T_p$ seconds between symbols:

d = [ a[1], 0, ..., 0, a[2], 0, ..., 0, a[3], 0, .... ]


You need to insert as many 0s as necessary, according to your sampling frequency, to have $T_p$ seconds between symbols.

Then, you can generate the vector s corresponding to $s(t)$ with s=conv(p,d).

• Hi MBaz :) The setup of an RRC filter requires the time domain input to the RRC function to already include T_sym or T_pulse or T_p. This already gets the x-domain zero-crossings of the impulse response of the RRC to be the time period of a symbol for zero ISI. So I can convolve my RRC across a signal with Tsym without requiring upsampling? I am confused then by your answer here, How does this fit with what you say here, thank you Commented Feb 20, 2021 at 20:47
• "convolve my RRC across a signal with Tsym" -- I don't understand what you mean.
– MBaz
Commented Feb 20, 2021 at 22:51
• To avoid ISI, the input to the RRC pulse-shaping filter must be spaced by the symbol interval. There's no way around that.
– MBaz
Commented Feb 20, 2021 at 22:52
• Hi MBaz, I meant I convolve my RRC with a signal that already has has its symbols spaced by Tsym. I thought last night and I think the above relates to just having numbers in an array representing symbols. Those symbols should then be spaced out by Tsym, where the zeros between them are spaced Tsamp. But my thought is why Zeros, why not sample and hold, i.e. first symbol is 2, then the next 20 samples is also 2. Then a new symbol starts at sample 21, where Tsym =20 samples Commented Feb 21, 2021 at 9:10
• I suggest you try it out and see the consequences (hint: it won't work). Keep in mind that each impulse at the input produces one complete pulse at the output. If you have 20 consecutive samples equal to 2, you produce the superposition of 20 pulses with amplitude 2. That's not what you want.
– MBaz
Commented Feb 21, 2021 at 15:30