mirror of https://github.com/f4exb/sdrangel.git
SSB demod: implemented interpolator for audio
This commit is contained in:
parent
1e3980c5e0
commit
e7215b54da
|
@ -158,35 +158,45 @@ void SSBDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||
{
|
||||
(void) positiveOnly;
|
||||
Complex ci;
|
||||
fftfilt::cmplx *sideband;
|
||||
int n_out;
|
||||
|
||||
m_settingsMutex.lock();
|
||||
|
||||
int decim = 1<<(m_spanLog2 - 1);
|
||||
unsigned char decim_mask = decim - 1; // counter LSB bit mask for decimation by 2^(m_scaleLog2 - 1)
|
||||
|
||||
for(SampleVector::const_iterator it = begin; it < end; ++it)
|
||||
{
|
||||
Complex c(it->real(), it->imag());
|
||||
c *= m_nco.nextIQ();
|
||||
|
||||
if(m_interpolator.decimate(&m_interpolatorDistanceRemain, c, &ci))
|
||||
if (m_interpolatorDistance < 1.0f) // interpolate
|
||||
{
|
||||
if (m_dsb)
|
||||
while (!m_interpolator.interpolate(&m_interpolatorDistanceRemain, c, &ci))
|
||||
{
|
||||
n_out = DSBFilter->runDSB(ci, &sideband);
|
||||
}
|
||||
else
|
||||
{
|
||||
n_out = SSBFilter->runSSB(ci, &sideband, m_usb);
|
||||
}
|
||||
|
||||
processOneSample(ci);
|
||||
m_interpolatorDistanceRemain += m_interpolatorDistance;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
n_out = 0;
|
||||
if (m_interpolator.decimate(&m_interpolatorDistanceRemain, c, &ci))
|
||||
{
|
||||
processOneSample(ci);
|
||||
m_interpolatorDistanceRemain += m_interpolatorDistance;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_settingsMutex.unlock();
|
||||
}
|
||||
|
||||
void SSBDemod::processOneSample(Complex &ci)
|
||||
{
|
||||
fftfilt::cmplx *sideband;
|
||||
int n_out = 0;
|
||||
int decim = 1<<(m_spanLog2 - 1);
|
||||
unsigned char decim_mask = decim - 1; // counter LSB bit mask for decimation by 2^(m_scaleLog2 - 1)
|
||||
|
||||
if (m_dsb) {
|
||||
n_out = DSBFilter->runDSB(ci, &sideband);
|
||||
} else {
|
||||
n_out = SSBFilter->runSSB(ci, &sideband, m_usb);
|
||||
}
|
||||
|
||||
for (int i = 0; i < n_out; i++)
|
||||
|
@ -274,7 +284,6 @@ void SSBDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||
m_audioBufferFill = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
uint res = m_audioFifo.write((const quint8*)&m_audioBuffer[0], m_audioBufferFill);
|
||||
|
||||
|
@ -292,7 +301,6 @@ void SSBDemod::feed(const SampleVector::const_iterator& begin, const SampleVecto
|
|||
|
||||
m_sampleBuffer.clear();
|
||||
|
||||
m_settingsMutex.unlock();
|
||||
}
|
||||
|
||||
void SSBDemod::start()
|
||||
|
|
|
@ -338,6 +338,8 @@ private:
|
|||
void webapiFormatChannelReport(SWGSDRangel::SWGChannelReport& response);
|
||||
void webapiReverseSendSettings(QList<QString>& channelSettingsKeys, const SSBDemodSettings& settings, bool force);
|
||||
|
||||
void processOneSample(Complex &ci);
|
||||
|
||||
private slots:
|
||||
void networkManagerFinished(QNetworkReply *reply);
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue