SDRAngel  4.11.5
Developer docs for <a href="https://github.com/f4exb/sdrangel">SDRangel<\a>, an Open Source Qt5 / OpenGL 3.0+ SDR and signal analyzer frontend to various hardware.
Classes | Signals | Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | List of all members
DownChannelizer Class Reference

#include <downchannelizer.h>

+ Inheritance diagram for DownChannelizer:
+ Collaboration diagram for DownChannelizer:

Classes

struct  FilterStage
 
class  MsgChannelizerNotification
 
class  MsgSetChannelizer
 

Signals

void inputSampleRateChanged ()
 

Public Member Functions

 DownChannelizer (BasebandSampleSink *sampleSink)
 
virtual ~DownChannelizer ()
 
void configure (MessageQueue *messageQueue, int sampleRate, int centerFrequency)
 
void set (MessageQueue *messageQueue, unsigned int log2Decim, unsigned int filterChainHash)
 
int getInputSampleRate () const
 
int getRequestedCenterFrequency () const
 
virtual void start ()
 
virtual void stop ()
 
virtual void feed (const SampleVector::const_iterator &begin, const SampleVector::const_iterator &end, bool positiveOnly)
 
virtual bool handleMessage (const Message &cmd)
 Processing of a message. Returns true if message has actually been processed. More...
 
- Public Member Functions inherited from BasebandSampleSink
 BasebandSampleSink ()
 
virtual ~BasebandSampleSink ()
 
MessageQueuegetInputMessageQueue ()
 Get the queue for asynchronous inbound communication. More...
 
virtual void setMessageQueueToGUI (MessageQueue *queue)
 
MessageQueuegetMessageQueueToGUI ()
 

Protected Types

typedef std::list< FilterStage * > FilterStages
 

Protected Member Functions

void applyConfiguration ()
 
void applySetting (unsigned int log2Decim, unsigned int filterChainHash)
 
bool signalContainsChannel (Real sigStart, Real sigEnd, Real chanStart, Real chanEnd) const
 
Real createFilterChain (Real sigStart, Real sigEnd, Real chanStart, Real chanEnd)
 
void setFilterChain (const std::vector< unsigned int > &stageIndexes)
 
void freeFilterChain ()
 
void debugFilterChain ()
 

Protected Attributes

FilterStages m_filterStages
 
bool m_filterChainSetMode
 
BasebandSampleSinkm_sampleSink
 Demodulator. More...
 
int m_inputSampleRate
 
int m_requestedOutputSampleRate
 
int m_requestedCenterFrequency
 
int m_currentOutputSampleRate
 
int m_currentCenterFrequency
 
SampleVector m_sampleBuffer
 
QMutex m_mutex
 
- Protected Attributes inherited from BasebandSampleSink
MessageQueue m_inputMessageQueue
 Queue for asynchronous inbound communication. More...
 
MessageQueuem_guiMessageQueue
 Input message queue to the GUI. More...
 

Additional Inherited Members

- Protected Slots inherited from BasebandSampleSink
void handleInputMessages ()
 

Detailed Description

Definition at line 34 of file downchannelizer.h.

Member Typedef Documentation

◆ FilterStages

typedef std::list<FilterStage*> DownChannelizer::FilterStages
protected

Definition at line 119 of file downchannelizer.h.

Constructor & Destructor Documentation

◆ DownChannelizer()

DownChannelizer::DownChannelizer ( BasebandSampleSink sampleSink)

Definition at line 30 of file downchannelizer.cpp.

30  :
31  m_filterChainSetMode(false),
32  m_sampleSink(sampleSink),
38 {
39  QString name = "DownChannelizer(" + m_sampleSink->objectName() + ")";
40  setObjectName(name);
41 }
BasebandSampleSink * m_sampleSink
Demodulator.

◆ ~DownChannelizer()

DownChannelizer::~DownChannelizer ( )
virtual

Definition at line 43 of file downchannelizer.cpp.

References freeFilterChain().

44 {
46 }
+ Here is the call graph for this function:

Member Function Documentation

◆ applyConfiguration()

void DownChannelizer::applyConfiguration ( )
protected

Definition at line 184 of file downchannelizer.cpp.

References DownChannelizer::MsgChannelizerNotification::create(), createFilterChain(), freeFilterChain(), BasebandSampleSink::getInputMessageQueue(), m_currentCenterFrequency, m_currentOutputSampleRate, m_filterChainSetMode, m_filterStages, m_inputSampleRate, m_mutex, m_requestedCenterFrequency, m_requestedOutputSampleRate, m_sampleSink, and MessageQueue::push().

Referenced by handleMessage().

185 {
186  m_filterChainSetMode = false;
187 
188  if (m_inputSampleRate == 0)
189  {
190  qDebug() << "DownChannelizer::applyConfiguration: m_inputSampleRate=0 aborting";
191  return;
192  }
193 
194  m_mutex.lock();
195 
196  freeFilterChain();
197 
201 
202  m_mutex.unlock();
203 
204  //debugFilterChain();
205 
207 
208  qDebug() << "DownChannelizer::applyConfiguration in=" << m_inputSampleRate
209  << ", req=" << m_requestedOutputSampleRate
210  << ", out=" << m_currentOutputSampleRate
211  << ", fc=" << m_currentCenterFrequency;
212 
213  if (m_sampleSink != 0)
214  {
215  MsgChannelizerNotification *notif = MsgChannelizerNotification::create(m_currentOutputSampleRate, m_currentCenterFrequency);
217  }
218 }
void push(Message *message, bool emitSignal=true)
Push message onto queue.
MessageQueue * getInputMessageQueue()
Get the queue for asynchronous inbound communication.
FilterStages m_filterStages
Real createFilterChain(Real sigStart, Real sigEnd, Real chanStart, Real chanEnd)
BasebandSampleSink * m_sampleSink
Demodulator.
static MsgChannelizerNotification * create(int samplerate, qint64 frequencyOffset)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ applySetting()

void DownChannelizer::applySetting ( unsigned int  log2Decim,
unsigned int  filterChainHash 
)
protected

Definition at line 220 of file downchannelizer.cpp.

References HBFilterChainConverter::convertToIndexes(), DownChannelizer::MsgChannelizerNotification::create(), DownChannelizer::FilterStage::FilterStage(), freeFilterChain(), BasebandSampleSink::getInputMessageQueue(), m_currentCenterFrequency, m_currentOutputSampleRate, m_filterChainSetMode, m_filterStages, m_inputSampleRate, m_mutex, m_requestedCenterFrequency, m_requestedOutputSampleRate, m_sampleSink, MessageQueue::push(), and setFilterChain().

Referenced by handleMessage().

221 {
222  m_filterChainSetMode = true;
223  std::vector<unsigned int> stageIndexes;
224  m_currentCenterFrequency = m_inputSampleRate * HBFilterChainConverter::convertToIndexes(log2Decim, filterChainHash, stageIndexes);
226 
227  m_mutex.lock();
228  freeFilterChain();
229  setFilterChain(stageIndexes);
230  m_mutex.unlock();
231 
234 
235  qDebug() << "DownChannelizer::applySetting inputSampleRate:" << m_inputSampleRate
236  << " currentOutputSampleRate: " << m_currentOutputSampleRate
237  << " currentCenterFrequency: " << m_currentCenterFrequency
238  << " nb_filters: " << stageIndexes.size()
239  << " nb_stages: " << m_filterStages.size();
240 
241  if (m_sampleSink != 0)
242  {
245  }
246 }
void push(Message *message, bool emitSignal=true)
Push message onto queue.
MessageQueue * getInputMessageQueue()
Get the queue for asynchronous inbound communication.
static double convertToIndexes(unsigned int log2, unsigned int chainHash, std::vector< unsigned int > &chainIndexes)
FilterStages m_filterStages
BasebandSampleSink * m_sampleSink
Demodulator.
void setFilterChain(const std::vector< unsigned int > &stageIndexes)
static MsgChannelizerNotification * create(int samplerate, qint64 frequencyOffset)
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ configure()

void DownChannelizer::configure ( MessageQueue messageQueue,
int  sampleRate,
int  centerFrequency 
)

Definition at line 48 of file downchannelizer.cpp.

References MessageQueue::push().

Referenced by FreqTracker::configureChannelizer(), LoRaDemod::handleMessage(), AMDemod::handleMessage(), WFMDemod::handleMessage(), DSDDemod::handleMessage(), UDPSink::handleMessage(), SSBDemod::handleMessage(), NFMDemod::handleMessage(), BFMDemod::handleMessage(), FreeDVDemod::handleMessage(), ChannelAnalyzer::handleMessage(), DATVDemod::handleMessage(), and ATVDemod::handleMessage().

