Added quiescent tail to sweep implementation
This commit is contained in:
parent
a1e4a63043
commit
959bcafca3
@ -1,6 +1,7 @@
|
|||||||
from .lasp_atomic import *
|
from .lasp_atomic import *
|
||||||
from .lasp_avstream import *
|
from .lasp_avstream import *
|
||||||
from .lasp_common import *
|
from .lasp_common import *
|
||||||
|
from .lasp_imptube import *
|
||||||
from .lasp_measurement import *
|
from .lasp_measurement import *
|
||||||
from .lasp_octavefilter import *
|
from .lasp_octavefilter import *
|
||||||
from .lasp_slm import *
|
from .lasp_slm import *
|
||||||
|
@ -98,7 +98,7 @@ Siggen* Siggen_Noise_create(const d fs, const d level_dB, Sosfilterbank* colorfi
|
|||||||
}
|
}
|
||||||
|
|
||||||
Siggen* Siggen_Sweep_create(const d fs,const d fl_,const d fu_,
|
Siggen* Siggen_Sweep_create(const d fs,const d fl_,const d fu_,
|
||||||
const d Ts, const us flags, const d level_dB) {
|
const d Ts,const d Tq, const us flags, const d level_dB) {
|
||||||
fsTRACE(15);
|
fsTRACE(15);
|
||||||
|
|
||||||
Siggen* sweep = Siggen_create(SWEEP, fs, level_dB);
|
Siggen* sweep = Siggen_create(SWEEP, fs, level_dB);
|
||||||
@ -119,13 +119,17 @@ Siggen* Siggen_Sweep_create(const d fs,const d fl_,const d fu_,
|
|||||||
|
|
||||||
const d Dt = 1/fs; // Deltat
|
const d Dt = 1/fs; // Deltat
|
||||||
|
|
||||||
// Estimate N:
|
// Estimate N, the number of samples in the sweep part (non-quiescent part):
|
||||||
const us N = (us) (Ts*fs);
|
const us N = (us) (Ts*fs);
|
||||||
|
const us Nq = (us) (Tq*fs);
|
||||||
iVARTRACE(15, N);
|
iVARTRACE(15, N);
|
||||||
sp->data = vd_alloc(N);
|
sp->data = vd_alloc(N+Nq);
|
||||||
sp->index = 0;
|
|
||||||
sp->N = N;
|
|
||||||
vd* data = &(sp->data);
|
vd* data = &(sp->data);
|
||||||
|
/* Set the last part, the quiescent tail to zero */
|
||||||
|
dmat_set(data,0.0);
|
||||||
|
|
||||||
|
sp->N = N+Nq;
|
||||||
|
sp->index = 0;
|
||||||
|
|
||||||
// Obtain flags and expand
|
// Obtain flags and expand
|
||||||
d phase = 0;
|
d phase = 0;
|
||||||
|
@ -62,13 +62,15 @@ us Siggen_getN(const Siggen*);
|
|||||||
* @param[in] fs: Sampling frequency [Hz]
|
* @param[in] fs: Sampling frequency [Hz]
|
||||||
* @param[in] fl: Lower frequency [Hz]
|
* @param[in] fl: Lower frequency [Hz]
|
||||||
* @param[in] fl: Upper frequency [Hz]
|
* @param[in] fl: Upper frequency [Hz]
|
||||||
* @param[in] Ts: Sweep period [s]
|
* @param[in] Ts: Sweep time [s]
|
||||||
|
* @param[in] Tq: Quescent tail time [s]. Choose this value long enough to
|
||||||
|
* avoid temporal aliasing in case of measuring impulse responses.
|
||||||
* @param[in] sweep_flags: Sweep period [s]
|
* @param[in] sweep_flags: Sweep period [s]
|
||||||
* @param[in] level: Relative level in [dB], should be between -inf and 0
|
* @param[in] level: Relative level in [dB], should be between -inf and 0
|
||||||
* @return Siggen* handle
|
* @return Siggen* handle
|
||||||
*/
|
*/
|
||||||
Siggen* Siggen_Sweep_create(const d fs,const d fl,const d fu,
|
Siggen* Siggen_Sweep_create(const d fs,const d fl,const d fu,
|
||||||
const d Ts, const us sweep_flags,
|
const d Ts, const d Tq, const us sweep_flags,
|
||||||
const d level);
|
const d level);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -78,6 +78,7 @@ def scaleBlockSens(block, sens):
|
|||||||
sens: array of sensitivity coeficients for
|
sens: array of sensitivity coeficients for
|
||||||
each channel.
|
each channel.
|
||||||
"""
|
"""
|
||||||
|
sens = np.asarray(sens)
|
||||||
assert sens.size == block.shape[1]
|
assert sens.size == block.shape[1]
|
||||||
if np.issubdtype(block.dtype.type, np.integer):
|
if np.issubdtype(block.dtype.type, np.integer):
|
||||||
sw = getSampWidth(block.dtype)
|
sw = getSampWidth(block.dtype)
|
||||||
@ -86,6 +87,7 @@ def scaleBlockSens(block, sens):
|
|||||||
fac = 1.
|
fac = 1.
|
||||||
return block.astype(LASP_NUMPY_FLOAT_TYPE) / fac / sens[np.newaxis, :]
|
return block.astype(LASP_NUMPY_FLOAT_TYPE) / fac / sens[np.newaxis, :]
|
||||||
|
|
||||||
|
|
||||||
class IterRawData:
|
class IterRawData:
|
||||||
"""Iterate over stored blocks if the raw measurement data of a h5 file."""
|
"""Iterate over stored blocks if the raw measurement data of a h5 file."""
|
||||||
|
|
||||||
|
@ -73,7 +73,7 @@ cdef extern from "lasp_python.h":
|
|||||||
|
|
||||||
__all__ = ['AvPowerSpectra', 'SosFilterBank', 'FilterBank', 'Siggen',
|
__all__ = ['AvPowerSpectra', 'SosFilterBank', 'FilterBank', 'Siggen',
|
||||||
'sweep_flag_forward', 'sweep_flag_backward', 'sweep_flag_linear',
|
'sweep_flag_forward', 'sweep_flag_backward', 'sweep_flag_linear',
|
||||||
'sweep_flag_exponential', 'sweep_flag_hyperbolic',
|
'sweep_flag_exponential',
|
||||||
'load_fft_wisdom', 'store_fft_wisdom']
|
'load_fft_wisdom', 'store_fft_wisdom']
|
||||||
|
|
||||||
|
|
||||||
@ -627,13 +627,13 @@ cdef class Decimator:
|
|||||||
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_FORWARD, SWEEP_FLAG_BACKWARD, SWEEP_FLAG_LINEAR
|
||||||
us SWEEP_FLAG_EXPONENTIAL,SWEEP_FLAG_HYPERBOLIC
|
us SWEEP_FLAG_EXPONENTIAL
|
||||||
|
|
||||||
c_Siggen* Siggen_Noise_create(d fs, d level_dB, c_Sosfilterbank*
|
c_Siggen* Siggen_Noise_create(d fs, d level_dB, c_Sosfilterbank*
|
||||||
colorfilter)
|
colorfilter)
|
||||||
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,
|
c_Siggen* Siggen_Sweep_create(d fs, d fl,
|
||||||
d fu, d Ts,us sweep_flags,
|
d fu, d Ts,d Tq, us sweep_flags,
|
||||||
d level_dB)
|
d level_dB)
|
||||||
us Siggen_getN(const c_Siggen*)
|
us Siggen_getN(const c_Siggen*)
|
||||||
void Siggen_genSignal(c_Siggen*, vd* samples) nogil
|
void Siggen_genSignal(c_Siggen*, vd* samples) nogil
|
||||||
@ -645,7 +645,6 @@ sweep_flag_backward = SWEEP_FLAG_BACKWARD
|
|||||||
|
|
||||||
sweep_flag_linear = SWEEP_FLAG_LINEAR
|
sweep_flag_linear = SWEEP_FLAG_LINEAR
|
||||||
sweep_flag_exponential = SWEEP_FLAG_EXPONENTIAL
|
sweep_flag_exponential = SWEEP_FLAG_EXPONENTIAL
|
||||||
sweep_flag_hyperbolic = SWEEP_FLAG_HYPERBOLIC
|
|
||||||
|
|
||||||
from .filter import PinkNoise
|
from .filter import PinkNoise
|
||||||
|
|
||||||
@ -717,11 +716,12 @@ cdef class Siggen:
|
|||||||
|
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def sweep(d fs, d fl, d fu, d Ts,us sweep_flags, d level_dB):
|
def sweep(d fs, d fl, d fu, d Ts, d Tq, us sweep_flags, d level_dB):
|
||||||
cdef c_Siggen* c_siggen = Siggen_Sweep_create(fs,
|
cdef c_Siggen* c_siggen = Siggen_Sweep_create(fs,
|
||||||
fl,
|
fl,
|
||||||
fu,
|
fu,
|
||||||
Ts,
|
Ts,
|
||||||
|
Tq,
|
||||||
sweep_flags,
|
sweep_flags,
|
||||||
level_dB)
|
level_dB)
|
||||||
if c_siggen == NULL:
|
if c_siggen == NULL:
|
||||||
|
Loading…
Reference in New Issue
Block a user