XCORE SDK
XCORE Software Development Kit
xs3_filters.h
1 // Copyright 2020-2021 XMOS LIMITED.
2 // This Software is subject to the terms of the XMOS Public Licence: Version 1.
3 
4 #pragma once
5 
6 #include "xs3_math_types.h"
7 
8 
242 C_API
243 typedef struct {
249  unsigned num_taps;
250 
254  unsigned head;
255 
260 
264  int32_t* coef;
265 
269  int32_t* state;
271 
272 
295 C_API
297  xs3_filter_fir_s32_t* filter,
298  int32_t* sample_buffer,
299  const unsigned tap_count,
300  const int32_t* coefficients,
301  const right_shift_t shift);
302 
318 C_API
320  xs3_filter_fir_s32_t* filter,
321  const int32_t new_sample);
322 
340 C_API
341 int32_t xs3_filter_fir_s32(
342  xs3_filter_fir_s32_t* filter,
343  const int32_t new_sample);
344 
345 
464 C_API
465 typedef struct {
471  unsigned num_taps;
472 
477 
481  int16_t* coef;
482 
486  int16_t* state;
488 
511 C_API
513  xs3_filter_fir_s16_t* filter,
514  int16_t* sample_buffer,
515  const unsigned tap_count,
516  const int16_t* coefficients,
517  const right_shift_t shift);
518 
533 C_API
535  xs3_filter_fir_s16_t* filter,
536  const int16_t new_sample);
537 
555 C_API
556 int16_t xs3_filter_fir_s16(
557  xs3_filter_fir_s16_t* filter,
558  const int16_t new_sample);
559 
560 
580 C_API
581 typedef struct {
585  unsigned biquad_count;
586 
592  int32_t state[2][9];
593 
602  int32_t coef[5][8]; // coefficients. coef[j][k] is for the kth biquad. j maps to b0,b1,b2,-a1,-a2.
604 
624 C_API
625 int32_t xs3_filter_biquad_s32(
626  xs3_biquad_filter_s32_t* filter,
627  const int32_t new_sample);
628 
629 
649 C_API
650 int32_t xs3_filter_biquads_s32(
651  xs3_biquad_filter_s32_t biquads[],
652  const unsigned block_count,
653  const int32_t new_sample);
654 
int right_shift_t
A rightwards arithmetic bit-shift.
Definition: xs3_math_types.h:98
void xs3_filter_fir_s16_init(xs3_filter_fir_s16_t *filter, int16_t *sample_buffer, const unsigned tap_count, const int16_t *coefficients, const right_shift_t shift)
Initialize a 16-bit FIR filter.
Definition: xs3_filters.c:19
int32_t xs3_filter_fir_s32(xs3_filter_fir_s32_t *filter, const int32_t new_sample)
Definition: xs3_filter_fir_s32.c:15
void xs3_filter_fir_s16_add_sample(xs3_filter_fir_s16_t *filter, const int16_t new_sample)
Add a new input sample to a 16-bit FIR filter without processing an output sample.
Definition: xs3_filters.c:34
int32_t xs3_filter_biquads_s32(xs3_biquad_filter_s32_t biquads[], const unsigned block_count, const int32_t new_sample)
Definition: xs3_filters.c:71
int16_t xs3_filter_fir_s16(xs3_filter_fir_s16_t *filter, const int16_t new_sample)
Definition: xs3_filter_fir_s16.c:39
void xs3_filter_fir_s32_init(xs3_filter_fir_s32_t *filter, int32_t *sample_buffer, const unsigned tap_count, const int32_t *coefficients, const right_shift_t shift)
Initialize a 32-bit FIR filter.
Definition: xs3_filters.c:43
void xs3_filter_fir_s32_add_sample(xs3_filter_fir_s32_t *filter, const int32_t new_sample)
Add a new input sample to a 32-bit FIR filter without processing an output sample.
Definition: xs3_filters.c:59
int32_t xs3_filter_biquad_s32(xs3_biquad_filter_s32_t *filter, const int32_t new_sample)
Definition: xs3_filter_biquad_s32.c:17
A biquad filter block.
Definition: xs3_filters.h:581
unsigned biquad_count
Definition: xs3_filters.h:585
16-bit Discrete-Time Finite Impulse Response (FIR) Filter
Definition: xs3_filters.h:465
right_shift_t shift
Definition: xs3_filters.h:476
int16_t * coef
Definition: xs3_filters.h:481
int16_t * state
Definition: xs3_filters.h:486
unsigned num_taps
Definition: xs3_filters.h:471
32-bit Discrete-Time Finite Impulse Response (FIR) Filter
Definition: xs3_filters.h:243
int32_t * state
Definition: xs3_filters.h:269
right_shift_t shift
Definition: xs3_filters.h:259
int32_t * coef
Definition: xs3_filters.h:264
unsigned num_taps
Definition: xs3_filters.h:249
unsigned head
Definition: xs3_filters.h:254