mirror of
				https://gitea.osmocom.org/cellular-infrastructure/osmo-trx.git
				synced 2025-11-04 06:03:17 +00:00 
			
		
		
		
	Compare commits
	
		
			7 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					1535052873 | ||
| 
						 | 
					49792aa1f7 | ||
| 
						 | 
					e5c36f6abb | ||
| 
						 | 
					bbefe9eaff | ||
| 
						 | 
					5e3e23c337 | ||
| 
						 | 
					8a2a0f0e17 | ||
| 
						 | 
					1cc9505011 | 
@@ -185,13 +185,13 @@ int Resampler::rotate(const float *in, size_t in_len, float *out, size_t out_len
 | 
				
			|||||||
			      n, 1, 1, 0);
 | 
								      n, 1, 1, 0);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return out_len;
 | 
						return 0;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
bool Resampler::init(float bw)
 | 
					bool Resampler::init(float bw)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* Filterbank filter internals */
 | 
						/* Filterbank filter internals */
 | 
				
			||||||
	if (initFilters(bw) < 0)
 | 
						if (!initFilters(bw))
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	/* Precompute filterbank paths */
 | 
						/* Precompute filterbank paths */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -47,7 +47,7 @@ public:
 | 
				
			|||||||
	 *   @param in_len input buffer length
 | 
						 *   @param in_len input buffer length
 | 
				
			||||||
	 *   @param out continuous buffer of output complex float values
 | 
						 *   @param out continuous buffer of output complex float values
 | 
				
			||||||
	 *   @param out_len output buffer length
 | 
						 *   @param out_len output buffer length
 | 
				
			||||||
	 *   @return number of samples outputted, negative on error
 | 
						 *   @return 0 on success and negative on error
 | 
				
			||||||
         *
 | 
					         *
 | 
				
			||||||
	 * Input and output vector lengths must of be equal multiples of the
 | 
						 * Input and output vector lengths must of be equal multiples of the
 | 
				
			||||||
	 * rational conversion rate denominator and numerator respectively.
 | 
						 * rational conversion rate denominator and numerator respectively.
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -43,11 +43,10 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Samples-per-symbol for uplink (receiver) path
 | 
					 * Samples-per-symbol for uplink (receiver) path
 | 
				
			||||||
 *     Do not modify this value. EDGE configures 4 sps automatically on
 | 
					 *     4 - Provides better timing precision (avoids FPGA DDC timing ambiguity)
 | 
				
			||||||
 *     B200/B210 devices only. Use of 4 sps on the receive path for other
 | 
					 *     1 - Reduces processor load, but increases timing ambiguity
 | 
				
			||||||
 *     configurations is not supported.
 | 
					 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
