2013-12-25 08:59:10 +01:00
|
|
|
#ifndef SOFTFM_H
|
|
|
|
#define SOFTFM_H
|
|
|
|
|
|
|
|
#include <complex>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
typedef std::complex<float> IQSample;
|
|
|
|
typedef std::vector<IQSample> IQSampleVector;
|
|
|
|
|
2013-12-29 00:34:13 +01:00
|
|
|
typedef double Sample;
|
2013-12-25 08:59:10 +01:00
|
|
|
typedef std::vector<Sample> SampleVector;
|
|
|
|
|
|
|
|
|
|
|
|
/** Compute mean and RMS over a sample vector. */
|
2013-12-29 00:44:10 +01:00
|
|
|
inline void samples_mean_rms(const SampleVector& samples,
|
|
|
|
double& mean, double& rms)
|
2013-12-25 08:59:10 +01:00
|
|
|
{
|
|
|
|
Sample vsum = 0;
|
|
|
|
Sample vsumsq = 0;
|
|
|
|
|
|
|
|
unsigned int n = samples.size();
|
|
|
|
for (unsigned int i = 0; i < n; i++) {
|
|
|
|
Sample v = samples[i];
|
|
|
|
vsum += v;
|
|
|
|
vsumsq += v * v;
|
|
|
|
}
|
|
|
|
|
|
|
|
mean = vsum / n;
|
|
|
|
rms = sqrt(vsumsq / n);
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif
|