File ppe_core.h¶
FileList > inc > ppe > ppe_core.h
Go to the source code of this file
Feedforward polynomial-phase estimator (frequency + chirp rate). More...
#include "clib_common.h"#include "jm_perf.h"#include "fft/fft_core.h"#include "spectral/spectral_core.h"#include <complex.h>
Classes¶
| Type | Name |
|---|---|
| struct | ppe_result_t Polynomial-phase estimate (one search). |
| struct | ppe_state_t PolyPhaseEstimator state (FFT plan + rate grid + scratch). |
Public Functions¶
| Type | Name |
|---|---|
| ppe_state_t * | ppe_create (size_t max_len, double max_rate) Create a polynomial-phase estimator. |
| void | ppe_destroy (ppe_state_t * state) Destroy an estimator. |
| ppe_result_t | ppe_estimate (ppe_state_t * state, const float complex * in, size_t n_in) Estimate (frequency, chirp rate) of in via the coherent surface. |
| void | ppe_reset (ppe_state_t * state) No-op (the estimator carries no running state). |
Detailed Description¶
Estimates the normalized frequency f (cycles/sample) and chirp rate r (cycles/sample^2) of a complex sequence by a coherent 2-D matched-filter search. For each chirp-rate hypothesis r_i in [-max_rate, +max_rate] the sequence is dechirped (multiplied by exp(-j*pi*r_i*m^2)) and FFT-ed; the resulting (chirp-rate x frequency) surface peaks at the true (r, f), refined sub-bin in both axes by parabolic interpolation. Being fully coherent it is the matched-filter-optimal estimator (holds at low SNR), and it collapses to a single FFT — pure Doppler — when max_rate = 0. One knob therefore spans near-static Doppler through severe LEO chirp.
The caller strips modulation first: data-aided (multiply by conj of the known symbols) keeps full SNR; non-data-aided raises an M-PSK stream to the M-th power (BPSK: square) — which doubles f and r, so the caller halves them.
Stateless by-value analyzer (the measure-suite pattern). Composes fft_core + the spectral_core window / find_peaks free functions.
ppe_state_t *p = ppe_create(4096, 0.0); // Doppler only (single FFT)
ppe_result_t e = ppe_estimate(p, y, n); // e.freq_norm, e.rate_norm
ppe_destroy(p);
Public Functions Documentation¶
function ppe_create¶
Create a polynomial-phase estimator.
Parameters:
max_lenMaximum input sequence length (>= 4).max_rateChirp-rate search half-span (cycles/sample^2); 0 searches frequency only (a single FFT — near-static Doppler).
Returns:
Heap state, or NULL on bad args / allocation failure.
function ppe_destroy¶
Destroy an estimator.
Parameters:
stateMay be NULL.
function ppe_estimate¶
Estimate (frequency, chirp rate) of in via the coherent surface.
Parameters:
stateMust be non-NULL.inComplex sequence (modulation already stripped by the caller).n_inLength, in [4, max_len].
Returns:
The estimate; zeroed if n_in is out of range.
function ppe_reset¶
No-op (the estimator carries no running state).
The documentation for this class was generated from the following file native/inc/ppe/ppe_core.h