26 #if !defined(_SPANDSP_TONE_DETECT_H_)
27 #define _SPANDSP_TONE_DETECT_H_
34 #if defined(SPANDSP_USE_FIXED_POINT)
47 #if defined(SPANDSP_USE_FIXED_POINT)
62 #if defined(SPANDSP_USE_FIXED_POINT)
63 #define goertzel_threshold_dbm0(len,thresh) (int) ((len*len*256.0f*256.0f/2.0f)*powf(10.0f, (thresh - DBM0_MAX_SINE_POWER)/10.0f))
64 #define goertzel_threshold_dbmov(len,thresh) (int) ((len*len*256.0f*256.0f/2.0f)*powf(10.0f, (thresh - DBMOV_MAX_SINE_POWER)/10.0f))
66 #define goertzel_threshold_dbm0(len,thresh) (float) ((len*len*32768.0f*32768.0f/2.0f)*powf(10.0f, (thresh - DBM0_MAX_SINE_POWER)/10.0f))
67 #define goertzel_threshold_dbmov(len,thresh) (float) ((len*len*32768.0f*32768.0f/2.0f)*powf(10.0f, (thresh - DBMOV_MAX_SINE_POWER)/10.0f))
80 #if defined(__cplusplus)
120 #if defined(SPANDSP_USE_FIXED_POINT)
131 #if defined(SPANDSP_USE_FIXED_POINT)
140 #if defined(SPANDSP_USE_FIXED_POINT)
141 x = (((int32_t) s->fac*s->v2) >> 14);
146 s->v3 = x - v1 + (amp >> 7);
148 s->v3 = s->fac*s->v2 - v1 + amp;
158 #if defined(SPANDSP_USE_FIXED_POINT)
159 #define goertzel_preadjust_amp(amp) (((int16_t) amp) >> 7)
161 #define goertzel_preadjust_amp(amp) ((float) amp)
171 #if defined(SPANDSP_USE_FIXED_POINT)
177 #if defined(SPANDSP_USE_FIXED_POINT)
186 #if defined(SPANDSP_USE_FIXED_POINT)
187 x = (((int32_t) s->fac*s->v2) >> 14);
188 s->v3 = x - v1 + amp;
190 s->v3 = s->fac*s->v2 - v1 + amp;
251 #if defined(__cplusplus)
Definition: tone_detect.h:33
Definition: tone_detect.h:46
void make_goertzel_descriptor(goertzel_descriptor_t *t, float freq, int samples)
Create a descriptor for use with either a Goertzel transform.
Definition: tone_detect.c:60
float goertzel_result(goertzel_state_t *s)
Evaluate the final result of a Goertzel transform.
Definition: tone_detect.c:162
goertzel_state_t * goertzel_init(goertzel_state_t *s, goertzel_descriptor_t *t)
Initialise the state of a Goertzel transform.
Definition: tone_detect.c:71
int goertzel_update(goertzel_state_t *s, const int16_t amp[], int samples)
Update the state of a Goertzel transform.
Definition: tone_detect.c:123
void goertzel_reset(goertzel_state_t *s)
Reset the state of a Goertzel transform.
Definition: tone_detect.c:110
int periodogram_prepare(complexf_t sum[], complexf_t diff[], const complexf_t amp[], int len)
Definition: tone_detect.c:228
complexf_t periodogram_apply(const complexf_t coeffs[], const complexf_t sum[], const complexf_t diff[], int len)
Definition: tone_detect.c:242
int periodogram_generate_coeffs(complexf_t coeffs[], float freq, int sample_rate, int window_len)
Definition: tone_detect.c:258
float periodogram_freq_error(const complexf_t *phase_offset, float scale, const complexf_t *last_result, const complexf_t *result)
Definition: tone_detect.c:301
complexf_t periodogram(const complexf_t coeffs[], const complexf_t amp[], int len)
Definition: tone_detect.c:208
float periodogram_generate_phase_offset(complexf_t *offset, float freq, int sample_rate, int interval)
Definition: tone_detect.c:289