ped_init
Phase error detector for BPSK / M-ASK (squaring loop) and M-PSK ( loop)
Calling sequence
ped = ped_init(tp,M[,tc])
ped = ped_init(tp,M[,tc])
Parameters
- tp:
Type of phase detector (can be 'psk', 'costa', 'psk-atan', 'psk-map', or 'ask')
- M:
Number of possible symbols (
with
being the number of bits per symbol)
- tc:
Time constant for coarse RSSI estimation (expressed in number of samples)
- ped:
Phase error detector object. Fields are: ped.process
: processing function of form [ped,dphi] = process(ped,z)
, with dphi
: phase error, and z
: input sample, other fields are private.
Type of phase detector (can be 'psk', 'costa', 'psk-atan', 'psk-map', or 'ask')
Number of possible symbols ( with
being the number of bits per symbol)
Time constant for coarse RSSI estimation (expressed in number of samples)
Phase error detector object. Fields are: ped.process
: processing function of form [ped,dphi] = process(ped,z)
, with dphi
: phase error, and z
: input sample, other fields are private.
Description
This is a basic phase error detector for M-PSK (or M-ASK). Different type of detectors are supported:
tp = 'psk' The signal is exponentiated by M so as to remove the modulation, the RSSI is coarsly estimated (first order IIR filter), and then the phase error is estimated as:
. This detector is less sensible to noise as the naive atan detector.
tp = 'psk-atan' Arc-tangent phase detector for PSK modulation (also called 'tan-loop'), computed as:
. Be carefull, this detector can be very unreliable at low SNR or when clock recovery is not yet done (very high artificial phase error when the signal magnitude is near 0).
tp = 'psk-costa' Use a costa loop (works only with BPSK or QPSK).
tp = 'ask' If M=2, then use a squaring loop (as for BPSK), otherwise, use a tan-loop.
Example
// Default PED for BPSK (squaring loop) ped = ped_init('psk',2); n = 100; // Test signal : varying phase error from -%pi to +%pi phase = linspace(-%pi,%pi,n)'; z = exp(%i*phase); // Use the PED on the signal "z" detected_phase = ped.process(ped, z); // Notice phase ambiguity due to the squaring clf(); plot(phase,detected_phase); |

Example of phase error detection (here squaring loop, e.g. M=2). Note the phase ambiguity of .