43 lines
934 B
C++
43 lines
934 B
C++
#include "lasp_siggen.h"
|
|
#include "lasp_mathtypes.h"
|
|
#include <cassert>
|
|
#include <type_traits>
|
|
|
|
inline d level_amp(d level_dB){
|
|
return pow(10, level_dB/20);
|
|
}
|
|
|
|
using mutexlock = std::scoped_lock<std::mutex>;
|
|
|
|
vd Siggen::genSignal(const us nframes) {
|
|
mutexlock lck(_mtx);
|
|
|
|
vd signal(nframes, arma::fill::value(_dc_offset));
|
|
if (!_muted) {
|
|
vd signal_dynamic = _level_linear*genSignalUnscaled(nframes);
|
|
if(_filter) {
|
|
_filter->filter(signal_dynamic);
|
|
}
|
|
signal += signal_dynamic;
|
|
}
|
|
|
|
return signal;
|
|
}
|
|
void Siggen::setFilter(std::shared_ptr<Filter>& filter) {
|
|
mutexlock lck(_mtx);
|
|
_filter = filter;
|
|
}
|
|
void Siggen::setDCOffset(const d offset) {
|
|
mutexlock lck(_mtx);
|
|
_dc_offset = offset;
|
|
}
|
|
void Siggen::setLevel(const d level,bool dB) {
|
|
mutexlock lck(_mtx);
|
|
_level_linear = dB ? level_amp(level) : level;
|
|
}
|
|
void Siggen::reset(const d newFs) {
|
|
mutexlock lck(_mtx);
|
|
fs = newFs;
|
|
resetImpl();
|
|
}
|