mirror of
https://github.com/f4exb/sdrangel.git
synced 2024-12-23 10:05:46 -05:00
90 lines
2.0 KiB
C++
90 lines
2.0 KiB
C++
/*
|
|
* ctcssdetector.h
|
|
*
|
|
* Created on: Jun 16, 2015
|
|
* Author: f4exb
|
|
* See: http://www.embedded.com/design/connectivity/4025660/Detecting-CTCSS-tones-with-Goertzel-s-algorithm
|
|
*/
|
|
|
|
#ifndef INCLUDE_GPL_DSP_CTCSSDETECTOR_H_
|
|
#define INCLUDE_GPL_DSP_CTCSSDETECTOR_H_
|
|
|
|
#include "dsp/dsptypes.h"
|
|
#include "export.h"
|
|
|
|
/** CTCSSDetector: Continuous Tone Coded Squelch System
|
|
* tone detector class based on the Modified Goertzel
|
|
* algorithm.
|
|
*/
|
|
class SDRBASE_API CTCSSDetector {
|
|
public:
|
|
// Constructors and Destructor
|
|
CTCSSDetector();
|
|
// allows user defined CTCSS tone set
|
|
CTCSSDetector(int _nTones, Real *tones);
|
|
virtual ~CTCSSDetector();
|
|
|
|
// setup the basic parameters and coefficients
|
|
void setCoefficients(
|
|
int zN, // the algorithm "block" size
|
|
int SampleRate); // input signal sample rate
|
|
|
|
// set the detection threshold
|
|
void setThreshold(double thold);
|
|
|
|
// analyze a sample set and optionally filter
|
|
// the tone frequencies.
|
|
bool analyze(Real *sample); // input signal sample
|
|
|
|
// get the number of defined tones.
|
|
int getNTones() const {
|
|
return nTones;
|
|
}
|
|
|
|
// get the tone set
|
|
const Real *getToneSet() const
|
|
{
|
|
return toneSet;
|
|
}
|
|
|
|
// get the currently detected tone, if any
|
|
bool getDetectedTone(int &maxTone) const
|
|
{
|
|
maxTone = maxPowerIndex;
|
|
return toneDetected;
|
|
}
|
|
|
|
// Get the max power at the detected tone.
|
|
Real getMaxPower() const
|
|
{
|
|
return maxPower;
|
|
}
|
|
|
|
void reset(); // reset the analysis algorithm
|
|
|
|
protected:
|
|
// Override these to change behavior of the detector
|
|
virtual void initializePower();
|
|
virtual void evaluatePower();
|
|
void feedback(Real sample);
|
|
void feedForward();
|
|
|
|
private:
|
|
int N;
|
|
int sampleRate;
|
|
int nTones;
|
|
int samplesProcessed;
|
|
int maxPowerIndex;
|
|
bool toneDetected;
|
|
Real maxPower;
|
|
Real *k;
|
|
Real *coef;
|
|
Real *toneSet;
|
|
Real *u0;
|
|
Real *u1;
|
|
Real *power;
|
|
};
|
|
|
|
|
|
#endif /* INCLUDE_GPL_DSP_CTCSSDETECTOR_H_ */
|