Updated PPM to give clip indices length same as number of channels. Grouped the real time components to group dsp/rt.
This commit is contained in:
parent
5f1a207104
commit
e900a5ddad
@ -17,8 +17,9 @@
|
|||||||
class Fft_impl;
|
class Fft_impl;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Perform forward FFT's on real time data. Computes single-sided spectra,
|
* @brief Perform forward FFT's on real time data. Computes single-sided spectra,
|
||||||
* equivalent to Numpy's rfft and irfft functions.
|
* equivalent to Numpy's rfft and irfft functions. But then faster as it can
|
||||||
|
* use a fast FFT backend, such as FFTW.
|
||||||
*/
|
*/
|
||||||
class Fft {
|
class Fft {
|
||||||
std::unique_ptr<Fft_impl> _impl;
|
std::unique_ptr<Fft_impl> _impl;
|
||||||
|
@ -10,10 +10,10 @@ using Lck = std::scoped_lock<std::mutex>;
|
|||||||
using rte = std::runtime_error;
|
using rte = std::runtime_error;
|
||||||
|
|
||||||
PPMHandler::PPMHandler(StreamMgr &mgr, const d decay_dBps)
|
PPMHandler::PPMHandler(StreamMgr &mgr, const d decay_dBps)
|
||||||
: ThreadedInDataHandler(mgr), _decay_dBps(decay_dBps) {
|
: ThreadedInDataHandler(mgr), _decay_dBps(decay_dBps) {
|
||||||
DEBUGTRACE_ENTER;
|
DEBUGTRACE_ENTER;
|
||||||
start();
|
start();
|
||||||
}
|
}
|
||||||
bool PPMHandler::inCallback_threaded(const DaqData &d) {
|
bool PPMHandler::inCallback_threaded(const DaqData &d) {
|
||||||
/* DEBUGTRACE_ENTER; */
|
/* DEBUGTRACE_ENTER; */
|
||||||
std::scoped_lock<std::mutex> lck(_mtx);
|
std::scoped_lock<std::mutex> lck(_mtx);
|
||||||
@ -40,7 +40,7 @@ bool PPMHandler::inCallback_threaded(const DaqData &d) {
|
|||||||
} else if (_clip_time(i) > clip_indication_time) {
|
} else if (_clip_time(i) > clip_indication_time) {
|
||||||
/// Reset to 'unclipped'
|
/// Reset to 'unclipped'
|
||||||
_clip_time(i) = -1;
|
_clip_time(i) = -1;
|
||||||
} else if(_clip_time(i) >= 0) {
|
} else if (_clip_time(i) >= 0) {
|
||||||
/// Add a bit of clip time
|
/// Add a bit of clip time
|
||||||
_clip_time(i) += _dt;
|
_clip_time(i) += _dt;
|
||||||
}
|
}
|
||||||
@ -59,10 +59,10 @@ bool PPMHandler::inCallback_threaded(const DaqData &d) {
|
|||||||
std::tuple<vd, arma::uvec> PPMHandler::getCurrentValue() const {
|
std::tuple<vd, arma::uvec> PPMHandler::getCurrentValue() const {
|
||||||
std::scoped_lock<std::mutex> lck(_mtx);
|
std::scoped_lock<std::mutex> lck(_mtx);
|
||||||
|
|
||||||
return {20 * arma::log10(_cur_max + arma::datum::eps).as_col(),
|
arma::uvec clips(_clip_time.size(), arma::fill::zeros);
|
||||||
arma::find(_clip_time >= 1.0)};
|
clips.elem(arma::find(_clip_time >= 0)).fill(1);
|
||||||
/* return {(_cur_max + arma::datum::eps).as_col(), */
|
|
||||||
/* arma::find(_clip_time >= 1.0)}; */
|
return {20 * arma::log10(_cur_max + arma::datum::eps).as_col(), clips};
|
||||||
}
|
}
|
||||||
|
|
||||||
void PPMHandler::reset(const Daq *daq) {
|
void PPMHandler::reset(const Daq *daq) {
|
||||||
@ -78,7 +78,7 @@ void PPMHandler::reset(const Daq *daq) {
|
|||||||
DEBUGTRACE_PRINT(fs);
|
DEBUGTRACE_PRINT(fs);
|
||||||
_dt = daq->framesPerBlock() / fs;
|
_dt = daq->framesPerBlock() / fs;
|
||||||
|
|
||||||
_alpha = std::max<d>(d_pow(10, -_dt*_decay_dBps / (20)), 0);
|
_alpha = std::max<d>(d_pow(10, -_dt * _decay_dBps / (20)), 0);
|
||||||
DEBUGTRACE_PRINT(_alpha);
|
DEBUGTRACE_PRINT(_alpha);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,9 @@
|
|||||||
/**
|
/**
|
||||||
* \addtogroup dsp
|
* \addtogroup dsp
|
||||||
* @{
|
* @{
|
||||||
|
*
|
||||||
|
* \addtogroup rt
|
||||||
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
@ -82,3 +85,4 @@ class PPMHandler: public ThreadedInDataHandler {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/** @} */
|
/** @} */
|
||||||
|
/** @} */
|
||||||
|
@ -4,6 +4,16 @@
|
|||||||
|
|
||||||
const us RINGBUFFER_SIZE = 1024;
|
const us RINGBUFFER_SIZE = 1024;
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* \addtogroup dsp
|
||||||
|
* @{
|
||||||
|
*
|
||||||
|
* \defgroup rt Real time signal handlers
|
||||||
|
* @{
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Threaded in data handler. Buffers inCallback data and calls a
|
* @brief Threaded in data handler. Buffers inCallback data and calls a
|
||||||
* callback with the same signature on a different thread.
|
* callback with the same signature on a different thread.
|
||||||
@ -46,3 +56,7 @@ class ThreadedInDataHandler: public InDataHandler {
|
|||||||
virtual bool inCallback_threaded(const DaqData&) = 0;
|
virtual bool inCallback_threaded(const DaqData&) = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/** @} */
|
||||||
|
/** @} */
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
/* #define DEBUGTRACE_ENABLED */
|
/* #define DEBUGTRACE_ENABLED */
|
||||||
#include <carma>
|
|
||||||
#include "debugtrace.hpp"
|
#include "debugtrace.hpp"
|
||||||
|
#include <carma>
|
||||||
#include "lasp_ppm.h"
|
#include "lasp_ppm.h"
|
||||||
#include "lasp_streammgr.h"
|
#include "lasp_streammgr.h"
|
||||||
#include "lasp_threadedindatahandler.h"
|
#include "lasp_threadedindatahandler.h"
|
||||||
@ -149,6 +149,7 @@ void init_datahandler(py::module &m) {
|
|||||||
ppm.def("getCurrentValue", [](const PPMHandler &ppm) {
|
ppm.def("getCurrentValue", [](const PPMHandler &ppm) {
|
||||||
auto [level, clip] = ppm.getCurrentValue();
|
auto [level, clip] = ppm.getCurrentValue();
|
||||||
|
|
||||||
return py::make_tuple(carma::col_to_arr(level), carma::col_to_arr(clip));
|
return py::make_tuple(carma::col_to_arr(std::move(level)),
|
||||||
|
carma::col_to_arr(std::move(clip)));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user