Skip to content

File tonemeas_core.h

File List > inc > tonemeas > tonemeas_core.h

Go to the documentation of this file

#ifndef TONEMEAS_CORE_H
#define TONEMEAS_CORE_H

#include "clib_common.h"
#include "jm_perf.h"
#include "measure/measure_core.h"
#include "psd/psd_core.h"
#include <complex.h>
#include "fft/fft_core.h"
#include "spectral/spectral_core.h"
#include "acc_trace/acc_trace_core.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
    psd_state_t *psd;     /* shared averaging PSD core (window+FFT+avg)   */
    float         *pwr;     /* metric working buffer, length nfft          */
    unsigned char *excl;    /* DC/fundamental/harmonic exclusion mask      */
    double enbw;            /* window equivalent noise bandwidth (bins)    */
    double beta;            /* auto-selected Kaiser shape (from DR target)  */
    size_t lobe_bins;       /* main-lobe half-width L, for power integration*/
    size_t spur_guard_bins; /* fundamental keep-out for spur search (>= L)  */
    size_t n;               /* capture / frame length                      */
    size_t nfft;            /* zero-padded transform length                */
    size_t n_harm;          /* harmonics tracked (k = 2..n_harm)           */
    double fs;              /* sample rate (Hz)                            */
    size_t dc_guard;        /* extra bins excluded beyond L around DC      */
} tonemeas_state_t;

tonemeas_state_t *tonemeas_create(size_t n, double fs, size_t n_harmonics,
                                  double full_scale, size_t bits,
                                  double dynamic_range_db, size_t dc_guard);

void tonemeas_destroy(tonemeas_state_t *state);

void tonemeas_reset(tonemeas_state_t *state);

tone_meas_t tonemeas_analyze(tonemeas_state_t *state, const float *x,
                             size_t n_in);

tone_meas_t tonemeas_analyze_complex(tonemeas_state_t *state,
                                     const float complex *x, size_t n_in);

time_stats_t tonemeas_time_stats(tonemeas_state_t *state, const float *x,
                                 size_t n_in);

size_t tonemeas_spectrum_dbfs_max_out(tonemeas_state_t *state);

size_t tonemeas_spectrum_dbfs(tonemeas_state_t *state, const float *x,
                              size_t x_len, float *out);

#ifdef __cplusplus
}
#endif

#endif /* TONEMEAS_CORE_H */