- Tracker: forget max at each process for all rackers git-svn-id: http://moon:8086/svn/software/trunk/libsrc/cpp@1048 b431acfa-c32f-4a4a-93f1-934dc6c82436
58 lines
802 B
C++
58 lines
802 B
C++
#include "Tracker.hpp"
|
|
|
|
#include <iostream>
|
|
|
|
using namespace std;
|
|
|
|
namespace Radio
|
|
{
|
|
namespace Metrics
|
|
{
|
|
|
|
Tracker::Tracker(RealScalar rho, RealScalar smoothness)
|
|
: m_mags(NUM_QUADRRANTS)
|
|
, m_rho(rho)
|
|
, m_smoothness(smoothness)
|
|
{
|
|
m_mags = 0;
|
|
}
|
|
|
|
Tracker::~Tracker()
|
|
{
|
|
}
|
|
|
|
ComplexScalar const* Tracker::trackers() const
|
|
{
|
|
return m_trackers;
|
|
}
|
|
|
|
void Tracker::process(ComplexScalar const &x)
|
|
{
|
|
size_t qu = getQuadrant(x);
|
|
m_mags *= m_rho;
|
|
|
|
RealScalar mag = abs(x);
|
|
if (mag > m_mags[qu])
|
|
{
|
|
m_mags[qu] = mag;
|
|
m_trackers[qu] = m_smoothness*x + (RealScalar(1.0)-m_smoothness)*m_trackers[qu];
|
|
}
|
|
}
|
|
|
|
size_t Tracker::getQuadrant(ComplexScalar const &x)
|
|
{
|
|
size_t result = 0;
|
|
|
|
if (x.real() < 0)
|
|
{
|
|
result |= 0x02;
|
|
}
|
|
if (x.imag() < 0)
|
|
{
|
|
result |= 0x01;
|
|
}
|
|
return result;
|
|
}
|
|
|
|
} // Metrics
|
|
} // Radio
|