sdr.LinearModulation.demodulate(x_hat: ArrayLike) → tuple[NDArray[int_], NDArray[complex_]] Demodulates the pulse-shaped complex samples \(\hat{x}[n]\) into decimal symbol decisions \(\hat{s}[k]\) using matched filtering and maximum-likelihood estimation. Parameters:¶ x_hat: ArrayLike¶The received pulse-shaped complex samples \(\hat{x}[n]\) to demodulate, with sps samples per symbol and length sps * s_hat.size + pulse_shape.size - 1. Returns:¶ The decimal symbol decisions \(\hat{s}[k]\), \(0\) to \(M-1\). The matched filter outputs \(\hat{a}[k]\).