Exposed sweep to Python

This commit is contained in:
Anne de Jong 2020-01-17 17:03:00 +01:00
parent c748e6cb75
commit 1a85b60d85

View File

@ -65,7 +65,9 @@ cdef extern from "numpy/arrayobject.h":
cdef extern from "lasp_python.h": cdef extern from "lasp_python.h":
object dmat_to_ndarray(dmat*,bint transfer_ownership) object dmat_to_ndarray(dmat*,bint transfer_ownership)
__all__ = ['AvPowerSpectra', 'SosFilterBank', 'FilterBank'] __all__ = ['AvPowerSpectra', 'SosFilterBank', 'FilterBank', 'Siggen',
'sweep_flag_forward', 'sweep_flag_backward', 'sweep_flag_linear',
'sweep_flag_exponential', 'sweep_flag_hyperbolic']
setTracerLevel(15) setTracerLevel(15)
cdef extern from "cblas.h": cdef extern from "cblas.h":
@ -523,13 +525,27 @@ cdef class SPLowpass:
cdef extern from "lasp_siggen.h": cdef extern from "lasp_siggen.h":
ctypedef struct c_Siggen "Siggen" ctypedef struct c_Siggen "Siggen"
us SWEEP_FLAG_FORWARD, SWEEP_FLAG_BACKWARD, SWEEP_FLAG_LINEAR
us SWEEP_FLAG_EXPONENTIAL,SWEEP_FLAG_HYPERBOLIC
c_Siggen* Siggen_Whitenoise_create(d fs, d level_dB) c_Siggen* Siggen_Whitenoise_create(d fs, d level_dB)
c_Siggen* Siggen_Sinewave_create(d fs, d freq, d level_dB) c_Siggen* Siggen_Sinewave_create(d fs, d freq, d level_dB)
c_Siggen* Siggen_Sweep_create(d fs, d fl,
d fu, d Ts,us sweep_flags,
d level_dB)
void Siggen_genSignal(c_Siggen*, vd* samples) nogil void Siggen_genSignal(c_Siggen*, vd* samples) nogil
void Siggen_free(c_Siggen*) void Siggen_free(c_Siggen*)
# Sweep flags
sweep_flag_forward = SWEEP_FLAG_FORWARD
sweep_flag_backward = SWEEP_FLAG_BACKWARD
sweep_flag_linear = SWEEP_FLAG_LINEAR
sweep_flag_exponential = SWEEP_FLAG_EXPONENTIAL
sweep_flag_hyperbolic = SWEEP_FLAG_HYPERBOLIC
cdef class Siggen: cdef class Siggen:
cdef c_Siggen *_siggen cdef c_Siggen *_siggen
def __cinit__(self): def __cinit__(self):
@ -570,3 +586,17 @@ cdef class Siggen:
siggen = Siggen() siggen = Siggen()
siggen._siggen = c_siggen siggen._siggen = c_siggen
return siggen return siggen
@staticmethod
def sweep(d fs, d fl, d fu, d Ts,us sweep_flags, d level_dB):
cdef c_Siggen* c_siggen = Siggen_Sweep_create(fs,
fl,
fu,
Ts,
sweep_flags,
level_dB)
if c_siggen == NULL:
raise ValueError('Failed creating signal generator')
siggen = Siggen()
siggen._siggen = c_siggen
return siggen