SSB demod: continuous sum for SSB downsampling

pull/6/head
f4exb 2015-12-26 04:04:22 +01:00
rodzic 332fe54b6a
commit 2b98bc9d8a
2 zmienionych plików z 8 dodań i 6 usunięć

Wyświetl plik

@ -50,6 +50,7 @@ SSBDemod::SSBDemod(SampleSink* sampleSink) :
m_audioBuffer.resize(1<<9);
m_audioBufferFill = 0;
m_undersampleCount = 0;
m_sum = 0;
m_usb = true;
m_magsq = 0.0f;
@ -83,7 +84,7 @@ void SSBDemod::configure(MessageQueue* messageQueue,
void SSBDemod::feed(const SampleVector::const_iterator& begin, const SampleVector::const_iterator& end, bool positiveOnly)
{
Complex ci;
fftfilt::cmplx *sideband, sum;
fftfilt::cmplx *sideband;
Real avg;
int n_out;
@ -113,18 +114,18 @@ void SSBDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
// Downsample by 2^(m_scaleLog2 - 1) for SSB band spectrum display
// smart decimation with bit gain using float arithmetic (23 bits significand)
sum += sideband[i];
m_sum += sideband[i];
if (!(m_undersampleCount++ & decim_mask))
{
Real avgr = sum.real() / decim;
Real avgi = sum.imag() / decim;
Real avgr = m_sum.real() / decim;
Real avgi = m_sum.imag() / decim;
m_magsq = (avgr * avgr + avgi * avgi) / (1<<30);
//avg = (sum.real() + sum.imag()) * 0.7 * 32768.0 / decim;
avg = (avgr + avgi) * 0.7;
m_sampleBuffer.push_back(Sample(avg, 0.0));
sum.real() = 0.0;
sum.imag() = 0.0;
m_sum.real() = 0.0;
m_sum.imag() = 0.0;
}
if (m_audioBinaual)

Wyświetl plik

@ -112,6 +112,7 @@ private:
Real m_LowCutoff;
Real m_volume;
int m_spanLog2;
fftfilt::cmplx m_sum;
int m_undersampleCount;
int m_sampleRate;
int m_frequency;