49 {
50  Message* cmd = new DSPConfigureChannelizer(sampleRate, centerFrequency);
51  messageQueue->push(cmd);
52 }
void push(Message *message, bool emitSignal=true)
Push message onto queue.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ createFilterChain()

Real DownChannelizer::createFilterChain ( Real  sigStart,
Real  sigEnd,
Real  chanStart,
Real  chanEnd 
)
protected

Definition at line 307 of file downchannelizer.cpp.

References DownChannelizer::FilterStage::FilterStage(), m_filterStages, DownChannelizer::FilterStage::ModeCenter, DownChannelizer::FilterStage::ModeLowerHalf, DownChannelizer::FilterStage::ModeUpperHalf, and signalContainsChannel().

Referenced by applyConfiguration().

308 {
309  Real sigBw = sigEnd - sigStart;
310  Real rot = sigBw / 4;
311 
312  //qDebug("DownChannelizer::createFilterChain: Signal [%.1f, %.1f] (BW %.1f), Channel [%.1f, %.1f], Rot %.1f", sigStart, sigEnd, sigBw, chanStart, chanEnd, rot);
313 
314  // check if it fits into the left half
315  if(signalContainsChannel(sigStart, sigStart + sigBw / 2.0, chanStart, chanEnd))
316  {
317  //qDebug("DownChannelizer::createFilterChain: -> take left half (rotate by +1/4 and decimate by 2)");
318  m_filterStages.push_back(new FilterStage(FilterStage::ModeLowerHalf));
319  return createFilterChain(sigStart, sigStart + sigBw / 2.0, chanStart, chanEnd);
320  }
321 
322  // check if it fits into the right half
323  if(signalContainsChannel(sigEnd - sigBw / 2.0f, sigEnd, chanStart, chanEnd))
324  {
325  //qDebug("DownChannelizer::createFilterChain: -> take right half (rotate by -1/4 and decimate by 2)");
326  m_filterStages.push_back(new FilterStage(FilterStage::ModeUpperHalf));
327  return createFilterChain(sigEnd - sigBw / 2.0f, sigEnd, chanStart, chanEnd);
328  }
329 
330  // check if it fits into the center
331  if(signalContainsChannel(sigStart + rot, sigEnd - rot, chanStart, chanEnd))
332  {
333  //qDebug("DownChannelizer::createFilterChain: -> take center half (decimate by 2)");
334  m_filterStages.push_back(new FilterStage(FilterStage::ModeCenter));
335  return createFilterChain(sigStart + rot, sigEnd - rot, chanStart, chanEnd);
336  }
337 
338  Real ofs = ((chanEnd - chanStart) / 2.0 + chanStart) - ((sigEnd - sigStart) / 2.0 + sigStart);
339  //qDebug("DownChannelizer::createFilterChain: -> complete (final BW %.1f, frequency offset %.1f)", sigBw, ofs);
340  return ofs;
341 }
bool signalContainsChannel(Real sigStart, Real sigEnd, Real chanStart, Real chanEnd) const
FilterStages m_filterStages
Real createFilterChain(Real sigStart, Real sigEnd, Real chanStart, Real chanEnd)
float Real
Definition: dsptypes.h:42
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ debugFilterChain()

void DownChannelizer::debugFilterChain ( )
protected

Definition at line 370 of file downchannelizer.cpp.

References m_filterStages, DownChannelizer::FilterStage::ModeCenter, DownChannelizer::FilterStage::ModeLowerHalf, and DownChannelizer::FilterStage::ModeUpperHalf.

371 {
372  qDebug("DownChannelizer::debugFilterChain: %lu stages", m_filterStages.size());
373 
374  for(FilterStages::iterator it = m_filterStages.begin(); it != m_filterStages.end(); ++it)
375  {
376  switch ((*it)->m_mode)
377  {
379  qDebug("DownChannelizer::debugFilterChain: center %s", (*it)->m_sse ? "sse" : "no_sse");
380  break;
382  qDebug("DownChannelizer::debugFilterChain: lower %s", (*it)->m_sse ? "sse" : "no_sse");
383  break;
385  qDebug("DownChannelizer::debugFilterChain: upper %s", (*it)->m_sse ? "sse" : "no_sse");
386  break;
387  default:
388  qDebug("DownChannelizer::debugFilterChain: none %s", (*it)->m_sse ? "sse" : "no_sse");
389  break;
390  }
391  }
392 }
FilterStages m_filterStages

