mirror of
https://github.com/RangeNetworks/openbts.git
synced 2025-10-23 07:42:01 +00:00
Previous removal of the energy detector requirement broke the noise level calculation loop. The previous adaptive approach was finicky - noticably at high gain levels. Since we no longer use the energy threshold for primary burst gating, we can return to a simpler world. In the new approach, we compute a running average of energy levels and track them with a noise vector. A timeslot that passes the correlator threshold is a valid burst. These are not used in the noise calculation. Everything else is considered noise and used to compute the noise level with respect to full scale input level, which for almost all supported devices is 2^15. Signed-off-by: Thomas Tsou <tom@tsou.cc> git-svn-id: http://wush.net/svn/range/software/public/openbts/trunk@6755 19bc5d8c-e614-43d4-8b26-e1612bc8e597
67 lines
1.7 KiB
C++
67 lines
1.7 KiB
C++
/*
|
|
* Written by Thomas Tsou <ttsou@vt.edu>
|
|
* Based on code by Harvind S Samra <hssamra@kestrelsp.com>
|
|
*
|
|
* Copyright 2011 Free Software Foundation, Inc.
|
|
*
|
|
* This program is free software: you can redistribute it and/or modify
|
|
* it under the terms of the GNU Affero General Public License as published by
|
|
* the Free Software Foundation, either version 3 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU Affero General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU Affero General Public License
|
|
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
* See the COPYING file in the main directory for details.
|
|
*/
|
|
|
|
#ifndef RADIOVECTOR_H
|
|
#define RADIOVECTOR_H
|
|
|
|
#include "sigProcLib.h"
|
|
#include "GSMCommon.h"
|
|
|
|
class radioVector : public signalVector {
|
|
public:
|
|
radioVector(const signalVector& wVector, GSM::Time& wTime);
|
|
GSM::Time getTime() const;
|
|
void setTime(const GSM::Time& wTime);
|
|
bool operator>(const radioVector& other) const;
|
|
|
|
private:
|
|
GSM::Time mTime;
|
|
};
|
|
|
|
class noiseVector : std::vector<float> {
|
|
public:
|
|
noiseVector(size_t len = 0);
|
|
bool insert(float val);
|
|
float avg();
|
|
|
|
private:
|
|
std::vector<float>::iterator it;
|
|
};
|
|
|
|
class VectorFIFO {
|
|
public:
|
|
unsigned size();
|
|
void put(radioVector *ptr);
|
|
radioVector *get();
|
|
|
|
private:
|
|
PointerFIFO mQ;
|
|
};
|
|
|
|
class VectorQueue : public InterthreadPriorityQueue<radioVector> {
|
|
public:
|
|
GSM::Time nextTime() const;
|
|
radioVector* getStaleBurst(const GSM::Time& targTime);
|
|
radioVector* getCurrentBurst(const GSM::Time& targTime);
|
|
};
|
|
|
|
#endif /* RADIOVECTOR_H */
|