komm.RootRaisedCosinePulse
Root-raised-cosine pulse. It is a pulse whose spectrum is given by the square root of the spectrum of the raised cosine pulse with same roll-off factor.
The waveform of the root-raised cosine pulse is depicted below for $\alpha = 0.25$, and for $\alpha = 0.75$.
For more details, see Wikipedia: Root-raised-cosine filter.
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 root-raised-cosine pulse, it is given by $$ p(t) = \frac{\sin ( 2 \pi f_1 t ) + 4 \alpha t \cos ( 2 \pi f_2 t )}{\pi t ( 1 - (4 \alpha t)^2 )}, $$ where $\alpha$ is the roll-off factor, $f_1 = (1 - \alpha) / 2$, and $f_2 = (1 + \alpha) / 2$.
Examples:
>>> pulse = komm.RootRaisedCosinePulse(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.064, 0.238, 0.622, 0.943, 1.068, 0.943, 0.622, 0.238,
-0.064])
spectrum()
The spectrum $\hat{p}(f)$ of the pulse.
Examples:
>>> pulse = komm.RootRaisedCosinePulse(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],
... )).round(3)
array([0. , 0. , 0.707, 1. , 1. , 1. , 0.707, 0. , 0. ])
autocorrelation()
The autocorrelation function $R(\tau)$ of the pulse.
For the root-raised-cosine pulse, it is given by $$ R(\tau) = \sinc(\tau) \frac{\cos(\pi \alpha \tau)}{1 - (2 \alpha \tau)^2}. $$
Examples:
>>> pulse = komm.RootRaisedCosinePulse(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. , 0.29 , 0.627, 0.897, 1. , 0.897, 0.627, 0.29 , 0. ])
energy_density_spectrum()
The energy density spectrum $S(f)$ of the pulse.
For the root-raised-cosine pulse, it is given by $$ S(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} $$
Examples:
>>> pulse = komm.RootRaisedCosinePulse(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],
... ).round(3)
array([0. , 0. , 0.5, 1. , 1. , 1. , 0.5, 0. , 0. ])