Fixed centroid process

This commit is contained in:
30hours 2023-11-30 22:25:40 +00:00
parent b2ce7302e1
commit 0c308dfec6
7 changed files with 62 additions and 10 deletions

View file

@ -26,6 +26,7 @@ process:
nTrain: 20 nTrain: 20
minDelay: 5 minDelay: 5
minDoppler: 20 minDoppler: 20
nCentroid: 6
network: network:
ip: 0.0.0.0 ip: 0.0.0.0

View file

@ -26,6 +26,7 @@ process:
nTrain: 6 nTrain: 6
minDelay: 5 minDelay: 5
minDoppler: 15 minDoppler: 15
nCentroid: 6
network: network:
ip: 0.0.0.0 ip: 0.0.0.0

View file

@ -148,7 +148,8 @@ int main(int argc, char **argv)
// setup process detection // setup process detection
double pfa, minDoppler; double pfa, minDoppler;
int8_t nGuard, nTrain, minDelay; int8_t nGuard, nTrain;
int8_t minDelay;
tree["process"]["detection"]["pfa"] >> pfa; tree["process"]["detection"]["pfa"] >> pfa;
tree["process"]["detection"]["nGuard"] >> nGuard; tree["process"]["detection"]["nGuard"] >> nGuard;
tree["process"]["detection"]["nTrain"] >> nTrain; tree["process"]["detection"]["nTrain"] >> nTrain;
@ -157,7 +158,9 @@ int main(int argc, char **argv)
CfarDetector1D *cfarDetector1D = new CfarDetector1D(pfa, nGuard, nTrain, minDelay, minDoppler); CfarDetector1D *cfarDetector1D = new CfarDetector1D(pfa, nGuard, nTrain, minDelay, minDoppler);
// setup process centroid // setup process centroid
Centroid *centroid = new Centroid(nGuard, nGuard, 1/tCpi); uint16_t nCentroid;
tree["process"]["detection"]["nCentroid"] >> nCentroid;
Centroid *centroid = new Centroid(nCentroid, nCentroid, 1/tCpi);
// setup output data // setup output data
bool saveMap; bool saveMap;

View file

@ -4,7 +4,7 @@
#include <cmath> #include <cmath>
// constructor // constructor
Centroid::Centroid(int8_t _nDelay, int8_t _nDoppler, double _resolutionDoppler) Centroid::Centroid(uint16_t _nDelay, uint16_t _nDoppler, double _resolutionDoppler)
{ {
// input // input
nDelay = _nDelay; nDelay = _nDelay;
@ -25,7 +25,7 @@ Detection *Centroid::process(Detection *x)
snr = x->get_snr(); snr = x->get_snr();
// centroid data // centroid data
int8_t delayMin, delayMax; uint16_t delayMin, delayMax;
double dopplerMin, dopplerMax; double dopplerMin, dopplerMax;
bool isCentroid; bool isCentroid;
std::vector<double> delay2, doppler2, snr2; std::vector<double> delay2, doppler2, snr2;
@ -33,8 +33,8 @@ Detection *Centroid::process(Detection *x)
// loop over every detection // loop over every detection
for (size_t i = 0; i < snr.size(); i++) for (size_t i = 0; i < snr.size(); i++)
{ {
delayMin = delay[i] - nDelay; delayMin = (int)(delay[i]) - nDelay;
delayMax = delay[i] + nDelay; delayMax = (int)(delay[i]) + nDelay;
dopplerMin = doppler[i] - (nDoppler * resolutionDoppler); dopplerMin = doppler[i] - (nDoppler * resolutionDoppler);
dopplerMax = doppler[i] + (nDoppler * resolutionDoppler); dopplerMax = doppler[i] + (nDoppler * resolutionDoppler);
isCentroid = true; isCentroid = true;

View file

@ -3,7 +3,6 @@
/// @brief A class to remove duplicate target detections. /// @brief A class to remove duplicate target detections.
/// @details If detection SNR is larger than neighbours, then remove. /// @details If detection SNR is larger than neighbours, then remove.
/// @author 30hours /// @author 30hours
/// @todo Still a bug where sometimes 2 consecutive range detections get through.
#ifndef CENTROID_H #ifndef CENTROID_H
#define CENTROID_H #define CENTROID_H
@ -15,10 +14,10 @@ class Centroid
{ {
private: private:
/// @brief Number of delay bins to check. /// @brief Number of delay bins to check.
int8_t nDelay; uint16_t nDelay;
/// @brief Number of Doppler bins to check. /// @brief Number of Doppler bins to check.
int8_t nDoppler; uint16_t nDoppler;
/// @brief Doppler resolution to convert Hz to bins (Hz). /// @brief Doppler resolution to convert Hz to bins (Hz).
double resolutionDoppler; double resolutionDoppler;
@ -32,7 +31,7 @@ public:
/// @param nDoppler Number of Doppler bins to check. /// @param nDoppler Number of Doppler bins to check.
/// @param resolutionDoppler Doppler resolution to convert Hz to bins (Hz). /// @param resolutionDoppler Doppler resolution to convert Hz to bins (Hz).
/// @return The object. /// @return The object.
Centroid(int8_t nDelay, int8_t nDoppler, double resolutionDoppler); Centroid(uint16_t nDelay, uint16_t nDoppler, double resolutionDoppler);
/// @brief Destructor. /// @brief Destructor.
/// @return Void. /// @return Void.

View file

View file

@ -0,0 +1,48 @@
/// @file Interpolate.h
/// @class Interpolate
/// @brief A class to remove duplicate target detections.
/// @details If detection SNR is larger than neighbours, then remove.
/// @author 30hours
/// @todo Still a bug where sometimes 2 consecutive range detections get through.
#ifndef CENTROID_H
#define CENTROID_H
#include <Map.h>
#include <Detection.h>
#include <stdint.h>
class Centroid
{
private:
/// @brief Number of delay bins to check.
int8_t nDelay;
/// @brief Number of Doppler bins to check.
int8_t nDoppler;
/// @brief Doppler resolution to convert Hz to bins (Hz).
double resolutionDoppler;
/// @brief Pointer to detection data to store result.
Detection *detection;
public:
/// @brief Constructor.
/// @param nDelay Number of delay bins to check.
/// @param nDoppler Number of Doppler bins to check.
/// @param resolutionDoppler Doppler resolution to convert Hz to bins (Hz).
/// @return The object.
Interpolate(int8_t nDelay, int8_t nDoppler, double resolutionDoppler);
/// @brief Destructor.
/// @return Void.
~Interpolate();
/// @brief Implement the 1D CFAR detector.
/// @param x Detections from the 1D CFAR detector.
/// @return Centroided detections.
Detection *process(Detection *x);
};
#endif