- class sdr.PED
Implements a heuristic phase error detector (PED).
Notes¶
The heuristic data-aided PED computes the angle between the received complex symbols \(\tilde{a}[k]\) and the known transmitted complex symbols \(a[k]\).
\[\theta_{e,DA}[k] = \angle \left( \tilde{a}[k] \cdot a^*[k] \right)\]The heuristic decision-directed PED computes the angle between the received complex symbols \(\tilde{a}[k]\) and the complex symbol decisions \(\hat{a}[k]\).
\[\theta_{e,DD}[k] = \angle \left( \tilde{a}[k] \cdot \hat{a}^*[k] \right)\]References¶
Michael Rice, Digital Communications: A Discrete-Time Approach, Section 7.2.1.
Examples¶
Compare the data-aided and decision-directed PEDs on QPSK modulation.
In [1]: qpsk = sdr.PSK(4) In [2]: ped = sdr.PED()
In [3]: error, da_error = ped.data_aided_error(qpsk); \ ...: error, dd_error = ped.decision_directed_error(qpsk) ...: In [4]: plt.figure(); \ ...: plt.plot(error, da_error, label="Data-aided"); \ ...: plt.plot(error, dd_error, label="Decision-directed"); \ ...: plt.grid(True, linestyle="--"); \ ...: plt.legend(); \ ...: plt.xlabel("Phase of received symbols (radians)"); \ ...: plt.ylabel("Phase error (radians)"); \ ...: plt.title("Comparison of data-aided and decision-directed PEDs on QPSK"); ...:
Observe that the slope of the phase error \(K_p = 1\) is the same for both the data-aided and decision-directed PEDs. Also note that the unambiguous range of the data-aided PED is \([-\pi, \pi)\) and the decision-directed PED is \([-\pi/M, \pi/M)\).
Constructors¶
- PED()
Initializes the PED.
Special methods¶
Methods¶
- data_aided_error(...) tuple[NDArray[float64], NDArray[float64]]
Simulates the average phase error of the data-aided PED using the specified modulation scheme.
- decision_directed_error(...) tuple[NDArray[float64], NDArray[float64]]
Simulates the average phase error of the decision-directed PED using the specified modulation scheme.
Properties¶