Merged DT9837A
This commit is contained in:
commit
a16fa576fd
2
.gitignore
vendored
2
.gitignore
vendored
@ -27,3 +27,5 @@ lasp/ui_*
|
|||||||
resources_rc.py
|
resources_rc.py
|
||||||
.ropeproject
|
.ropeproject
|
||||||
.spyproject
|
.spyproject
|
||||||
|
test/test_uldaq
|
||||||
|
lasp/device/lasp_daq.cxx
|
||||||
|
@ -12,7 +12,7 @@
|
|||||||
#include "lasp_mat.h"
|
#include "lasp_mat.h"
|
||||||
|
|
||||||
#define MAX_SOS_FILTER_BANK_SIZE 40
|
#define MAX_SOS_FILTER_BANK_SIZE 40
|
||||||
#define MAX_SOS_FILTER_BANK_NSECTIONS 6
|
#define MAX_SOS_FILTER_BANK_NSECTIONS 10
|
||||||
|
|
||||||
typedef struct Sosfilterbank Sosfilterbank;
|
typedef struct Sosfilterbank Sosfilterbank;
|
||||||
|
|
||||||
|
@ -5,7 +5,7 @@ Description: Read data from image stream and record sound at the same time
|
|||||||
"""
|
"""
|
||||||
#import cv2 as cv
|
#import cv2 as cv
|
||||||
from .lasp_atomic import Atomic
|
from .lasp_atomic import Atomic
|
||||||
from threading import Thread, Condition, Lock
|
from threading import Thread, Lock
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|
||||||
class DAQConfiguration:
|
class DAQConfiguration:
|
||||||
@ -98,7 +98,6 @@ class AvStream:
|
|||||||
self._callbacklock = Lock()
|
self._callbacklock = Lock()
|
||||||
|
|
||||||
self._running = Atomic(False)
|
self._running = Atomic(False)
|
||||||
self._running_cond = Condition()
|
|
||||||
|
|
||||||
self._video = video
|
self._video = video
|
||||||
self._video_started = Atomic(False)
|
self._video_started = Atomic(False)
|
||||||
@ -191,8 +190,10 @@ class AvStream:
|
|||||||
# present, and there should be output callbacks, we explicitly set
|
# present, and there should be output callbacks, we explicitly set
|
||||||
# the output buffer to zero
|
# the output buffer to zero
|
||||||
noutput_cb = len(self._callbacks[AvType.audio_output])
|
noutput_cb = len(self._callbacks[AvType.audio_output])
|
||||||
|
|
||||||
shouldhaveoutput = (self.avtype == AvType.audio_output or
|
shouldhaveoutput = (self.avtype == AvType.audio_output or
|
||||||
self.daqconfig.duplex_mode)
|
self.daqconfig.duplex_mode)
|
||||||
|
|
||||||
if noutput_cb == 0 and shouldhaveoutput and outdata is not None:
|
if noutput_cb == 0 and shouldhaveoutput and outdata is not None:
|
||||||
outdata[:, :] = 0
|
outdata[:, :] = 0
|
||||||
|
|
||||||
@ -216,14 +217,15 @@ class AvStream:
|
|||||||
|
|
||||||
def stop(self):
|
def stop(self):
|
||||||
self._running <<= False
|
self._running <<= False
|
||||||
with self._running_cond:
|
|
||||||
self._running_cond.notify()
|
|
||||||
if self._video:
|
if self._video:
|
||||||
self._videothread.join()
|
self._videothread.join()
|
||||||
self._videothread = None
|
self._videothread = None
|
||||||
|
|
||||||
self._aframectr <<= 0
|
self._aframectr <<= 0
|
||||||
self._vframectr <<= 0
|
self._vframectr <<= 0
|
||||||
self._video_started <<= False
|
self._video_started <<= False
|
||||||
|
|
||||||
self._audiobackend.stop()
|
self._audiobackend.stop()
|
||||||
self._audiobackend = None
|
self._audiobackend = None
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ class SLM:
|
|||||||
|
|
||||||
def __init__(self,
|
def __init__(self,
|
||||||
fs,
|
fs,
|
||||||
fbdesigner,
|
fbdesigner=None,
|
||||||
tw=TimeWeighting.fast,
|
tw=TimeWeighting.fast,
|
||||||
fw=FreqWeighting.A,
|
fw=FreqWeighting.A,
|
||||||
xmin = None,
|
xmin = None,
|
||||||
@ -58,10 +58,16 @@ class SLM:
|
|||||||
"""
|
"""
|
||||||
|
|
||||||
self.fbdesigner = fbdesigner
|
self.fbdesigner = fbdesigner
|
||||||
if xmin is None:
|
if xmin is None and fbdesigner is not None:
|
||||||
xmin = fbdesigner.xs[0]
|
xmin = fbdesigner.xs[0]
|
||||||
if xmax is None:
|
elif fbdesigner is None:
|
||||||
|
xmin = 0
|
||||||
|
|
||||||
|
if xmax is None and self.fbdesigner is not None:
|
||||||
xmax = fbdesigner.xs[-1]
|
xmax = fbdesigner.xs[-1]
|
||||||
|
elif fbdesigner is None:
|
||||||
|
xmax = 0
|
||||||
|
|
||||||
self.xs = list(range(xmin, xmax + 1))
|
self.xs = list(range(xmin, xmax + 1))
|
||||||
|
|
||||||
nfilters = len(self.xs)
|
nfilters = len(self.xs)
|
||||||
@ -81,12 +87,16 @@ class SLM:
|
|||||||
# 'Probe' size of filter coefficients
|
# 'Probe' size of filter coefficients
|
||||||
self.nom_txt = []
|
self.nom_txt = []
|
||||||
|
|
||||||
|
# This is a bit of a hack, as the 5 is hard-encoded here, but should in
|
||||||
|
# fact be coming from somewhere else..
|
||||||
|
sos_overall = np.array([1,0,0,1,0,0]*5, dtype=float)
|
||||||
|
|
||||||
if fbdesigner is not None:
|
if fbdesigner is not None:
|
||||||
assert fbdesigner.fs == fs
|
assert fbdesigner.fs == fs
|
||||||
sos0 = fbdesigner.createSOSFilter(self.xs[0]).flatten()
|
sos_firstx = fbdesigner.createSOSFilter(self.xs[0]).flatten()
|
||||||
self.nom_txt.append(fbdesigner.nominal_txt(self.xs[0]))
|
self.nom_txt.append(fbdesigner.nominal_txt(self.xs[0]))
|
||||||
sos = np.empty((nfilters, sos0.size), dtype=float, order='C')
|
sos = np.empty((nfilters, sos_firstx.size), dtype=float, order='C')
|
||||||
sos[0, :] = sos0
|
sos[0, :] = sos_firstx
|
||||||
|
|
||||||
for i, x in enumerate(self.xs[1:]):
|
for i, x in enumerate(self.xs[1:]):
|
||||||
sos[i+1, :] = fbdesigner.createSOSFilter(x).flatten()
|
sos[i+1, :] = fbdesigner.createSOSFilter(x).flatten()
|
||||||
@ -95,15 +105,16 @@ class SLM:
|
|||||||
if include_overall:
|
if include_overall:
|
||||||
# Create a unit impulse response filter, every third index equals
|
# Create a unit impulse response filter, every third index equals
|
||||||
# 1, so b0 = 1 and a0 is 1 (by definition)
|
# 1, so b0 = 1 and a0 is 1 (by definition)
|
||||||
sos[-1,:] = 0
|
# a0 = 1, b0 = 1, rest is zero
|
||||||
sos[-1,::3] = 1
|
sos[-1,:] = sos_overall
|
||||||
self.nom_txt.append('overall')
|
self.nom_txt.append('overall')
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# No filterbank, means we do only compute the overall values. This
|
# No filterbank, means we do only compute the overall values. This
|
||||||
# means that in case of include_overall, it creates two overall
|
# means that in case of include_overall, it creates two overall
|
||||||
# channels. That would be confusing, so we do not allow it.
|
# channels. That would be confusing, so we do not allow it.
|
||||||
assert include_overall == False
|
if include_overall:
|
||||||
sos = None
|
sos = sos_overall[np.newaxis,:]
|
||||||
self.nom_txt.append('overall')
|
self.nom_txt.append('overall')
|
||||||
|
|
||||||
self.slm = pyxSlm(prefilter, sos,
|
self.slm = pyxSlm(prefilter, sos,
|
||||||
|
Loading…
Reference in New Issue
Block a user