Skip to content

Commit 6619c20

Browse files
authored
Merge pull request #617 from jepler/sinc-function
ulab.numpy: implement sinc for creating audio filters
2 parents ac2e995 + f3e6e1c commit 6619c20

File tree

5 files changed

+30
-2
lines changed

5 files changed

+30
-2
lines changed

code/numpy/numpy.c

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,9 @@ static const mp_rom_map_elem_t ulab_numpy_globals_table[] = {
340340
#if ULAB_NUMPY_HAS_SIN
341341
{ MP_ROM_QSTR(MP_QSTR_sin), MP_ROM_PTR(&vector_sin_obj) },
342342
#endif
343+
#if ULAB_NUMPY_HAS_SINC
344+
{ MP_ROM_QSTR(MP_QSTR_sinc), MP_ROM_PTR(&vector_sinc_obj) },
345+
#endif
343346
#if ULAB_NUMPY_HAS_SINH
344347
{ MP_ROM_QSTR(MP_QSTR_sinh), MP_ROM_PTR(&vector_sinh_obj) },
345348
#endif

code/numpy/vector.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,27 @@ MATH_FUN_1(sin, sin);
570570
MP_DEFINE_CONST_FUN_OBJ_1(vector_sin_obj, vector_sin);
571571
#endif
572572

573+
#if ULAB_NUMPY_HAS_SINC
574+
//| def sinc(a: _ArrayLike) -> ulab.numpy.ndarray:
575+
//| """Computes the normalized sinc function"""
576+
//| ...
577+
//|
578+
579+
static mp_float_t ulab_sinc1(mp_float_t x) {
580+
if (fpclassify(x) == FP_ZERO) {
581+
return MICROPY_FLOAT_CONST(1.);
582+
}
583+
x *= MP_PI;
584+
return MICROPY_FLOAT_C_FUN(sin)(x) / x;
585+
}
586+
587+
static mp_obj_t vector_sinc(mp_obj_t x_obj) {
588+
return vector_generic_vector(x_obj, ulab_sinc1);
589+
}
590+
591+
MP_DEFINE_CONST_FUN_OBJ_1(vector_sinc_obj, vector_sinc);
592+
#endif
593+
573594
#if ULAB_NUMPY_HAS_SINH
574595
//| def sinh(a: _ArrayLike) -> ulab.numpy.ndarray:
575596
//| """Computes the hyperbolic sine"""

code/numpy/vector.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ MP_DECLARE_CONST_FUN_OBJ_1(vector_log10_obj);
3939
MP_DECLARE_CONST_FUN_OBJ_1(vector_log2_obj);
4040
MP_DECLARE_CONST_FUN_OBJ_1(vector_radians_obj);
4141
MP_DECLARE_CONST_FUN_OBJ_1(vector_sin_obj);
42+
MP_DECLARE_CONST_FUN_OBJ_1(vector_sinc_obj);
4243
MP_DECLARE_CONST_FUN_OBJ_1(vector_sinh_obj);
4344
#if ULAB_SUPPORTS_COMPLEX
4445
MP_DECLARE_CONST_FUN_OBJ_KW(vector_sqrt_obj);

code/ulab.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -616,6 +616,10 @@
616616
#define ULAB_NUMPY_HAS_SIN (1)
617617
#endif
618618

619+
#ifndef ULAB_NUMPY_HAS_SINC
620+
#define ULAB_NUMPY_HAS_SINC (1)
621+
#endif
622+
619623
#ifndef ULAB_NUMPY_HAS_SINH
620624
#define ULAB_NUMPY_HAS_SINH (1)
621625
#endif

requirements_cp_dev.txt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,4 @@ myst-parser
1515

1616
# For stubs and annotations
1717
adafruit-circuitpython-typing
18-
19-
18+
build

0 commit comments

Comments
 (0)