18#include <vendor/Eigen/Dense>
40 static constexpr std::size_t NDOWN = 48 / 12;
42 static constexpr std::size_t NTAPS = 49;
44 static constexpr std::size_t SHIFT = NTAPS - NDOWN;
46 using Vector = Eigen::Vector<float, NTAPS>;
47 using Sample = Eigen::Map<Eigen::Vector<short, NDOWN>
const>;
53 explicit Filter(std::array<Vector::value_type, NTAPS>
const &lowpass)
54 : m_w(lowpass.data()), m_t(Vector::Zero()) {}
61 auto downSample(Sample::value_type
const *
const data) {
62 m_t.head(SHIFT) = m_t.segment(NDOWN, SHIFT);
63 m_t.tail(NDOWN) = Sample(data).cast<Vector::value_type>();
65 return static_cast<Sample::value_type
>(std::round(m_w.dot(m_t)));
69 Eigen::Map<Vector const> m_w;
74 static constexpr std::size_t MaxBufferSize = 7 * 512;
77 using Buffer = std::array<short, MaxBufferSize * Filter::NDOWN>;
86 Detector(
unsigned frameRate,
unsigned periodLengthInSeconds,
87 QObject *parent =
nullptr);
90 unsigned period()
const {
return m_period; }
107 bool reset()
override;
123 qint64
readData(
char *, qint64)
override {
return -1; }
126 qint64
writeData(
char const *, qint64)
override;
129 unsigned m_frameRate;
134 Buffer::size_type m_bufferPos = 0;
135 std::size_t m_samplesPerFFT = MaxBufferSize;
Audio Device declarations for JS8Call-improved.
bool reset() override
Reset the detector state.
Definition Detector.cpp:85
qint64 readData(char *, qint64) override
Definition Detector.h:123
QMutex * getMutex()
Definition Detector.h:93
void resetBufferContent()
Reset the buffer content to zero.
Definition Detector.cpp:148
Detector(unsigned frameRate, unsigned periodLengthInSeconds, QObject *parent=nullptr)
Construct a Detector.
Definition Detector.cpp:65
void resetBufferPosition()
Reset the buffer position based on current time.
Definition Detector.cpp:114
unsigned period() const
Definition Detector.h:90
unsigned secondInPeriod() const
Return how many seconds into the current period we are.
Definition Detector.cpp:227
Q_SLOT void setBlockSize(unsigned)
Set the block size for FFT processing.
Definition Detector.cpp:77
void clear()
Clear the detector buffer.
Definition Detector.cpp:96
qint64 writeData(char const *, qint64) override
Write data to the detector buffer.
Definition Detector.cpp:162
void setTRPeriod(unsigned p)
Definition Detector.h:96
Q_SIGNAL void framesWritten(qint64) const