◆ feed()

void DownChannelizer::feed ( const SampleVector::const_iterator &  begin,
const SampleVector::const_iterator &  end,
bool  positiveOnly 
)
virtual

Implements BasebandSampleSink.

Definition at line 60 of file downchannelizer.cpp.

References BasebandSampleSink::feed(), m_filterStages, Sample::m_imag, m_mutex, Sample::m_real, m_sampleBuffer, and m_sampleSink.

61 {
62  if(m_sampleSink == 0) {
63  m_sampleBuffer.clear();
64  return;
65  }
66 
67  if (m_filterStages.size() == 0) // optimization when no downsampling is done anyway
68  {
69  m_sampleSink->feed(begin, end, positiveOnly);
70  }
71  else
72  {
73  m_mutex.lock();
74 
75  for(SampleVector::const_iterator sample = begin; sample != end; ++sample)
76  {
77  Sample s(*sample);
78  FilterStages::iterator stage = m_filterStages.begin();
79 
80  for (; stage != m_filterStages.end(); ++stage)
81  {
82 #ifndef SDR_RX_SAMPLE_24BIT
83  s.m_real /= 2; // avoid saturation on 16 bit samples
84  s.m_imag /= 2;
85 #endif
86  if(!(*stage)->work(&s))
87  {
88  break;
89  }
90  }
91 
92  if(stage == m_filterStages.end())
93  {
94 #ifdef SDR_RX_SAMPLE_24BIT
95  s.m_real /= (1<<(m_filterStages.size())); // on 32 bit samples there is enough headroom to just divide the final result
96  s.m_imag /= (1<<(m_filterStages.size()));
97 #endif
98  m_sampleBuffer.push_back(s);
99  }
100  }
101 
102  m_mutex.unlock();
103 
104  m_sampleSink->feed(m_sampleBuffer.begin(), m_sampleBuffer.end(), positiveOnly);
105  m_sampleBuffer.clear();
106  }
107 }
SampleVector m_sampleBuffer
virtual void feed(const SampleVector::const_iterator &begin, const SampleVector::const_iterator &end, bool positiveOnly)=0
FilterStages m_filterStages
BasebandSampleSink * m_sampleSink
Demodulator.
+ Here is the call graph for this function:

◆ freeFilterChain()

void DownChannelizer::freeFilterChain ( )
protected

Definition at line 363 of file downchannelizer.cpp.

References m_filterStages.

Referenced by applyConfiguration(), applySetting(), and ~DownChannelizer().

364 {
365  for(FilterStages::iterator it = m_filterStages.begin(); it != m_filterStages.end(); ++it)
366  delete *it;
367  m_filterStages.clear();
368 }
FilterStages m_filterStages
+ Here is the caller graph for this function:

◆ getInputSampleRate()

int DownChannelizer::getInputSampleRate ( ) const
inline

◆ getRequestedCenterFrequency()

int DownChannelizer::getRequestedCenterFrequency ( ) const
inline

Definition at line 84 of file downchannelizer.h.

◆ handleMessage()

bool DownChannelizer::handleMessage ( const Message cmd)
virtual

Processing of a message. Returns true if message has actually been processed.

Implements BasebandSampleSink.

Definition at line 127 of file downchannelizer.cpp.

References applyConfiguration(), applySetting(), DSPConfigureChannelizer::getCenterFrequency(), DownChannelizer::MsgSetChannelizer::getFilterChainHash(), Message::getIdentifier(), BasebandSampleSink::getInputMessageQueue(), DownChannelizer::MsgSetChannelizer::getLog2Decim(), DSPSignalNotification::getSampleRate(), DSPConfigureChannelizer::getSampleRate(), BasebandSampleSink::handleMessage(), inputSampleRateChanged(), m_filterChainSetMode, m_inputSampleRate, m_requestedCenterFrequency, m_requestedOutputSampleRate, m_sampleSink, Message::match(), and MessageQueue::push().

