Skip to content

komm.SincPulse

Sinc pulse. It is a pulse with waveform given by $$ p(t) = \frac{\sin(\pi t)}{\pi t} = \sinc(t). $$

The waveform of the sinc pulse is depicted below.

Sinc pulse.

Parameters:

(No parameters)

waveform()

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

For the sinc pulse, it is given by $$ p(t) = \sinc(t). $$

Examples:

>>> pulse = komm.SincPulse()
>>> 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.3  , 0.637, 0.9  , 1.   , 0.9  , 0.637, 0.3  , 0.   ])

spectrum()

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

For the sinc pulse, it is given by $$ \hat{p}(f) = \rect(f). $$

Examples:

>>> pulse = komm.SincPulse()
>>> 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., 1., 1., 1., 1., 0., 0., 0.])

energy()

The energy $E$ of the pulse.

For the sinc pulse, it is given by $$ E = 1. $$

Examples:

>>> pulse = komm.SincPulse()
>>> pulse.energy()
1.0

autocorrelation()

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

For the sinc pulse, it is given by $$ R(\tau) = \sinc(\tau). $$

Examples:

>>> pulse = komm.SincPulse()
>>> 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.3  , 0.637, 0.9  , 1.   , 0.9  , 0.637, 0.3  , 0.   ])

energy_spectral_density()

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

For the sinc pulse, it is given by $$ S(f) = \rect(f). $$

Examples:

>>> pulse = komm.SincPulse()
>>> pulse.energy_spectral_density(
...     [-1.0, -0.75, -0.5, -0.25, 0.0, 0.25, 0.5, 0.75, 1.0],
... )
array([0., 0., 1., 1., 1., 1., 0., 0., 0.])

support tuple[float, float] cached property

The support of the pulse waveform $p(t)$, defined as the interval $[a, b]$ where $p(t)$ is non-zero.

For the sinc pulse, the support is given by $(-\infty, \infty)$.

Examples:

>>> pulse = komm.SincPulse()
>>> pulse.support
(-inf, inf)

taps()

Returns the FIR taps of the pulse.

Parameters:

  • samples_per_symbol (int)

    The number of samples per symbol.

  • span (tuple[int, int] | None)

    The time span to consider for the taps. This parameter is optional for pulses with finite support (defaults to $[0, 1]$), but required for pulses with infinite support.

Examples:

>>> pulse = komm.SincPulse()
>>> pulse.taps(samples_per_symbol=4, span=(-1, 1)).round(3)
array([0.   , 0.3  , 0.637, 0.9  , 1.   , 0.9  , 0.637, 0.3  , 0.   ])
>>> pulse.taps(samples_per_symbol=4, span=(-16, 16)).shape
(129,)

root()

Returns the square-root version of the pulse, defined as the pulse whose spectrum is given by the square root of the spectrum of the original pulse. This method is only implemented for Nyquist pulses.

For the sinc pulse, the square-root version is the sinc pulse itself, since its spectrum only takes the values $0$ and $1$.

Examples:

>>> pulse = komm.SincPulse().root()
>>> pulse
SincPulse()