#define DEFAULT_RX_SPS		1
 | 
					#define DEFAULT_RX_SPS		4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Default configuration parameters
 | 
					/* Default configuration parameters
 | 
				
			||||||
 *     Note that these values are only used if the particular key does not
 | 
					 *     Note that these values are only used if the particular key does not
 | 
				
			||||||
@@ -61,6 +60,9 @@
 | 
				
			|||||||
#define DEFAULT_DIVERSITY	false
 | 
					#define DEFAULT_DIVERSITY	false
 | 
				
			||||||
#define DEFAULT_CHANS		1
 | 
					#define DEFAULT_CHANS		1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Max number of channels in multi-carrier configuration */
 | 
				
			||||||
 | 
					#define MAX_MCHANS		3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct trx_config {
 | 
					struct trx_config {
 | 
				
			||||||
	std::string log_level;
 | 
						std::string log_level;
 | 
				
			||||||
	std::string addr;
 | 
						std::string addr;
 | 
				
			||||||
@@ -168,7 +170,7 @@ bool trx_setup_config(struct trx_config *config)
 | 
				
			|||||||
	if (!config->chans)
 | 
						if (!config->chans)
 | 
				
			||||||
		config->chans = DEFAULT_CHANS;
 | 
							config->chans = DEFAULT_CHANS;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (config->mcbts && ((config->chans < 0) || (config->chans > 5))) {
 | 
						if (config->mcbts && (config->chans > MAX_MCHANS)) {
 | 
				
			||||||
		std::cout << "Unsupported number of channels" << std::endl;
 | 
							std::cout << "Unsupported number of channels" << std::endl;
 | 
				
			||||||
		return false;
 | 
							return false;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1729,8 +1729,10 @@ bool energyDetect(signalVector &rxBurst,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  signalVector::const_iterator windowItr = rxBurst.begin(); //+rxBurst.size()/2 - 5*windowLength/2;
 | 
					  signalVector::const_iterator windowItr = rxBurst.begin(); //+rxBurst.size()/2 - 5*windowLength/2;
 | 
				
			||||||
  float energy = 0.0;
 | 
					  float energy = 0.0;
 | 
				
			||||||
  if (windowLength < 0) windowLength = 20;
 | 
					
 | 
				
			||||||
  if (windowLength > rxBurst.size()) windowLength = rxBurst.size();
 | 
					  if (windowLength > rxBurst.size())
 | 
				
			||||||
 | 
					    windowLength = rxBurst.size();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  for (unsigned i = 0; i < windowLength; i++) {
 | 
					  for (unsigned i = 0; i < windowLength; i++) {
 | 
				
			||||||
    energy += windowItr->norm2();
 | 
					    energy += windowItr->norm2();
 | 
				
			||||||
    windowItr+=4;
 | 
					    windowItr+=4;
 | 
				
			||||||
@@ -1790,10 +1792,6 @@ static int detectBurst(signalVector &burst,
 | 
				
			|||||||
  /* Normalize our channel gain */
 | 
					  /* Normalize our channel gain */
 | 
				
			||||||
  *amp = *amp / sync->gain;
 | 
					  *amp = *amp / sync->gain;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  /* Compenate for residual rotation with dual Laurent pulse */
 | 
					 | 
				
			||||||
  if (sps == 4)
 | 
					 | 
				
			||||||
    *amp = *amp * complex(0.0, 1.0);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  /* Compensate for residuate time lag */
 | 
					  /* Compensate for residuate time lag */
 | 
				
			||||||
  *toa = *toa - sync->toa;
 | 
					  *toa = *toa - sync->toa;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -1911,7 +1909,7 @@ int analyzeTrafficBurst(signalVector &rxBurst, unsigned tsc, float thresh,
 | 
				
			|||||||
  int rc, target, head, tail;
 | 
					  int rc, target, head, tail;
 | 
				
			||||||
  CorrelationSequence *sync;
 | 
					  CorrelationSequence *sync;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  if ((tsc < 0) || (tsc > 7))
 | 
					  if (tsc > 7)
 | 
				
			||||||
    return -SIGERR_UNSUPPORTED;
 | 
					    return -SIGERR_UNSUPPORTED;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  target = 3 + 58 + 16 + 5;
 | 
					  target = 3 + 58 + 16 + 5;
 | 
				
			||||||
@@ -1945,15 +1943,22 @@ int detectEdgeBurst(signalVector &rxBurst, unsigned tsc, float thresh,
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
signalVector *downsampleBurst(signalVector &burst)
 | 
					signalVector *downsampleBurst(signalVector &burst)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					  int rc;
 | 
				
			||||||
  signalVector *in, *out;
 | 
					  signalVector *in, *out;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  in = new signalVector(DOWNSAMPLE_IN_LEN, dnsampler->len());
 | 
					  in = new signalVector(DOWNSAMPLE_IN_LEN, dnsampler->len());
 | 
				
			||||||
  out = new signalVector(DOWNSAMPLE_OUT_LEN);
 | 
					  out = new signalVector(DOWNSAMPLE_OUT_LEN);
 | 
				
			||||||
  memcpy(in->begin(), burst.begin(), DOWNSAMPLE_IN_LEN * 2 * sizeof(float));
 | 
					  memcpy(in->begin(), burst.begin(), DOWNSAMPLE_IN_LEN * 2 * sizeof(float));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  dnsampler->rotate((float *) in->begin(), DOWNSAMPLE_IN_LEN,
 | 
					  rc = dnsampler->rotate((float *) in->begin(), DOWNSAMPLE_IN_LEN,
 | 
				
			||||||
                    (float *) out->begin(), DOWNSAMPLE_OUT_LEN);
 | 
					                         (float *) out->begin(), DOWNSAMPLE_OUT_LEN);
 | 
				
			||||||
  delete in;
 | 
					  delete in;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  if (rc < 0) {
 | 
				
			||||||
 | 
					    delete out;
 | 
				
			||||||
 | 
					    return NULL;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  return out;
 | 
					  return out;
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user