128 {
129  // TODO: apply changes only if input sample rate or requested output sample rate change. Change of center frequency has no impact.
130 
132  {
135  qDebug() << "DownChannelizer::handleMessage: DSPSignalNotification: m_inputSampleRate: " << m_inputSampleRate;
136 
137  if (!m_filterChainSetMode) {
139  }
140 
141  if (m_sampleSink != 0)
142  {
143  DSPSignalNotification* rep = new DSPSignalNotification(notif); // make a copy
145  }
146 
147  emit inputSampleRateChanged();
148  return true;
149  }
150  else if (DSPConfigureChannelizer::match(cmd))
151  {
155 
156  // qDebug() << "DownChannelizer::handleMessage: DSPConfigureChannelizer:"
157  // << " m_requestedOutputSampleRate: " << m_requestedOutputSampleRate
158  // << " m_requestedCenterFrequency: " << m_requestedCenterFrequency;
159 
161 
162  return true;
163  }
164  else if (MsgSetChannelizer::match(cmd))
165  {
166  MsgSetChannelizer& chan = (MsgSetChannelizer&) cmd;
167  qDebug() << "DownChannelizer::handleMessage: MsgSetChannelizer";
168  applySetting(chan.getLog2Decim(), chan.getFilterChainHash());
169 
170  return true;
171  }
173  {
174  qDebug() << "DownChannelizer::handleMessage: MsgThreadedSink: forwarded to demod";
175  return m_sampleSink->handleMessage(cmd); // this message is passed to the demod
176  }
177  else
178  {
179  qDebug() << "DownChannelizer::handleMessage: " << cmd.getIdentifier() << " unhandled";
180  return false;
181  }
182 }
void push(Message *message, bool emitSignal=true)
Push message onto queue.
MessageQueue * getInputMessageQueue()
Get the queue for asynchronous inbound communication.
void inputSampleRateChanged()
int getSampleRate() const
Definition: dspcommands.h:367
virtual bool handleMessage(const Message &cmd)=0
Processing of a message. Returns true if message has actually been processed.
int getCenterFrequency() const
Definition: dspcommands.h:368
static bool match(const Message *message)
Definition: message.cpp:45
int getSampleRate() const
Definition: dspcommands.h:328
virtual const char * getIdentifier() const
Definition: message.cpp:35
void applySetting(unsigned int log2Decim, unsigned int filterChainHash)
BasebandSampleSink * m_sampleSink
Demodulator.
+ Here is the call graph for this function:

◆ inputSampleRateChanged

void DownChannelizer::inputSampleRateChanged ( )
signal

Referenced by handleMessage().

+ Here is the caller graph for this function:

◆ set()

void DownChannelizer::set ( MessageQueue messageQueue,
unsigned int  log2Decim,
unsigned int  filterChainHash 
)

Definition at line 54 of file downchannelizer.cpp.

References MessageQueue::push().

Referenced by LocalSink::handleMessage(), and RemoteSink::handleMessage().

55 {
56  Message* cmd = new MsgSetChannelizer(log2Decim, filterChainHash);
57  messageQueue->push(cmd);
58 }
void push(Message *message, bool emitSignal=true)
Push message onto queue.
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ setFilterChain()

void DownChannelizer::setFilterChain ( const std::vector< unsigned int > &  stageIndexes)
protected

Definition at line 343 of file downchannelizer.cpp.

References DownChannelizer::FilterStage::FilterStage(), m_filterStages, DownChannelizer::FilterStage::ModeCenter, DownChannelizer::FilterStage::ModeLowerHalf, and DownChannelizer::FilterStage::ModeUpperHalf.

Referenced by applySetting().

344 {
345  // filters are described from lower to upper level but the chain is constructed the other way round
346  std::vector<unsigned int>::const_reverse_iterator rit = stageIndexes.rbegin();
347 
348  // Each index is a base 3 number with 0 = low, 1 = center, 2 = high
349  // Functions at upper level will convert a number to base 3 to describe the filter chain. Common converting
350  // algorithms will go from LSD to MSD. This explains the reverse order.
351  for (; rit != stageIndexes.rend(); ++rit)
352  {
353  if (*rit == 0) {
354  m_filterStages.push_back(new FilterStage(FilterStage::ModeLowerHalf));
355  } else if (*rit == 1) {
356  m_filterStages.push_back(new FilterStage(FilterStage::ModeCenter));
357  } else if (*rit == 2) {
358  m_filterStages.push_back(new FilterStage(FilterStage::ModeUpperHalf));
359  }
360  }
361 }
FilterStages m_filterStages
+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ signalContainsChannel()

