Input of filterbank API improvements
This commit is contained in:
parent
4dd95cb80c
commit
0b5a94be4c
|
@ -70,14 +70,57 @@ class FilterBankDesigner:
|
||||||
def band_limits(self, x, filter_class):
|
def band_limits(self, x, filter_class):
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
|
|
||||||
|
def nominal_txt_tox(self, nom_txt: str):
|
||||||
|
"""Returns the x-value corresponding to a certain nominal txt: '1k' ->
|
||||||
|
0.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
nom_txt: Text-representation of midband frequency
|
||||||
|
"""
|
||||||
|
for x in self.xs:
|
||||||
|
if self.nominal_txt(x) == nom_txt:
|
||||||
|
return x
|
||||||
|
raise ValueError(
|
||||||
|
f'Could not find an x-value corresponding to {nom_txt}.')
|
||||||
|
|
||||||
|
def sanitize_input(self, input_):
|
||||||
|
if isinstance(input_, int):
|
||||||
|
return input_
|
||||||
|
elif isinstance(input_, str):
|
||||||
|
return self.nominal_txt_tox(input_)
|
||||||
|
|
||||||
|
elif isinstance(input_, list):
|
||||||
|
if len(input_) == 3 and input_[1] is None:
|
||||||
|
# This is the "code" to create an array
|
||||||
|
xl = self.sanitize_input(input_[0])
|
||||||
|
xu = self.sanitize_input(input_[2])
|
||||||
|
return np.asarray(list(range(xl, xu+1)))
|
||||||
|
else:
|
||||||
|
x = [self.sanitize_input(xi) for xi in input_]
|
||||||
|
return np.asarray(x)
|
||||||
|
|
||||||
|
|
||||||
|
def getxs(self, nom_txt_start, nom_txt_end):
|
||||||
|
"""Returns a list of all filter designators, for given start end end
|
||||||
|
nominal frequencies.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
nom_txt_start: Start frequency band, i.e. '31.5'
|
||||||
|
nom_txt_end: End frequency band, i.e. '10k'
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
[x0, x1, ..]
|
||||||
|
"""
|
||||||
|
xstart = self.nominal_txt_tox(nom_txt_start)
|
||||||
|
xend = self.nominal_txt_tox(nom_txt_end)
|
||||||
|
return list(range(xstart, xend+1))
|
||||||
def fm(self, x):
|
def fm(self, x):
|
||||||
"""Returns the exact midband frequency of the bandpass filter.
|
"""Returns the exact midband frequency of the bandpass filter.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
x: Midband designator
|
x: Midband designator
|
||||||
"""
|
"""
|
||||||
if type(x) == list:
|
x = self.sanitize_input(x)
|
||||||
x = np.asarray(x)
|
|
||||||
|
|
||||||
# Exact midband frequency
|
# Exact midband frequency
|
||||||
return self.G**(x/self.b)*self.fr
|
return self.G**(x/self.b)*self.fr
|
||||||
|
@ -88,6 +131,7 @@ class FilterBankDesigner:
|
||||||
Args:
|
Args:
|
||||||
x: Midband designator
|
x: Midband designator
|
||||||
"""
|
"""
|
||||||
|
x = self.sanitize_input(x)
|
||||||
return self.fm(x)*self.G**(-1/(2*self.b))
|
return self.fm(x)*self.G**(-1/(2*self.b))
|
||||||
|
|
||||||
def fu(self, x):
|
def fu(self, x):
|
||||||
|
@ -96,6 +140,7 @@ class FilterBankDesigner:
|
||||||
Args:
|
Args:
|
||||||
x: Midband designator
|
x: Midband designator
|
||||||
"""
|
"""
|
||||||
|
x = self.sanitize_input(x)
|
||||||
return self.fm(x)*self.G**(1/(2*self.b))
|
return self.fm(x)*self.G**(1/(2*self.b))
|
||||||
|
|
||||||
def createFirFilter(self, x):
|
def createFirFilter(self, x):
|
||||||
|
@ -133,6 +178,7 @@ class FilterBankDesigner:
|
||||||
|
|
||||||
# Normalized upper and lower frequencies of the bandpass
|
# Normalized upper and lower frequencies of the bandpass
|
||||||
fl_n = fl/fnyq
|
fl_n = fl/fnyq
|
||||||
|
x = self.sanitize_input(x)
|
||||||
fu_n = fu/fnyq
|
fu_n = fu/fnyq
|
||||||
|
|
||||||
return butter(SOS_ORDER, [fl_n, fu_n], output='sos', btype='band')
|
return butter(SOS_ORDER, [fl_n, fu_n], output='sos', btype='band')
|
||||||
|
@ -154,33 +200,6 @@ class FilterBankDesigner:
|
||||||
|
|
||||||
return firFreqResponse(fd, freq, fir)
|
return firFreqResponse(fd, freq, fir)
|
||||||
|
|
||||||
def nominal_txt_tox(self, nom_txt: str):
|
|
||||||
"""Returns the x-value corresponding to a certain nominal txt: '1k' ->
|
|
||||||
0.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
nom_txt: Text-representation of midband frequency
|
|
||||||
"""
|
|
||||||
for x in self.xs:
|
|
||||||
if self.nominal_txt(x) == nom_txt:
|
|
||||||
return x
|
|
||||||
raise ValueError(
|
|
||||||
f'Could not find an x-value corresponding to {nom_txt}.')
|
|
||||||
|
|
||||||
def getxs(self, nom_txt_start, nom_txt_end):
|
|
||||||
"""Returns a list of all filter designators, for given start end end
|
|
||||||
nominal frequencies.
|
|
||||||
|
|
||||||
Args:
|
|
||||||
nom_txt_start: Start frequency band, i.e. '31.5'
|
|
||||||
nom_txt_end: End frequency band, i.e. '10k'
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
[x0, x1, ..]
|
|
||||||
"""
|
|
||||||
xstart = self.nominal_txt_tox(nom_txt_start)
|
|
||||||
xend = self.nominal_txt_tox(nom_txt_end)
|
|
||||||
return list(range(xstart, xend+1))
|
|
||||||
|
|
||||||
def getNarrowBandFromOctaveBand(self, xl, xu,
|
def getNarrowBandFromOctaveBand(self, xl, xu,
|
||||||
levels_in_bands, npoints=500,
|
levels_in_bands, npoints=500,
|
||||||
|
|
|
@ -47,6 +47,9 @@ from scipy.io import wavfile
|
||||||
import os
|
import os
|
||||||
import time
|
import time
|
||||||
import wave
|
import wave
|
||||||
|
from .lasp_common import SIQtys, Qty
|
||||||
|
from .device import DAQChannel
|
||||||
|
import logging
|
||||||
|
|
||||||
|
|
||||||
class BlockIter:
|
class BlockIter:
|
||||||
|
|
Loading…
Reference in New Issue