1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2024-11-25 17:28:50 -05:00

Separate filters.

This commit is contained in:
John Greb 2014-12-31 17:45:01 +00:00
parent 06c50842ae
commit 29445cff38
3 changed files with 15 additions and 9 deletions

View File

@ -114,7 +114,8 @@ void NFMDemod::feed(SampleVector::const_iterator begin, SampleVector::const_iter
m_sampleSink->feed(m_sampleBuffer.begin(), m_sampleBuffer.end(), true); m_sampleSink->feed(m_sampleBuffer.begin(), m_sampleBuffer.end(), true);
m_sampleBuffer.clear(); m_sampleBuffer.clear();
m_scale = 0.8 * m_scale + 0.2 * ( end - begin) * m_sampleRate / 48000 / meansqr; // TODO: correct levels
m_scale = ( end - begin) * m_sampleRate / 48000 / meansqr;
} }
void NFMDemod::start() void NFMDemod::start()

View File

@ -28,9 +28,9 @@ TCPSrc::TCPSrc(MessageQueue* uiMessageQueue, TCPSrcGUI* tcpSrcGUI, SampleSink* s
m_last = 0; m_last = 0;
m_this = 0; m_this = 0;
m_scale = 20000; m_scale = 0;
m_sampleBufferSSB.resize(tcpFftLen); m_sampleBufferSSB.resize(tcpFftLen);
TCPFilter = new fftfilt(0.001, 16.0 / 48.0, tcpFftLen); TCPFilter = new fftfilt(0.3 / 48.0, 16.0 / 48.0, tcpFftLen);
// if (!TCPFilter) segfault; // if (!TCPFilter) segfault;
} }
@ -59,7 +59,7 @@ void TCPSrc::feed(SampleVector::const_iterator begin, SampleVector::const_iterat
m_sampleBuffer.clear(); m_sampleBuffer.clear();
// Rtl-Sdr uses full 16-bit scale; FCDPP does not // Rtl-Sdr uses full 16-bit scale; FCDPP does not
int rescale = 20000 * m_boost * m_boost; int rescale = 30000 * (1 << m_boost);
for(SampleVector::const_iterator it = begin; it < end; ++it) { for(SampleVector::const_iterator it = begin; it < end; ++it) {
Complex c(it->real() / 32768.0, it->imag() / 32768.0); Complex c(it->real() / 32768.0, it->imag() / 32768.0);
@ -97,6 +97,7 @@ void TCPSrc::feed(SampleVector::const_iterator begin, SampleVector::const_iterat
if((m_sampleFormat == FormatNFM) && (m_ssbSockets.count() > 0)) { if((m_sampleFormat == FormatNFM) && (m_ssbSockets.count() > 0)) {
for(SampleVector::const_iterator it = m_sampleBuffer.begin(); it != m_sampleBuffer.end(); ++it) { for(SampleVector::const_iterator it = m_sampleBuffer.begin(); it != m_sampleBuffer.end(); ++it) {
Complex cj(it->real() / 30000.0, it->imag() / 30000.0); Complex cj(it->real() / 30000.0, it->imag() / 30000.0);
// An FFT filter here is overkill, but was already set up for SSB
int n_out = TCPFilter->runFilt(cj, &sideband); int n_out = TCPFilter->runFilt(cj, &sideband);
if (n_out) { if (n_out) {
Real sum = 1.0; Real sum = 1.0;
@ -110,7 +111,8 @@ void TCPSrc::feed(SampleVector::const_iterator begin, SampleVector::const_iterat
m_sampleBufferSSB.push_back(Sample(l * m_scale, r * m_scale)); m_sampleBufferSSB.push_back(Sample(l * m_scale, r * m_scale));
sum += m_this.real() * m_this.real() + m_this.imag() * m_this.imag(); sum += m_this.real() * m_this.real() + m_this.imag() * m_this.imag();
} }
m_scale = 0.8 * m_scale + 0.2 * 20000 * tcpFftLen / sum; // TODO: correct levels
m_scale = 24000 * tcpFftLen / sum;
for(int i = 0; i < m_ssbSockets.count(); i++) for(int i = 0; i < m_ssbSockets.count(); i++)
m_ssbSockets[i].socket->write((const char*)&m_sampleBufferSSB[0], n_out * 2); m_ssbSockets[i].socket->write((const char*)&m_sampleBufferSSB[0], n_out * 2);
m_sampleBufferSSB.clear(); m_sampleBufferSSB.clear();
@ -161,7 +163,10 @@ bool TCPSrc::handleMessage(Message* cmd)
m_boost = cfg->getBoost(); m_boost = cfg->getBoost();
m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.1); m_interpolator.create(16, m_inputSampleRate, m_rfBandwidth / 2.1);
m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate; m_sampleDistanceRemain = m_inputSampleRate / m_outputSampleRate;
TCPFilter->create_filter(0.048f / 48.0f, m_rfBandwidth / 2.0 / m_outputSampleRate); if (m_sampleFormat == FormatSSB)
TCPFilter->create_filter(0.3 / 48.0, m_rfBandwidth / 2.0 / m_outputSampleRate);
else
TCPFilter->create_filter(0.0, m_rfBandwidth / 2.0 / m_outputSampleRate);
cmd->completed(); cmd->completed();
return true; return true;
} else if(MsgTCPSrcSpectrum::match(cmd)) { } else if(MsgTCPSrcSpectrum::match(cmd)) {

View File

@ -103,16 +103,16 @@
<item row="4" column="1"> <item row="4" column="1">
<widget class="QSlider" name="boost"> <widget class="QSlider" name="boost">
<property name="minimum"> <property name="minimum">
<number>1</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>8</number> <number>3</number>
</property> </property>
<property name="pageStep"> <property name="pageStep">
<number>1</number> <number>1</number>
</property> </property>
<property name="value"> <property name="value">
<number>1</number> <number>0</number>
</property> </property>
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>