bool DownChannelizer::signalContainsChannel ( Real  sigStart,
Real  sigEnd,
Real  chanStart,
Real  chanEnd 
) const
protected

Definition at line 297 of file downchannelizer.cpp.

Referenced by createFilterChain().

298 {
299  //qDebug(" testing signal [%f, %f], channel [%f, %f]", sigStart, sigEnd, chanStart, chanEnd);
300  if(sigEnd <= sigStart)
301  return false;
302  if(chanEnd <= chanStart)
303  return false;
304  return (sigStart <= chanStart) && (sigEnd >= chanEnd);
305 }
+ Here is the caller graph for this function:

◆ start()

void DownChannelizer::start ( )
virtual

Implements BasebandSampleSink.

Definition at line 109 of file downchannelizer.cpp.

References m_inputSampleRate, m_requestedCenterFrequency, m_requestedOutputSampleRate, m_sampleSink, and BasebandSampleSink::start().

110 {
111  if (m_sampleSink != 0)
112  {
113  qDebug() << "DownChannelizer::start: thread: " << thread()
114  << " m_inputSampleRate: " << m_inputSampleRate
115  << " m_requestedOutputSampleRate: " << m_requestedOutputSampleRate
116  << " m_requestedCenterFrequency: " << m_requestedCenterFrequency;
117  m_sampleSink->start();
118  }
119 }
virtual void start()=0
BasebandSampleSink * m_sampleSink
Demodulator.
+ Here is the call graph for this function:

◆ stop()

void DownChannelizer::stop ( )
virtual

Implements BasebandSampleSink.

Definition at line 121 of file downchannelizer.cpp.

References m_sampleSink, and BasebandSampleSink::stop().

122 {
123  if(m_sampleSink != 0)
124  m_sampleSink->stop();
125 }
BasebandSampleSink * m_sampleSink
Demodulator.
virtual void stop()=0
+ Here is the call graph for this function:

Member Data Documentation

◆ m_currentCenterFrequency

int DownChannelizer::m_currentCenterFrequency
protected

Definition at line 127 of file downchannelizer.h.

Referenced by applyConfiguration(), and applySetting().

◆ m_currentOutputSampleRate

int DownChannelizer::m_currentOutputSampleRate
protected

Definition at line 126 of file downchannelizer.h.

Referenced by applyConfiguration(), and applySetting().

◆ m_filterChainSetMode

bool DownChannelizer::m_filterChainSetMode
protected

Definition at line 121 of file downchannelizer.h.

Referenced by applyConfiguration(), applySetting(), and handleMessage().

◆ m_filterStages

FilterStages DownChannelizer::m_filterStages
protected

◆ m_inputSampleRate

int DownChannelizer::m_inputSampleRate
protected

Definition at line 123 of file downchannelizer.h.

Referenced by applyConfiguration(), applySetting(), handleMessage(), and start().

◆ m_mutex

QMutex DownChannelizer::m_mutex
protected

Definition at line 129 of file downchannelizer.h.

Referenced by applyConfiguration(), applySetting(), and feed().

◆ m_requestedCenterFrequency

int DownChannelizer::m_requestedCenterFrequency
protected

Definition at line 125 of file downchannelizer.h.

Referenced by applyConfiguration(), applySetting(), handleMessage(), and start().

◆ m_requestedOutputSampleRate

int DownChannelizer::m_requestedOutputSampleRate
protected

Definition at line 124 of file downchannelizer.h.

Referenced by applyConfiguration(), applySetting(), handleMessage(), and start().

◆ m_sampleBuffer

SampleVector DownChannelizer::m_sampleBuffer
protected

Definition at line 128 of file downchannelizer.h.

Referenced by feed().

◆ m_sampleSink

BasebandSampleSink* DownChannelizer::m_sampleSink
protected

Demodulator.

Definition at line 122 of file downchannelizer.h.

Referenced by applyConfiguration(), applySetting(), feed(), handleMessage(), start(), and stop().


The documentation for this class was generated from the following files: