Updated wrappers. SLM almost fully functioning. Only does not produce statistics (max, min, eq) yet.
This commit is contained in:
parent
388fa0ed0a
commit
b4360951a8
|
@ -456,7 +456,7 @@ cdef extern from "lasp_decimation.h":
|
||||||
void Decimator_free(c_Decimator* dec) nogil
|
void Decimator_free(c_Decimator* dec) nogil
|
||||||
|
|
||||||
|
|
||||||
cdef extern from "lasp_slm.h":
|
cdef extern from "lasp_slm.h" nogil:
|
||||||
ctypedef struct c_Slm "Slm"
|
ctypedef struct c_Slm "Slm"
|
||||||
d TAU_FAST, TAU_SLOW, TAU_IMPULSE
|
d TAU_FAST, TAU_SLOW, TAU_IMPULSE
|
||||||
c_Slm* Slm_create(c_Sosfilterbank* prefilter,
|
c_Slm* Slm_create(c_Sosfilterbank* prefilter,
|
||||||
|
@ -476,21 +476,28 @@ cdef class Slm:
|
||||||
c_Slm* c_slm
|
c_Slm* c_slm
|
||||||
us downsampling_fac
|
us downsampling_fac
|
||||||
|
|
||||||
def __cinit__(self, d[:, ::1] sos_prefilter,
|
def __cinit__(self, d[::1] sos_prefilter,
|
||||||
d[:, ::1] sos_bandpass,
|
d[:, ::1] sos_bandpass,
|
||||||
d fs, d tau, d ref_level):
|
d fs, d tau, d ref_level):
|
||||||
|
|
||||||
cdef:
|
cdef:
|
||||||
us prefilter_nsections = sos_prefilter.shape[1] // 6
|
us prefilter_nsections = sos_prefilter.size // 6
|
||||||
us bandpass_nsections = sos_bandpass.shape[1] // 6
|
us bandpass_nsections = sos_bandpass.shape[1] // 6
|
||||||
us bandpass_nchannels = sos_bandpass.shape[0]
|
us bandpass_nchannels = sos_bandpass.shape[0]
|
||||||
c_Sosfilterbank* prefilter = NULL
|
c_Sosfilterbank* prefilter = NULL
|
||||||
c_Sosfilterbank* bandpass = NULL
|
c_Sosfilterbank* bandpass = NULL
|
||||||
|
vd coefs_vd
|
||||||
|
d[:] coefs
|
||||||
|
assert sos_prefilter.size % 6 == 0
|
||||||
|
assert sos_bandpass.shape[1] % 6 == 0
|
||||||
|
|
||||||
if sos_prefilter is not None:
|
if sos_prefilter is not None:
|
||||||
if sos_prefilter.shape[0] != 1:
|
|
||||||
raise ValueError('Prefilter should have only one channel')
|
|
||||||
prefilter = Sosfilterbank_create(1,prefilter_nsections)
|
prefilter = Sosfilterbank_create(1,prefilter_nsections)
|
||||||
|
coefs = sos_prefilter
|
||||||
|
coefs_vd = dmat_foreign_data(prefilter_nsections*6,1,
|
||||||
|
&coefs[0],False)
|
||||||
|
Sosfilterbank_setFilter(prefilter, 0, coefs_vd)
|
||||||
|
|
||||||
if prefilter is NULL:
|
if prefilter is NULL:
|
||||||
raise RuntimeError('Error creating pre-filter')
|
raise RuntimeError('Error creating pre-filter')
|
||||||
|
|
||||||
|
@ -502,6 +509,14 @@ cdef class Slm:
|
||||||
Sosfilterbank_free(prefilter)
|
Sosfilterbank_free(prefilter)
|
||||||
raise RuntimeError('Error creating bandpass filter')
|
raise RuntimeError('Error creating bandpass filter')
|
||||||
|
|
||||||
|
|
||||||
|
for i in range(bandpass_nchannels):
|
||||||
|
coefs = sos_bandpass[i, :]
|
||||||
|
coefs_vd = dmat_foreign_data(bandpass_nsections*6,1,
|
||||||
|
&coefs[0],False)
|
||||||
|
|
||||||
|
Sosfilterbank_setFilter(bandpass, i, coefs_vd)
|
||||||
|
|
||||||
self.c_slm = Slm_create(prefilter, bandpass,
|
self.c_slm = Slm_create(prefilter, bandpass,
|
||||||
fs, tau, ref_level,
|
fs, tau, ref_level,
|
||||||
&self.downsampling_fac)
|
&self.downsampling_fac)
|
||||||
|
@ -513,7 +528,9 @@ cdef class Slm:
|
||||||
def run(self, d[::1] data):
|
def run(self, d[::1] data):
|
||||||
cdef vd data_vd = dmat_foreign_data(data.shape[0], 1,
|
cdef vd data_vd = dmat_foreign_data(data.shape[0], 1,
|
||||||
&data[0], False)
|
&data[0], False)
|
||||||
cdef dmat res = Slm_run(self.c_slm, &data_vd)
|
cdef dmat res
|
||||||
|
with nogil:
|
||||||
|
res = Slm_run(self.c_slm, &data_vd)
|
||||||
result = dmat_to_ndarray(&res,True)
|
result = dmat_to_ndarray(&res,True)
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user