Skip to content

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.

ppe_state_t * ppe_create (
    size_t max_len,
    double max_rate
) 

Parameters:

  • max_len Maximum input sequence length (>= 4).
  • max_rate Chirp-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.

void ppe_destroy (
    ppe_state_t * state
) 

Parameters:

  • state May be NULL.

function ppe_estimate

Estimate (frequency, chirp rate) of in via the coherent surface.

ppe_result_t ppe_estimate (
    ppe_state_t * state,
    const float complex * in,
    size_t n_in
) 

Parameters:

  • state Must be non-NULL.
  • in Complex sequence (modulation already stripped by the caller).
  • n_in Length, 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).

void ppe_reset (
    ppe_state_t * state
) 



The documentation for this class was generated from the following file native/inc/ppe/ppe_core.h