Skip to content

komm.RaisedCosinePulse

Raised-cosine pulse. For a given roll-off factor $\alpha$ satisfing $0 \leq \alpha \leq 1$, it is a pulse with spectrum given by $$ \hat{p}(f) = \begin{cases} 1, & |f| \leq f_1, \\[1ex] \dfrac{1}{2} \left( 1 + \cos \left( \pi \dfrac{|f| - f_1}{f_2 - f_1}\right) \right), & f_1 \leq |f| \leq f_2, \\[1ex] 0, & \text{otherwise}. \end{cases} $$ where $f_1 = (1 - \alpha) / 2$ and $f_2 = (1 + \alpha) / 2$.

The waveform of the raised-cosine pulse is depicted below for $\alpha = 0.25$, and for $\alpha = 0.75$.

Raised-cosine pulse with roll-off factor 0.25. Raised-cosine pulse with roll-off factor 0.75.

For more details, see Wikipedia: Raised-cosine filter.

Notes
  • For $\alpha = 0$ it reduces to the sinc pulse.
  • For $\alpha = 1$ it becomes what is known as the full cosine roll-off pulse.

Attributes:

  • rolloff (float)

    The roll-off factor $\alpha$ of the pulse. Must satisfy $0 \leq \alpha \leq 1$. The default value is 1.0.

waveform()

The waveform $p(t)$ of the pulse.

For the raised-cosine pulse, it is given by $$ p(t) = \sinc(t) \frac{\cos(\pi \alpha t)}{1 - (2 \alpha t)^2}. $$

Examples:

>>> pulse = komm.RaisedCosinePulse(rolloff=0.25)
>>> pulse.waveform(
...     [-1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0],
... ).round(3)
array([0.   , 0.29 , 0.627, 0.897, 1.   , 0.897, 0.627, 0.29 , 0.   ])

spectrum()

The spectrum $\hat{p}(f)$ of the pulse.

Examples:

>>> pulse = komm.RaisedCosinePulse(rolloff=0.25)
>>> np.abs(pulse.spectrum(
...     [-1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0],
... ))
array([0. , 0. , 0.5, 1. , 1. , 1. , 0.5, 0. , 0. ])

autocorrelation()

The autocorrelation function $R(\tau)$ of the pulse.

For the raised-cosine pulse, it is given by $$ R(\tau) = \sinc(\tau) \frac{\cos(\pi \alpha \tau)}{1 - (2 \alpha \tau)^2} - \frac{\alpha}{4} \sinc(\alpha \tau) \frac{\cos(\pi \tau)}{1 - (\alpha \tau)^2}. $$

Examples:

>>> pulse = komm.RaisedCosinePulse(rolloff=0.25)
>>> pulse.autocorrelation(
...     [-1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0],
... ).round(3)
array([0.06 , 0.334, 0.627, 0.853, 0.938, 0.853, 0.627, 0.334, 0.06 ])

energy_density_spectrum()

The energy density spectrum $S(f)$ of the pulse.

For the raised-cosine pulse, it is given by $$ S(f) = \begin{cases} 1, & |f| \leq f_1, \\[1ex] \dfrac{1}{4} \left( 1 + \cos \left( \pi \dfrac{|f| - f_1}{f_2 - f_1}\right) \right)^2, & f_1 \leq |f| \leq f_2, \\[1ex] 0, & \text{otherwise}. \end{cases} $$

Examples:

>>> pulse = komm.RaisedCosinePulse(rolloff=0.25)
>>> pulse.energy_density_spectrum(
...     [-1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0],
... )
array([0.  , 0.  , 0.25, 1.  , 1.  , 1.  , 0.25, 0.  , 0.  ])