commit 66f1d366739bf44a0d188f093d40eab9d6a75b71 Author: Hannes Matuschek Date: Wed May 27 14:38:12 2015 +0200 Added docs diff --git a/annotated.html b/annotated.html new file mode 100644 index 0000000..1966126 --- /dev/null +++ b/annotated.html @@ -0,0 +1,200 @@ + + + + + + +libsdr: Class List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + +
+ +
+ All Classes Functions Variables Typedefs Enumerations Enumerator Pages
+ + +
+ +
+ +
+
+
Class List
+
+
+
Here are the classes, structs, unions and interfaces with brief descriptions:
+
[detail level 123]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\Nsdr
 oCAutoCastThis class performs some automatic casts to a certain buffer type if possible specified by the template argument
 oCIQBaseBandThis class performs several operations on the complex (integral) input stream, it first filters out some part of the input stream using a FIR band pass (band pass is centerred around Ff with width width) then shifts the center frequency Fc to 0 and finally sub-samples the resulting stream
 oCBaseBandThis class performs several operations on the real input stream, It first filters out some part of the input stream using a FIR band pass filter then shifts the center frequency to 0 and finally sub-samples the resulting stream such that the selected base-band is well represented
 oCBufferOwnerAbstract class (interface) of a buffer owner
 oCRawBufferBase class of all buffers, represents an untyped array of bytes
 oCBufferA typed buffer
 oCBufferSetA set of buffers, that tracks their usage
 oCRawRingBufferA simple ring buffer
 oCRingBufferA simple typed ring-buffer
 oCBufferNodeA simple buffering node, that ensures a fixed buffer size
 oCCombineA combine node
 oCCombineSinkA single sink of a Combine node
 oCInterleaveInterleaves several input streams
 oCAMDemodAmplitude modulation (AM) demodulator from an I/Q signal
 oCUSBDemodSSB upper side band (USB) demodulator from an I/Q signal
 oCFMDemodDemodulates FM from an I/Q signal
 oCFMDeemphA tiny node to de-emphasize the higher frequencies of a FM transmitted audio signal
 oCSDRErrorBase class of all SDR exceptions
 oCConfigErrorThe configuration error class
 oCRuntimeErrorThe runtime error class
 oCFFTPlanTrivial FFT implementation for buffer sizes of N=2**K
 oCFFTFFT module class, provides static methods to perfrom a FFT directly
 oCFFTPlan< double >Template specialization for a FFT transform on std::complex<double> values
 oCFFTPlan< float >Template specialization for a FFT transform on std::complex<float> values
 oCFilterSinkPerforms the FFT forward transform
 oCFilterSourcePerforms the overlap-add FFT filtering and back-transform
 oCFilterNodeA FFT filter bank node wich consists of several filters
 oCFIRLowPassCoeffsImplements the calculation of the filter coefficients for the use in the FIRFilter template class
 oCFIRHighPassCoeffsImplements the calculation of the filter coefficients for the use in the FIRFilter template class
 oCFIRBandPassCoeffsImplements the calculation of the filter coefficients for the use in the FIRFilter template class
 oCFIRBandStopCoeffsImplements the calculation of the filter coefficients for the use in the FIRFilter template class
 oCFIRFilterGeneric FIR filter class
 oCFIRLowPassLow-pass FIR filter specialization
 oCFIRHighPassHigh-pass FIR filter specialization
 oCFIRBandPassBand-pass FIR filter specialization
 oCFIRBandStopBand-stop FIR filter specialization
 oCFreqShiftBaseA performant implementation of a frequency shift operation on integer signals
 oCLogMessageA log message
 oCLogHandlerBase class of all log message handlers
 oCStreamLogHandlerSerializes log message into the specified stream
 oCLoggerThe logger class (singleton)
 oCConfigA collection of configuration information that is send by a source to all connected sinks to propergate and check the configuration of the processing network
 oCSinkBaseBasic interface of all Sinks
 oCSinkTyped sink
 oCSourceGeneric source class
 oCBlockingSourceIterface of a blocking source
 oCProxyA NOP node
 oCOptionsConvenience functions for command line arguments
 |oCDefinitionArgument definition
 |\CValueThe argument value
 oCPortAudio"Namespace" to collect all static, PortAudio related functions
 oCPortSinkPortAudio playback node
 oCPortSourcePortAudio input stream as a Source
 oCBPSK31A simple BPSK31 "demodulator"
 oCVaricodeSimple varicode (Huffman code) decoder node
 oCDelegateInterfaceInterface of a delegate
 oCDelegateSpecific delegate to a method of an object
 oCQueueCentral message queue (singleton)
 |\CMessageThe internal used message type
 oCRTLSourceImplements a uint_8 I/Q source for RTL2832 based TV dongles
 oCSigGenArbitrary function generator
 oCIQSigGenArbitrary function generator
 oCSubSampleSimple averaging sub-sampler
 oCFracSubSampleBaseImplements a fractional sub-sampler
 oCInpolSubSamplerAn interpolating sub-sampler
 oCTraitsForward declaration of type tratis template
 oCTraits< uint8_t >Template specialization of type tratis for uint8_t scalar
 oCTraits< std::complex< uint8_t > >Template specialization of type tratis for complex uint8_t scalar
 oCTraits< int8_t >Template specialization of type tratis for int8_t scalar
 oCTraits< std::complex< int8_t > >Template specialization of type tratis for complex int8_t scalar
 oCTraits< uint16_t >Template specialization of type traits for uint16_t scalar
 oCTraits< std::complex< uint16_t > >Template specialization of type traits for complex uint16_t scalar
 oCTraits< int16_t >Template specialization of type traits for int16_t scalar
 oCTraits< std::complex< int16_t > >Template specialization of type traits for complex int16_t scalar
 oCTraits< float >Template specialization of type traits for float scalar
 oCTraits< std::complex< float > >Template specialization of type traits for complex float scalar
 oCTraits< double >Template specialization of type traits for float scalar
 oCTraits< std::complex< double > >Template specialization of type traits for complex float scalar
 oCRealImagPartExtracts the real or imaginary part of a complex valued data stream
 oCRealPartSelects the real part of a complex signal
 oCImagPartSelects the imaginary part of a complex signal
 oCIQBalanceA simple node, that allows to balance an IQ signal
 oCToComplexTiny helper node to transform a real part into a complex, including a possible type-cast
 oCCastExplicit type cast node
 oCUnsignedToSignedPerforms a reinterprete cast from an unsinged value to a singed one
 oCSignedToUnsignedPerforms a reinterprete cast from an unsinged value to a singed one
 oCFreqShiftPerforms a frequency shift on a complex input signal, by multiplying it with $e^{i\omega t}$
 oCStreamSourceReads raw samples from an imput stream, (ie a file)
 oCStreamSinkSerializes the incomming buffers as raw data
 oCScaleSimple scaling node
 oCAGCAn automatic gain control node
 oCDebugStoreKeeps a copy of the last buffer received
 oCDebugDumpDumps buffers in a human readable form
 oCGWNSourceA Gaussian White Noise source
 oCWavSinkStores the received buffers into a WAV file
 \CWavSourceA simple imput source that reads from a wav file
+
+
+ + + + diff --git a/autocast_8hh_source.html b/autocast_8hh_source.html new file mode 100644 index 0000000..876529e --- /dev/null +++ b/autocast_8hh_source.html @@ -0,0 +1,378 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/autocast.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
autocast.hh
+
+
+
1 #ifndef __SDR_AUTOCAST_HH__
+
2 #define __SDR_AUTOCAST_HH__
+
3 
+
4 #include "node.hh"
+
5 #include "traits.hh"
+
6 #include "logger.hh"
+
7 
+
8 namespace sdr {
+
9 
+
12 template <class Scalar>
+
13 class AutoCast: public SinkBase, public Source
+
14 {
+
15 public:
+ +
18  : SinkBase(), Source(), _buffer(), _cast(0)
+
19  {
+
20  // pass...
+
21  }
+
22 
+
24  virtual void config(const Config &src_cfg) {
+
25  // Requires buffer size, sample rate and type:
+
26  if ((Config::Type_UNDEFINED==src_cfg.type()) || (0==src_cfg.sampleRate()) || (0==src_cfg.bufferSize())) { return; }
+
27 
+
28  // Check type cast combination
+ +
30  switch (src_cfg.type()) {
+
31  case Config::Type_u8:
+
32  case Config::Type_s8: _cast = _identity; break;
+
33  case Config::Type_u16:
+
34  case Config::Type_s16: _cast = _int16_int8; break;
+
35  default: break;
+
36  }
+ +
38  switch (src_cfg.type()) {
+
39  case Config::Type_u8: _cast = _uint8_cint8; break;
+
40  case Config::Type_s8: _cast = _int8_cint8; break;
+
41  case Config::Type_cu8: _cast = _cuint8_cint8; break;
+
42  case Config::Type_cs8: _cast = _identity; break;
+
43  case Config::Type_u16:
+
44  case Config::Type_s16: _cast = _int16_cint8; break;
+
45  default: break;
+
46  }
+ +
48  switch (src_cfg.type()) {
+
49  case Config::Type_u8:
+
50  case Config::Type_s8: _cast = _int8_int16; break;
+
51  case Config::Type_u16:
+
52  case Config::Type_s16: _cast = _identity; break;
+
53  default: break;
+
54  }
+ +
56  switch (src_cfg.type()) {
+
57  case Config::Type_u8: _cast = _uint8_cint16; break;
+
58  case Config::Type_s8: _cast = _int8_cint16; break;
+
59  case Config::Type_cu8: _cast = _cuint8_cint16; break;
+
60  case Config::Type_cs8: _cast = _cint8_cint16; break;
+
61  case Config::Type_u16: _cast = _uint16_cint16; break;
+
62  case Config::Type_s16: _cast = _int16_cint16; break;
+
63  case Config::Type_cu16:
+
64  case Config::Type_cs16: _cast = _identity; break;
+
65  default: break;
+
66  }
+
67  }
+
68 
+
69  // Check if there exists a cast to the required type
+
70  if (0 == _cast) {
+
71  ConfigError err;
+
72  err << "AutoCast: Can not cast from type " << src_cfg.type() << " to " << Traits<Scalar>::scalarId;
+
73  throw err;
+
74  }
+
75 
+
76  // Allocate buffer
+
77  _buffer = Buffer<Scalar>(src_cfg.bufferSize());
+
78 
+
79  LogMessage msg(LOG_DEBUG);
+
80  msg << "Configure AutoCast node:" << std::endl
+
81  << " input type: " << src_cfg.type() << std::endl
+
82  << " output type: " << Traits<Scalar>::scalarId;
+
83  Logger::get().log(msg);
+
84 
+
85  // Propergate config
+
86  this->setConfig(Config(Config::typeId<Scalar>(), src_cfg.sampleRate(), src_cfg.bufferSize(), 1));
+
87  }
+
88 
+
89  virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite) {
+
90  // If no conversion is selected
+
91  if (0 == _cast) { return; }
+
92  // If the identity conversion is selected -> forward buffer
+
93  if (_identity == _cast) { this->send(buffer, allow_overwrite); return; }
+
94  // Otherwise cast
+
95  size_t bytes = _cast(buffer, _buffer);
+
96  this->send(RawBuffer(_buffer, 0, bytes), false);
+
97  }
+
98 
+
99 
+
100 protected:
+ +
104  size_t (*_cast)(const RawBuffer &in, const RawBuffer &out);
+
105 
+
106 protected:
+
108  static size_t _identity(const RawBuffer &in, const RawBuffer &out) {
+
109  memcpy(out.ptr(), in.data(), in.bytesLen());
+
110  return in.bytesLen();
+
111  }
+
112 
+
114  static size_t _int16_int8(const RawBuffer &in, const RawBuffer &out) {
+
115  size_t N = in.bytesLen()/2;
+
116  for (size_t i=0; i<N; i++) {
+
117  reinterpret_cast<int8_t *>(out.data())[i] = reinterpret_cast<int16_t *>(in.data())[i]>>8;
+
118  }
+
119  return N;
+
120  }
+
121 
+
123  static size_t _uint8_cint8(const RawBuffer &in, const RawBuffer &out) {
+
124  size_t N = in.bytesLen();
+
125  uint8_t *values = reinterpret_cast<uint8_t *>(in.data());
+
126  for (size_t i=0; i<N; i++) {
+
127  reinterpret_cast<std::complex<int8_t> *>(out.data())[i] =
+
128  (int16_t(values[i])-127);
+
129  }
+
130  return 2*N;
+
131  }
+
132 
+
134  static size_t _int8_cint8(const RawBuffer &in, const RawBuffer &out) {
+
135  size_t N = in.bytesLen();
+
136  for (size_t i=0; i<N; i++) {
+
137  reinterpret_cast<std::complex<int8_t> *>(out.data())[i] = reinterpret_cast<int8_t *>(in.data())[i];
+
138  }
+
139  return 2*N;
+
140  }
+
141 
+
143  static size_t _cuint8_cint8(const RawBuffer &in, const RawBuffer &out) {
+
144  size_t N = in.bytesLen()/2;
+
145  std::complex<uint8_t> *values = reinterpret_cast<std::complex<uint8_t> *>(in.data());
+
146  for (size_t i=0; i<N; i++) {
+
147  reinterpret_cast<std::complex<int8_t> *>(out.data())[i] =
+
148  std::complex<int8_t>(int16_t(values[i].real())-127, int16_t(values[i].imag())-127);
+
149  }
+
150  return 2*N;
+
151  }
+
152 
+
154  static size_t _int16_cint8(const RawBuffer &in, const RawBuffer &out) {
+
155  size_t N = in.bytesLen()/2;
+
156  for (size_t i=0; i<N; i++) {
+
157  reinterpret_cast<std::complex<int8_t> *>(out.data())[i] = reinterpret_cast<int16_t *>(in.data())[i]>>8;
+
158  }
+
159  return 2*N;
+
160  }
+
161 
+
163  static size_t _cint16_cint8(const RawBuffer &in, const RawBuffer &out) {
+
164  size_t N = in.bytesLen()/4;
+
165  std::complex<int16_t> *values = reinterpret_cast<std::complex<int16_t> *>(in.data());
+
166  for (size_t i=0; i<N; i++) {
+
167  reinterpret_cast<std::complex<int8_t> *>(out.data())[i] = std::complex<int8_t>(values[i].real()>>8, values[i].imag()>>8);
+
168  }
+
169  return 2*N;
+
170  }
+
171 
+
173  static size_t _int8_int16(const RawBuffer &in, const RawBuffer &out) {
+
174  size_t N = in.bytesLen();
+
175  int8_t *values = reinterpret_cast<int8_t *>(in.data());
+
176  for (size_t i=0; i<N; i++) {
+
177  reinterpret_cast<int16_t *>(out.data())[i] = int16_t(values[i])<<8;
+
178  }
+
179  return 2*N;
+
180  }
+
181 
+
183  static size_t _uint8_cint16(const RawBuffer &in, const RawBuffer &out) {
+
184  size_t N = in.bytesLen();
+
185  uint8_t *values = reinterpret_cast<uint8_t *>(in.data());
+
186  for (size_t i=0; i<N; i++) {
+
187  reinterpret_cast<std::complex<int16_t> *>(out.data())[i]
+
188  = std::complex<int16_t>((int16_t(values[i])-127)<<8);
+
189  }
+
190  return 4*N;
+
191  }
+
192 
+
194  static size_t _int8_cint16(const RawBuffer &in, const RawBuffer &out) {
+
195  size_t N = in.bytesLen();
+
196  int8_t *values = reinterpret_cast<int8_t *>(in.data());
+
197  for (size_t i=0; i<N; i++) {
+
198  reinterpret_cast<std::complex<int16_t> *>(out.data())[i]
+
199  = std::complex<int16_t>(int16_t(values[i])*(1<<8));
+
200  }
+
201  return 4*N;
+
202  }
+
203 
+
205  static size_t _cuint8_cint16(const RawBuffer &in, const RawBuffer &out) {
+
206  size_t N = in.bytesLen()/2;
+
207  std::complex<uint8_t> *values = reinterpret_cast<std::complex<uint8_t> *>(in.data());
+
208  for (size_t i=0; i<N; i++) {
+
209  reinterpret_cast<std::complex<int16_t> *>(out.data())[i] =
+
210  std::complex<int16_t>((int16_t(values[i].real())-127)*(1<<8),
+
211  (int16_t(values[i].imag())-127)*(1<<8));
+
212  }
+
213  return 4*N;
+
214  }
+
215 
+
217  static size_t _cint8_cint16(const RawBuffer &in, const RawBuffer &out) {
+
218  size_t N = in.bytesLen()/2;
+
219  std::complex<int8_t> *values = reinterpret_cast<std::complex<int8_t> *>(in.data());
+
220  for (size_t i=0; i<N; i++) {
+
221  reinterpret_cast<std::complex<int16_t> *>(out.data())[i] =
+
222  std::complex<int16_t>(int16_t(values[i].real())*(1<<8),
+
223  int16_t(values[i].imag())*(1<<8));
+
224  }
+
225  return 4*N;
+
226  }
+
227 
+
229  static size_t _uint16_cint16(const RawBuffer &in, const RawBuffer &out) {
+
230  size_t N = in.bytesLen()/2;
+
231  uint16_t *values = reinterpret_cast<uint16_t *>(in.data());
+
232  for (size_t i=0; i<N; i++) {
+
233  reinterpret_cast<std::complex<int16_t> *>(out.data())[i]
+
234  = std::complex<int16_t>(int32_t(values[i])-(1<<15));
+
235  }
+
236  return 4*N;
+
237  }
+
238 
+
240  static size_t _int16_cint16(const RawBuffer &in, const RawBuffer &out) {
+
241  size_t N = in.bytesLen()/2;
+
242  int16_t *values = reinterpret_cast<int16_t *>(in.data());
+
243  for (size_t i=0; i<N; i++) {
+
244  reinterpret_cast<std::complex<int16_t> *>(out.data())[i] = std::complex<int16_t>(values[i]);
+
245  }
+
246  return 4*N;
+
247  }
+
248 };
+
249 
+
250 
+
251 }
+
252 #endif // __SDR_AUTOCAST_HH__
+
static size_t _int16_int8(const RawBuffer &in, const RawBuffer &out)
int16 -> int8
Definition: autocast.hh:114
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
Base class of all buffers, represents an untyped array of bytes.
Definition: buffer.hh:32
+
Buffer< Scalar > _buffer
Output buffer.
Definition: autocast.hh:102
+
static size_t _cint8_cint16(const RawBuffer &in, const RawBuffer &out)
complex int8 -> complex int16.
Definition: autocast.hh:217
+
Real signed 16b ints.
Definition: node.hh:28
+
virtual void send(const RawBuffer &buffer, bool allow_overwrite=false)
Sends the given buffer to all connected sinks.
Definition: node.cc:67
+
Complex (aka I/Q) type of unsigned 16b ints.
Definition: node.hh:33
+
Real signed 8b ints.
Definition: node.hh:26
+
Generic source class.
Definition: node.hh:197
+
Real unsigned 8b ints.
Definition: node.hh:25
+
static size_t _cuint8_cint16(const RawBuffer &in, const RawBuffer &out)
complex unsigned int8 -> complex int16.
Definition: autocast.hh:205
+
static size_t _cint16_cint8(const RawBuffer &in, const RawBuffer &out)
complex int16 -> complex int 8.
Definition: autocast.hh:163
+
size_t bytesLen() const
Returns the size of the buffer by the view.
Definition: buffer.hh:73
+
size_t(* _cast)(const RawBuffer &in, const RawBuffer &out)
Cast function.
Definition: autocast.hh:104
+
char * data() const
Returns the pointer to the data of the buffer view.
Definition: buffer.hh:69
+
Real unsigned 16b ints.
Definition: node.hh:27
+
static size_t _int8_cint8(const RawBuffer &in, const RawBuffer &out)
int8 -> complex int8.
Definition: autocast.hh:134
+
virtual void setConfig(const Config &config)
Stores the configuration and propergates it if the configuration has been changed.
Definition: node.cc:98
+
virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite)
Needs to be implemented by any sub-type to process the received data.
Definition: autocast.hh:89
+
void log(const LogMessage &message)
Logs a message.
Definition: logger.cc:100
+
Type type() const
Returns the type.
Definition: node.hh:55
+
static Logger & get()
Returns the singleton instance of the logger.
Definition: logger.cc:89
+
The configuration error class.
Definition: exception.hh:24
+
A log message.
Definition: logger.hh:21
+
size_t bufferSize() const
Returns the max.
Definition: node.hh:67
+
static size_t _int8_int16(const RawBuffer &in, const RawBuffer &out)
int8 -> int16.
Definition: autocast.hh:173
+
static size_t _int16_cint8(const RawBuffer &in, const RawBuffer &out)
int16 -> complex int 8.
Definition: autocast.hh:154
+
AutoCast()
Constructor.
Definition: autocast.hh:17
+
static size_t _int16_cint16(const RawBuffer &in, const RawBuffer &out)
int16 -> complex int16.
Definition: autocast.hh:240
+
This class performs some automatic casts to a certain buffer type if possible specified by the templa...
Definition: autocast.hh:13
+
Basic interface of all Sinks.
Definition: node.hh:158
+
char * ptr() const
Returns the pointer to the data (w/o view).
Definition: buffer.hh:67
+
Complex (aka I/Q) type of signed 8b ints.
Definition: node.hh:32
+
virtual void config(const Config &src_cfg)
Configures the auto cast node.
Definition: autocast.hh:24
+
static size_t _uint8_cint16(const RawBuffer &in, const RawBuffer &out)
unsinged int8 -> complex int16.
Definition: autocast.hh:183
+
static size_t _int8_cint16(const RawBuffer &in, const RawBuffer &out)
int8 -> complex int16.
Definition: autocast.hh:194
+
Complex (aka I/Q) type of signed 16b ints.
Definition: node.hh:34
+
Complex (aka I/Q) type of unsigned 8b ints.
Definition: node.hh:31
+
Forward declaration of type tratis template.
Definition: traits.hh:20
+
static size_t _uint16_cint16(const RawBuffer &in, const RawBuffer &out)
uint16 -> complex int16.
Definition: autocast.hh:229
+
static size_t _uint8_cint8(const RawBuffer &in, const RawBuffer &out)
uint8 -> complex int8.
Definition: autocast.hh:123
+
static size_t _identity(const RawBuffer &in, const RawBuffer &out)
Performs no cast at all.
Definition: autocast.hh:108
+ +
static size_t _cuint8_cint8(const RawBuffer &in, const RawBuffer &out)
std::complex<uint8_t> -> std::complex<int8_t>.
Definition: autocast.hh:143
+
double sampleRate() const
Returns the sample rate.
Definition: node.hh:61
+
+ + + + diff --git a/baseband_8hh_source.html b/baseband_8hh_source.html new file mode 100644 index 0000000..f727d99 --- /dev/null +++ b/baseband_8hh_source.html @@ -0,0 +1,638 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/baseband.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
baseband.hh
+
+
+
1 #ifndef __SDR_BASEBAND_HH__
+
2 #define __SDR_BASEBAND_HH__
+
3 
+
4 #include "node.hh"
+
5 #include "config.hh"
+
6 #include "utils.hh"
+
7 #include "traits.hh"
+
8 #include "operators.hh"
+
9 #include "freqshift.hh"
+
10 
+
11 namespace sdr {
+
12 
+
13 
+
20 template <class Scalar>
+
21 class IQBaseBand: public Sink< std::complex<Scalar> >, public Source, public FreqShiftBase<Scalar>
+
22 {
+
23 public:
+
25  typedef std::complex<Scalar> CScalar;
+
28  typedef int32_t SScalar;
+
30  typedef std::complex<SScalar> CSScalar;
+
31 
+
32 public:
+
34  IQBaseBand(double Fc, double width, size_t order, size_t sub_sample, double oFs=0.0)
+
35  : Sink<CScalar>(), Source(), FreqShiftBase<Scalar>(Fc, 0),
+
36  _Fc(Fc), _Ff(Fc), _Fs(0), _width(width), _order(std::max(size_t(1), order)),
+
37  _sub_sample(sub_sample), _oFs(oFs), _ring_offset(0), _sample_count(0),
+
38  _last(0), _kernel(_order)
+
39  {
+
40  // Allocate and reset ring buffer:
+ +
42  for (size_t i=0; i<_order; i++) { _ring[i] = 0; }
+
43  }
+
44 
+
46  IQBaseBand(double Fc, double Ff, double width, size_t order, size_t sub_sample, double oFs=0.0)
+
47  : Sink<CScalar>(), Source(), FreqShiftBase<Scalar>(Fc, 0),
+
48  _Fc(Fc), _Ff(Ff), _Fs(0), _width(width), _order(std::max(size_t(1), order)),
+
49  _sub_sample(sub_sample), _oFs(oFs), _ring_offset(0), _sample_count(0),
+
50  _last(0), _kernel(_order)
+
51  {
+
52  // Allocate and reset ring buffer:
+ +
54  for (size_t i=0; i<_order; i++) { _ring[i] = 0; }
+
55  }
+
56 
+
58  virtual ~IQBaseBand() {
+
59  // Free buffers
+
60  _buffer.unref();
+
61  _kernel.unref();
+
62  _ring.unref();
+
63  }
+
64 
+
66  inline size_t order() const { return _order; }
+
68  void setOrder(size_t o) {
+
69  // ensure filter order >= 1
+
70  o = (o<1) ? 1 : o;
+
71  // Reallocate ring buffer and kernel
+
72  if (! _kernel.isEmpty()) { _kernel.unref(); }
+
73  if (! _ring.isEmpty()) { _ring.unref(); }
+ + +
76  // Update filter kernel
+ +
78  }
+
79 
+
81  inline double centerFrequency() const { return _Fc; }
+
83  void setCenterFrequency(double Fc) {
+
84  _Fc = Fc; this->setFrequencyShift(_Fc);
+
85  }
+
86 
+
88  inline double filterFrequency() const { return _Ff; }
+
90  void setFilterFrequency(double Ff) {
+
91  _Ff = Ff; _update_filter_kernel();
+
92  }
+
93 
+
95  inline double filterWidth() const { return _width; }
+
97  void setFilterWidth(double width) {
+
98  _width = width; _update_filter_kernel();
+
99  }
+
100 
+
102  size_t subSample() const { return _sub_sample; }
+
104  void setSubsample(size_t sub_sample) {
+
105  _sub_sample = std::max(size_t(1), sub_sample); _reconfigure();
+
106  }
+
109  void setOutputSampleRate(double Fs) {
+
110  _oFs = Fs; _reconfigure();
+
111  }
+
112 
+
114  virtual void config(const Config &src_cfg)
+
115  {
+
116  // Requires type, sample rate & buffer size
+
117  if (!src_cfg.hasType() || !src_cfg.hasSampleRate() || !src_cfg.hasBufferSize()) { return; }
+
118  // Check buffer type
+
119  if (Config::typeId<CScalar>() != src_cfg.type()) {
+
120  ConfigError err;
+
121  err << "Can not configure IQBaseBand: Invalid type " << src_cfg.type()
+
122  << ", expected " << Config::typeId<CScalar>();
+
123  throw err;
+
124  }
+
125  // Store sample rate
+
126  _Fs = src_cfg.sampleRate();
+
127  // Store source buffer size
+
128  _sourceBs = src_cfg.bufferSize();
+
129 
+
130  _reconfigure();
+
131  }
+
132 
+
133 
+
135  virtual void process(const Buffer< std::complex<Scalar> > &buffer, bool allow_overwrite)
+
136  {
+
137  if (allow_overwrite) {
+
138  // Perform in-place if @c allow_overwrite
+
139  _process(buffer, buffer);
+
140  } else if (_buffer.isUnused()) {
+
141  // Otherwise store results into output buffer.
+
142  _process(buffer, _buffer);
+
143  } else {
+
144 #ifdef SDR_DEBUG
+
145  LogMessage msg(LOG_WARNING);
+
146  msg << "IQBaseBand: Drop buffer: Output buffer still in use.";
+
147  Logger::get().log(msg);
+
148 #endif
+
149  }
+
150  }
+
151 
+
152 
+
153 protected:
+ +
156  {
+
157  // If _oFs > 0 -> set _sub_sample to match the sample rate (approx).
+
158  if (_oFs > 0) {
+
159  _sub_sample = _Fs/_oFs;
+
160  if (_sub_sample < 1) { _sub_sample=1; }
+
161  }
+
162 
+
163  // Update filter kernel
+ +
165  // Update freq shift operator:
+
166  this->setSampleRate(_Fs);
+
167  // Calc output buffer size
+
168  size_t buffer_size = _sourceBs/_sub_sample;
+
169  if (_sourceBs%_sub_sample) { buffer_size += 1; }
+
170  // Allocate output buffer
+
171  _buffer = Buffer<CScalar>(buffer_size);
+
172 
+
173  // Reset internal state
+
174  _last = 0;
+
175  _sample_count = 0;
+
176  _ring_offset = 0;
+
177 
+
178  LogMessage msg(LOG_DEBUG);
+
179  msg << "Configured IQBaseBand node:" << std::endl
+
180  << " type " << Traits< std::complex<Scalar> >::scalarId << std::endl
+
181  << " sample-rate " << _Fs << "Hz" << std::endl
+
182  << " center freq " << _Fc << "Hz" << std::endl
+
183  << " width " << _width << "Hz" << std::endl
+
184  << " kernel " << _kernel << std::endl
+
185  << " in buffer size " << _sourceBs << std::endl
+
186  << " sub-sample by " << _sub_sample << std::endl
+
187  << " out buffer size " << buffer_size;
+
188  Logger::get().log(msg);
+
189 
+
190  // Propergate config
+
191  this->setConfig(Config(Traits< std::complex<Scalar> >::scalarId,
+
192  _Fs/_sub_sample, buffer_size, 1));
+
193  }
+
194 
+
197  inline void _process(const Buffer<CScalar> &in, const Buffer<CScalar> &out) {
+
198  size_t i=0, j=0;
+
199  for (; i<in.size(); i++, _sample_count++) {
+
200  // Store sample in ring buffer
+
201  _ring[_ring_offset] = in[i];
+
202 
+
203  // Apply filter on ring-buffer and shift freq
+ +
205 
+
206  // _ring_offset modulo _order
+
207  _ring_offset++;
+
208  if (_order == _ring_offset) { _ring_offset = 0; }
+
209 
+
210  // If _sample_count samples have been averaged:
+
211  if (_sub_sample == _sample_count) {
+
212  // Store average in output buffer
+ +
214  out[j] = value;
+
215  // reset average, sample count and increment output buffer index j
+
216  _last = 0; _sample_count=0; j++;
+
217  } else if (_sub_sample == 1) {
+
218  out[j] = _last; _last = 0; _sample_count = 0; j++;
+
219  }
+
220  }
+
221  this->send(out.head(j), true);
+
222  }
+
223 
+
225  inline CSScalar _filter_ring() const
+
226  {
+
227  CSScalar res = 0;
+
228  size_t idx = _ring_offset+1;
+
229  if (_order == idx) { idx = 0; }
+
230  for (size_t i=0; i<_order; i++, idx++) {
+
231  if (_order == idx) { idx = 0; }
+
232  res += _kernel[i]*_ring[idx];
+
233  }
+
234  return (res>>14);
+
235  }
+
236 
+ +
239  // First, create a filter kernel of a low-pass filter with _width/2 cut-off
+ +
241  double w = (M_PI*_width)/(_Fs);
+
242  double M = double(_order)/2.;
+
243  double norm = 0;
+
244 
+
245  //std::complex<double> phi(0.0, (2*M_PI*_Ff)/_Fs); phi = std::exp(phi);
+
246  for (size_t i=0; i<_order; i++) {
+
247  if (_order == 2*i) { alpha[i] = 4*(w/M_PI); }
+
248  else { alpha[i] = std::sin(w*(i-M))/(w*(i-M)); }
+
249  // Shift freq by +_Ff:
+
250  //alpha[i] = phi*alpha[i]; phi = phi*phi;
+
251  alpha[i] *= std::exp(std::complex<double>(0.0, (-2*M_PI*_Ff*i)/_Fs));
+
252  // apply window function
+
253  alpha[i] *= (0.42 - 0.5*cos((2*M_PI*i)/_order) + 0.08*cos((4*M_PI*i)/_order));
+
254  // Calc norm
+
255  norm += std::abs(alpha[i]);
+
256  }
+
257  // Normalize filter coeffs and store in _kernel:
+
258  for (size_t i=0; i<_order; i++) {
+
259  _kernel[i] = (double(1<<14) * alpha[i]) / norm;
+
260  }
+
261  }
+
262 
+
263 protected:
+
265  int32_t _Fc;
+
267  int32_t _Ff;
+
269  int32_t _Fs;
+
271  int32_t _width;
+
273  size_t _order;
+
275  size_t _sub_sample;
+
277  double _oFs;
+
279  size_t _ring_offset;
+ + +
285  size_t _sourceBs;
+
286 
+ + + +
293 };
+
294 
+
295 
+
296 
+
297 
+
302 template <class Scalar>
+
303 class BaseBand: public Sink<Scalar>, public Source, public FreqShiftBase<Scalar>
+
304 {
+
305 public:
+ + + +
312 
+
313 public:
+
320  BaseBand(double Fc, double width, size_t order, size_t sub_sample)
+
321  : Sink<Scalar>(), Source(), FreqShiftBase<Scalar>(Fc, 0),
+
322  _Ff(Fc), _width(width), _order(std::max(size_t(1), order)),
+
323  _sub_sample(sub_sample), _ring_offset(0), _sample_count(0),
+
324  _last(0), _kernel(_order)
+
325  {
+
326  // Allocate and reset ring buffer:
+ +
328  for (size_t i=0; i<_order; i++) { _ring[i] = 0; }
+
329  }
+
330 
+
338  BaseBand(double Fc, double Ff, double width, size_t order, size_t sub_sample)
+
339  : Sink<Scalar>(), Source(), FreqShiftBase<Scalar>(Fc, 0),
+
340  _Ff(Ff), _width(width), _order(std::max(size_t(1), order)),
+
341  _sub_sample(sub_sample), _ring_offset(0), _sample_count(0),
+
342  _last(0), _kernel(_order)
+
343  {
+
344  // Allocate and reset ring buffer:
+ +
346  for (size_t i=0; i<_order; i++) { _ring[i] = 0; }
+
347  }
+
348 
+
350  virtual ~BaseBand() {
+
351  // Free buffers
+
352  _buffer.unref();
+
353  _kernel.unref();
+
354  _ring.unref();
+
355  }
+
356 
+
358  virtual void config(const Config &src_cfg) {
+
359  // Requires type, sample rate & buffer size
+
360  if (!src_cfg.hasType() || !src_cfg.hasSampleRate() || !src_cfg.hasBufferSize()) { return; }
+
361  // Check buffer type
+
362  if (Config::typeId<Scalar>() != src_cfg.type()) {
+
363  ConfigError err;
+
364  err << "Can not configure BaseBand: Invalid type " << src_cfg.type()
+
365  << ", expected " << Config::typeId<Scalar>();
+
366  throw err;
+
367  }
+
368  // Store sample rate
+
369  this->setSampleRate(src_cfg.sampleRate());
+
370 
+
371  // Calc output buffer size
+
372  size_t buffer_size = src_cfg.bufferSize()/_sub_sample;
+
373  if (src_cfg.bufferSize()%_sub_sample) { buffer_size += 1; }
+
374  // Allocate output buffer
+
375  _buffer = Buffer<CScalar>(buffer_size);
+
376 
+
377  _last = 0;
+
378  _sample_count = 0;
+
379  _ring_offset = 0;
+
380 
+
381  LogMessage msg(LOG_DEBUG);
+
382  msg << "Configured BaseBand node:" << std::endl
+
383  << " type " << Traits< std::complex<Scalar> >::scalarId << std::endl
+
384  << " sample-rate " << FreqShiftBase<Scalar>::sampleRate() << "Hz" << std::endl
+
385  << " center freq " << FreqShiftBase<Scalar>::frequencyShift() << "Hz" << std::endl
+
386  << " width " << _width << "Hz" << std::endl
+
387  << " kernel " << _kernel << std::endl
+
388  << " in buffer size " << src_cfg.bufferSize() << std::endl
+
389  << " sub-sample by " << _sub_sample << std::endl
+
390  << " out buffer size " << buffer_size;
+
391  Logger::get().log(msg);
+
392 
+
393  // Propergate config
+
394  this->setConfig(Config(Traits< std::complex<Scalar> >::scalarId,
+ +
396  }
+
397 
+
398  virtual void setSampleRate(double Fs) {
+ + +
402  }
+
403 
+
405  virtual void process(const Buffer<Scalar> &buffer, bool allow_overwrite)
+
406  {
+
407  if (_buffer.isUnused()) {
+
408  _process(buffer, _buffer);
+
409  } else {
+
410 #ifdef SDR_DEBUG
+
411  LogMessage msg(LOG_WARNING);
+
412  msg << "BaseBand: Drop buffer: Output buffer still in use.";
+
413  Logger::get().log(msg);
+
414 #endif
+
415  }
+
416  }
+
417 
+
418 
+
419 protected:
+
423  inline void _process(const Buffer<Scalar> &in, const Buffer<CScalar> &out) {
+
424  size_t i=0, j=0;
+
425  for (; i<in.size(); i++) {
+
426  // Store sample in ring buffer
+
427  _ring[_ring_offset] = in[i];
+
428 
+ +
430  _sample_count++;
+
431 
+
432  // _ring_offset modulo _order
+
433  _ring_offset++;
+
434  if (_order == _ring_offset) { _ring_offset = 0; }
+
435 
+
436  // If _sample_count samples have been averaged:
+
437  if (_sub_sample == _sample_count) {
+
438  // Store average in output buffer
+
439  out[j] = _last/CSScalar(_sub_sample);;
+
440  // reset average, sample count and increment output buffer index j
+
441  _last = 0; _sample_count=0; j++;
+
442  }
+
443  }
+
444  this->send(out.head(j), true);
+
445  }
+
446 
+ +
449  {
+
450  CSScalar res = 0;
+
451  size_t idx = _ring_offset+1;
+
452  if (_order == idx) { idx = 0; }
+
453  for (size_t i=0; i<_order; i++, idx++) {
+
454  if (_order == idx) { idx = 0; }
+
455  res += _kernel[i]*_ring[idx];
+
456  }
+
457  return (res>>Traits<Scalar>::shift);
+
458  }
+
459 
+ +
462  // First, create a filter kernel of a low-pass filter with
+
463  // _width/2 cut-off
+ +
465  double w = (2*M_PI*_width)/(2*FreqShiftBase<Scalar>::sampleRate());
+
466  double M = double(_order)/2;
+
467  double norm = 0;
+
468  for (size_t i=0; i<_order; i++) {
+
469  if (_order == (2*i)) { alpha[i] = 1; }
+
470  else { alpha[i] = std::sin(w*(i-M))/(w*(i-M)); }
+
471  }
+
472  // Shift filter by _Fc, apply window function and calc norm of filter
+
473  std::complex<double> phi(0.0, (2*M_PI*_Ff)/FreqShiftBase<Scalar>::sampleRate()); phi = std::exp(phi);
+
474  for (size_t i=0; i<_order; i++) {
+
475  // Shift filter kernel
+
476  alpha[i] = alpha[i]*std::exp(std::complex<double>(0, (2*M_PI*_Ff*i)/FreqShiftBase<Scalar>::sampleRate()));
+
477  // apply window function
+
478  alpha[i] *= (0.42 - 0.5*cos((2*M_PI*(i+1))/(_order+2)) +
+
479  0.08*cos((4*M_PI*(i+1))/(_order+2)));
+
480  // Calc norm
+
481  norm += std::abs(alpha[i]);
+
482  }
+
483  // Normalize filter coeffs and store in _kernel:
+
484  for (size_t i=0; i<_order; i++) {
+
485  _kernel[i] = ((double(1<<Traits<Scalar>::shift) * alpha[i]) / norm);
+
486  }
+
487  // free alpha
+
488  alpha.unref();
+
489  }
+
490 
+
491 protected:
+
493  double _Ff;
+
495  double _width;
+
497  size_t _order;
+
499  size_t _sub_sample;
+
501  size_t _ring_offset;
+
502 
+ + +
507 
+ + +
513  size_t _lut_inc;
+
515  size_t _lut_count;
+
516 
+ + + +
523 
+
524 protected:
+
526  static const size_t _lut_size=128;
+
527 };
+
528 
+
529 }
+
530 
+
531 #endif // __SDR_BASEBAND_HH__
+
FreqShiftBase< Scalar >::CSScalar CSScalar
The complex super scalar.
Definition: baseband.hh:311
+
virtual ~BaseBand()
Destructor.
Definition: baseband.hh:350
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
double frequencyShift() const
Returns the frequency shift.
Definition: freqshift.hh:50
+
size_t subSample() const
Returns the sub sampling.
Definition: baseband.hh:102
+
size_t _ring_offset
The current index of the ring buffer.
Definition: baseband.hh:279
+
int32_t _width
The filter width.
Definition: baseband.hh:271
+
std::complex< SScalar > CSScalar
Complex SScalar type.
Definition: baseband.hh:30
+
size_t _sample_count
The current number of averages.
Definition: baseband.hh:504
+
double filterFrequency() const
Returns the filter frequency.
Definition: baseband.hh:88
+
FreqShiftBase< Scalar >::CScalar CScalar
The complex input scalar.
Definition: baseband.hh:307
+
void setOrder(size_t o)
(Re-) Sets the filter order.
Definition: baseband.hh:68
+
virtual void setSampleRate(double Fs)
Sets the sample rate and updates the LUT.
Definition: freqshift.hh:45
+
virtual void send(const RawBuffer &buffer, bool allow_overwrite=false)
Sends the given buffer to all connected sinks.
Definition: node.cc:67
+
size_t _sub_sample
The number of sample averages for the sub sampling.
Definition: baseband.hh:275
+
This class performs several operations on the complex (integral) input stream, it first filters out s...
Definition: baseband.hh:21
+
IQBaseBand(double Fc, double width, size_t order, size_t sub_sample, double oFs=0.0)
Constructor, the filter center frequency Ff equals the given center frequency Fc. ...
Definition: baseband.hh:34
+
void _process(const Buffer< Scalar > &in, const Buffer< CScalar > &out)
Performs the actual procssing.
Definition: baseband.hh:423
+
Typed sink.
Definition: node.hh:176
+
double centerFrequency() const
Returns the center frequency.
Definition: baseband.hh:81
+
bool isEmpty() const
Returns true if the buffer is invalid/empty.
Definition: buffer.hh:77
+
void setCenterFrequency(double Fc)
Resets the center frequency.
Definition: baseband.hh:83
+
virtual void setFrequencyShift(double F)
Sets the frequency shift and updates the LUT.
Definition: freqshift.hh:52
+
bool hasSampleRate() const
If true, the configuration has a sample rate.
Definition: node.hh:59
+
size_t order() const
Returns the order of the band-pass filter.
Definition: baseband.hh:66
+
CSScalar _filter_ring()
Applies the filter on the data stored in the ring buffer.
Definition: baseband.hh:448
+
void _reconfigure()
Reconfigures the node.
Definition: baseband.hh:155
+
Generic source class.
Definition: node.hh:197
+
bool _shift_freq
If true, Fc!=0.
Definition: baseband.hh:509
+
double sampleRate() const
Returns the sample rate.
Definition: freqshift.hh:43
+
void setOutputSampleRate(double Fs)
Resets the output sample rate.
Definition: baseband.hh:109
+
std::complex< SScalar > CSScalar
The complex compute (super) scalar of the input type.
Definition: freqshift.hh:21
+
size_t size() const
Returns the number of elements of type T in this buffer.
Definition: buffer.hh:166
+
bool hasType() const
If true, the configuration has a type.
Definition: node.hh:53
+
size_t _sourceBs
Buffer size of the source.
Definition: baseband.hh:285
+
int32_t _Fs
The input sample rate.
Definition: baseband.hh:269
+
size_t _ring_offset
The current index of the ring buffer.
Definition: baseband.hh:501
+
int32_t SScalar
The (real) computation scalar type (super scalar), the computations are performed with this scalar ty...
Definition: baseband.hh:28
+
virtual void setSampleRate(double Fs)
Sets the sample rate and updates the LUT.
Definition: baseband.hh:398
+
void _update_filter_kernel()
Updates the band-pass filter kernel.
Definition: baseband.hh:238
+
virtual void setConfig(const Config &config)
Stores the configuration and propergates it if the configuration has been changed.
Definition: node.cc:98
+
double _oFs
Holds the desired output sample rate, _sub_sample will be adjusted accordingly.
Definition: baseband.hh:277
+
size_t _order
The order of the filter.
Definition: baseband.hh:273
+
BaseBand(double Fc, double width, size_t order, size_t sub_sample)
Constructs a new BaseBand instance.
Definition: baseband.hh:320
+
CSScalar _last
The current sum of the last _sample_count samples.
Definition: baseband.hh:506
+
Buffer< CScalar > _buffer
The output buffer.
Definition: baseband.hh:292
+
IQBaseBand(double Fc, double Ff, double width, size_t order, size_t sub_sample, double oFs=0.0)
Constructor.
Definition: baseband.hh:46
+
Buffer< T > head(size_t n) const
Returns a new view on this buffer.
Definition: buffer.hh:237
+
void _process(const Buffer< CScalar > &in, const Buffer< CScalar > &out)
Performs the base-band selection, frequency shift and sub-sampling.
Definition: baseband.hh:197
+
std::complex< Scalar > CScalar
The complex input signal.
Definition: freqshift.hh:17
+
virtual ~IQBaseBand()
Destructor.
Definition: baseband.hh:58
+
int32_t _Ff
The center frequency of the base band.
Definition: baseband.hh:267
+
void _update_filter_kernel()
Calculates or updates the filter kernel.
Definition: baseband.hh:461
+
void log(const LogMessage &message)
Logs a message.
Definition: logger.cc:100
+
void setFilterFrequency(double Ff)
(Re-) Sets the filter frequency.
Definition: baseband.hh:90
+
Type type() const
Returns the type.
Definition: node.hh:55
+
Buffer< CSScalar > _ring
A ring buffer of past values.
Definition: baseband.hh:290
+
virtual void process(const Buffer< Scalar > &buffer, bool allow_overwrite)
Processes the input buffer.
Definition: baseband.hh:405
+
Traits< Scalar >::SScalar SScalar
The compute (super) scalar of the input type.
Definition: freqshift.hh:19
+
static Logger & get()
Returns the singleton instance of the logger.
Definition: logger.cc:89
+
size_t _sample_count
Holds the current number of samples averaged.
Definition: baseband.hh:281
+
Buffer< CScalar > _buffer
The output buffer.
Definition: baseband.hh:522
+
A performant implementation of a frequency shift operation on integer signals.
Definition: freqshift.hh:13
+
int32_t _Fc
The frequency shift of the base band.
Definition: baseband.hh:265
+
virtual void config(const Config &src_cfg)
Configures the BaseBand node.
Definition: baseband.hh:114
+
size_t _order
The order of the band pass filter.
Definition: baseband.hh:497
+
The configuration error class.
Definition: exception.hh:24
+
Buffer< CSScalar > _lut
look-up table
Definition: baseband.hh:511
+
A log message.
Definition: logger.hh:21
+
size_t bufferSize() const
Returns the max.
Definition: node.hh:67
+
std::complex< Scalar > CScalar
The complex type of the input stream.
Definition: baseband.hh:25
+
void setSubsample(size_t sub_sample)
Resets the sub sampling.
Definition: baseband.hh:104
+
size_t _lut_count
The current LUT index times (1<<4).
Definition: baseband.hh:515
+
static const size_t _lut_size
Size of the look-up table.
Definition: baseband.hh:526
+
FreqShiftBase< Scalar >::SScalar SScalar
The real super scalar.
Definition: baseband.hh:309
+
This class performs several operations on the real input stream, It first filters out some part of th...
Definition: baseband.hh:303
+
CSScalar applyFrequencyShift(CSScalar value)
Performs the frequency shift on a single sample.
Definition: freqshift.hh:57
+
size_t _sub_sample
The number of averages taken for subsampling.
Definition: baseband.hh:499
+
double _Ff
The center frequency of the band pass filter.
Definition: baseband.hh:493
+
void unref()
Dereferences the buffer.
Definition: buffer.cc:61
+
bool isUnused() const
We assume here that buffers are owned by some object: A buffer is therefore "unused" if the owner hol...
Definition: buffer.hh:87
+
BaseBand(double Fc, double Ff, double width, size_t order, size_t sub_sample)
Constructs a new BaseBand instance.
Definition: baseband.hh:338
+
Forward declaration of type tratis template.
Definition: traits.hh:20
+
Buffer< CSScalar > _kernel
The filter kernel of order _order.
Definition: baseband.hh:288
+
virtual void process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
Processes the given buffer.
Definition: baseband.hh:135
+
CSScalar _last
Holds the current sum of the last _sample_count samples.
Definition: baseband.hh:283
+
double filterWidth() const
Returns the filter width.
Definition: baseband.hh:95
+
double _width
The width of the band pass filter.
Definition: baseband.hh:495
+
size_t _lut_inc
The LUT index increment per (1<<4) samples.
Definition: baseband.hh:513
+
Buffer< CSScalar > _kernel
The filter kernel of order _order.
Definition: baseband.hh:518
+
CSScalar _filter_ring() const
Applies the filter on the data stored in the ring buffer.
Definition: baseband.hh:225
+
Buffer< SScalar > _ring
A ring buffer of past values.
Definition: baseband.hh:520
+ +
bool hasBufferSize() const
If true, the configuration has a buffer size.
Definition: node.hh:65
+
double sampleRate() const
Returns the sample rate.
Definition: node.hh:61
+
void setFilterWidth(double width)
Sets the filter width.
Definition: baseband.hh:97
+
virtual void config(const Config &src_cfg)
Configures the base band node.
Definition: baseband.hh:358
+
+ + + + diff --git a/bc_s.png b/bc_s.png new file mode 100644 index 0000000..224b29a Binary files /dev/null and b/bc_s.png differ diff --git a/bdwn.png b/bdwn.png new file mode 100644 index 0000000..940a0b9 Binary files /dev/null and b/bdwn.png differ diff --git a/buffer_8hh_source.html b/buffer_8hh_source.html new file mode 100644 index 0000000..f0d6659 --- /dev/null +++ b/buffer_8hh_source.html @@ -0,0 +1,621 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/buffer.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
buffer.hh
+
+
+
1 #ifndef __SDR_BUFFER_HH__
+
2 #define __SDR_BUFFER_HH__
+
3 
+
4 #include <vector>
+
5 #include <map>
+
6 #include <list>
+
7 #include <ostream>
+
8 #include <complex>
+
9 #include <inttypes.h>
+
10 #include <cstdlib>
+
11 #include <cstring>
+
12 
+
13 #include "config.hh"
+
14 #include "exception.hh"
+
15 
+
16 
+
17 namespace sdr {
+
18 
+
19 // Forward declarations
+
20 class RawBuffer;
+
21 
+
24 class BufferOwner {
+
25 public:
+
27  virtual void bufferUnused(const RawBuffer &buffer) = 0;
+
28 };
+
29 
+
30 
+
32 class RawBuffer
+
33 {
+
34 public:
+
36  RawBuffer();
+
37 
+
39  RawBuffer(char *data, size_t offset, size_t len);
+
40 
+
42  RawBuffer(size_t N, BufferOwner *owner=0);
+
43 
+
45  RawBuffer(const RawBuffer &other);
+
46 
+
48  RawBuffer(const RawBuffer &other, size_t offset, size_t len);
+
49 
+
51  virtual ~RawBuffer();
+
52 
+
54  inline const RawBuffer &operator= (const RawBuffer &other) {
+
55  // Now, reference new one
+
56  _ptr = other._ptr;
+ +
58  _b_offset = other._b_offset;
+
59  _b_length = other._b_length;
+
60  _refcount = other._refcount;
+
61  _owner = other._owner;
+
62  // done.
+
63  return *this;
+
64  }
+
65 
+
67  inline char *ptr() const { return (char *)_ptr; }
+
69  inline char *data() const { return ((char *)_ptr+_b_offset); }
+
71  inline size_t bytesOffset() const { return _b_offset; }
+
73  inline size_t bytesLen() const { return _b_length; }
+
75  inline size_t storageSize() const { return _storage_size; }
+
77  inline bool isEmpty() const { return 0 == _ptr; }
+
78 
+
80  void ref() const;
+
82  void unref();
+
84  inline int refCount() const { if (0 == _refcount) { return 0; } return (*_refcount); }
+
87  inline bool isUnused() const {
+
88  if (0 == _refcount) { return true; }
+
89  return (1 == (*_refcount));
+
90  }
+
91 
+
92 protected:
+
94  char *_ptr;
+
96  size_t _storage_size;
+
98  size_t _b_offset;
+
100  size_t _b_length;
+
102  int *_refcount;
+ +
105 };
+
106 
+
107 
+
108 
+
110 template <class T>
+
111 class Buffer: public RawBuffer
+
112 {
+
113 public:
+
115  Buffer() : RawBuffer(), _size(0) {
+
116  // pass...
+
117  }
+
118 
+
120  Buffer(T *data, size_t size)
+
121  : RawBuffer((char *)data, 0, sizeof(T)*size), _size(size) {
+
122  // pass...
+
123  }
+
124 
+
126  Buffer(size_t N, BufferOwner *owner=0)
+
127  : RawBuffer(N*sizeof(T), owner), _size(N) {
+
128  // pass...
+
129  }
+
130 
+
132  Buffer(const Buffer<T> &other)
+
133  : RawBuffer(other), _size(other._size) {
+
134  // pass...
+
135  }
+
136 
+
138  virtual ~Buffer() {
+
139  _size = 0;
+
140  }
+
141 
+
143  explicit Buffer(const RawBuffer &other)
+
144  : RawBuffer(other), _size(_b_length/sizeof(T))
+
145  {
+
146  // pass
+
147  }
+
148 
+
149 
+
150 public:
+
152  const Buffer<T> &operator= (const Buffer<T> other) {
+
153  RawBuffer::operator =(other);
+
154  _size = other._size;
+
155  return *this;
+
156  }
+
157 
+
160  inline bool operator<(const Buffer<T> &other) const {
+
161  // Comparison by pointer to data
+
162  return this->_ptr < other._ptr;
+
163  }
+
164 
+
166  inline size_t size() const { return _size; }
+
167 
+
170  inline T &operator[] (int idx) const {
+
171 #ifdef SDR_DEBUG
+
172  if ((idx >= _size) || (idx < 0)) {
+
173  RuntimeError err;
+
174  err << "Index " << idx << " out of bounds [0," << _size << ")";
+
175  throw err;
+
176  }
+
177 #endif
+
178  return reinterpret_cast<T *>(_ptr+_b_offset)[idx];
+
179  }
+
180 
+
182  inline double norm2() const {
+
183  double nrm2 = 0;
+
184  for (size_t i=0; i<size(); i++) {
+
185  nrm2 += std::real(std::conj((*this)[i])*(*this)[i]);
+
186  }
+
187  return std::sqrt(nrm2);
+
188  }
+
189 
+
191  inline double norm() const {
+
192  double nrm = 0;
+
193  for (size_t i=0; i<size(); i++) {
+
194  nrm += std::abs((*this)[i]);
+
195  }
+
196  return nrm;
+
197  }
+
198 
+
200  inline double norm(double p) const {
+
201  double nrm = 0;
+
202  for (size_t i=0; i<size(); i++) {
+
203  nrm += std::pow(std::abs((*this)[i]), p);
+
204  }
+
205  return std::pow(nrm, 1./p);
+
206  }
+
207 
+
209  inline Buffer<T> &operator *=(const T &a) {
+
210  for (size_t i=0; i<size(); i++) {
+
211  (*this)[i] *= a;
+
212  }
+
213  return *this;
+
214  }
+
215 
+
217  inline Buffer<T> &operator /=(const T &a) {
+
218  for (size_t i=0; i<size(); i++) {
+
219  (*this)[i] /= a;
+
220  }
+
221  return *this;
+
222  }
+
223 
+
225  template <class oT>
+
226  Buffer<oT> as() const {
+
227  return Buffer<oT>((const RawBuffer &)(*this));
+
228  }
+
229 
+
231  inline Buffer<T> sub(size_t offset, size_t len) const {
+
232  if ((offset+len) > _size) { return Buffer<T>(); }
+
233  return Buffer<T>(RawBuffer(*this, offset*sizeof(T), len*sizeof(T)));
+
234  }
+
235 
+
237  inline Buffer<T> head(size_t n) const {
+
238  if (n > _size) { return Buffer<T>(); }
+
239  return this->sub(0, n);
+
240  }
+
241 
+
243  inline Buffer<T> tail(size_t n) const {
+
244  if (n > _size) { return Buffer<T>(); }
+
245  return this->sub(_size-n, n);
+
246  }
+
247 
+
248 protected:
+
250  size_t _size;
+
251 };
+
252 
+
254 template <class Scalar>
+
255 std::ostream &
+
256 operator<< (std::ostream &stream, const sdr::Buffer<Scalar> &buffer)
+
257 {
+
258  stream << "[";
+
259  if (10 < buffer.size()) {
+
260  stream << +buffer[0];
+
261  for (size_t i=1; i<5; i++) {
+
262  stream << ", " << +buffer[i];
+
263  }
+
264  stream << ", ..., " << +buffer[buffer.size()-6];
+
265  for (size_t i=1; i<5; i++) {
+
266  stream << ", " << +buffer[buffer.size()+i-6];
+
267  }
+
268  } else {
+
269  if (0 < buffer.size()) {
+
270  stream << +buffer[0];
+
271  for (size_t i=1; i<buffer.size(); i++) {
+
272  stream << ", " << +buffer[i];
+
273  }
+
274  }
+
275  }
+
276  stream << "]";
+
277  return stream;
+
278 }
+
279 
+
280 
+
287 template <class Scalar>
+
288 class BufferSet: public BufferOwner
+
289 {
+
290 public:
+
292  BufferSet(size_t N, size_t size)
+
293  : _bufferSize(size)
+
294  {
+
295  _free_buffers.reserve(N);
+
296  for (size_t i=0; i<N; i++) {
+
297  Buffer<Scalar> buffer(size, this);
+
298  _buffers[buffer.ptr()] = buffer;
+
299  _free_buffers.push_back(buffer.ptr());
+
300  }
+
301  }
+
302 
+
305  virtual ~BufferSet() {
+
306  typename std::map<void *, Buffer<Scalar> >::iterator item = _buffers.begin();
+
307  for(; item != _buffers.end(); item++) {
+
308  item->second.unref();
+
309  }
+
310  _buffers.clear();
+
311  _free_buffers.clear();
+
312  }
+
313 
+
315  inline bool hasBuffer() { return _free_buffers.size(); }
+
316 
+ +
319  void *id = _free_buffers.back(); _free_buffers.pop_back();
+
320  return _buffers[id];
+
321  }
+
322 
+
324  virtual void bufferUnused(const RawBuffer &buffer) {
+
325  // Add buffer to list of free buffers if they are still owned
+
326  if (0 != _buffers.count(buffer.ptr())) {
+
327  _free_buffers.push_back(buffer.ptr());
+
328  }
+
329  }
+
330 
+
332  void resize(size_t numBuffers) {
+
333  if (_buffers.size() == numBuffers) { return; }
+
334  if (_buffers.size() < numBuffers) {
+
335  // add some buffers
+
336  size_t N = (numBuffers - _buffers.size());
+
337  for (size_t i=0; i<N; i++) {
+
338  Buffer<Scalar> buffer(_bufferSize, this);
+
339  _buffers[buffer.ptr()] = buffer;
+
340  }
+
341  }
+
342  }
+
343 
+
344 protected:
+
346  size_t _bufferSize;
+
349  std::map<void *, Buffer<Scalar> > _buffers;
+
351  std::vector<void *> _free_buffers;
+
352 };
+
353 
+
354 
+ +
357 {
+
358 public:
+
360  RawRingBuffer();
+
362  RawRingBuffer(size_t size);
+
364  RawRingBuffer(const RawRingBuffer &other);
+
365 
+
367  virtual ~RawRingBuffer();
+
368 
+
370  inline const RawRingBuffer &operator=(const RawRingBuffer &other) {
+
371  RawBuffer::operator =(other);
+
372  _take_idx = other._take_idx;
+
373  _b_stored = other._b_stored;
+
374  return *this;
+
375  }
+
376 
+
378  char &operator[] (int idx) {
+
379 #ifdef SDR_DEBUG
+
380  if ((idx < 0) || (idx>=(int)_b_stored)) {
+
381  RuntimeError err;
+
382  err << "RawRingBuffer: Index " << idx << " out of bounds [0," << bytesLen() << ").";
+
383  throw err;
+
384  }
+
385 #endif
+
386  int i = _take_idx+idx;
+
387  if (i >= (int)_storage_size) { i -= _storage_size; }
+
388  return *(ptr()+i);
+
389  }
+
390 
+
392  inline size_t bytesLen() const { return _b_stored; }
+
393 
+
395  inline size_t bytesFree() const {
+
396  return _storage_size-_b_stored;
+
397  }
+
398 
+
401  inline bool put(const RawBuffer &src) {
+
403  // Data does not fit into ring buffer -> stop
+
404  if (src.bytesLen() > bytesFree()) { return false; }
+
405  // Obtain put_ptr
+
406  size_t put_idx = _take_idx+_b_stored;
+
407  if (put_idx > _storage_size) { put_idx -= _storage_size; }
+
408  // store data
+
409  if (_storage_size >= (put_idx+src.bytesLen())) {
+
410  // If the data can be copied directly
+
411  memcpy(_ptr+put_idx, src.data(), src.bytesLen());
+
412  _b_stored += src.bytesLen();
+
413  return true;
+
414  }
+
415  // If wrapped around -> Store first half
+
416  size_t num_a = _storage_size-put_idx;
+
417  memcpy(_ptr+put_idx, src.data(), num_a);
+
418  // store second half
+
419  memcpy(_ptr, src.data()+num_a, src.bytesLen()-num_a);
+
420  _b_stored += src.bytesLen();
+
421  return true;
+
422  }
+
423 
+
426  inline bool take(const RawBuffer &dest, size_t N) {
+
427  // If there is not enough space in dest to store N bytes
+
428  if (N > dest.bytesLen()) { return false; }
+
429  // If there is not enough data available
+
430  if (N > bytesLen()) { return false; }
+
431  // If data can be taken at once
+
432  if (_storage_size > (_take_idx+N)) {
+
433  memcpy(dest.data(), _ptr+_take_idx, N);
+
434  _take_idx += N; _b_stored -= N;
+
435  return true;
+
436  }
+
437  // Copy in two steps
+
438  size_t num_a = _storage_size-_take_idx;
+
439  memcpy(dest.data(), _ptr+_take_idx, num_a);
+
440  memcpy(dest.data()+num_a, _ptr, N-num_a);
+
441  _take_idx = N-num_a; _b_stored -= N;
+
442  return true;
+
443  }
+
444 
+
446  inline void drop(size_t N) {
+
447  N = std::min(N, bytesLen());
+
448  if (_storage_size>(_take_idx+N)) { _take_idx+=N; _b_stored -= N; }
+
449  else { _take_idx = N-(_storage_size-_take_idx); _b_stored -= N; }
+
450  }
+
451 
+
453  inline void clear() { _take_idx = _b_stored = 0; }
+
454 
+
456  inline void resize(size_t N) {
+
457  if (_storage_size == N) { return; }
+ + +
460  }
+
461 
+
462 protected:
+
464  size_t _take_idx;
+
467  size_t _b_stored;
+
468 };
+
469 
+
470 
+
472 template <class Scalar>
+ +
474 {
+
475 public:
+ +
478 
+
480  RingBuffer(size_t N) : RawRingBuffer(N*sizeof(Scalar)), _size(N), _stored(0) { }
+
481 
+ +
484  : RawRingBuffer(other), _size(other._size), _stored(other._stored) { }
+
485 
+
487  virtual ~RingBuffer() { }
+
488 
+ + +
492  _size = other._size; _stored = other._stored;
+
493  return *this;
+
494  }
+
495 
+
497  Scalar &operator[] (int idx) {
+
498  return reinterpret_cast<Scalar &>(RawRingBuffer::operator [](idx*sizeof(Scalar)));
+
499  }
+
500 
+
502  inline size_t stored() const { return _stored; }
+
504  inline size_t free() const { return _size-_stored; }
+
506  inline size_t size() const { return _size; }
+
507 
+
510  inline bool put(const Buffer<Scalar> &data) {
+
511  if (RawRingBuffer::put(data)) {
+
512  _stored += data.size(); return true;
+
513  }
+
514  return false;
+
515  }
+
516 
+
519  inline bool take(const Buffer<Scalar> &dest, size_t N) {
+
520  if (RawRingBuffer::take(dest, N*sizeof(Scalar))) {
+
521  _stored -= N; return true;
+
522  }
+
523  return false;
+
524  }
+
525 
+
527  inline void drop(size_t N) {
+
528  RawRingBuffer::drop(N*sizeof(Scalar)); _stored = _b_stored/sizeof(Scalar);
+
529  }
+
530 
+
532  inline void resize(size_t N) {
+
533  RawRingBuffer::resize(N*sizeof(Scalar));
+
534  }
+
535 
+
536 protected:
+
538  size_t _size;
+
540  size_t _stored;
+
541 };
+
542 
+
543 }
+
544 
+
545 #endif // __SDR_BUFFER_HH__
+
RawRingBuffer()
Empty constructor.
Definition: buffer.cc:82
+
Buffer(const RawBuffer &other)
Explicit type cast.
Definition: buffer.hh:143
+
size_t _b_offset
Holds the offset of the buffer in bytes.
Definition: buffer.hh:98
+
double norm(double p) const
Returns the norm of the buffer.
Definition: buffer.hh:200
+
std::vector< void * > _free_buffers
A vector of all unused buffers.
Definition: buffer.hh:351
+
double norm() const
Returns the norm of the buffer.
Definition: buffer.hh:191
+
Base class of all buffers, represents an untyped array of bytes.
Definition: buffer.hh:32
+
size_t _take_idx
The current read pointer.
Definition: buffer.hh:464
+
const RingBuffer< Scalar > & operator=(const RingBuffer< Scalar > &other)
Assigment operator, turns this buffer into a reference to the other ring buffer.
Definition: buffer.hh:490
+
size_t _stored
The number of stored elements.
Definition: buffer.hh:540
+
virtual ~RawRingBuffer()
Destructor.
Definition: buffer.cc:100
+
Buffer()
Empty constructor.
Definition: buffer.hh:115
+
virtual void bufferUnused(const RawBuffer &buffer)=0
Gets called once an owned buffer gets unused.
+
Buffer< T > & operator/=(const T &a)
In-place, element wise division of the buffer with the scalar a.
Definition: buffer.hh:217
+
Buffer< oT > as() const
Explicit type cast.
Definition: buffer.hh:226
+
size_t bytesFree() const
Returns the number of free bytes in the ring buffer.
Definition: buffer.hh:395
+
A simple typed ring-buffer.
Definition: buffer.hh:473
+
virtual ~RingBuffer()
Destructor.
Definition: buffer.hh:487
+
size_t bytesLen() const
Returns the number of bytes available for reading.
Definition: buffer.hh:392
+
void clear()
Clear the ring-buffer.
Definition: buffer.hh:453
+
void ref() const
Increment reference counter.
Definition: buffer.cc:55
+
size_t stored() const
Returns the number of stored elements.
Definition: buffer.hh:502
+
bool take(const RawBuffer &dest, size_t N)
Take N bytes from the ring buffer and store it into the given buffer dest.
Definition: buffer.hh:426
+
bool isEmpty() const
Returns true if the buffer is invalid/empty.
Definition: buffer.hh:77
+
size_t storageSize() const
Returns the raw buffer size in bytes.
Definition: buffer.hh:75
+
BufferSet(size_t N, size_t size)
Preallocates N buffers of size size.
Definition: buffer.hh:292
+
T & operator[](int idx) const
Element access.
Definition: buffer.hh:170
+
int refCount() const
Returns the reference counter.
Definition: buffer.hh:84
+
BufferOwner * _owner
Holds a weak reference the buffer owner.
Definition: buffer.hh:104
+
size_t size() const
Returns the size of the ring buffer.
Definition: buffer.hh:506
+
virtual ~Buffer()
Destructor.
Definition: buffer.hh:138
+
size_t _b_length
Holds the length of the buffer (view) in bytes.
Definition: buffer.hh:100
+
The runtime error class.
Definition: exception.hh:36
+
void resize(size_t N)
Resizes the ring buffer to N elements.
Definition: buffer.hh:532
+
size_t _bufferSize
Size of each buffer.
Definition: buffer.hh:346
+
size_t size() const
Returns the number of elements of type T in this buffer.
Definition: buffer.hh:166
+
A set of buffers, that tracks their usage.
Definition: buffer.hh:288
+
char & operator[](int idx)
Element access.
Definition: buffer.hh:378
+
size_t bytesLen() const
Returns the size of the buffer by the view.
Definition: buffer.hh:73
+
Buffer(size_t N, BufferOwner *owner=0)
Creates a buffer with N samples.
Definition: buffer.hh:126
+
A simple ring buffer.
Definition: buffer.hh:356
+
char * data() const
Returns the pointer to the data of the buffer view.
Definition: buffer.hh:69
+
void drop(size_t N)
Drops at most N bytes from the buffer.
Definition: buffer.hh:446
+
RingBuffer(const RingBuffer< Scalar > &other)
Copy constructor, creates a reference to the other ring buffer.
Definition: buffer.hh:483
+
Buffer(const Buffer< T > &other)
Create a new reference to the buffer.
Definition: buffer.hh:132
+
RingBuffer(size_t N)
Constructs a ring buffer of size N.
Definition: buffer.hh:480
+
bool take(const Buffer< Scalar > &dest, size_t N)
Takes N elements from the buffer and stores them into dest.
Definition: buffer.hh:519
+
Buffer< T > tail(size_t n) const
Returns a new view on this buffer.
Definition: buffer.hh:243
+
double norm2() const
Returns the norm of the buffer.
Definition: buffer.hh:182
+
Buffer< T > head(size_t n) const
Returns a new view on this buffer.
Definition: buffer.hh:237
+
RawBuffer()
Constructs an empty buffer.
Definition: buffer.cc:10
+
virtual void bufferUnused(const RawBuffer &buffer)
Callback gets called once the buffer gets unused.
Definition: buffer.hh:324
+
size_t _storage_size
Holds the size of the buffer in bytes.
Definition: buffer.hh:96
+
bool hasBuffer()
Returns true if there is a free buffer.
Definition: buffer.hh:315
+
const RawRingBuffer & operator=(const RawRingBuffer &other)
Assignment operator, turns this ring buffer into a reference to the other one.
Definition: buffer.hh:370
+
RingBuffer()
Empty constructor.
Definition: buffer.hh:477
+
size_t free() const
Returns the number of free elements.
Definition: buffer.hh:504
+
size_t _size
The size of the ring buffer.
Definition: buffer.hh:538
+
char * _ptr
Holds the pointer to the data or 0, if buffer is empty.
Definition: buffer.hh:94
+
std::map< void *, Buffer< Scalar > > _buffers
Holds a reference to each buffer of the buffer set, referenced by the data pointer of the buffer...
Definition: buffer.hh:349
+
size_t bytesOffset() const
Returns the offset of the data by the view.
Definition: buffer.hh:71
+
const Buffer< T > & operator=(const Buffer< T > other)
Assignment operator, turns this buffer into a reference to the other buffer.
Definition: buffer.hh:152
+
void resize(size_t numBuffers)
Resize the buffer set.
Definition: buffer.hh:332
+
Buffer< T > & operator*=(const T &a)
In-place, element wise product of the buffer with the scalar a.
Definition: buffer.hh:209
+
bool put(const Buffer< Scalar > &data)
Puts the given elements into the ring buffer.
Definition: buffer.hh:510
+
Buffer< T > sub(size_t offset, size_t len) const
Returns a new view on this buffer.
Definition: buffer.hh:231
+
size_t _b_stored
Offset of the write pointer relative to the _take_idx ptr, such that the number of stored bytes is _b...
Definition: buffer.hh:467
+
char * ptr() const
Returns the pointer to the data (w/o view).
Definition: buffer.hh:67
+
const RawBuffer & operator=(const RawBuffer &other)
Assignment.
Definition: buffer.hh:54
+
Abstract class (interface) of a buffer owner.
Definition: buffer.hh:24
+
void unref()
Dereferences the buffer.
Definition: buffer.cc:61
+
bool isUnused() const
We assume here that buffers are owned by some object: A buffer is therefore "unused" if the owner hol...
Definition: buffer.hh:87
+
void drop(size_t N)
Drops N elements from the ring buffer.
Definition: buffer.hh:527
+
int * _refcount
The reference counter.
Definition: buffer.hh:102
+
virtual ~RawBuffer()
Destructor.
Definition: buffer.cc:49
+
Buffer< Scalar > getBuffer()
Obtains a free buffer.
Definition: buffer.hh:318
+
bool put(const RawBuffer &src)
Puts the given data into the ring-buffer.
Definition: buffer.hh:401
+
size_t _size
Holds the number of elements of type T in the buffer.
Definition: buffer.hh:250
+
void resize(size_t N)
Resizes the ring buffer.
Definition: buffer.hh:456
+
A typed buffer.
Definition: buffer.hh:111
+
virtual ~BufferSet()
Destructor, unreferences all buffers.
Definition: buffer.hh:305
+
Scalar & operator[](int idx)
Element access.
Definition: buffer.hh:497
+
Buffer(T *data, size_t size)
Constructor from raw data.
Definition: buffer.hh:120
+
+ + + + diff --git a/buffernode_8hh_source.html b/buffernode_8hh_source.html new file mode 100644 index 0000000..b783fa0 --- /dev/null +++ b/buffernode_8hh_source.html @@ -0,0 +1,218 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/buffernode.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
buffernode.hh
+
+
+
1 #ifndef __SDR_BUFFERNODE_HH__
+
2 #define __SDR_BUFFERNODE_HH__
+
3 
+
4 #include "node.hh"
+
5 #include "config.hh"
+
6 #include "logger.hh"
+
7 
+
8 #include <iostream>
+
9 #include <cstring>
+
10 
+
11 
+
12 namespace sdr {
+
13 
+
16 template <class Scalar>
+
17 class BufferNode : public Sink<Scalar>, public Source
+
18 {
+
19 public:
+
22  BufferNode(size_t bufferSize)
+
23  : _bufferSize(bufferSize), _bufferSet(0, _bufferSize), _temp(bufferSize), _samplesLeft(0)
+
24  {
+
25  // pass...
+
26  }
+
27 
+
29  virtual void config(const Config &src_cfg)
+
30  {
+
31  // Check if source config is complete
+
32  if (Config::Type_UNDEFINED == src_cfg.type()) { return; }
+
33  if (0 == src_cfg.bufferSize()) { return; }
+
34  if (0 == src_cfg.numBuffers()) { return; }
+
35  // Check source type
+
36  if (src_cfg.type() != Config::typeId<Scalar>()) {
+
37  ConfigError err;
+
38  err << "Can not configure BufferNode sink. Source type is " << src_cfg.type()
+
39  << " expected " << Config::typeId<Scalar>() << std::endl;
+
40  throw err;
+
41  }
+
42  // Estimate number of buffers needed:
+
43  size_t totSize = src_cfg.bufferSize()*src_cfg.numBuffers();
+
44  size_t numBuffers = std::max(size_t(2), totSize/_bufferSize);
+
45  _bufferSet.resize(numBuffers);
+
46 
+
47  LogMessage msg(LOG_DEBUG);
+
48  msg << "Configure BufferNode: " << std::endl
+
49  << " type: " << src_cfg.type() << std::endl
+
50  << " sample-rate: " << src_cfg.sampleRate() << std::endl
+
51  << " buffer-size: " << src_cfg.bufferSize()
+
52  << " -> " << _bufferSize << std::endl
+
53  << " # buffers: " << src_cfg.numBuffers();
+
54 
+
55  // Propergate source config
+
56  this->setConfig(Config(src_cfg.type(), src_cfg.sampleRate(), _bufferSize, numBuffers));
+
57  }
+
58 
+
60  virtual void process(const Buffer<Scalar> &buffer, bool allow_overwrite)
+
61  {
+
62  // If the current buffer buffer does not contain enough smaples to fill an output buffer:
+
63  if ((_samplesLeft+buffer.size()) < _bufferSize) {
+
64  memcpy(_temp.data()+_samplesLeft*sizeof(Scalar), buffer.data(), sizeof(Scalar)*buffer.size());
+
65  _samplesLeft += buffer.size();
+
66  return;
+
67  }
+
68  // There are enough samples collected to fill an ouput buffer,
+
69  // fill first out buffer and send it
+
70  Buffer<Scalar> out = _bufferSet.getBuffer();
+
71  memcpy(out.data(), _temp.data(), sizeof(Scalar)*_samplesLeft);
+
72  memcpy(out.data()+_samplesLeft*sizeof(Scalar), buffer.data(), sizeof(Scalar)*(_bufferSize-_samplesLeft));
+
73  size_t in_offset = (_bufferSize-_samplesLeft);
+
74 
+
75  // Determine the number of samples left
+ +
77  this->send(out);
+
78 
+
79  // Process remaining data
+
80  while (_samplesLeft >= _bufferSize) {
+
81  Buffer<Scalar> out = _bufferSet.getBuffer();
+
82  memcpy(out.data(), buffer.data()+in_offset*sizeof(Scalar), _bufferSize*sizeof(Scalar));
+
83  in_offset += _bufferSize;
+ +
85  this->send(out);
+
86  }
+
87 
+
88  // Store data left over into temp
+
89  memcpy(_temp.data(), buffer.data(), _samplesLeft*sizeof(Scalar));
+
90  }
+
91 
+
92 protected:
+
94  size_t _bufferSize;
+ + +
100  size_t _samplesLeft;
+
101 };
+
102 
+
103 }
+
104 
+
105 #endif // __SDR_BUFFERNODE_HH__
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
virtual void process(const Buffer< Scalar > &buffer, bool allow_overwrite)
Process the incomming data.
Definition: buffernode.hh:60
+
virtual void send(const RawBuffer &buffer, bool allow_overwrite=false)
Sends the given buffer to all connected sinks.
Definition: node.cc:67
+
BufferNode(size_t bufferSize)
Constructs a new buffer node.
Definition: buffernode.hh:22
+
Typed sink.
Definition: node.hh:176
+
size_t numBuffers() const
Returns the max.
Definition: node.hh:73
+
Generic source class.
Definition: node.hh:197
+
size_t _bufferSize
The desired buffer size.
Definition: buffernode.hh:94
+
size_t size() const
Returns the number of elements of type T in this buffer.
Definition: buffer.hh:166
+
A set of buffers, that tracks their usage.
Definition: buffer.hh:288
+
A simple buffering node, that ensures a fixed buffer size.
Definition: buffernode.hh:17
+
char * data() const
Returns the pointer to the data of the buffer view.
Definition: buffer.hh:69
+
size_t _samplesLeft
Number of samples left.
Definition: buffernode.hh:100
+
virtual void setConfig(const Config &config)
Stores the configuration and propergates it if the configuration has been changed.
Definition: node.cc:98
+
Buffer< Scalar > _temp
An intermediate buffer to hold left-over samples from the previous buffers.
Definition: buffernode.hh:98
+
Type type() const
Returns the type.
Definition: node.hh:55
+
The configuration error class.
Definition: exception.hh:24
+
A log message.
Definition: logger.hh:21
+
size_t bufferSize() const
Returns the max.
Definition: node.hh:67
+
BufferSet< Scalar > _bufferSet
A set of output buffers.
Definition: buffernode.hh:96
+ +
virtual void config(const Config &src_cfg)
Configures the buffer node.
Definition: buffernode.hh:29
+
double sampleRate() const
Returns the sample rate.
Definition: node.hh:61
+
+ + + + diff --git a/bug.html b/bug.html new file mode 100644 index 0000000..d4dff84 --- /dev/null +++ b/bug.html @@ -0,0 +1,99 @@ + + + + + + +libsdr: Bug List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + +
+ +
+ +
+
+
+
Bug List
+
+
+
+
Member sdr::BaseBand< Scalar >::setSampleRate (double Fs)
+
Also signal config change of the sourcce by setConfig()!
+
Member sdr::PortSource< Scalar >::next ()
+
Drop data if output buffer is in use.
+
Member sdr::StreamSink< Scalar >::process (const Buffer< Scalar > &buffer, bool allow_overwrite)
+
Check if buffer was send completely:
+
+
+ + + + diff --git a/classes.html b/classes.html new file mode 100644 index 0000000..95d1cbe --- /dev/null +++ b/classes.html @@ -0,0 +1,150 @@ + + + + + + +libsdr: Class Index + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + +
+ +
+ All Classes Functions Variables Typedefs Enumerations Enumerator Pages
+ + +
+ +
+ +
+
+
Class Index
+
+
+
A | B | C | D | F | G | I | L | M | O | P | Q | R | S | T | U | V | W
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
  A  
+
DelegateInterface (sdr)   
  I  
+
  R  
+
Traits< float > (sdr)   
  F  
+
Traits< int16_t > (sdr)   
AGC (sdr)   ImagPart (sdr)   RawBuffer (sdr)   Traits< int8_t > (sdr)   
AMDemod (sdr)   FFT (sdr)   InpolSubSampler (sdr)   RawRingBuffer (sdr)   Traits< std::complex< double > > (sdr)   
AutoCast (sdr)   FFTPlan (sdr)   Interleave (sdr)   RealImagPart (sdr)   Traits< std::complex< float > > (sdr)   
  B  
+
FFTPlan< double > (sdr)   IQBalance (sdr)   RealPart (sdr)   Traits< std::complex< int16_t > > (sdr)   
FFTPlan< float > (sdr)   IQBaseBand (sdr)   RingBuffer (sdr)   Traits< std::complex< int8_t > > (sdr)   
BaseBand (sdr)   FilterNode (sdr)   IQSigGen (sdr)   RTLSource (sdr)   Traits< std::complex< uint16_t > > (sdr)   
BlockingSource (sdr)   FilterSink (sdr)   
  L  
+
RuntimeError (sdr)   Traits< std::complex< uint8_t > > (sdr)   
BPSK31 (sdr)   FilterSource (sdr)   
  S  
+
Traits< uint16_t > (sdr)   
Buffer (sdr)   FIRBandPass (sdr)   Logger (sdr)   Traits< uint8_t > (sdr)   
BufferNode (sdr)   FIRBandPassCoeffs (sdr)   LogHandler (sdr)   Scale (sdr)   
  U  
+
BufferOwner (sdr)   FIRBandStop (sdr)   LogMessage (sdr)   SDRError (sdr)   
BufferSet (sdr)   FIRBandStopCoeffs (sdr)   
  M  
+
SigGen (sdr)   UnsignedToSigned (sdr)   
  C  
+
FIRFilter (sdr)   SignedToUnsigned (sdr)   USBDemod (sdr)   
FIRHighPass (sdr)   Queue::Message (sdr)   Sink (sdr)   
  V  
+
Cast (sdr)   FIRHighPassCoeffs (sdr)   
  O  
+
SinkBase (sdr)   
Combine (sdr)   FIRLowPass (sdr)   Source (sdr)   Options::Value (sdr)   
CombineSink (sdr)   FIRLowPassCoeffs (sdr)   Options (sdr)   StreamLogHandler (sdr)   Varicode (sdr)   
Config (sdr)   FMDeemph (sdr)   
  P  
+
StreamSink (sdr)   
  W  
+
ConfigError (sdr)   FMDemod (sdr)   StreamSource (sdr)   
  D  
+
FracSubSampleBase (sdr)   PortAudio (sdr)   SubSample (sdr)   WavSink (sdr)   
FreqShift (sdr)   PortSink (sdr)   
  T  
+
WavSource (sdr)   
DebugDump (sdr)   FreqShiftBase (sdr)   PortSource (sdr)   
DebugStore (sdr)   
  G  
+
Proxy (sdr)   ToComplex (sdr)   
Options::Definition (sdr)   
  Q  
+
Traits (sdr)   
Delegate (sdr)   GWNSource (sdr)   Traits< double > (sdr)   
Queue (sdr)   
+
A | B | C | D | F | G | I | L | M | O | P | Q | R | S | T | U | V | W
+
+ + + + diff --git a/classsdr_1_1_a_g_c-members.html b/classsdr_1_1_a_g_c-members.html new file mode 100644 index 0000000..2bcd793 --- /dev/null +++ b/classsdr_1_1_a_g_c-members.html @@ -0,0 +1,142 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::AGC< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::AGC< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::AGC< Scalar >protected
_configsdr::Sourceprotected
_enabledsdr::AGC< Scalar >protected
_eossdr::Sourceprotected
_gainsdr::AGC< Scalar >protected
_lambdasdr::AGC< Scalar >protected
_sample_ratesdr::AGC< Scalar >protected
_sdsdr::AGC< Scalar >protected
_sinkssdr::Sourceprotected
_targetsdr::AGC< Scalar >protected
_tausdr::AGC< Scalar >protected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
AGC(double tau=0.1, double target=0)sdr::AGC< Scalar >inline
config(const Config &src_cfg)sdr::AGC< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
enable(bool enabled)sdr::AGC< Scalar >inline
enabled() const sdr::AGC< Scalar >inline
gain() const sdr::AGC< Scalar >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::AGC< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
setGain(float gain)sdr::AGC< Scalar >inline
setTau(double tau)sdr::AGC< Scalar >inline
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
tau() const sdr::AGC< Scalar >inline
type() const sdr::Sourcevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_a_g_c.html b/classsdr_1_1_a_g_c.html new file mode 100644 index 0000000..9bac5ff --- /dev/null +++ b/classsdr_1_1_a_g_c.html @@ -0,0 +1,724 @@ + + + + + + +libsdr: sdr::AGC< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::AGC< Scalar > Class Template Reference
+
+
+ +

An automatic gain control node. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::AGC< Scalar >:
+
+
+ + +sdr::Sink< Scalar > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 AGC (double tau=0.1, double target=0)
 Constructor. More...
 
bool enabled () const
 Returns true, if the AGC is enabled. More...
 
void enable (bool enabled)
 Enable/disable the AGC node. More...
 
float gain () const
 Returns the current gain factor. More...
 
void setGain (float gain)
 Resets the current gain factor. More...
 
double tau () const
 Returns the time-constant of the AGC. More...
 
void setTau (double tau)
 Sets the time-constant of the AGC. More...
 
virtual void config (const Config &src_cfg)
 Configures the AGC node. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Performs the amplification and adjusts the gain. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

bool _enabled
 If true, the automatic gain adjustment is enabled. More...
 
float _tau
 The time-constant of the AGC. More...
 
float _lambda
 One over the time-constant. More...
 
float _sd
 The averaged std. More...
 
float _target
 The target level of the output signal. More...
 
float _gain
 The current gain factor. More...
 
double _sample_rate
 The current sample-rate. More...
 
Buffer< Scalar > _buffer
 The output buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::AGC< Scalar >

+ +

An automatic gain control node.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::AGC< Scalar >::AGC (double tau = 0.1,
double target = 0 
)
+
+inline
+
+ +

Constructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::AGC< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the AGC node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::AGC< Scalar >::enable (bool enabled)
+
+inline
+
+ +

Enable/disable the AGC node.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
bool sdr::AGC< Scalar >::enabled () const
+
+inline
+
+ +

Returns true, if the AGC is enabled.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
float sdr::AGC< Scalar >::gain () const
+
+inline
+
+ +

Returns the current gain factor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::AGC< Scalar >::process (const Buffer< Scalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Performs the amplification and adjusts the gain.

+ +

Implements sdr::Sink< Scalar >.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::AGC< Scalar >::setGain (float gain)
+
+inline
+
+ +

Resets the current gain factor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::AGC< Scalar >::setTau (double tau)
+
+inline
+
+ +

Sets the time-constant of the AGC.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
double sdr::AGC< Scalar >::tau () const
+
+inline
+
+ +

Returns the time-constant of the AGC.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::AGC< Scalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
bool sdr::AGC< Scalar >::_enabled
+
+protected
+
+ +

If true, the automatic gain adjustment is enabled.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::AGC< Scalar >::_gain
+
+protected
+
+ +

The current gain factor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::AGC< Scalar >::_lambda
+
+protected
+
+ +

One over the time-constant.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::AGC< Scalar >::_sample_rate
+
+protected
+
+ +

The current sample-rate.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::AGC< Scalar >::_sd
+
+protected
+
+ +

The averaged std.

+

dev. of the input signal.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::AGC< Scalar >::_target
+
+protected
+
+ +

The target level of the output signal.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::AGC< Scalar >::_tau
+
+protected
+
+ +

The time-constant of the AGC.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_a_g_c.png b/classsdr_1_1_a_g_c.png new file mode 100644 index 0000000..fd013c7 Binary files /dev/null and b/classsdr_1_1_a_g_c.png differ diff --git a/classsdr_1_1_a_m_demod-members.html b/classsdr_1_1_a_m_demod-members.html new file mode 100644 index 0000000..ebd13e6 --- /dev/null +++ b/classsdr_1_1_a_m_demod-members.html @@ -0,0 +1,130 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::AMDemod< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::AMDemod< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::AMDemod< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
AMDemod()sdr::AMDemod< Scalar >inline
config(const Config &src_cfg)sdr::AMDemod< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< std::complex< Scalar > >inlinevirtual
process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)sdr::AMDemod< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< std::complex< Scalar > >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~AMDemod()sdr::AMDemod< Scalar >inlinevirtual
~Sink()sdr::Sink< std::complex< Scalar > >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_a_m_demod.html b/classsdr_1_1_a_m_demod.html new file mode 100644 index 0000000..245e5d7 --- /dev/null +++ b/classsdr_1_1_a_m_demod.html @@ -0,0 +1,370 @@ + + + + + + +libsdr: sdr::AMDemod< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::AMDemod< Scalar > Class Template Reference
+
+
+ +

Amplitude modulation (AM) demodulator from an I/Q signal. + More...

+ +

#include <demod.hh>

+
+Inheritance diagram for sdr::AMDemod< Scalar >:
+
+
+ + +sdr::Sink< std::complex< Scalar > > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 AMDemod ()
 Constructor. More...
 
virtual ~AMDemod ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the AM demod. More...
 
virtual void process (const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
 Handles the I/Q input buffer. More...
 
- Public Member Functions inherited from sdr::Sink< std::complex< Scalar > >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + +

+Protected Attributes

Buffer< Scalar > _buffer
 The output buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::AMDemod< Scalar >

+ +

Amplitude modulation (AM) demodulator from an I/Q signal.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
sdr::AMDemod< Scalar >::AMDemod ()
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::AMDemod< Scalar >::~AMDemod ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::AMDemod< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the AM demod.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::AMDemod< Scalar >::process (const Buffer< std::complex< Scalar > > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Handles the I/Q input buffer.

+ +

Implements sdr::Sink< std::complex< Scalar > >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::AMDemod< Scalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_a_m_demod.png b/classsdr_1_1_a_m_demod.png new file mode 100644 index 0000000..4c47e4e Binary files /dev/null and b/classsdr_1_1_a_m_demod.png differ diff --git a/classsdr_1_1_auto_cast-members.html b/classsdr_1_1_auto_cast-members.html new file mode 100644 index 0000000..970851b --- /dev/null +++ b/classsdr_1_1_auto_cast-members.html @@ -0,0 +1,141 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::AutoCast< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::AutoCast< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::AutoCast< Scalar >protected
_castsdr::AutoCast< Scalar >protected
_cint16_cint8(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
_cint8_cint16(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
_configsdr::Sourceprotected
_cuint8_cint16(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
_cuint8_cint8(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
_eossdr::Sourceprotected
_identity(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
_int16_cint16(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
_int16_cint8(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
_int16_int8(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
_int8_cint16(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
_int8_cint8(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
_int8_int16(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
_sinkssdr::Sourceprotected
_uint16_cint16(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
_uint8_cint16(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
_uint8_cint8(const RawBuffer &in, const RawBuffer &out)sdr::AutoCast< Scalar >inlineprotectedstatic
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
AutoCast()sdr::AutoCast< Scalar >inline
config(const Config &src_cfg)sdr::AutoCast< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::AutoCast< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_auto_cast.html b/classsdr_1_1_auto_cast.html new file mode 100644 index 0000000..aad947e --- /dev/null +++ b/classsdr_1_1_auto_cast.html @@ -0,0 +1,898 @@ + + + + + + +libsdr: sdr::AutoCast< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::AutoCast< Scalar > Class Template Reference
+
+
+ +

This class performs some automatic casts to a certain buffer type if possible specified by the template argument. + More...

+ +

#include <autocast.hh>

+
+Inheritance diagram for sdr::AutoCast< Scalar >:
+
+
+ + +sdr::SinkBase +sdr::Source + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 AutoCast ()
 Constructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the auto cast node. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Needs to be implemented by any sub-type to process the received data. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Protected Member Functions

static size_t _identity (const RawBuffer &in, const RawBuffer &out)
 Performs no cast at all. More...
 
+static size_t _int16_int8 (const RawBuffer &in, const RawBuffer &out)
 int16 -> int8
 
static size_t _uint8_cint8 (const RawBuffer &in, const RawBuffer &out)
 uint8 -> complex int8. More...
 
static size_t _int8_cint8 (const RawBuffer &in, const RawBuffer &out)
 int8 -> complex int8. More...
 
static size_t _cuint8_cint8 (const RawBuffer &in, const RawBuffer &out)
 std::complex<uint8_t> -> std::complex<int8_t>. More...
 
static size_t _int16_cint8 (const RawBuffer &in, const RawBuffer &out)
 int16 -> complex int 8. More...
 
static size_t _cint16_cint8 (const RawBuffer &in, const RawBuffer &out)
 complex int16 -> complex int 8. More...
 
static size_t _int8_int16 (const RawBuffer &in, const RawBuffer &out)
 int8 -> int16. More...
 
static size_t _uint8_cint16 (const RawBuffer &in, const RawBuffer &out)
 unsinged int8 -> complex int16. More...
 
static size_t _int8_cint16 (const RawBuffer &in, const RawBuffer &out)
 int8 -> complex int16. More...
 
static size_t _cuint8_cint16 (const RawBuffer &in, const RawBuffer &out)
 complex unsigned int8 -> complex int16. More...
 
static size_t _cint8_cint16 (const RawBuffer &in, const RawBuffer &out)
 complex int8 -> complex int16. More...
 
static size_t _uint16_cint16 (const RawBuffer &in, const RawBuffer &out)
 uint16 -> complex int16. More...
 
static size_t _int16_cint16 (const RawBuffer &in, const RawBuffer &out)
 int16 -> complex int16. More...
 
+ + + + + + + + + + + + + + + + + +

+Protected Attributes

Buffer< Scalar > _buffer
 Output buffer. More...
 
size_t(* _cast )(const RawBuffer &in, const RawBuffer &out)
 Cast function. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::AutoCast< Scalar >

+ +

This class performs some automatic casts to a certain buffer type if possible specified by the template argument.

+

Currently only integer casts are supported.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
sdr::AutoCast< Scalar >::AutoCast ()
+
+inline
+
+ +

Constructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static size_t sdr::AutoCast< Scalar >::_cint16_cint8 (const RawBufferin,
const RawBufferout 
)
+
+inlinestaticprotected
+
+ +

complex int16 -> complex int 8.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static size_t sdr::AutoCast< Scalar >::_cint8_cint16 (const RawBufferin,
const RawBufferout 
)
+
+inlinestaticprotected
+
+ +

complex int8 -> complex int16.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static size_t sdr::AutoCast< Scalar >::_cuint8_cint16 (const RawBufferin,
const RawBufferout 
)
+
+inlinestaticprotected
+
+ +

complex unsigned int8 -> complex int16.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static size_t sdr::AutoCast< Scalar >::_cuint8_cint8 (const RawBufferin,
const RawBufferout 
)
+
+inlinestaticprotected
+
+ +

std::complex<uint8_t> -> std::complex<int8_t>.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static size_t sdr::AutoCast< Scalar >::_identity (const RawBufferin,
const RawBufferout 
)
+
+inlinestaticprotected
+
+ +

Performs no cast at all.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static size_t sdr::AutoCast< Scalar >::_int16_cint16 (const RawBufferin,
const RawBufferout 
)
+
+inlinestaticprotected
+
+ +

int16 -> complex int16.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static size_t sdr::AutoCast< Scalar >::_int16_cint8 (const RawBufferin,
const RawBufferout 
)
+
+inlinestaticprotected
+
+ +

int16 -> complex int 8.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static size_t sdr::AutoCast< Scalar >::_int8_cint16 (const RawBufferin,
const RawBufferout 
)
+
+inlinestaticprotected
+
+ +

int8 -> complex int16.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static size_t sdr::AutoCast< Scalar >::_int8_cint8 (const RawBufferin,
const RawBufferout 
)
+
+inlinestaticprotected
+
+ +

int8 -> complex int8.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static size_t sdr::AutoCast< Scalar >::_int8_int16 (const RawBufferin,
const RawBufferout 
)
+
+inlinestaticprotected
+
+ +

int8 -> int16.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static size_t sdr::AutoCast< Scalar >::_uint16_cint16 (const RawBufferin,
const RawBufferout 
)
+
+inlinestaticprotected
+
+ +

uint16 -> complex int16.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static size_t sdr::AutoCast< Scalar >::_uint8_cint16 (const RawBufferin,
const RawBufferout 
)
+
+inlinestaticprotected
+
+ +

unsinged int8 -> complex int16.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static size_t sdr::AutoCast< Scalar >::_uint8_cint8 (const RawBufferin,
const RawBufferout 
)
+
+inlinestaticprotected
+
+ +

uint8 -> complex int8.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::AutoCast< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the auto cast node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::AutoCast< Scalar >::handleBuffer (const RawBufferbuffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Needs to be implemented by any sub-type to process the received data.

+ +

Implements sdr::SinkBase.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::AutoCast< Scalar >::_buffer
+
+protected
+
+ +

Output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t(* sdr::AutoCast< Scalar >::_cast)(const RawBuffer &in, const RawBuffer &out)
+
+protected
+
+ +

Cast function.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_auto_cast.png b/classsdr_1_1_auto_cast.png new file mode 100644 index 0000000..a7bd19a Binary files /dev/null and b/classsdr_1_1_auto_cast.png differ diff --git a/classsdr_1_1_b_p_s_k31-members.html b/classsdr_1_1_b_p_s_k31-members.html new file mode 100644 index 0000000..bfc29f0 --- /dev/null +++ b/classsdr_1_1_b_p_s_k31-members.html @@ -0,0 +1,162 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::BPSK31< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::BPSK31< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_alphasdr::BPSK31< Scalar >protected
_betasdr::BPSK31< Scalar >protected
_buffersdr::BPSK31< Scalar >protected
_c_0Tsdr::BPSK31< Scalar >protected
_c_1Tsdr::BPSK31< Scalar >protected
_c_2Tsdr::BPSK31< Scalar >protected
_configsdr::Sourceprotected
_currentContellation() const sdr::BPSK31< Scalar >inlineprotected
_dlsdr::BPSK31< Scalar >protected
_dl_idxsdr::BPSK31< Scalar >protected
_eossdr::Sourceprotected
_errorTracking(const std::complex< float > &sample)sdr::BPSK31< Scalar >inlineprotected
_Fsdr::BPSK31< Scalar >protected
_Fmaxsdr::BPSK31< Scalar >protected
_Fminsdr::BPSK31< Scalar >protected
_gain_musdr::BPSK31< Scalar >protected
_gain_omegasdr::BPSK31< Scalar >protected
_hasTransition() const sdr::BPSK31< Scalar >inlineprotected
_histsdr::BPSK31< Scalar >protected
_hist_idxsdr::BPSK31< Scalar >protected
_last_constellationsdr::BPSK31< Scalar >protected
_max_omegasdr::BPSK31< Scalar >protected
_min_omegasdr::BPSK31< Scalar >protected
_musdr::BPSK31< Scalar >protected
_omegasdr::BPSK31< Scalar >protected
_omega_relsdr::BPSK31< Scalar >protected
_Psdr::BPSK31< Scalar >protected
_p_0Tsdr::BPSK31< Scalar >protected
_p_1Tsdr::BPSK31< Scalar >protected
_p_2Tsdr::BPSK31< Scalar >protected
_phaseError(const std::complex< float > &value) const sdr::BPSK31< Scalar >inlineprotected
_sinkssdr::Sourceprotected
_superSamplesdr::BPSK31< Scalar >protected
_thetasdr::BPSK31< Scalar >protected
_updatePLL(const std::complex< float > &sample)sdr::BPSK31< Scalar >inlineprotected
_updateSampler(const std::complex< Scalar > &value)sdr::BPSK31< Scalar >inlineprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
BPSK31(double dF=0.1)sdr::BPSK31< Scalar >inline
config(const Config &src_cfg)sdr::BPSK31< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< std::complex< Scalar > >inlinevirtual
process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)sdr::BPSK31< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< std::complex< Scalar > >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~BPSK31()sdr::BPSK31< Scalar >inlinevirtual
~Sink()sdr::Sink< std::complex< Scalar > >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_b_p_s_k31.html b/classsdr_1_1_b_p_s_k31.html new file mode 100644 index 0000000..ceb39f5 --- /dev/null +++ b/classsdr_1_1_b_p_s_k31.html @@ -0,0 +1,1268 @@ + + + + + + +libsdr: sdr::BPSK31< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::BPSK31< Scalar > Class Template Reference
+
+
+ +

A simple BPSK31 "demodulator". + More...

+ +

#include <psk31.hh>

+
+Inheritance diagram for sdr::BPSK31< Scalar >:
+
+
+ + +sdr::Sink< std::complex< Scalar > > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 BPSK31 (double dF=0.1)
 Constructs a new BPSK31 demodulator. More...
 
virtual ~BPSK31 ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Needs to be implemented by any sub-type to check and perform the configuration of the node. More...
 
virtual void process (const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
 Needs to be implemented by any sub-type to process the received data. More...
 
- Public Member Functions inherited from sdr::Sink< std::complex< Scalar > >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

bool _hasTransition () const
 Returns true if there is a phase transition at the current sample. More...
 
int _currentContellation () const
 Returns the current constellation. More...
 
float _phaseError (const std::complex< float > &value) const
 Computes the phase error. More...
 
void _updatePLL (const std::complex< float > &sample)
 Updates the PLL (_F and _P). More...
 
void _updateSampler (const std::complex< Scalar > &value)
 Updates the sub-sampler. More...
 
void _errorTracking (const std::complex< float > &sample)
 Updates the PPL state (_mu and _omega). More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

size_t _superSample
 Holds the number of phase constellations per bit. More...
 
float _P
 Phase of the carrier PLL. More...
 
float _F
 Frequency of the carrier PLL. More...
 
float _Fmin
 Lower frequency limit of the carrier PLL. More...
 
float _Fmax
 Upper frequency limit of the carrier PLL. More...
 
float _alpha
 Gain factor of the carrier PLL. More...
 
float _beta
 Gain factor of the carrier PLL. More...
 
Buffer< std::complex< float > > _dl
 The delay line for the interpolating sub-sampler. More...
 
size_t _dl_idx
 The current index of the delay line. More...
 
float _mu
 Holds the fractional sub-sampling counter. More...
 
float _gain_mu
 Gain factor of the sub-sampler. More...
 
float _theta
 Constant phase shift between real axis and first constellation. More...
 
float _omega
 Current sub-sample rate. More...
 
float _omega_rel
 Relative error of the subsample rate. More...
 
float _min_omega
 Minimum of the sub-sample rate. More...
 
float _max_omega
 Maximum of the sub-sample rate. More...
 
float _gain_omega
 Gain of the sub-sample rate correction. More...
 
std::complex< float > _p_0T
 Phase at T = 0 (samples). More...
 
std::complex< float > _p_1T
 Phase at T=-1 (samples). More...
 
std::complex< float > _p_2T
 Phase at T=-2 (samples). More...
 
std::complex< float > _c_0T
 Constellation at T=0 (samples). More...
 
std::complex< float > _c_1T
 Constellation at T=-1 (samples). More...
 
std::complex< float > _c_2T
 Constellation at T=-2 (samples). More...
 
Buffer< float > _hist
 The last _superSample phases. More...
 
size_t _hist_idx
 Current phase history index. More...
 
int _last_constellation
 The last output constellation. More...
 
Buffer< uint8_t > _buffer
 Output buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::BPSK31< Scalar >

+ +

A simple BPSK31 "demodulator".

+

This node consumes a complex input stream with a sample-rate of at least 2000Hz and produces a bitstream with 31.25 Hz "sample-rate". Use the Varicode node to decode this bitstream to ASCII chars. The BPSK31 signal should be centered around 0Hz. This node uses a simple PLL to adjust for small detunings.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::BPSK31< Scalar >::BPSK31 (double dF = 0.1)
+
+inline
+
+ +

Constructs a new BPSK31 demodulator.

+

This node first subsamples the input signal to a multiple of 31.25 Hz (by default to 2000Hz = 64*31.25) using an interpolating sub-sampler. Therefore, the input signal must be filtered sufficiently well to avoid artifacts of the interpolating sub-sampler. Then, the phase-constellation of the signal is determined as either -pi or pi while the frequency of the carrier is tracked using a simple PLL. Finally, the BPSK31 bit stream is decoded by detecting a phase-change (0) or not (1).

+
Note
This node uses floating point arithmetic, hence it should not be used on streams with a high sample rate! Which is not neccessary as it only decodes a BPSK signal with approx. 31 baud.
+
Parameters
+ + +
dFSpecfies the (relative anglular) frequency range of the PLL to adjust for small deviations of the BPSK31 signal from 0Hz.
+
+
+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::BPSK31< Scalar >::~BPSK31 ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
int sdr::BPSK31< Scalar >::_currentContellation () const
+
+inlineprotected
+
+ +

Returns the current constellation.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::BPSK31< Scalar >::_errorTracking (const std::complex< float > & sample)
+
+inlineprotected
+
+ +

Updates the PPL state (_mu and _omega).

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
bool sdr::BPSK31< Scalar >::_hasTransition () const
+
+inlineprotected
+
+ +

Returns true if there is a phase transition at the current sample.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
float sdr::BPSK31< Scalar >::_phaseError (const std::complex< float > & value) const
+
+inlineprotected
+
+ +

Computes the phase error.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::BPSK31< Scalar >::_updatePLL (const std::complex< float > & sample)
+
+inlineprotected
+
+ +

Updates the PLL (_F and _P).

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::BPSK31< Scalar >::_updateSampler (const std::complex< Scalar > & value)
+
+inlineprotected
+
+ +

Updates the sub-sampler.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::BPSK31< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Needs to be implemented by any sub-type to check and perform the configuration of the node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::BPSK31< Scalar >::process (const Buffer< std::complex< Scalar > > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Needs to be implemented by any sub-type to process the received data.

+ +

Implements sdr::Sink< std::complex< Scalar > >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_alpha
+
+protected
+
+ +

Gain factor of the carrier PLL.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_beta
+
+protected
+
+ +

Gain factor of the carrier PLL.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<uint8_t> sdr::BPSK31< Scalar >::_buffer
+
+protected
+
+ +

Output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::complex<float> sdr::BPSK31< Scalar >::_c_0T
+
+protected
+
+ +

Constellation at T=0 (samples).

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::complex<float> sdr::BPSK31< Scalar >::_c_1T
+
+protected
+
+ +

Constellation at T=-1 (samples).

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::complex<float> sdr::BPSK31< Scalar >::_c_2T
+
+protected
+
+ +

Constellation at T=-2 (samples).

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer< std::complex<float> > sdr::BPSK31< Scalar >::_dl
+
+protected
+
+ +

The delay line for the interpolating sub-sampler.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::BPSK31< Scalar >::_dl_idx
+
+protected
+
+ +

The current index of the delay line.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_F
+
+protected
+
+ +

Frequency of the carrier PLL.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_Fmax
+
+protected
+
+ +

Upper frequency limit of the carrier PLL.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_Fmin
+
+protected
+
+ +

Lower frequency limit of the carrier PLL.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_gain_mu
+
+protected
+
+ +

Gain factor of the sub-sampler.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_gain_omega
+
+protected
+
+ +

Gain of the sub-sample rate correction.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<float> sdr::BPSK31< Scalar >::_hist
+
+protected
+
+ +

The last _superSample phases.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::BPSK31< Scalar >::_hist_idx
+
+protected
+
+ +

Current phase history index.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
int sdr::BPSK31< Scalar >::_last_constellation
+
+protected
+
+ +

The last output constellation.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_max_omega
+
+protected
+
+ +

Maximum of the sub-sample rate.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_min_omega
+
+protected
+
+ +

Minimum of the sub-sample rate.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_mu
+
+protected
+
+ +

Holds the fractional sub-sampling counter.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_omega
+
+protected
+
+ +

Current sub-sample rate.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_omega_rel
+
+protected
+
+ +

Relative error of the subsample rate.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_P
+
+protected
+
+ +

Phase of the carrier PLL.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::complex<float> sdr::BPSK31< Scalar >::_p_0T
+
+protected
+
+ +

Phase at T = 0 (samples).

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::complex<float> sdr::BPSK31< Scalar >::_p_1T
+
+protected
+
+ +

Phase at T=-1 (samples).

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::complex<float> sdr::BPSK31< Scalar >::_p_2T
+
+protected
+
+ +

Phase at T=-2 (samples).

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::BPSK31< Scalar >::_superSample
+
+protected
+
+ +

Holds the number of phase constellations per bit.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::BPSK31< Scalar >::_theta
+
+protected
+
+ +

Constant phase shift between real axis and first constellation.

+

(Currently unused).

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_b_p_s_k31.png b/classsdr_1_1_b_p_s_k31.png new file mode 100644 index 0000000..e068bfc Binary files /dev/null and b/classsdr_1_1_b_p_s_k31.png differ diff --git a/classsdr_1_1_base_band-members.html b/classsdr_1_1_base_band-members.html new file mode 100644 index 0000000..216ac5f --- /dev/null +++ b/classsdr_1_1_base_band-members.html @@ -0,0 +1,161 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::BaseBand< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::BaseBand< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::BaseBand< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_Ffsdr::BaseBand< Scalar >protected
_filter_ring()sdr::BaseBand< Scalar >inlineprotected
_freq_shiftsdr::FreqShiftBase< Scalar >protected
_Fssdr::FreqShiftBase< Scalar >protected
_kernelsdr::BaseBand< Scalar >protected
_lastsdr::BaseBand< Scalar >protected
_lutsdr::BaseBand< Scalar >protected
_lut_countsdr::BaseBand< Scalar >protected
_lut_incsdr::BaseBand< Scalar >protected
_lut_sizesdr::BaseBand< Scalar >protectedstatic
_ordersdr::BaseBand< Scalar >protected
_process(const Buffer< Scalar > &in, const Buffer< CScalar > &out)sdr::BaseBand< Scalar >inlineprotected
_ringsdr::BaseBand< Scalar >protected
_ring_offsetsdr::BaseBand< Scalar >protected
_sample_countsdr::BaseBand< Scalar >protected
_shift_freqsdr::BaseBand< Scalar >protected
_sinkssdr::Sourceprotected
_sub_samplesdr::BaseBand< Scalar >protected
_update_filter_kernel()sdr::BaseBand< Scalar >inlineprotected
_update_lut_incr()sdr::FreqShiftBase< Scalar >inlineprotected
_widthsdr::BaseBand< Scalar >protected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
applyFrequencyShift(CSScalar value)sdr::FreqShiftBase< Scalar >inline
BaseBand(double Fc, double width, size_t order, size_t sub_sample)sdr::BaseBand< Scalar >inline
BaseBand(double Fc, double Ff, double width, size_t order, size_t sub_sample)sdr::BaseBand< Scalar >inline
config(const Config &src_cfg)sdr::BaseBand< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
CScalar typedefsdr::BaseBand< Scalar >
CSScalar typedefsdr::BaseBand< Scalar >
disconnect(SinkBase *sink)sdr::Source
FreqShiftBase(double F, double Fs)sdr::FreqShiftBase< Scalar >inline
frequencyShift() const sdr::FreqShiftBase< Scalar >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::BaseBand< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sdr::sampleRate() const sdr::Sourcevirtual
sdr::FreqShiftBase::sampleRate() const sdr::FreqShiftBase< Scalar >inline
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
setFrequencyShift(double F)sdr::FreqShiftBase< Scalar >inlinevirtual
setSampleRate(double Fs)sdr::BaseBand< Scalar >inlinevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
SScalar typedefsdr::BaseBand< Scalar >
type() const sdr::Sourcevirtual
~BaseBand()sdr::BaseBand< Scalar >inlinevirtual
~FreqShiftBase()sdr::FreqShiftBase< Scalar >inlinevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_base_band.html b/classsdr_1_1_base_band.html new file mode 100644 index 0000000..62190e2 --- /dev/null +++ b/classsdr_1_1_base_band.html @@ -0,0 +1,1088 @@ + + + + + + +libsdr: sdr::BaseBand< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::BaseBand< Scalar > Class Template Reference
+
+
+ +

This class performs several operations on the real input stream, It first filters out some part of the input stream using a FIR band pass filter then shifts the center frequency to 0 and finally sub-samples the resulting stream such that the selected base-band is well represented. + More...

+ +

#include <baseband.hh>

+
+Inheritance diagram for sdr::BaseBand< Scalar >:
+
+
+ + +sdr::Sink< Scalar > +sdr::Source +sdr::FreqShiftBase< Scalar > +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + +

+Public Types

typedef FreqShiftBase< Scalar >
+::CScalar 
CScalar
 The complex input scalar. More...
 
typedef FreqShiftBase< Scalar >
+::SScalar 
SScalar
 The real super scalar. More...
 
typedef FreqShiftBase< Scalar >
+::CSScalar 
CSScalar
 The complex super scalar. More...
 
- Public Types inherited from sdr::FreqShiftBase< Scalar >
typedef std::complex< Scalar > CScalar
 The complex input signal. More...
 
typedef Traits< Scalar >::SScalar SScalar
 The compute (super) scalar of the input type. More...
 
typedef std::complex< SScalarCSScalar
 The complex compute (super) scalar of the input type. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 BaseBand (double Fc, double width, size_t order, size_t sub_sample)
 Constructs a new BaseBand instance. More...
 
 BaseBand (double Fc, double Ff, double width, size_t order, size_t sub_sample)
 Constructs a new BaseBand instance. More...
 
virtual ~BaseBand ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the base band node. More...
 
virtual void setSampleRate (double Fs)
 Sets the sample rate and updates the LUT. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Processes the input buffer. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
- Public Member Functions inherited from sdr::FreqShiftBase< Scalar >
 FreqShiftBase (double F, double Fs)
 Constructor. More...
 
virtual ~FreqShiftBase ()
 Destructor. More...
 
double sampleRate () const
 Returns the sample rate. More...
 
double frequencyShift () const
 Returns the frequency shift. More...
 
virtual void setFrequencyShift (double F)
 Sets the frequency shift and updates the LUT. More...
 
CSScalar applyFrequencyShift (CSScalar value)
 Performs the frequency shift on a single sample. More...
 
+ + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

void _process (const Buffer< Scalar > &in, const Buffer< CScalar > &out)
 Performs the actual procssing. More...
 
CSScalar _filter_ring ()
 Applies the filter on the data stored in the ring buffer. More...
 
void _update_filter_kernel ()
 Calculates or updates the filter kernel. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
- Protected Member Functions inherited from sdr::FreqShiftBase< Scalar >
void _update_lut_incr ()
 Updates the multiplier LUT. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

double _Ff
 The center frequency of the band pass filter. More...
 
double _width
 The width of the band pass filter. More...
 
size_t _order
 The order of the band pass filter. More...
 
size_t _sub_sample
 The number of averages taken for subsampling. More...
 
size_t _ring_offset
 The current index of the ring buffer. More...
 
size_t _sample_count
 The current number of averages. More...
 
CSScalar _last
 The current sum of the last _sample_count samples. More...
 
bool _shift_freq
 If true, Fc!=0. More...
 
+Buffer< CSScalar_lut
 $\exp(i\phi)$ look-up table
 
size_t _lut_inc
 The LUT index increment per (1<<4) samples. More...
 
size_t _lut_count
 The current LUT index times (1<<4). More...
 
Buffer< CSScalar_kernel
 The filter kernel of order _order. More...
 
Buffer< SScalar_ring
 A ring buffer of past values. More...
 
Buffer< CScalar_buffer
 The output buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
- Protected Attributes inherited from sdr::FreqShiftBase< Scalar >
double _freq_shift
 The current frequency shift. More...
 
double _Fs
 The current sample rate. More...
 
size_t _lut_inc
 The LUT increment. More...
 
size_t _lut_count
 The LUT index counter. More...
 
Buffer< CSScalar_lut
 The LUT. More...
 
+ + + + + + + + +

+Static Protected Attributes

static const size_t _lut_size =128
 Size of the look-up table. More...
 
- Static Protected Attributes inherited from sdr::FreqShiftBase< Scalar >
static const size_t _lut_size = 128
 The size of the LUT. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::BaseBand< Scalar >

+ +

This class performs several operations on the real input stream, It first filters out some part of the input stream using a FIR band pass filter then shifts the center frequency to 0 and finally sub-samples the resulting stream such that the selected base-band is well represented.

+

Member Typedef Documentation

+ +
+
+
+template<class Scalar >
+ + + + +
typedef FreqShiftBase<Scalar>::CScalar sdr::BaseBand< Scalar >::CScalar
+
+ +

The complex input scalar.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + +
typedef FreqShiftBase<Scalar>::CSScalar sdr::BaseBand< Scalar >::CSScalar
+
+ +

The complex super scalar.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + +
typedef FreqShiftBase<Scalar>::SScalar sdr::BaseBand< Scalar >::SScalar
+
+ +

The real super scalar.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sdr::BaseBand< Scalar >::BaseBand (double Fc,
double width,
size_t order,
size_t sub_sample 
)
+
+inline
+
+ +

Constructs a new BaseBand instance.

+
Parameters
+ + + + + +
FcSpecifies the center frequency of the base band. The resulting signal will be shifted down by this frequency.
widthSpecifies the with of the band pass filter.
orderSpecifies the order of the FIR band pass filter.
sub_sampleSpecifies the sub-sampling of the resulting singnal.
+
+
+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sdr::BaseBand< Scalar >::BaseBand (double Fc,
double Ff,
double width,
size_t order,
size_t sub_sample 
)
+
+inline
+
+ +

Constructs a new BaseBand instance.

+
Parameters
+ + + + + + +
FcSpecifies the frequency of the base band. The resulting signal will be shifted down by this frequency.
FfSpecifies the center frequency of the band pass filter.
widthSpecifies the with of the band pass filter.
orderSpecifies the order of the FIR band pass filter.
sub_sampleSpecifies the sub-sampling of the resulting singnal.
+
+
+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::BaseBand< Scalar >::~BaseBand ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
CSScalar sdr::BaseBand< Scalar >::_filter_ring ()
+
+inlineprotected
+
+ +

Applies the filter on the data stored in the ring buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::BaseBand< Scalar >::_process (const Buffer< Scalar > & in,
const Buffer< CScalar > & out 
)
+
+inlineprotected
+
+ +

Performs the actual procssing.

+

First, the bandpass filter is applied, then the filtered signal is shifted and finally the signal gets averaged over _sub_sample samples, implementing the averaging sub-sampling.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
void sdr::BaseBand< Scalar >::_update_filter_kernel ()
+
+inlineprotected
+
+ +

Calculates or updates the filter kernel.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::BaseBand< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the base band node.

+

Implements the Sink interface.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::BaseBand< Scalar >::process (const Buffer< Scalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Processes the input buffer.

+

Implements the Sink interface.

+ +

Implements sdr::Sink< Scalar >.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::BaseBand< Scalar >::setSampleRate (double Fs)
+
+inlinevirtual
+
+ +

Sets the sample rate and updates the LUT.

+
Bug:
Also signal config change of the sourcce by setConfig()!
+ +

Reimplemented from sdr::FreqShiftBase< Scalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<CScalar> sdr::BaseBand< Scalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::BaseBand< Scalar >::_Ff
+
+protected
+
+ +

The center frequency of the band pass filter.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<CSScalar> sdr::BaseBand< Scalar >::_kernel
+
+protected
+
+ +

The filter kernel of order _order.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
CSScalar sdr::BaseBand< Scalar >::_last
+
+protected
+
+ +

The current sum of the last _sample_count samples.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::BaseBand< Scalar >::_lut_count
+
+protected
+
+ +

The current LUT index times (1<<4).

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::BaseBand< Scalar >::_lut_inc
+
+protected
+
+ +

The LUT index increment per (1<<4) samples.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
const size_t sdr::BaseBand< Scalar >::_lut_size =128
+
+staticprotected
+
+ +

Size of the look-up table.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::BaseBand< Scalar >::_order
+
+protected
+
+ +

The order of the band pass filter.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<SScalar> sdr::BaseBand< Scalar >::_ring
+
+protected
+
+ +

A ring buffer of past values.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::BaseBand< Scalar >::_ring_offset
+
+protected
+
+ +

The current index of the ring buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::BaseBand< Scalar >::_sample_count
+
+protected
+
+ +

The current number of averages.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
bool sdr::BaseBand< Scalar >::_shift_freq
+
+protected
+
+ +

If true, Fc!=0.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::BaseBand< Scalar >::_sub_sample
+
+protected
+
+ +

The number of averages taken for subsampling.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::BaseBand< Scalar >::_width
+
+protected
+
+ +

The width of the band pass filter.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_base_band.png b/classsdr_1_1_base_band.png new file mode 100644 index 0000000..2e59efe Binary files /dev/null and b/classsdr_1_1_base_band.png differ diff --git a/classsdr_1_1_blocking_source-members.html b/classsdr_1_1_blocking_source-members.html new file mode 100644 index 0000000..df2d086 --- /dev/null +++ b/classsdr_1_1_blocking_source-members.html @@ -0,0 +1,131 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::BlockingSource Member List
+
+
+ +

This is the complete list of members for sdr::BlockingSource, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_is_activesdr::BlockingSourceprotected
_is_parallelsdr::BlockingSourceprotected
_nonvirt_idle_cb()sdr::BlockingSourceprotected
_parallel_main()sdr::BlockingSourceprotected
_sinkssdr::Sourceprotected
_threadsdr::BlockingSourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
BlockingSource(bool parallel=false, bool connect_idle=true, bool stop_queue_on_eos=false)sdr::BlockingSource
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
isActive() const sdr::BlockingSourceinline
next()=0sdr::BlockingSourcepure virtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Source()sdr::Source
start()sdr::BlockingSourcevirtual
stop()sdr::BlockingSourcevirtual
type() const sdr::Sourcevirtual
~BlockingSource()sdr::BlockingSourcevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_blocking_source.html b/classsdr_1_1_blocking_source.html new file mode 100644 index 0000000..c05de28 --- /dev/null +++ b/classsdr_1_1_blocking_source.html @@ -0,0 +1,505 @@ + + + + + + +libsdr: sdr::BlockingSource Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::BlockingSource Class Referenceabstract
+
+
+ +

Iterface of a blocking source. + More...

+ +

#include <node.hh>

+
+Inheritance diagram for sdr::BlockingSource:
+
+
+ + +sdr::Source + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 BlockingSource (bool parallel=false, bool connect_idle=true, bool stop_queue_on_eos=false)
 Constructor. More...
 
virtual ~BlockingSource ()
 Destructor. More...
 
virtual void next ()=0
 This method gets called either by the Queue on idle events or by a thread to read more data from the input stream. More...
 
bool isActive () const
 Returns true if the source is active. More...
 
virtual void start ()
 This function starts the input stream. More...
 
virtual void stop ()
 This function stops the input stream. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + +

+Protected Member Functions

void _parallel_main ()
 The parallel main loop. More...
 
void _nonvirt_idle_cb ()
 The non-virtual idle callback. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

bool _is_active
 If true, the source is active. More...
 
bool _is_parallel
 If true, the surce is processed in parallel. More...
 
pthread_t _thread
 The thread of the source. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

Iterface of a blocking source.

+

Blocking sources are usually input sources that wait for data from a device or file. Please note, a proper input source that reads data from a file should emmit the eos signal using the signalEOS method. This can be used to stop the Queue loop once the input can not provide data anymore.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
BlockingSource::BlockingSource (bool parallel = false,
bool connect_idle = true,
bool stop_queue_on_eos = false 
)
+
+ +

Constructor.

+
Parameters
+ + + + +
parallelSpecifies whether the source is waiting in a separate thread for new data.
connect_idleSpecifies wheter the input source next() method should be connected to the idle signal of the Queue.
stop_queue_on_eosSignals the that the Queue should be stopped once the EOS is reached. Use this flag only if this source is the only source in the data stream.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
BlockingSource::~BlockingSource ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void BlockingSource::_nonvirt_idle_cb ()
+
+protected
+
+ +

The non-virtual idle callback.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void BlockingSource::_parallel_main ()
+
+protected
+
+ +

The parallel main loop.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sdr::BlockingSource::isActive () const
+
+inline
+
+ +

Returns true if the source is active.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void sdr::BlockingSource::next ()
+
+pure virtual
+
+ +

This method gets called either by the Queue on idle events or by a thread to read more data from the input stream.

+

The next function should be blocking in order to avoid busy waiting on incomming data.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void BlockingSource::start ()
+
+virtual
+
+ +

This function starts the input stream.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void BlockingSource::stop ()
+
+virtual
+
+ +

This function stops the input stream.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
bool sdr::BlockingSource::_is_active
+
+protected
+
+ +

If true, the source is active.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool sdr::BlockingSource::_is_parallel
+
+protected
+
+ +

If true, the surce is processed in parallel.

+ +
+
+ +
+
+ + + + + +
+ + + + +
pthread_t sdr::BlockingSource::_thread
+
+protected
+
+ +

The thread of the source.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_blocking_source.png b/classsdr_1_1_blocking_source.png new file mode 100644 index 0000000..5572244 Binary files /dev/null and b/classsdr_1_1_blocking_source.png differ diff --git a/classsdr_1_1_buffer-members.html b/classsdr_1_1_buffer-members.html new file mode 100644 index 0000000..45dcb6c --- /dev/null +++ b/classsdr_1_1_buffer-members.html @@ -0,0 +1,149 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Buffer< T > Member List
+
+
+ +

This is the complete list of members for sdr::Buffer< T >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_b_lengthsdr::RawBufferprotected
_b_offsetsdr::RawBufferprotected
_ownersdr::RawBufferprotected
_ptrsdr::RawBufferprotected
_refcountsdr::RawBufferprotected
_sizesdr::Buffer< T >protected
_storage_sizesdr::RawBufferprotected
as() const sdr::Buffer< T >inline
Buffer()sdr::Buffer< T >inline
Buffer(T *data, size_t size)sdr::Buffer< T >inline
Buffer(size_t N, BufferOwner *owner=0)sdr::Buffer< T >inline
Buffer(const Buffer< T > &other)sdr::Buffer< T >inline
Buffer(const RawBuffer &other)sdr::Buffer< T >inlineexplicit
bytesLen() const sdr::RawBufferinline
bytesOffset() const sdr::RawBufferinline
data() const sdr::RawBufferinline
head(size_t n) const sdr::Buffer< T >inline
isEmpty() const sdr::RawBufferinline
isUnused() const sdr::RawBufferinline
norm() const sdr::Buffer< T >inline
norm(double p) const sdr::Buffer< T >inline
norm2() const sdr::Buffer< T >inline
operator*=(const T &a)sdr::Buffer< T >inline
operator/=(const T &a)sdr::Buffer< T >inline
operator<(const Buffer< T > &other) const sdr::Buffer< T >inline
operator=(const Buffer< T > other)sdr::Buffer< T >inline
sdr::RawBuffer::operator=(const RawBuffer &other)sdr::RawBufferinline
operator[](int idx) const sdr::Buffer< T >inline
ptr() const sdr::RawBufferinline
RawBuffer()sdr::RawBuffer
RawBuffer(char *data, size_t offset, size_t len)sdr::RawBuffer
RawBuffer(size_t N, BufferOwner *owner=0)sdr::RawBuffer
RawBuffer(const RawBuffer &other)sdr::RawBuffer
RawBuffer(const RawBuffer &other, size_t offset, size_t len)sdr::RawBuffer
ref() const sdr::RawBuffer
refCount() const sdr::RawBufferinline
size() const sdr::Buffer< T >inline
storageSize() const sdr::RawBufferinline
sub(size_t offset, size_t len) const sdr::Buffer< T >inline
tail(size_t n) const sdr::Buffer< T >inline
unref()sdr::RawBuffer
~Buffer()sdr::Buffer< T >inlinevirtual
~RawBuffer()sdr::RawBuffervirtual
+ + + + diff --git a/classsdr_1_1_buffer.html b/classsdr_1_1_buffer.html new file mode 100644 index 0000000..3a21165 --- /dev/null +++ b/classsdr_1_1_buffer.html @@ -0,0 +1,855 @@ + + + + + + +libsdr: sdr::Buffer< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Buffer< T > Class Template Reference
+
+
+ +

A typed buffer. + More...

+ +

#include <buffer.hh>

+
+Inheritance diagram for sdr::Buffer< T >:
+
+
+ + +sdr::RawBuffer + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Buffer ()
 Empty constructor. More...
 
 Buffer (T *data, size_t size)
 Constructor from raw data. More...
 
 Buffer (size_t N, BufferOwner *owner=0)
 Creates a buffer with N samples. More...
 
 Buffer (const Buffer< T > &other)
 Create a new reference to the buffer. More...
 
virtual ~Buffer ()
 Destructor. More...
 
 Buffer (const RawBuffer &other)
 Explicit type cast. More...
 
const Buffer< T > & operator= (const Buffer< T > other)
 Assignment operator, turns this buffer into a reference to the other buffer. More...
 
bool operator< (const Buffer< T > &other) const
 This is used to store buffers in sets. More...
 
size_t size () const
 Returns the number of elements of type T in this buffer. More...
 
T & operator[] (int idx) const
 Element access. More...
 
double norm2 () const
 Returns the $l^2$ norm of the buffer. More...
 
double norm () const
 Returns the $l^1$ norm of the buffer. More...
 
double norm (double p) const
 Returns the $l^p$ norm of the buffer. More...
 
Buffer< T > & operator*= (const T &a)
 In-place, element wise product of the buffer with the scalar a. More...
 
Buffer< T > & operator/= (const T &a)
 In-place, element wise division of the buffer with the scalar a. More...
 
template<class oT >
Buffer< oT > as () const
 Explicit type cast. More...
 
Buffer< T > sub (size_t offset, size_t len) const
 Returns a new view on this buffer. More...
 
Buffer< T > head (size_t n) const
 Returns a new view on this buffer. More...
 
Buffer< T > tail (size_t n) const
 Returns a new view on this buffer. More...
 
- Public Member Functions inherited from sdr::RawBuffer
 RawBuffer ()
 Constructs an empty buffer. More...
 
 RawBuffer (char *data, size_t offset, size_t len)
 Constructor from unowned data. More...
 
 RawBuffer (size_t N, BufferOwner *owner=0)
 Constructs a buffer and allocates N bytes. More...
 
 RawBuffer (const RawBuffer &other)
 Copy constructor. More...
 
 RawBuffer (const RawBuffer &other, size_t offset, size_t len)
 Creates a new view on the buffer. More...
 
virtual ~RawBuffer ()
 Destructor. More...
 
const RawBufferoperator= (const RawBuffer &other)
 Assignment. More...
 
char * ptr () const
 Returns the pointer to the data (w/o view). More...
 
char * data () const
 Returns the pointer to the data of the buffer view. More...
 
size_t bytesOffset () const
 Returns the offset of the data by the view. More...
 
size_t bytesLen () const
 Returns the size of the buffer by the view. More...
 
size_t storageSize () const
 Returns the raw buffer size in bytes. More...
 
bool isEmpty () const
 Returns true if the buffer is invalid/empty. More...
 
void ref () const
 Increment reference counter. More...
 
void unref ()
 Dereferences the buffer. More...
 
int refCount () const
 Returns the reference counter. More...
 
bool isUnused () const
 We assume here that buffers are owned by some object: A buffer is therefore "unused" if the owner holds the only reference to the buffer. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

size_t _size
 Holds the number of elements of type T in the buffer. More...
 
- Protected Attributes inherited from sdr::RawBuffer
char * _ptr
 Holds the pointer to the data or 0, if buffer is empty. More...
 
size_t _storage_size
 Holds the size of the buffer in bytes. More...
 
size_t _b_offset
 Holds the offset of the buffer in bytes. More...
 
size_t _b_length
 Holds the length of the buffer (view) in bytes. More...
 
int * _refcount
 The reference counter. More...
 
BufferOwner_owner
 Holds a weak reference the buffer owner. More...
 
+

Detailed Description

+

template<class T>
+class sdr::Buffer< T >

+ +

A typed buffer.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + +
sdr::Buffer< T >::Buffer ()
+
+inline
+
+ +

Empty constructor.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::Buffer< T >::Buffer (T * data,
size_t size 
)
+
+inline
+
+ +

Constructor from raw data.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::Buffer< T >::Buffer (size_t N,
BufferOwnerowner = 0 
)
+
+inline
+
+ +

Creates a buffer with N samples.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + +
sdr::Buffer< T >::Buffer (const Buffer< T > & other)
+
+inline
+
+ +

Create a new reference to the buffer.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + +
virtual sdr::Buffer< T >::~Buffer ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + +
sdr::Buffer< T >::Buffer (const RawBuffer< T > & other)
+
+inlineexplicit
+
+ +

Explicit type cast.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class T>
+
+template<class oT >
+ + + + + +
+ + + + + + + +
Buffer<oT> sdr::Buffer< T >::as () const
+
+inline
+
+ +

Explicit type cast.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + +
Buffer<T> sdr::Buffer< T >::head (size_t n) const
+
+inline
+
+ +

Returns a new view on this buffer.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + +
double sdr::Buffer< T >::norm () const
+
+inline
+
+ +

Returns the $l^1$ norm of the buffer.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + +
double sdr::Buffer< T >::norm (double p) const
+
+inline
+
+ +

Returns the $l^p$ norm of the buffer.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + +
double sdr::Buffer< T >::norm2 () const
+
+inline
+
+ +

Returns the $l^2$ norm of the buffer.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + +
Buffer<T>& sdr::Buffer< T >::operator*= (const T & a)
+
+inline
+
+ +

In-place, element wise product of the buffer with the scalar a.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + +
Buffer<T>& sdr::Buffer< T >::operator/= (const T & a)
+
+inline
+
+ +

In-place, element wise division of the buffer with the scalar a.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + +
bool sdr::Buffer< T >::operator< (const Buffer< T > & other) const
+
+inline
+
+ +

This is used to store buffers in sets.

+

The comparison is performed on the pointer of the buffers and not on their content.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + +
const Buffer<T>& sdr::Buffer< T >::operator= (const Buffer< T > other)
+
+inline
+
+ +

Assignment operator, turns this buffer into a reference to the other buffer.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + +
T& sdr::Buffer< T >::operator[] (int idx) const
+
+inline
+
+ +

Element access.

+

If compiled in debug mode, this function will perform a check on the index and throws a RuntimeError exception if the index is out of bounds.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + +
size_t sdr::Buffer< T >::size () const
+
+inline
+
+ +

Returns the number of elements of type T in this buffer.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Buffer<T> sdr::Buffer< T >::sub (size_t offset,
size_t len 
) const
+
+inline
+
+ +

Returns a new view on this buffer.

+ +
+
+ +
+
+
+template<class T>
+ + + + + +
+ + + + + + + + +
Buffer<T> sdr::Buffer< T >::tail (size_t n) const
+
+inline
+
+ +

Returns a new view on this buffer.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class T>
+ + + + + +
+ + + + +
size_t sdr::Buffer< T >::_size
+
+protected
+
+ +

Holds the number of elements of type T in the buffer.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_buffer.png b/classsdr_1_1_buffer.png new file mode 100644 index 0000000..d4f07ef Binary files /dev/null and b/classsdr_1_1_buffer.png differ diff --git a/classsdr_1_1_buffer_node-members.html b/classsdr_1_1_buffer_node-members.html new file mode 100644 index 0000000..fedba51 --- /dev/null +++ b/classsdr_1_1_buffer_node-members.html @@ -0,0 +1,132 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::BufferNode< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::BufferNode< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
_bufferSetsdr::BufferNode< Scalar >protected
_bufferSizesdr::BufferNode< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_samplesLeftsdr::BufferNode< Scalar >protected
_sinkssdr::Sourceprotected
_tempsdr::BufferNode< Scalar >protected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
BufferNode(size_t bufferSize)sdr::BufferNode< Scalar >inline
config(const Config &src_cfg)sdr::BufferNode< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::BufferNode< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_buffer_node.html b/classsdr_1_1_buffer_node.html new file mode 100644 index 0000000..79ccb12 --- /dev/null +++ b/classsdr_1_1_buffer_node.html @@ -0,0 +1,429 @@ + + + + + + +libsdr: sdr::BufferNode< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::BufferNode< Scalar > Class Template Reference
+
+
+ +

A simple buffering node, that ensures a fixed buffer size. + More...

+ +

#include <buffernode.hh>

+
+Inheritance diagram for sdr::BufferNode< Scalar >:
+
+
+ + +sdr::Sink< Scalar > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 BufferNode (size_t bufferSize)
 Constructs a new buffer node. More...
 
virtual void config (const Config &src_cfg)
 Configures the buffer node. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Process the incomming data. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

size_t _bufferSize
 The desired buffer size. More...
 
BufferSet< Scalar > _bufferSet
 A set of output buffers. More...
 
Buffer< Scalar > _temp
 An intermediate buffer to hold left-over samples from the previous buffers. More...
 
size_t _samplesLeft
 Number of samples left. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::BufferNode< Scalar >

+ +

A simple buffering node, that ensures a fixed buffer size.

+

This node is useful, expecially in front of a node that performs a FFT transform, which requires a certain buffer size.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
sdr::BufferNode< Scalar >::BufferNode (size_t bufferSize)
+
+inline
+
+ +

Constructs a new buffer node.

+
Parameters
+ + +
bufferSizeSpecifies the desired size of the output buffers.
+
+
+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
virtual void sdr::BufferNode< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the buffer node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::BufferNode< Scalar >::process (const Buffer< Scalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Process the incomming data.

+ +

Implements sdr::Sink< Scalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
BufferSet<Scalar> sdr::BufferNode< Scalar >::_bufferSet
+
+protected
+
+ +

A set of output buffers.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
size_t sdr::BufferNode< Scalar >::_bufferSize
+
+protected
+
+ +

The desired buffer size.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
size_t sdr::BufferNode< Scalar >::_samplesLeft
+
+protected
+
+ +

Number of samples left.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::BufferNode< Scalar >::_temp
+
+protected
+
+ +

An intermediate buffer to hold left-over samples from the previous buffers.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_buffer_node.png b/classsdr_1_1_buffer_node.png new file mode 100644 index 0000000..317c088 Binary files /dev/null and b/classsdr_1_1_buffer_node.png differ diff --git a/classsdr_1_1_buffer_owner-members.html b/classsdr_1_1_buffer_owner-members.html new file mode 100644 index 0000000..c9e8398 --- /dev/null +++ b/classsdr_1_1_buffer_owner-members.html @@ -0,0 +1,107 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::BufferOwner Member List
+
+
+ +

This is the complete list of members for sdr::BufferOwner, including all inherited members.

+ + +
bufferUnused(const RawBuffer &buffer)=0sdr::BufferOwnerpure virtual
+ + + + diff --git a/classsdr_1_1_buffer_owner.html b/classsdr_1_1_buffer_owner.html new file mode 100644 index 0000000..9a75168 --- /dev/null +++ b/classsdr_1_1_buffer_owner.html @@ -0,0 +1,163 @@ + + + + + + +libsdr: sdr::BufferOwner Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::BufferOwner Class Referenceabstract
+
+
+ +

Abstract class (interface) of a buffer owner. + More...

+ +

#include <buffer.hh>

+
+Inheritance diagram for sdr::BufferOwner:
+
+
+ + +sdr::BufferSet< std::complex< Scalar > > +sdr::BufferSet< Scalar > + +
+ + + + + +

+Public Member Functions

virtual void bufferUnused (const RawBuffer &buffer)=0
 Gets called once an owned buffer gets unused. More...
 
+

Detailed Description

+

Abstract class (interface) of a buffer owner.

+

If a buffer is owned, the owner gets notified once the buffer gets unused.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void sdr::BufferOwner::bufferUnused (const RawBufferbuffer)
+
+pure virtual
+
+ +

Gets called once an owned buffer gets unused.

+ +

Implemented in sdr::BufferSet< Scalar >, and sdr::BufferSet< std::complex< Scalar > >.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_buffer_owner.png b/classsdr_1_1_buffer_owner.png new file mode 100644 index 0000000..5836345 Binary files /dev/null and b/classsdr_1_1_buffer_owner.png differ diff --git a/classsdr_1_1_buffer_set-members.html b/classsdr_1_1_buffer_set-members.html new file mode 100644 index 0000000..107f39c --- /dev/null +++ b/classsdr_1_1_buffer_set-members.html @@ -0,0 +1,115 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::BufferSet< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::BufferSet< Scalar >, including all inherited members.

+ + + + + + + + + + +
_bufferssdr::BufferSet< Scalar >protected
_bufferSizesdr::BufferSet< Scalar >protected
_free_bufferssdr::BufferSet< Scalar >protected
BufferSet(size_t N, size_t size)sdr::BufferSet< Scalar >inline
bufferUnused(const RawBuffer &buffer)sdr::BufferSet< Scalar >inlinevirtual
getBuffer()sdr::BufferSet< Scalar >inline
hasBuffer()sdr::BufferSet< Scalar >inline
resize(size_t numBuffers)sdr::BufferSet< Scalar >inline
~BufferSet()sdr::BufferSet< Scalar >inlinevirtual
+ + + + diff --git a/classsdr_1_1_buffer_set.html b/classsdr_1_1_buffer_set.html new file mode 100644 index 0000000..91928a3 --- /dev/null +++ b/classsdr_1_1_buffer_set.html @@ -0,0 +1,418 @@ + + + + + + +libsdr: sdr::BufferSet< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::BufferSet< Scalar > Class Template Reference
+
+
+ +

A set of buffers, that tracks their usage. + More...

+ +

#include <buffer.hh>

+
+Inheritance diagram for sdr::BufferSet< Scalar >:
+
+
+ + +sdr::BufferOwner + +
+ + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 BufferSet (size_t N, size_t size)
 Preallocates N buffers of size size. More...
 
virtual ~BufferSet ()
 Destructor, unreferences all buffers. More...
 
bool hasBuffer ()
 Returns true if there is a free buffer. More...
 
Buffer< Scalar > getBuffer ()
 Obtains a free buffer. More...
 
virtual void bufferUnused (const RawBuffer &buffer)
 Callback gets called once the buffer gets unused. More...
 
void resize (size_t numBuffers)
 Resize the buffer set. More...
 
+ + + + + + + + + + +

+Protected Attributes

size_t _bufferSize
 Size of each buffer. More...
 
std::map< void *, Buffer
+< Scalar > > 
_buffers
 Holds a reference to each buffer of the buffer set, referenced by the data pointer of the buffer. More...
 
std::vector< void * > _free_buffers
 A vector of all unused buffers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::BufferSet< Scalar >

+ +

A set of buffers, that tracks their usage.

+

Frequently it is impossible to predict the time, a buffer will be in use. Instead of allocating a new buffer during runtime, one may allocate several buffer in advance. In this case, it is important to track which buffer is still in use efficiently. This class implements this functionality. A BufferSet pre-allocates several buffers. Once a buffer is requested from the set, it gets marked as "in-use". Once the buffer gets ununsed, it will be marked as "unused" and will be available again.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::BufferSet< Scalar >::BufferSet (size_t N,
size_t size 
)
+
+inline
+
+ +

Preallocates N buffers of size size.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
virtual sdr::BufferSet< Scalar >::~BufferSet ()
+
+inlinevirtual
+
+ +

Destructor, unreferences all buffers.

+

Buffers still in use, are freed once they are dereferenced.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
virtual void sdr::BufferSet< Scalar >::bufferUnused (const RawBufferbuffer)
+
+inlinevirtual
+
+ +

Callback gets called once the buffer gets unused.

+ +

Implements sdr::BufferOwner.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
Buffer<Scalar> sdr::BufferSet< Scalar >::getBuffer ()
+
+inline
+
+ +

Obtains a free buffer.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
bool sdr::BufferSet< Scalar >::hasBuffer ()
+
+inline
+
+ +

Returns true if there is a free buffer.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
void sdr::BufferSet< Scalar >::resize (size_t numBuffers)
+
+inline
+
+ +

Resize the buffer set.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
std::map<void *, Buffer<Scalar> > sdr::BufferSet< Scalar >::_buffers
+
+protected
+
+ +

Holds a reference to each buffer of the buffer set, referenced by the data pointer of the buffer.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
size_t sdr::BufferSet< Scalar >::_bufferSize
+
+protected
+
+ +

Size of each buffer.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
std::vector<void *> sdr::BufferSet< Scalar >::_free_buffers
+
+protected
+
+ +

A vector of all unused buffers.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_buffer_set.png b/classsdr_1_1_buffer_set.png new file mode 100644 index 0000000..44bb7a3 Binary files /dev/null and b/classsdr_1_1_buffer_set.png differ diff --git a/classsdr_1_1_cast-members.html b/classsdr_1_1_cast-members.html new file mode 100644 index 0000000..79ce6ff --- /dev/null +++ b/classsdr_1_1_cast-members.html @@ -0,0 +1,138 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Cast< iScalar, oScalar > Member List
+
+
+ +

This is the complete list of members for sdr::Cast< iScalar, oScalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::Cast< iScalar, oScalar >protected
_can_overwritesdr::Cast< iScalar, oScalar >protected
_configsdr::Sourceprotected
_do_scalesdr::Cast< iScalar, oScalar >protected
_eossdr::Sourceprotected
_process(const Buffer< iScalar > &in, const Buffer< oScalar > &out)sdr::Cast< iScalar, oScalar >inlineprotected
_scalesdr::Cast< iScalar, oScalar >protected
_shiftsdr::Cast< iScalar, oScalar >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
Cast(oScalar scale=1, iScalar shift=0)sdr::Cast< iScalar, oScalar >inline
config(const Config &src_cfg)sdr::Cast< iScalar, oScalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< iScalar >inlinevirtual
iSScalar typedefsdr::Cast< iScalar, oScalar >
oSScalar typedefsdr::Cast< iScalar, oScalar >
process(const Buffer< iScalar > &buffer, bool allow_overwrite)sdr::Cast< iScalar, oScalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
scale() const sdr::Cast< iScalar, oScalar >inline
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
setScale(double scale)sdr::Cast< iScalar, oScalar >inline
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< iScalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~Sink()sdr::Sink< iScalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_cast.html b/classsdr_1_1_cast.html new file mode 100644 index 0000000..7a60a2f --- /dev/null +++ b/classsdr_1_1_cast.html @@ -0,0 +1,605 @@ + + + + + + +libsdr: sdr::Cast< iScalar, oScalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Cast< iScalar, oScalar > Class Template Reference
+
+
+ +

Explicit type cast node. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::Cast< iScalar, oScalar >:
+
+
+ + +sdr::Sink< iScalar > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + +

+Public Types

typedef Traits< iScalar >::SScalar iSScalar
 Specifies the input super scalar. More...
 
typedef Traits< oScalar >::SScalar oSScalar
 Specified the output super scalar. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Cast (oScalar scale=1, iScalar shift=0)
 Constructs a type-cast with optional scaleing. More...
 
virtual void config (const Config &src_cfg)
 Configures the type-cast node. More...
 
virtual void process (const Buffer< iScalar > &buffer, bool allow_overwrite)
 Performs the type-cast node. More...
 
double scale () const
 Returns the scaling. More...
 
void setScale (double scale)
 Sets the scaling. More...
 
- Public Member Functions inherited from sdr::Sink< iScalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + +

+Protected Member Functions

void _process (const Buffer< iScalar > &in, const Buffer< oScalar > &out)
 Internal used method to perform the type-case out-of-place. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

bool _can_overwrite
 If true, the type-cast (an scaleing) can be performed in-place. More...
 
bool _do_scale
 If true, the output gets scaled. More...
 
oScalar _scale
 The scaling. More...
 
iScalar _shift
 Another scaling, using integer shift operation (faster). More...
 
Buffer< oScalar > _buffer
 The output buffer, unused if the type-cast is performed in-place . More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class iScalar, class oScalar>
+class sdr::Cast< iScalar, oScalar >

+ +

Explicit type cast node.

+

Member Typedef Documentation

+ +
+
+
+template<class iScalar , class oScalar >
+ + + + +
typedef Traits<iScalar>::SScalar sdr::Cast< iScalar, oScalar >::iSScalar
+
+ +

Specifies the input super scalar.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar >
+ + + + +
typedef Traits<oScalar>::SScalar sdr::Cast< iScalar, oScalar >::oSScalar
+
+ +

Specified the output super scalar.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<class iScalar , class oScalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::Cast< iScalar, oScalar >::Cast (oScalar scale = 1,
iScalar shift = 0 
)
+
+inline
+
+ +

Constructs a type-cast with optional scaleing.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class iScalar , class oScalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::Cast< iScalar, oScalar >::_process (const Buffer< iScalar > & in,
const Buffer< oScalar > & out 
)
+
+inlineprotected
+
+ +

Internal used method to perform the type-case out-of-place.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::Cast< iScalar, oScalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the type-cast node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::Cast< iScalar, oScalar >::process (const Buffer< iScalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Performs the type-cast node.

+ +

Implements sdr::Sink< iScalar >.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar >
+ + + + + +
+ + + + + + + +
double sdr::Cast< iScalar, oScalar >::scale () const
+
+inline
+
+ +

Returns the scaling.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar >
+ + + + + +
+ + + + + + + + +
void sdr::Cast< iScalar, oScalar >::setScale (double scale)
+
+inline
+
+ +

Sets the scaling.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class iScalar , class oScalar >
+ + + + + +
+ + + + +
Buffer<oScalar> sdr::Cast< iScalar, oScalar >::_buffer
+
+protected
+
+ +

The output buffer, unused if the type-cast is performed in-place .

+ +
+
+ +
+
+
+template<class iScalar , class oScalar >
+ + + + + +
+ + + + +
bool sdr::Cast< iScalar, oScalar >::_can_overwrite
+
+protected
+
+ +

If true, the type-cast (an scaleing) can be performed in-place.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar >
+ + + + + +
+ + + + +
bool sdr::Cast< iScalar, oScalar >::_do_scale
+
+protected
+
+ +

If true, the output gets scaled.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar >
+ + + + + +
+ + + + +
oScalar sdr::Cast< iScalar, oScalar >::_scale
+
+protected
+
+ +

The scaling.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar >
+ + + + + +
+ + + + +
iScalar sdr::Cast< iScalar, oScalar >::_shift
+
+protected
+
+ +

Another scaling, using integer shift operation (faster).

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_cast.png b/classsdr_1_1_cast.png new file mode 100644 index 0000000..c90ca56 Binary files /dev/null and b/classsdr_1_1_cast.png differ diff --git a/classsdr_1_1_combine-members.html b/classsdr_1_1_combine-members.html new file mode 100644 index 0000000..05f1b62 --- /dev/null +++ b/classsdr_1_1_combine-members.html @@ -0,0 +1,116 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Combine< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::Combine< Scalar >, including all inherited members.

+ + + + + + + + + + + +
_bufferssdr::Combine< Scalar >protected
_configsdr::Combine< Scalar >protected
_sinkssdr::Combine< Scalar >protected
Combine(size_t N)sdr::Combine< Scalar >inline
CombineSink< Scalar > (defined in sdr::Combine< Scalar >)sdr::Combine< Scalar >friend
config(const Config &cfg)=0sdr::Combine< Scalar >pure virtual
notifyConfig(size_t idx, const Config &cfg)sdr::Combine< Scalar >inlineprotected
notifyData(size_t idx)sdr::Combine< Scalar >inlineprotected
process(std::vector< RingBuffer< Scalar > > &buffers, size_t N)=0sdr::Combine< Scalar >pure virtual
~Combine()sdr::Combine< Scalar >inlinevirtual
+ + + + diff --git a/classsdr_1_1_combine.html b/classsdr_1_1_combine.html new file mode 100644 index 0000000..dfb245e --- /dev/null +++ b/classsdr_1_1_combine.html @@ -0,0 +1,444 @@ + + + + + + +libsdr: sdr::Combine< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Combine< Scalar > Class Template Referenceabstract
+
+
+ +

A combine node. + More...

+ +

#include <combine.hh>

+
+Inheritance diagram for sdr::Combine< Scalar >:
+
+
+ + +sdr::Interleave< Scalar > + +
+ + + + + + + + + + + + + + +

+Public Member Functions

 Combine (size_t N)
 Constructor,
+ N specifies the number of sinks. More...
 
virtual ~Combine ()
 Destructor. More...
 
virtual void config (const Config &cfg)=0
 Needs to be overridden. More...
 
virtual void process (std::vector< RingBuffer< Scalar > > &buffers, size_t N)=0
 Needs to be overridden. More...
 
+ + + + + + + +

+Protected Member Functions

void notifyConfig (size_t idx, const Config &cfg)
 Unifies the configuration of all sinks. More...
 
void notifyData (size_t idx)
 Determines the minimum amount of data that is available on all ring buffers. More...
 
+ + + + + + + + + + +

+Protected Attributes

std::vector< RingBuffer< Scalar > > _buffers
 The ring buffers of all combine sinks. More...
 
std::vector< CombineSink
+< Scalar > * > 
_sinks
 The combine sinks. More...
 
Config _config
 The output configuration. More...
 
+ + + +

+Friends

+class CombineSink< Scalar >
 
+

Detailed Description

+

template<class Scalar>
+class sdr::Combine< Scalar >

+ +

A combine node.

+

This node allows to combine several streams into one.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
sdr::Combine< Scalar >::Combine (size_t N)
+
+inline
+
+ +

Constructor,
+ N specifies the number of sinks.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
virtual sdr::Combine< Scalar >::~Combine ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
virtual void sdr::Combine< Scalar >::config (const Configcfg)
+
+pure virtual
+
+ +

Needs to be overridden.

+ +

Implemented in sdr::Interleave< Scalar >.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::Combine< Scalar >::notifyConfig (size_t idx,
const Configcfg 
)
+
+inlineprotected
+
+ +

Unifies the configuration of all sinks.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
void sdr::Combine< Scalar >::notifyData (size_t idx)
+
+inlineprotected
+
+ +

Determines the minimum amount of data that is available on all ring buffers.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::Combine< Scalar >::process (std::vector< RingBuffer< Scalar > > & buffers,
size_t N 
)
+
+pure virtual
+
+ +

Needs to be overridden.

+ +

Implemented in sdr::Interleave< Scalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
std::vector< RingBuffer<Scalar> > sdr::Combine< Scalar >::_buffers
+
+protected
+
+ +

The ring buffers of all combine sinks.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
Config sdr::Combine< Scalar >::_config
+
+protected
+
+ +

The output configuration.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
std::vector< CombineSink<Scalar> *> sdr::Combine< Scalar >::_sinks
+
+protected
+
+ +

The combine sinks.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_combine.png b/classsdr_1_1_combine.png new file mode 100644 index 0000000..530355b Binary files /dev/null and b/classsdr_1_1_combine.png differ diff --git a/classsdr_1_1_combine_sink-members.html b/classsdr_1_1_combine_sink-members.html new file mode 100644 index 0000000..813f444 --- /dev/null +++ b/classsdr_1_1_combine_sink-members.html @@ -0,0 +1,118 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::CombineSink< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::CombineSink< Scalar >, including all inherited members.

+ + + + + + + + + + + + + +
_buffersdr::CombineSink< Scalar >protected
_indexsdr::CombineSink< Scalar >protected
_parentsdr::CombineSink< Scalar >protected
CombineSink(Combine< Scalar > *combine, size_t index, RingBuffer< Scalar > &buffer)sdr::CombineSink< Scalar >inline
config(const Config &src_cfg)sdr::CombineSink< Scalar >inlinevirtual
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::CombineSink< Scalar >inlinevirtual
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
~CombineSink()sdr::CombineSink< Scalar >inlinevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
+ + + + diff --git a/classsdr_1_1_combine_sink.html b/classsdr_1_1_combine_sink.html new file mode 100644 index 0000000..4755032 --- /dev/null +++ b/classsdr_1_1_combine_sink.html @@ -0,0 +1,391 @@ + + + + + + +libsdr: sdr::CombineSink< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::CombineSink< Scalar > Class Template Reference
+
+
+ +

A single sink of a Combine node. + More...

+ +

#include <combine.hh>

+
+Inheritance diagram for sdr::CombineSink< Scalar >:
+
+
+ + +sdr::Sink< Scalar > +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 CombineSink (Combine< Scalar > *combine, size_t index, RingBuffer< Scalar > &buffer)
 Constructor. More...
 
virtual ~CombineSink ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the sink. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Handles the given buffer. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
+ + + + + + + + + + +

+Protected Attributes

size_t _index
 The index of the sink within the combine node. More...
 
Combine< Scalar > * _parent
 A reference to the combine node. More...
 
RingBuffer< Scalar > & _buffer
 The input ring-buffer. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::CombineSink< Scalar >

+ +

A single sink of a Combine node.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
sdr::CombineSink< Scalar >::CombineSink (Combine< Scalar > * combine,
size_t index,
RingBuffer< Scalar > & buffer 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::CombineSink< Scalar >::~CombineSink ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::CombineSink< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the sink.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::CombineSink< Scalar >::process (const Buffer< Scalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Handles the given buffer.

+ +

Implements sdr::Sink< Scalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
RingBuffer<Scalar>& sdr::CombineSink< Scalar >::_buffer
+
+protected
+
+ +

The input ring-buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::CombineSink< Scalar >::_index
+
+protected
+
+ +

The index of the sink within the combine node.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Combine<Scalar>* sdr::CombineSink< Scalar >::_parent
+
+protected
+
+ +

A reference to the combine node.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_combine_sink.png b/classsdr_1_1_combine_sink.png new file mode 100644 index 0000000..2828e4e Binary files /dev/null and b/classsdr_1_1_combine_sink.png differ diff --git a/classsdr_1_1_config-members.html b/classsdr_1_1_config-members.html new file mode 100644 index 0000000..bcdc9e0 --- /dev/null +++ b/classsdr_1_1_config-members.html @@ -0,0 +1,148 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Config Member List
+
+
+ +

This is the complete list of members for sdr::Config, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_bufferSizesdr::Configprotected
_numBufferssdr::Configprotected
_sampleRatesdr::Configprotected
_typesdr::Configprotected
bufferSize() const sdr::Configinline
Config()sdr::Config
Config(Type type, double sampleRate, size_t bufferSize, size_t numBuffers)sdr::Config
Config(const Config &other)sdr::Config
hasBufferSize() const sdr::Configinline
hasNumBuffers() const sdr::Configinline
hasSampleRate() const sdr::Configinline
hasType() const sdr::Configinline
numBuffers() const sdr::Configinline
operator=(const Config &other)sdr::Config
operator==(const Config &other) const sdr::Config
sampleRate() const sdr::Configinline
setBufferSize(size_t size)sdr::Configinline
setNumBuffers(size_t N)sdr::Configinline
setSampleRate(double rate)sdr::Configinline
setType(Type type)sdr::Configinline
Type enum namesdr::Config
type() const sdr::Configinline
Type_cf32 enum valuesdr::Config
Type_cf64 enum valuesdr::Config
Type_cs16 enum valuesdr::Config
Type_cs8 enum valuesdr::Config
Type_cu16 enum valuesdr::Config
Type_cu8 enum valuesdr::Config
Type_f32 enum valuesdr::Config
Type_f64 enum valuesdr::Config
Type_s16 enum valuesdr::Config
Type_s8 enum valuesdr::Config
Type_u16 enum valuesdr::Config
Type_u8 enum valuesdr::Config
Type_UNDEFINED enum value (defined in sdr::Config)sdr::Config
typeId()sdr::Configinlinestatic
typeId()sdr::Configinline
typeId()sdr::Configinline
typeId()sdr::Configinline
typeId()sdr::Configinline
typeId()sdr::Configinline
typeId()sdr::Configinline
+ + + + diff --git a/classsdr_1_1_config.html b/classsdr_1_1_config.html new file mode 100644 index 0000000..142c123 --- /dev/null +++ b/classsdr_1_1_config.html @@ -0,0 +1,999 @@ + + + + + + +libsdr: sdr::Config Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Config Class Reference
+
+
+ +

A collection of configuration information that is send by a source to all connected sinks to propergate and check the configuration of the processing network. + More...

+ +

#include <node.hh>

+ + + + + +

+Public Types

enum  Type {
+  Type_UNDEFINED = 0, +Type_u8, +Type_s8, +Type_u16, +
+  Type_s16, +Type_f32, +Type_f64, +Type_cu8, +
+  Type_cs8, +Type_cu16, +Type_cs16, +Type_cf32, +
+  Type_cf64 +
+ }
 The type IDs. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Config ()
 Empty constructor, will result into an invalid configuration. More...
 
 Config (Type type, double sampleRate, size_t bufferSize, size_t numBuffers)
 Constructor. More...
 
 Config (const Config &other)
 Copy constructor. More...
 
const Configoperator= (const Config &other)
 Assignment operator. More...
 
bool operator== (const Config &other) const
 Coparison operator. More...
 
bool hasType () const
 If true, the configuration has a type. More...
 
Type type () const
 Returns the type. More...
 
void setType (Type type)
 Sets the type. More...
 
bool hasSampleRate () const
 If true, the configuration has a sample rate. More...
 
double sampleRate () const
 Returns the sample rate. More...
 
void setSampleRate (double rate)
 Sets the sample rate. More...
 
bool hasBufferSize () const
 If true, the configuration has a buffer size. More...
 
size_t bufferSize () const
 Returns the max. More...
 
void setBufferSize (size_t size)
 Sets the max. More...
 
bool hasNumBuffers () const
 If true, the configuration has a number of buffers. More...
 
size_t numBuffers () const
 Returns the max. More...
 
void setNumBuffers (size_t N)
 Sets the max. More...
 
template<>
Config::Type typeId ()
 Type-id for uint8. More...
 
template<>
Config::Type typeId ()
 Type-id for int8. More...
 
template<>
Config::Type typeId ()
 Type-id for uint16. More...
 
template<>
Config::Type typeId ()
 Type-id for int16. More...
 
template<>
Config::Type typeId ()
 Type-id for float. More...
 
template<>
Config::Type typeId ()
 Type-id for double. More...
 
+ + + + + +

+Static Public Member Functions

template<typename T >
static Type typeId ()
 Returns the type-id of the template type. More...
 
+ + + + + + + + + + + + + +

+Protected Attributes

Type _type
 Holds the type of the source. More...
 
double _sampleRate
 Holds the sample rate of the source. More...
 
size_t _bufferSize
 Holds the max. More...
 
size_t _numBuffers
 Holds the max. More...
 
+

Detailed Description

+

A collection of configuration information that is send by a source to all connected sinks to propergate and check the configuration of the processing network.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sdr::Config::Type
+
+ +

The type IDs.

+ + + + + + + + + + + + + +
Enumerator
Type_u8  +

Real unsigned 8b ints.

+
Type_s8  +

Real signed 8b ints.

+
Type_u16  +

Real unsigned 16b ints.

+
Type_s16  +

Real signed 16b ints.

+
Type_f32  +

Real 32b floats aka. "float".

+
Type_f64  +

Real 64b floats aka. "double".

+
Type_cu8  +

Complex (aka I/Q) type of unsigned 8b ints.

+
Type_cs8  +

Complex (aka I/Q) type of signed 8b ints.

+
Type_cu16  +

Complex (aka I/Q) type of unsigned 16b ints.

+
Type_cs16  +

Complex (aka I/Q) type of signed 16b ints.

+
Type_cf32  +

Complex (aka I/Q) type of 32bit floats aka. std::complex<float>.

+
Type_cf64  +

Complex (aka I/Q) type of 64bit floats aka. std::complex<double>.

+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
Config::Config ()
+
+ +

Empty constructor, will result into an invalid configuration.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Config::Config (Type type,
double sampleRate,
size_t bufferSize,
size_t numBuffers 
)
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + + + + +
Config::Config (const Configother)
+
+ +

Copy constructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
size_t sdr::Config::bufferSize () const
+
+inline
+
+ +

Returns the max.

+

buffer size.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sdr::Config::hasBufferSize () const
+
+inline
+
+ +

If true, the configuration has a buffer size.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sdr::Config::hasNumBuffers () const
+
+inline
+
+ +

If true, the configuration has a number of buffers.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sdr::Config::hasSampleRate () const
+
+inline
+
+ +

If true, the configuration has a sample rate.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sdr::Config::hasType () const
+
+inline
+
+ +

If true, the configuration has a type.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t sdr::Config::numBuffers () const
+
+inline
+
+ +

Returns the max.

+

number of buffers.

+ +
+
+ +
+
+ + + + + + + + +
const Config & Config::operator= (const Configother)
+
+ +

Assignment operator.

+ +
+
+ +
+
+ + + + + + + + +
bool Config::operator== (const Configother) const
+
+ +

Coparison operator.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
double sdr::Config::sampleRate () const
+
+inline
+
+ +

Returns the sample rate.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sdr::Config::setBufferSize (size_t size)
+
+inline
+
+ +

Sets the max.

+

buffer size.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sdr::Config::setNumBuffers (size_t N)
+
+inline
+
+ +

Sets the max.

+

number of buffers.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sdr::Config::setSampleRate (double rate)
+
+inline
+
+ +

Sets the sample rate.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sdr::Config::setType (Type type)
+
+inline
+
+ +

Sets the type.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Type sdr::Config::type () const
+
+inline
+
+ +

Returns the type.

+ +
+
+ +
+
+
+template<typename T >
+ + + + + +
+ + + + + + + +
static Type sdr::Config::typeId ()
+
+inlinestatic
+
+ +

Returns the type-id of the template type.

+ +
+
+ +
+
+
+template<>
+ + + + + +
+ + + + + + + +
Config::Type sdr::Config::typeId ()
+
+inline
+
+ +

Type-id for uint8.

+ +
+
+ +
+
+
+template<>
+ + + + + +
+ + + + + + + +
Config::Type sdr::Config::typeId ()
+
+inline
+
+ +

Type-id for int8.

+ +
+
+ +
+
+
+template<>
+ + + + + +
+ + + + + + + +
Config::Type sdr::Config::typeId ()
+
+inline
+
+ +

Type-id for uint16.

+ +
+
+ +
+
+
+template<>
+ + + + + +
+ + + + + + + +
Config::Type sdr::Config::typeId ()
+
+inline
+
+ +

Type-id for int16.

+ +
+
+ +
+
+
+template<>
+ + + + + +
+ + + + + + + +
Config::Type sdr::Config::typeId ()
+
+inline
+
+ +

Type-id for float.

+ +
+
+ +
+
+
+template<>
+ + + + + +
+ + + + + + + +
Config::Type sdr::Config::typeId ()
+
+inline
+
+ +

Type-id for double.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
size_t sdr::Config::_bufferSize
+
+protected
+
+ +

Holds the max.

+

buffer size of the source.

+ +
+
+ +
+
+ + + + + +
+ + + + +
size_t sdr::Config::_numBuffers
+
+protected
+
+ +

Holds the max.

+

number of buffers of the source.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double sdr::Config::_sampleRate
+
+protected
+
+ +

Holds the sample rate of the source.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Type sdr::Config::_type
+
+protected
+
+ +

Holds the type of the source.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_config_error-members.html b/classsdr_1_1_config_error-members.html new file mode 100644 index 0000000..771b112 --- /dev/null +++ b/classsdr_1_1_config_error-members.html @@ -0,0 +1,113 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::ConfigError Member List
+
+
+ +

This is the complete list of members for sdr::ConfigError, including all inherited members.

+ + + + + + + + +
ConfigError()sdr::ConfigErrorinline
ConfigError(const ConfigError &other)sdr::ConfigErrorinline
SDRError()sdr::SDRErrorinline
SDRError(const SDRError &other)sdr::SDRErrorinline
what() const sdr::SDRErrorinlinevirtual
~ConfigError()sdr::ConfigErrorinlinevirtual
~SDRError()sdr::SDRErrorinlinevirtual
+ + + + diff --git a/classsdr_1_1_config_error.html b/classsdr_1_1_config_error.html new file mode 100644 index 0000000..094e9df --- /dev/null +++ b/classsdr_1_1_config_error.html @@ -0,0 +1,234 @@ + + + + + + +libsdr: sdr::ConfigError Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::ConfigError Class Reference
+
+
+ +

The configuration error class. + More...

+ +

#include <exception.hh>

+
+Inheritance diagram for sdr::ConfigError:
+
+
+ + +sdr::SDRError + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ConfigError ()
 Constructor. More...
 
 ConfigError (const ConfigError &other)
 Copy constructor. More...
 
virtual ~ConfigError () throw ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::SDRError
 SDRError ()
 Constructor. More...
 
 SDRError (const SDRError &other)
 Copy constructor. More...
 
virtual ~SDRError () throw ()
 Destructor. More...
 
virtual const char * what () const throw ()
 Implements the std::exception interface. More...
 
+

Detailed Description

+

The configuration error class.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
sdr::ConfigError::ConfigError ()
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
sdr::ConfigError::ConfigError (const ConfigErrorother)
+
+inline
+
+ +

Copy constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + +
virtual sdr::ConfigError::~ConfigError ()
throw (
)
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_config_error.png b/classsdr_1_1_config_error.png new file mode 100644 index 0000000..e2867e9 Binary files /dev/null and b/classsdr_1_1_config_error.png differ diff --git a/classsdr_1_1_debug_dump-members.html b/classsdr_1_1_debug_dump-members.html new file mode 100644 index 0000000..54d93ee --- /dev/null +++ b/classsdr_1_1_debug_dump-members.html @@ -0,0 +1,116 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::DebugDump< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::DebugDump< Scalar >, including all inherited members.

+ + + + + + + + + + + +
_streamsdr::DebugDump< Scalar >protected
config(const Config &src_cfg)sdr::DebugDump< Scalar >inlinevirtual
DebugDump(std::ostream &stream=std::cerr)sdr::DebugDump< Scalar >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::DebugDump< Scalar >inlinevirtual
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
~DebugDump()sdr::DebugDump< Scalar >inlinevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
+ + + + diff --git a/classsdr_1_1_debug_dump.html b/classsdr_1_1_debug_dump.html new file mode 100644 index 0000000..635c078 --- /dev/null +++ b/classsdr_1_1_debug_dump.html @@ -0,0 +1,321 @@ + + + + + + +libsdr: sdr::DebugDump< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::DebugDump< Scalar > Class Template Reference
+
+
+ +

Dumps buffers in a human readable form. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::DebugDump< Scalar >:
+
+
+ + +sdr::Sink< Scalar > +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 DebugDump (std::ostream &stream=std::cerr)
 Constructor. More...
 
virtual ~DebugDump ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the dump-node. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Dumps the received buffer. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
+ + + + +

+Protected Attributes

std::ostream & _stream
 A reference to the output stream. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::DebugDump< Scalar >

+ +

Dumps buffers in a human readable form.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::DebugDump< Scalar >::DebugDump (std::ostream & stream = std::cerr)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::DebugDump< Scalar >::~DebugDump ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::DebugDump< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the dump-node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::DebugDump< Scalar >::process (const Buffer< Scalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Dumps the received buffer.

+ +

Implements sdr::Sink< Scalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::ostream& sdr::DebugDump< Scalar >::_stream
+
+protected
+
+ +

A reference to the output stream.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_debug_dump.png b/classsdr_1_1_debug_dump.png new file mode 100644 index 0000000..ffaebcb Binary files /dev/null and b/classsdr_1_1_debug_dump.png differ diff --git a/classsdr_1_1_debug_store-members.html b/classsdr_1_1_debug_store-members.html new file mode 100644 index 0000000..6acf65b --- /dev/null +++ b/classsdr_1_1_debug_store-members.html @@ -0,0 +1,119 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::DebugStore< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::DebugStore< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + +
_buffersdr::DebugStore< Scalar >
_viewsdr::DebugStore< Scalar >
buffer() const sdr::DebugStore< Scalar >inline
clear()sdr::DebugStore< Scalar >inline
config(const Config &src_cfg)sdr::DebugStore< Scalar >inlinevirtual
DebugStore()sdr::DebugStore< Scalar >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::DebugStore< Scalar >inlinevirtual
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
~DebugStore() (defined in sdr::DebugStore< Scalar >)sdr::DebugStore< Scalar >inlinevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
+ + + + diff --git a/classsdr_1_1_debug_store.html b/classsdr_1_1_debug_store.html new file mode 100644 index 0000000..da1b4d0 --- /dev/null +++ b/classsdr_1_1_debug_store.html @@ -0,0 +1,361 @@ + + + + + + +libsdr: sdr::DebugStore< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::DebugStore< Scalar > Class Template Reference
+
+
+ +

Keeps a copy of the last buffer received. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::DebugStore< Scalar >:
+
+
+ + +sdr::Sink< Scalar > +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 DebugStore ()
 Constrctor. More...
 
virtual void config (const Config &src_cfg)
 Configures the node. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Stores the given buffer. More...
 
const Buffer< Scalar > & buffer () const
 Retunrs a reference to the last received buffer. More...
 
void clear ()
 Clears the buffer. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
+ + + + + + + +

+Public Attributes

Buffer< Scalar > _buffer
 A pre-allocated buffer, that will hold the last data received. More...
 
Buffer< Scalar > _view
 A view to the last data received. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::DebugStore< Scalar >

+ +

Keeps a copy of the last buffer received.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
sdr::DebugStore< Scalar >::DebugStore ()
+
+inline
+
+ +

Constrctor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
const Buffer<Scalar>& sdr::DebugStore< Scalar >::buffer () const
+
+inline
+
+ +

Retunrs a reference to the last received buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
void sdr::DebugStore< Scalar >::clear ()
+
+inline
+
+ +

Clears the buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::DebugStore< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::DebugStore< Scalar >::process (const Buffer< Scalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Stores the given buffer.

+ +

Implements sdr::Sink< Scalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + +
Buffer<Scalar> sdr::DebugStore< Scalar >::_buffer
+
+ +

A pre-allocated buffer, that will hold the last data received.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + +
Buffer<Scalar> sdr::DebugStore< Scalar >::_view
+
+ +

A view to the last data received.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_debug_store.png b/classsdr_1_1_debug_store.png new file mode 100644 index 0000000..daae94d Binary files /dev/null and b/classsdr_1_1_debug_store.png differ diff --git a/classsdr_1_1_delegate-members.html b/classsdr_1_1_delegate-members.html new file mode 100644 index 0000000..c7dc6a1 --- /dev/null +++ b/classsdr_1_1_delegate-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Delegate< T > Member List
+
+
+ +

This is the complete list of members for sdr::Delegate< T >, including all inherited members.

+ + + + + + + +
_functionsdr::Delegate< T >protected
_instancesdr::Delegate< T >protected
Delegate(T *instance, void(T::*func)(void))sdr::Delegate< T >inline
instance()sdr::Delegate< T >inlinevirtual
operator()()sdr::Delegate< T >inlinevirtual
~Delegate()sdr::Delegate< T >inlinevirtual
+ + + + diff --git a/classsdr_1_1_delegate.html b/classsdr_1_1_delegate.html new file mode 100644 index 0000000..54ca61e --- /dev/null +++ b/classsdr_1_1_delegate.html @@ -0,0 +1,328 @@ + + + + + + +libsdr: sdr::Delegate< T > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Delegate< T > Class Template Reference
+
+
+ +

Specific delegate to a method of an object . + More...

+ +

#include <queue.hh>

+
+Inheritance diagram for sdr::Delegate< T >:
+
+
+ + +sdr::DelegateInterface + +
+ + + + + + + + + + + + + + +

+Public Member Functions

 Delegate (T *instance, void(T::*func)(void))
 Constructs a delegate to the method func of the instance instance. More...
 
virtual ~Delegate ()
 Destructor. More...
 
virtual void operator() ()
 Callback, simply calls the method of the instance given to the constructor. More...
 
virtual void * instance ()
 Returns the instance of the delegate. More...
 
+ + + + + + + +

+Protected Attributes

T * _instance
 The instance. More...
 
void(T::* _function )(void)
 The method. More...
 
+

Detailed Description

+

template<class T>
+class sdr::Delegate< T >

+ +

Specific delegate to a method of an object .

+

Constructor & Destructor Documentation

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::Delegate< T >::Delegate (T * instance,
void(T::*)(void) func 
)
+
+inline
+
+ +

Constructs a delegate to the method func of the instance instance.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
virtual sdr::Delegate< T >::~Delegate ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
virtual void* sdr::Delegate< T >::instance ()
+
+inlinevirtual
+
+ +

Returns the instance of the delegate.

+ +

Implements sdr::DelegateInterface.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + +
virtual void sdr::Delegate< T >::operator() ()
+
+inlinevirtual
+
+ +

Callback, simply calls the method of the instance given to the constructor.

+ +

Implements sdr::DelegateInterface.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class T >
+ + + + + +
+ + + + +
void(T::* sdr::Delegate< T >::_function)(void)
+
+protected
+
+ +

The method.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + +
T* sdr::Delegate< T >::_instance
+
+protected
+
+ +

The instance.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_delegate.png b/classsdr_1_1_delegate.png new file mode 100644 index 0000000..8ee01aa Binary files /dev/null and b/classsdr_1_1_delegate.png differ diff --git a/classsdr_1_1_delegate_interface-members.html b/classsdr_1_1_delegate_interface-members.html new file mode 100644 index 0000000..735410d --- /dev/null +++ b/classsdr_1_1_delegate_interface-members.html @@ -0,0 +1,108 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::DelegateInterface Member List
+
+
+ +

This is the complete list of members for sdr::DelegateInterface, including all inherited members.

+ + + +
instance()=0sdr::DelegateInterfacepure virtual
operator()()=0sdr::DelegateInterfacepure virtual
+ + + + diff --git a/classsdr_1_1_delegate_interface.html b/classsdr_1_1_delegate_interface.html new file mode 100644 index 0000000..4526260 --- /dev/null +++ b/classsdr_1_1_delegate_interface.html @@ -0,0 +1,190 @@ + + + + + + +libsdr: sdr::DelegateInterface Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::DelegateInterface Class Referenceabstract
+
+
+ +

Interface of a delegate. + More...

+ +

#include <queue.hh>

+
+Inheritance diagram for sdr::DelegateInterface:
+
+
+ + +sdr::Delegate< T > + +
+ + + + + + + + +

+Public Member Functions

virtual void operator() ()=0
 Call back interface. More...
 
virtual void * instance ()=0
 Returns the instance of the delegate. More...
 
+

Detailed Description

+

Interface of a delegate.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
virtual void* sdr::DelegateInterface::instance ()
+
+pure virtual
+
+ +

Returns the instance of the delegate.

+ +

Implemented in sdr::Delegate< T >.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual void sdr::DelegateInterface::operator() ()
+
+pure virtual
+
+ +

Call back interface.

+ +

Implemented in sdr::Delegate< T >.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_delegate_interface.png b/classsdr_1_1_delegate_interface.png new file mode 100644 index 0000000..32f0f49 Binary files /dev/null and b/classsdr_1_1_delegate_interface.png differ diff --git a/classsdr_1_1_f_f_t-members.html b/classsdr_1_1_f_f_t-members.html new file mode 100644 index 0000000..77c97e5 --- /dev/null +++ b/classsdr_1_1_f_f_t-members.html @@ -0,0 +1,111 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FFT Member List
+
+
+ +

This is the complete list of members for sdr::FFT, including all inherited members.

+ + + + + + +
BACKWARD enum value (defined in sdr::FFT)sdr::FFT
Direction enum namesdr::FFT
exec(const Buffer< std::complex< Scalar > > &in, const Buffer< std::complex< Scalar > > &out, FFT::Direction dir)sdr::FFTinlinestatic
exec(const Buffer< std::complex< Scalar > > &inplace, FFT::Direction dir)sdr::FFTinlinestatic
FORWARD enum value (defined in sdr::FFT)sdr::FFT
+ + + + diff --git a/classsdr_1_1_f_f_t.html b/classsdr_1_1_f_f_t.html new file mode 100644 index 0000000..8bca1da --- /dev/null +++ b/classsdr_1_1_f_f_t.html @@ -0,0 +1,235 @@ + + + + + + +libsdr: sdr::FFT Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FFT Class Reference
+
+
+ +

FFT module class, provides static methods to perfrom a FFT directly. + More...

+ +

#include <fftplan.hh>

+ + + + + +

+Public Types

enum  Direction { FORWARD, +BACKWARD + }
 Direction type. More...
 
+ + + + + + + + + +

+Static Public Member Functions

template<class Scalar >
static void exec (const Buffer< std::complex< Scalar > > &in, const Buffer< std::complex< Scalar > > &out, FFT::Direction dir)
 Performs a FFT transform. More...
 
template<class Scalar >
static void exec (const Buffer< std::complex< Scalar > > &inplace, FFT::Direction dir)
 Performs an in-place FFT transform. More...
 
+

Detailed Description

+

FFT module class, provides static methods to perfrom a FFT directly.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sdr::FFT::Direction
+
+ +

Direction type.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
static void sdr::FFT::exec (const Buffer< std::complex< Scalar > > & in,
const Buffer< std::complex< Scalar > > & out,
FFT::Direction dir 
)
+
+inlinestatic
+
+ +

Performs a FFT transform.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
static void sdr::FFT::exec (const Buffer< std::complex< Scalar > > & inplace,
FFT::Direction dir 
)
+
+inlinestatic
+
+ +

Performs an in-place FFT transform.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_f_t_plan-members.html b/classsdr_1_1_f_f_t_plan-members.html new file mode 100644 index 0000000..b1f6ca2 --- /dev/null +++ b/classsdr_1_1_f_f_t_plan-members.html @@ -0,0 +1,115 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FFTPlan< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::FFTPlan< Scalar >, including all inherited members.

+ + + + + + + + + + +
_calc(std::complex< Scalar > *a, std::complex< Scalar > *b, size_t N, size_t stride)sdr::FFTPlan< Scalar >inlineprotected
_insdr::FFTPlan< Scalar >protected
_lutsdr::FFTPlan< Scalar >protected
_Nsdr::FFTPlan< Scalar >protected
_outsdr::FFTPlan< Scalar >protected
FFTPlan(const Buffer< std::complex< Scalar > > &in, const Buffer< std::complex< Scalar > > &out, FFT::Direction dir)sdr::FFTPlan< Scalar >inline
operator()()sdr::FFTPlan< Scalar >inline
SScalar typedefsdr::FFTPlan< Scalar >
~FFTPlan()sdr::FFTPlan< Scalar >inlinevirtual
+ + + + diff --git a/classsdr_1_1_f_f_t_plan.html b/classsdr_1_1_f_f_t_plan.html new file mode 100644 index 0000000..1860220 --- /dev/null +++ b/classsdr_1_1_f_f_t_plan.html @@ -0,0 +1,427 @@ + + + + + + +libsdr: sdr::FFTPlan< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FFTPlan< Scalar > Class Template Reference
+
+
+ +

Trivial FFT implementation for buffer sizes of N=2**K. + More...

+ +

#include <fftplan_native.hh>

+ + + + + +

+Public Types

typedef Traits< Scalar >::SScalar SScalar
 The super-scalar of the input type. More...
 
+ + + + + + + + + + +

+Public Member Functions

 FFTPlan (const Buffer< std::complex< Scalar > > &in, const Buffer< std::complex< Scalar > > &out, FFT::Direction dir)
 Constructs a FFT plan for the input and output buffers. More...
 
virtual ~FFTPlan ()
 Destructor. More...
 
void operator() ()
 Performs the FFT. More...
 
+ + + + +

+Protected Member Functions

void _calc (std::complex< Scalar > *a, std::complex< Scalar > *b, size_t N, size_t stride)
 Actual FFT implmenetation. More...
 
+ + + + + + + + + + + + + +

+Protected Attributes

size_t _N
 FFT size, needs to be a power of 2. More...
 
Buffer< std::complex< Scalar > > _in
 The input buffer. More...
 
Buffer< std::complex< Scalar > > _out
 The output buffer. More...
 
Buffer< std::complex< SScalar > > _lut
 The exp(-i 2 pi k / N) look-up table. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::FFTPlan< Scalar >

+ +

Trivial FFT implementation for buffer sizes of N=2**K.

+

Member Typedef Documentation

+ +
+
+
+template<class Scalar>
+ + + + +
typedef Traits<Scalar >::SScalar sdr::FFTPlan< Scalar >::SScalar
+
+ +

The super-scalar of the input type.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
sdr::FFTPlan< Scalar >::FFTPlan (const Buffer< std::complex< Scalar > > & in,
const Buffer< std::complex< Scalar > > & out,
FFT::Direction dir 
)
+
+inline
+
+ +

Constructs a FFT plan for the input and output buffers.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
virtual sdr::FFTPlan< Scalar >::~FFTPlan ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
void sdr::FFTPlan< Scalar >::_calc (std::complex< Scalar > * a,
std::complex< Scalar > * b,
size_t N,
size_t stride 
)
+
+inlineprotected
+
+ +

Actual FFT implmenetation.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
void sdr::FFTPlan< Scalar >::operator() ()
+
+inline
+
+ +

Performs the FFT.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
Buffer< std::complex<Scalar> > sdr::FFTPlan< Scalar >::_in
+
+protected
+
+ +

The input buffer.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
Buffer< std::complex<SScalar> > sdr::FFTPlan< Scalar >::_lut
+
+protected
+
+ +

The exp(-i 2 pi k / N) look-up table.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
size_t sdr::FFTPlan< Scalar >::_N
+
+protected
+
+ +

FFT size, needs to be a power of 2.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
Buffer< std::complex<Scalar> > sdr::FFTPlan< Scalar >::_out
+
+protected
+
+ +

The output buffer.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_f_f_t_plan_3_01double_01_4-members.html b/classsdr_1_1_f_f_t_plan_3_01double_01_4-members.html new file mode 100644 index 0000000..acccc1b --- /dev/null +++ b/classsdr_1_1_f_f_t_plan_3_01double_01_4-members.html @@ -0,0 +1,113 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FFTPlan< double > Member List
+
+
+ +

This is the complete list of members for sdr::FFTPlan< double >, including all inherited members.

+ + + + + + + + +
_insdr::FFTPlan< double >protected
_outsdr::FFTPlan< double >protected
_plansdr::FFTPlan< double >protected
FFTPlan(const Buffer< std::complex< double > > &in, const Buffer< std::complex< double > > &out, FFT::Direction dir)sdr::FFTPlan< double >inline
FFTPlan(const Buffer< std::complex< double > > &inplace, FFT::Direction dir)sdr::FFTPlan< double >inline
operator()()sdr::FFTPlan< double >inline
~FFTPlan()sdr::FFTPlan< double >inlinevirtual
+ + + + diff --git a/classsdr_1_1_f_f_t_plan_3_01double_01_4.html b/classsdr_1_1_f_f_t_plan_3_01double_01_4.html new file mode 100644 index 0000000..bfd495b --- /dev/null +++ b/classsdr_1_1_f_f_t_plan_3_01double_01_4.html @@ -0,0 +1,345 @@ + + + + + + +libsdr: sdr::FFTPlan< double > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FFTPlan< double > Class Template Reference
+
+
+ +

Template specialization for a FFT transform on std::complex<double> values. + More...

+ +

#include <fftplan_fftw3.hh>

+ + + + + + + + + + + + + + +

+Public Member Functions

 FFTPlan (const Buffer< std::complex< double > > &in, const Buffer< std::complex< double > > &out, FFT::Direction dir)
 Constructor. More...
 
 FFTPlan (const Buffer< std::complex< double > > &inplace, FFT::Direction dir)
 Constructor. More...
 
virtual ~FFTPlan ()
 Destructor. More...
 
void operator() ()
 Performs the transformation. More...
 
+ + + + + + + + + + +

+Protected Attributes

Buffer< std::complex< double > > _in
 Input buffer. More...
 
Buffer< std::complex< double > > _out
 Output buffer. More...
 
fftw_plan _plan
 The FFT plan. More...
 
+

Detailed Description

+

template<>
+class sdr::FFTPlan< double >

+ +

Template specialization for a FFT transform on std::complex<double> values.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
sdr::FFTPlan< double >::FFTPlan (const Buffer< std::complex< double > > & in,
const Buffer< std::complex< double > > & out,
FFT::Direction dir 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::FFTPlan< double >::FFTPlan (const Buffer< std::complex< double > > & inplace,
FFT::Direction dir 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual sdr::FFTPlan< double >::~FFTPlan ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void sdr::FFTPlan< double >::operator() ()
+
+inline
+
+ +

Performs the transformation.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Buffer< std::complex<double> > sdr::FFTPlan< double >::_in
+
+protected
+
+ +

Input buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Buffer< std::complex<double> > sdr::FFTPlan< double >::_out
+
+protected
+
+ +

Output buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
fftw_plan sdr::FFTPlan< double >::_plan
+
+protected
+
+ +

The FFT plan.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_f_t_plan_3_01float_01_4-members.html b/classsdr_1_1_f_f_t_plan_3_01float_01_4-members.html new file mode 100644 index 0000000..3d906a1 --- /dev/null +++ b/classsdr_1_1_f_f_t_plan_3_01float_01_4-members.html @@ -0,0 +1,113 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FFTPlan< float > Member List
+
+
+ +

This is the complete list of members for sdr::FFTPlan< float >, including all inherited members.

+ + + + + + + + +
_insdr::FFTPlan< float >protected
_outsdr::FFTPlan< float >protected
_plansdr::FFTPlan< float >protected
FFTPlan(const Buffer< std::complex< float > > &in, const Buffer< std::complex< float > > &out, FFT::Direction dir)sdr::FFTPlan< float >inline
FFTPlan(const Buffer< std::complex< float > > &inplace, FFT::Direction dir)sdr::FFTPlan< float >inline
operator()()sdr::FFTPlan< float >inline
~FFTPlan()sdr::FFTPlan< float >inlinevirtual
+ + + + diff --git a/classsdr_1_1_f_f_t_plan_3_01float_01_4.html b/classsdr_1_1_f_f_t_plan_3_01float_01_4.html new file mode 100644 index 0000000..517af84 --- /dev/null +++ b/classsdr_1_1_f_f_t_plan_3_01float_01_4.html @@ -0,0 +1,345 @@ + + + + + + +libsdr: sdr::FFTPlan< float > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FFTPlan< float > Class Template Reference
+
+
+ +

Template specialization for a FFT transform on std::complex<float> values. + More...

+ +

#include <fftplan_fftw3.hh>

+ + + + + + + + + + + + + + +

+Public Member Functions

 FFTPlan (const Buffer< std::complex< float > > &in, const Buffer< std::complex< float > > &out, FFT::Direction dir)
 Constructor. More...
 
 FFTPlan (const Buffer< std::complex< float > > &inplace, FFT::Direction dir)
 Constructor. More...
 
virtual ~FFTPlan ()
 Destructor. More...
 
void operator() ()
 Performs the FFT transform. More...
 
+ + + + + + + + + + +

+Protected Attributes

Buffer< std::complex< float > > _in
 Input buffer. More...
 
Buffer< std::complex< float > > _out
 Output buffer. More...
 
fftwf_plan _plan
 The fft plan. More...
 
+

Detailed Description

+

template<>
+class sdr::FFTPlan< float >

+ +

Template specialization for a FFT transform on std::complex<float> values.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
sdr::FFTPlan< float >::FFTPlan (const Buffer< std::complex< float > > & in,
const Buffer< std::complex< float > > & out,
FFT::Direction dir 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::FFTPlan< float >::FFTPlan (const Buffer< std::complex< float > > & inplace,
FFT::Direction dir 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
virtual sdr::FFTPlan< float >::~FFTPlan ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void sdr::FFTPlan< float >::operator() ()
+
+inline
+
+ +

Performs the FFT transform.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Buffer< std::complex<float> > sdr::FFTPlan< float >::_in
+
+protected
+
+ +

Input buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Buffer< std::complex<float> > sdr::FFTPlan< float >::_out
+
+protected
+
+ +

Output buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
fftwf_plan sdr::FFTPlan< float >::_plan
+
+protected
+
+ +

The fft plan.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_i_r_band_pass-members.html b/classsdr_1_1_f_i_r_band_pass-members.html new file mode 100644 index 0000000..79a5e02 --- /dev/null +++ b/classsdr_1_1_f_i_r_band_pass-members.html @@ -0,0 +1,149 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FIRBandPass< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::FIRBandPass< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_alphasdr::FIRFilter< Scalar, FIRBandPassCoeffs >protected
_buffersdr::FIRFilter< Scalar, FIRBandPassCoeffs >protected
_configsdr::Sourceprotected
_enabledsdr::FIRFilter< Scalar, FIRBandPassCoeffs >protected
_eossdr::Sourceprotected
_Flsdr::FIRFilter< Scalar, FIRBandPassCoeffs >protected
_Fssdr::FIRFilter< Scalar, FIRBandPassCoeffs >protected
_Fusdr::FIRFilter< Scalar, FIRBandPassCoeffs >protected
_ordersdr::FIRFilter< Scalar, FIRBandPassCoeffs >protected
_process(const Buffer< Scalar > &in, const Buffer< Scalar > &out)sdr::FIRFilter< Scalar, FIRBandPassCoeffs >inlineprotected
_ringsdr::FIRFilter< Scalar, FIRBandPassCoeffs >protected
_ring_offsetsdr::FIRFilter< Scalar, FIRBandPassCoeffs >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::FIRFilter< Scalar, FIRBandPassCoeffs >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
enable(bool enable)sdr::FIRFilter< Scalar, FIRBandPassCoeffs >inline
enabled() constsdr::FIRFilter< Scalar, FIRBandPassCoeffs >inline
FIRBandPass(size_t order, double Fl, double Fu)sdr::FIRBandPass< Scalar >inline
FIRFilter(size_t order, double Fl, double Fu)sdr::FIRFilter< Scalar, FIRBandPassCoeffs >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
lowerFreq() constsdr::FIRFilter< Scalar, FIRBandPassCoeffs >inline
order() constsdr::FIRFilter< Scalar, FIRBandPassCoeffs >inline
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::FIRFilter< Scalar, FIRBandPassCoeffs >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
setLowerFreq(double Fl)sdr::FIRFilter< Scalar, FIRBandPassCoeffs >inline
setOrder(size_t order)sdr::FIRFilter< Scalar, FIRBandPassCoeffs >inlinevirtual
setUpperFreq(double Fu)sdr::FIRFilter< Scalar, FIRBandPassCoeffs >inline
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
uppertFreq() constsdr::FIRFilter< Scalar, FIRBandPassCoeffs >inline
~FIRBandPass()sdr::FIRBandPass< Scalar >inlinevirtual
~FIRFilter()sdr::FIRFilter< Scalar, FIRBandPassCoeffs >inlinevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_f_i_r_band_pass.html b/classsdr_1_1_f_i_r_band_pass.html new file mode 100644 index 0000000..55ede7e --- /dev/null +++ b/classsdr_1_1_f_i_r_band_pass.html @@ -0,0 +1,349 @@ + + + + + + +libsdr: sdr::FIRBandPass< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FIRBandPass< Scalar > Class Template Reference
+
+
+ +

Band-pass FIR filter specialization. + More...

+ +

#include <firfilter.hh>

+
+Inheritance diagram for sdr::FIRBandPass< Scalar >:
+
+
+ + +sdr::FIRFilter< Scalar, FIRBandPassCoeffs > +sdr::Sink< Scalar > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FIRBandPass (size_t order, double Fl, double Fu)
 Constructor. More...
 
virtual ~FIRBandPass ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::FIRFilter< Scalar, FIRBandPassCoeffs >
 FIRFilter (size_t order, double Fl, double Fu)
 Constructor. More...
 
virtual ~FIRFilter ()
 Destructor. More...
 
bool enabled () const
 Returns true if the filter is enabled. More...
 
void enable (bool enable)
 Enable/Disable the filter. More...
 
size_t order () const
 Returns the order of the filter. More...
 
virtual void setOrder (size_t order)
 Sets the order of the filter and updates the filter coefficients. More...
 
double lowerFreq () const
 Returns the lower edge frequency. More...
 
void setLowerFreq (double Fl)
 Sets the lower edge frequency. More...
 
double uppertFreq () const
 Returns the upper edge frequency. More...
 
void setUpperFreq (double Fu)
 Sets the upper edge frequency. More...
 
virtual void config (const Config &src_cfg)
 Configures the filter. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Performs the filtering. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::FIRFilter< Scalar, FIRBandPassCoeffs >
+void _process (const Buffer< Scalar > &in, const Buffer< Scalar > &out)
 performs the actual computation
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
- Protected Attributes inherited from sdr::FIRFilter< Scalar, FIRBandPassCoeffs >
bool _enabled
 If true, the filtering is enabled. More...
 
size_t _order
 The order of the filter. More...
 
double _Fl
 The lower edge frequency. More...
 
double _Fu
 The upper edge frequency. More...
 
double _Fs
 Current sample rate. More...
 
std::vector< double > _alpha
 The current filter coefficients. More...
 
Buffer< Scalar > _ring
 A "ring-buffer" used to perform the filtering. More...
 
size_t _ring_offset
 Offset of the "ring-buffer". More...
 
Buffer< Scalar > _buffer
 The output buffer, unused if filtering is performed in-place. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::FIRBandPass< Scalar >

+ +

Band-pass FIR filter specialization.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
sdr::FIRBandPass< Scalar >::FIRBandPass (size_t order,
double Fl,
double Fu 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::FIRBandPass< Scalar >::~FIRBandPass ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_i_r_band_pass.png b/classsdr_1_1_f_i_r_band_pass.png new file mode 100644 index 0000000..6969266 Binary files /dev/null and b/classsdr_1_1_f_i_r_band_pass.png differ diff --git a/classsdr_1_1_f_i_r_band_pass_coeffs-members.html b/classsdr_1_1_f_i_r_band_pass_coeffs-members.html new file mode 100644 index 0000000..05294ea --- /dev/null +++ b/classsdr_1_1_f_i_r_band_pass_coeffs-members.html @@ -0,0 +1,107 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FIRBandPassCoeffs Member List
+
+
+ +

This is the complete list of members for sdr::FIRBandPassCoeffs, including all inherited members.

+ + +
coeffs(std::vector< double > &alpha, double Fl, double Fu, double Fs)sdr::FIRBandPassCoeffsinlinestatic
+ + + + diff --git a/classsdr_1_1_f_i_r_band_pass_coeffs.html b/classsdr_1_1_f_i_r_band_pass_coeffs.html new file mode 100644 index 0000000..2daaab0 --- /dev/null +++ b/classsdr_1_1_f_i_r_band_pass_coeffs.html @@ -0,0 +1,172 @@ + + + + + + +libsdr: sdr::FIRBandPassCoeffs Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FIRBandPassCoeffs Class Reference
+
+
+ +

Implements the calculation of the filter coefficients for the use in the FIRFilter template class. + More...

+ +

#include <firfilter.hh>

+ + + + + +

+Static Public Member Functions

static void coeffs (std::vector< double > &alpha, double Fl, double Fu, double Fs)
 Calculates the filter coefficients. More...
 
+

Detailed Description

+

Implements the calculation of the filter coefficients for the use in the FIRFilter template class.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static void sdr::FIRBandPassCoeffs::coeffs (std::vector< double > & alpha,
double Fl,
double Fu,
double Fs 
)
+
+inlinestatic
+
+ +

Calculates the filter coefficients.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_i_r_band_stop-members.html b/classsdr_1_1_f_i_r_band_stop-members.html new file mode 100644 index 0000000..005a2ef --- /dev/null +++ b/classsdr_1_1_f_i_r_band_stop-members.html @@ -0,0 +1,149 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FIRBandStop< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::FIRBandStop< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_alphasdr::FIRFilter< Scalar, FIRBandStopCoeffs >protected
_buffersdr::FIRFilter< Scalar, FIRBandStopCoeffs >protected
_configsdr::Sourceprotected
_enabledsdr::FIRFilter< Scalar, FIRBandStopCoeffs >protected
_eossdr::Sourceprotected
_Flsdr::FIRFilter< Scalar, FIRBandStopCoeffs >protected
_Fssdr::FIRFilter< Scalar, FIRBandStopCoeffs >protected
_Fusdr::FIRFilter< Scalar, FIRBandStopCoeffs >protected
_ordersdr::FIRFilter< Scalar, FIRBandStopCoeffs >protected
_process(const Buffer< Scalar > &in, const Buffer< Scalar > &out)sdr::FIRFilter< Scalar, FIRBandStopCoeffs >inlineprotected
_ringsdr::FIRFilter< Scalar, FIRBandStopCoeffs >protected
_ring_offsetsdr::FIRFilter< Scalar, FIRBandStopCoeffs >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::FIRFilter< Scalar, FIRBandStopCoeffs >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
enable(bool enable)sdr::FIRFilter< Scalar, FIRBandStopCoeffs >inline
enabled() constsdr::FIRFilter< Scalar, FIRBandStopCoeffs >inline
FIRBandStop(size_t order, double Fl, double Fu)sdr::FIRBandStop< Scalar >inline
FIRFilter(size_t order, double Fl, double Fu)sdr::FIRFilter< Scalar, FIRBandStopCoeffs >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
lowerFreq() constsdr::FIRFilter< Scalar, FIRBandStopCoeffs >inline
order() constsdr::FIRFilter< Scalar, FIRBandStopCoeffs >inline
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::FIRFilter< Scalar, FIRBandStopCoeffs >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
setLowerFreq(double Fl)sdr::FIRFilter< Scalar, FIRBandStopCoeffs >inline
setOrder(size_t order)sdr::FIRFilter< Scalar, FIRBandStopCoeffs >inlinevirtual
setUpperFreq(double Fu)sdr::FIRFilter< Scalar, FIRBandStopCoeffs >inline
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
uppertFreq() constsdr::FIRFilter< Scalar, FIRBandStopCoeffs >inline
~FIRBandStop()sdr::FIRBandStop< Scalar >inlinevirtual
~FIRFilter()sdr::FIRFilter< Scalar, FIRBandStopCoeffs >inlinevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_f_i_r_band_stop.html b/classsdr_1_1_f_i_r_band_stop.html new file mode 100644 index 0000000..a550d21 --- /dev/null +++ b/classsdr_1_1_f_i_r_band_stop.html @@ -0,0 +1,349 @@ + + + + + + +libsdr: sdr::FIRBandStop< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FIRBandStop< Scalar > Class Template Reference
+
+
+ +

Band-stop FIR filter specialization. + More...

+ +

#include <firfilter.hh>

+
+Inheritance diagram for sdr::FIRBandStop< Scalar >:
+
+
+ + +sdr::FIRFilter< Scalar, FIRBandStopCoeffs > +sdr::Sink< Scalar > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FIRBandStop (size_t order, double Fl, double Fu)
 Constructor. More...
 
virtual ~FIRBandStop ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::FIRFilter< Scalar, FIRBandStopCoeffs >
 FIRFilter (size_t order, double Fl, double Fu)
 Constructor. More...
 
virtual ~FIRFilter ()
 Destructor. More...
 
bool enabled () const
 Returns true if the filter is enabled. More...
 
void enable (bool enable)
 Enable/Disable the filter. More...
 
size_t order () const
 Returns the order of the filter. More...
 
virtual void setOrder (size_t order)
 Sets the order of the filter and updates the filter coefficients. More...
 
double lowerFreq () const
 Returns the lower edge frequency. More...
 
void setLowerFreq (double Fl)
 Sets the lower edge frequency. More...
 
double uppertFreq () const
 Returns the upper edge frequency. More...
 
void setUpperFreq (double Fu)
 Sets the upper edge frequency. More...
 
virtual void config (const Config &src_cfg)
 Configures the filter. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Performs the filtering. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::FIRFilter< Scalar, FIRBandStopCoeffs >
+void _process (const Buffer< Scalar > &in, const Buffer< Scalar > &out)
 performs the actual computation
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
- Protected Attributes inherited from sdr::FIRFilter< Scalar, FIRBandStopCoeffs >
bool _enabled
 If true, the filtering is enabled. More...
 
size_t _order
 The order of the filter. More...
 
double _Fl
 The lower edge frequency. More...
 
double _Fu
 The upper edge frequency. More...
 
double _Fs
 Current sample rate. More...
 
std::vector< double > _alpha
 The current filter coefficients. More...
 
Buffer< Scalar > _ring
 A "ring-buffer" used to perform the filtering. More...
 
size_t _ring_offset
 Offset of the "ring-buffer". More...
 
Buffer< Scalar > _buffer
 The output buffer, unused if filtering is performed in-place. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::FIRBandStop< Scalar >

+ +

Band-stop FIR filter specialization.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
sdr::FIRBandStop< Scalar >::FIRBandStop (size_t order,
double Fl,
double Fu 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::FIRBandStop< Scalar >::~FIRBandStop ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_i_r_band_stop.png b/classsdr_1_1_f_i_r_band_stop.png new file mode 100644 index 0000000..e7833a0 Binary files /dev/null and b/classsdr_1_1_f_i_r_band_stop.png differ diff --git a/classsdr_1_1_f_i_r_band_stop_coeffs-members.html b/classsdr_1_1_f_i_r_band_stop_coeffs-members.html new file mode 100644 index 0000000..4b19aeb --- /dev/null +++ b/classsdr_1_1_f_i_r_band_stop_coeffs-members.html @@ -0,0 +1,107 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FIRBandStopCoeffs Member List
+
+
+ +

This is the complete list of members for sdr::FIRBandStopCoeffs, including all inherited members.

+ + +
coeffs(std::vector< double > &alpha, double Fl, double Fu, double Fs)sdr::FIRBandStopCoeffsinlinestatic
+ + + + diff --git a/classsdr_1_1_f_i_r_band_stop_coeffs.html b/classsdr_1_1_f_i_r_band_stop_coeffs.html new file mode 100644 index 0000000..cb11300 --- /dev/null +++ b/classsdr_1_1_f_i_r_band_stop_coeffs.html @@ -0,0 +1,172 @@ + + + + + + +libsdr: sdr::FIRBandStopCoeffs Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FIRBandStopCoeffs Class Reference
+
+
+ +

Implements the calculation of the filter coefficients for the use in the FIRFilter template class. + More...

+ +

#include <firfilter.hh>

+ + + + + +

+Static Public Member Functions

static void coeffs (std::vector< double > &alpha, double Fl, double Fu, double Fs)
 Calculates the filter coefficients. More...
 
+

Detailed Description

+

Implements the calculation of the filter coefficients for the use in the FIRFilter template class.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static void sdr::FIRBandStopCoeffs::coeffs (std::vector< double > & alpha,
double Fl,
double Fu,
double Fs 
)
+
+inlinestatic
+
+ +

Calculates the filter coefficients.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_i_r_filter-members.html b/classsdr_1_1_f_i_r_filter-members.html new file mode 100644 index 0000000..bcbe3e2 --- /dev/null +++ b/classsdr_1_1_f_i_r_filter-members.html @@ -0,0 +1,147 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FIRFilter< Scalar, FilterCoeffs > Member List
+
+
+ +

This is the complete list of members for sdr::FIRFilter< Scalar, FilterCoeffs >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_alphasdr::FIRFilter< Scalar, FilterCoeffs >protected
_buffersdr::FIRFilter< Scalar, FilterCoeffs >protected
_configsdr::Sourceprotected
_enabledsdr::FIRFilter< Scalar, FilterCoeffs >protected
_eossdr::Sourceprotected
_Flsdr::FIRFilter< Scalar, FilterCoeffs >protected
_Fssdr::FIRFilter< Scalar, FilterCoeffs >protected
_Fusdr::FIRFilter< Scalar, FilterCoeffs >protected
_ordersdr::FIRFilter< Scalar, FilterCoeffs >protected
_process(const Buffer< Scalar > &in, const Buffer< Scalar > &out)sdr::FIRFilter< Scalar, FilterCoeffs >inlineprotected
_ringsdr::FIRFilter< Scalar, FilterCoeffs >protected
_ring_offsetsdr::FIRFilter< Scalar, FilterCoeffs >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::FIRFilter< Scalar, FilterCoeffs >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
enable(bool enable)sdr::FIRFilter< Scalar, FilterCoeffs >inline
enabled() const sdr::FIRFilter< Scalar, FilterCoeffs >inline
FIRFilter(size_t order, double Fl, double Fu)sdr::FIRFilter< Scalar, FilterCoeffs >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
lowerFreq() const sdr::FIRFilter< Scalar, FilterCoeffs >inline
order() const sdr::FIRFilter< Scalar, FilterCoeffs >inline
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::FIRFilter< Scalar, FilterCoeffs >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
setLowerFreq(double Fl)sdr::FIRFilter< Scalar, FilterCoeffs >inline
setOrder(size_t order)sdr::FIRFilter< Scalar, FilterCoeffs >inlinevirtual
setUpperFreq(double Fu)sdr::FIRFilter< Scalar, FilterCoeffs >inline
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
uppertFreq() const sdr::FIRFilter< Scalar, FilterCoeffs >inline
~FIRFilter()sdr::FIRFilter< Scalar, FilterCoeffs >inlinevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_f_i_r_filter.html b/classsdr_1_1_f_i_r_filter.html new file mode 100644 index 0000000..8d30cbd --- /dev/null +++ b/classsdr_1_1_f_i_r_filter.html @@ -0,0 +1,853 @@ + + + + + + +libsdr: sdr::FIRFilter< Scalar, FilterCoeffs > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FIRFilter< Scalar, FilterCoeffs > Class Template Reference
+
+
+ +

Generic FIR filter class. + More...

+ +

#include <firfilter.hh>

+
+Inheritance diagram for sdr::FIRFilter< Scalar, FilterCoeffs >:
+
+
+ + +sdr::Sink< Scalar > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FIRFilter (size_t order, double Fl, double Fu)
 Constructor. More...
 
virtual ~FIRFilter ()
 Destructor. More...
 
bool enabled () const
 Returns true if the filter is enabled. More...
 
void enable (bool enable)
 Enable/Disable the filter. More...
 
size_t order () const
 Returns the order of the filter. More...
 
virtual void setOrder (size_t order)
 Sets the order of the filter and updates the filter coefficients. More...
 
double lowerFreq () const
 Returns the lower edge frequency. More...
 
void setLowerFreq (double Fl)
 Sets the lower edge frequency. More...
 
double uppertFreq () const
 Returns the upper edge frequency. More...
 
void setUpperFreq (double Fu)
 Sets the upper edge frequency. More...
 
virtual void config (const Config &src_cfg)
 Configures the filter. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Performs the filtering. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + +

+Protected Member Functions

+void _process (const Buffer< Scalar > &in, const Buffer< Scalar > &out)
 performs the actual computation
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

bool _enabled
 If true, the filtering is enabled. More...
 
size_t _order
 The order of the filter. More...
 
double _Fl
 The lower edge frequency. More...
 
double _Fu
 The upper edge frequency. More...
 
double _Fs
 Current sample rate. More...
 
std::vector< double > _alpha
 The current filter coefficients. More...
 
Buffer< Scalar > _ring
 A "ring-buffer" used to perform the filtering. More...
 
size_t _ring_offset
 Offset of the "ring-buffer". More...
 
Buffer< Scalar > _buffer
 The output buffer, unused if filtering is performed in-place. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar, class FilterCoeffs>
+class sdr::FIRFilter< Scalar, FilterCoeffs >

+ +

Generic FIR filter class.

+

Use one of the specializations below for a low-, high- or band-pass filter.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
sdr::FIRFilter< Scalar, FilterCoeffs >::FIRFilter (size_t order,
double Fl,
double Fu 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + + + + +
virtual sdr::FIRFilter< Scalar, FilterCoeffs >::~FIRFilter ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + + + + + +
virtual void sdr::FIRFilter< Scalar, FilterCoeffs >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the filter.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + + + + + +
void sdr::FIRFilter< Scalar, FilterCoeffs >::enable (bool enable)
+
+inline
+
+ +

Enable/Disable the filter.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + + + + +
bool sdr::FIRFilter< Scalar, FilterCoeffs >::enabled () const
+
+inline
+
+ +

Returns true if the filter is enabled.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + + + + +
double sdr::FIRFilter< Scalar, FilterCoeffs >::lowerFreq () const
+
+inline
+
+ +

Returns the lower edge frequency.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + + + + +
size_t sdr::FIRFilter< Scalar, FilterCoeffs >::order () const
+
+inline
+
+ +

Returns the order of the filter.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::FIRFilter< Scalar, FilterCoeffs >::process (const Buffer< Scalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Performs the filtering.

+ +

Implements sdr::Sink< Scalar >.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + + + + + +
void sdr::FIRFilter< Scalar, FilterCoeffs >::setLowerFreq (double Fl)
+
+inline
+
+ +

Sets the lower edge frequency.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + + + + + +
virtual void sdr::FIRFilter< Scalar, FilterCoeffs >::setOrder (size_t order)
+
+inlinevirtual
+
+ +

Sets the order of the filter and updates the filter coefficients.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + + + + + +
void sdr::FIRFilter< Scalar, FilterCoeffs >::setUpperFreq (double Fu)
+
+inline
+
+ +

Sets the upper edge frequency.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + + + + +
double sdr::FIRFilter< Scalar, FilterCoeffs >::uppertFreq () const
+
+inline
+
+ +

Returns the upper edge frequency.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + +
std::vector<double> sdr::FIRFilter< Scalar, FilterCoeffs >::_alpha
+
+protected
+
+ +

The current filter coefficients.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::FIRFilter< Scalar, FilterCoeffs >::_buffer
+
+protected
+
+ +

The output buffer, unused if filtering is performed in-place.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + +
bool sdr::FIRFilter< Scalar, FilterCoeffs >::_enabled
+
+protected
+
+ +

If true, the filtering is enabled.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + +
double sdr::FIRFilter< Scalar, FilterCoeffs >::_Fl
+
+protected
+
+ +

The lower edge frequency.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + +
double sdr::FIRFilter< Scalar, FilterCoeffs >::_Fs
+
+protected
+
+ +

Current sample rate.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + +
double sdr::FIRFilter< Scalar, FilterCoeffs >::_Fu
+
+protected
+
+ +

The upper edge frequency.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + +
size_t sdr::FIRFilter< Scalar, FilterCoeffs >::_order
+
+protected
+
+ +

The order of the filter.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::FIRFilter< Scalar, FilterCoeffs >::_ring
+
+protected
+
+ +

A "ring-buffer" used to perform the filtering.

+ +
+
+ +
+
+
+template<class Scalar, class FilterCoeffs>
+ + + + + +
+ + + + +
size_t sdr::FIRFilter< Scalar, FilterCoeffs >::_ring_offset
+
+protected
+
+ +

Offset of the "ring-buffer".

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_i_r_filter.png b/classsdr_1_1_f_i_r_filter.png new file mode 100644 index 0000000..78bef0d Binary files /dev/null and b/classsdr_1_1_f_i_r_filter.png differ diff --git a/classsdr_1_1_f_i_r_high_pass-members.html b/classsdr_1_1_f_i_r_high_pass-members.html new file mode 100644 index 0000000..ecc307c --- /dev/null +++ b/classsdr_1_1_f_i_r_high_pass-members.html @@ -0,0 +1,151 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FIRHighPass< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::FIRHighPass< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_alphasdr::FIRFilter< Scalar, FIRHighPassCoeffs >protected
_buffersdr::FIRFilter< Scalar, FIRHighPassCoeffs >protected
_configsdr::Sourceprotected
_enabledsdr::FIRFilter< Scalar, FIRHighPassCoeffs >protected
_eossdr::Sourceprotected
_Flsdr::FIRFilter< Scalar, FIRHighPassCoeffs >protected
_Fssdr::FIRFilter< Scalar, FIRHighPassCoeffs >protected
_Fusdr::FIRFilter< Scalar, FIRHighPassCoeffs >protected
_ordersdr::FIRFilter< Scalar, FIRHighPassCoeffs >protected
_process(const Buffer< Scalar > &in, const Buffer< Scalar > &out)sdr::FIRFilter< Scalar, FIRHighPassCoeffs >inlineprotected
_ringsdr::FIRFilter< Scalar, FIRHighPassCoeffs >protected
_ring_offsetsdr::FIRFilter< Scalar, FIRHighPassCoeffs >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::FIRFilter< Scalar, FIRHighPassCoeffs >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
enable(bool enable)sdr::FIRFilter< Scalar, FIRHighPassCoeffs >inline
enabled() constsdr::FIRFilter< Scalar, FIRHighPassCoeffs >inline
FIRFilter(size_t order, double Fl, double Fu)sdr::FIRFilter< Scalar, FIRHighPassCoeffs >inline
FIRHighPass(size_t order, double Fc)sdr::FIRHighPass< Scalar >inline
freq() const sdr::FIRHighPass< Scalar >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
lowerFreq() constsdr::FIRFilter< Scalar, FIRHighPassCoeffs >inline
order() constsdr::FIRFilter< Scalar, FIRHighPassCoeffs >inline
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::FIRFilter< Scalar, FIRHighPassCoeffs >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
setFreq(double freq)sdr::FIRHighPass< Scalar >inline
setLowerFreq(double Fl)sdr::FIRFilter< Scalar, FIRHighPassCoeffs >inline
setOrder(size_t order)sdr::FIRFilter< Scalar, FIRHighPassCoeffs >inlinevirtual
setUpperFreq(double Fu)sdr::FIRFilter< Scalar, FIRHighPassCoeffs >inline
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
uppertFreq() constsdr::FIRFilter< Scalar, FIRHighPassCoeffs >inline
~FIRFilter()sdr::FIRFilter< Scalar, FIRHighPassCoeffs >inlinevirtual
~FIRHighPass()sdr::FIRHighPass< Scalar >inlinevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_f_i_r_high_pass.html b/classsdr_1_1_f_i_r_high_pass.html new file mode 100644 index 0000000..74ef0b1 --- /dev/null +++ b/classsdr_1_1_f_i_r_high_pass.html @@ -0,0 +1,405 @@ + + + + + + +libsdr: sdr::FIRHighPass< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FIRHighPass< Scalar > Class Template Reference
+
+
+ +

High-pass FIR filter specialization. + More...

+ +

#include <firfilter.hh>

+
+Inheritance diagram for sdr::FIRHighPass< Scalar >:
+
+
+ + +sdr::FIRFilter< Scalar, FIRHighPassCoeffs > +sdr::Sink< Scalar > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FIRHighPass (size_t order, double Fc)
 Constructor. More...
 
virtual ~FIRHighPass ()
 Destructor. More...
 
double freq () const
 Returns the filter frequency. More...
 
void setFreq (double freq)
 Sets the filter frequency. More...
 
- Public Member Functions inherited from sdr::FIRFilter< Scalar, FIRHighPassCoeffs >
 FIRFilter (size_t order, double Fl, double Fu)
 Constructor. More...
 
virtual ~FIRFilter ()
 Destructor. More...
 
bool enabled () const
 Returns true if the filter is enabled. More...
 
void enable (bool enable)
 Enable/Disable the filter. More...
 
size_t order () const
 Returns the order of the filter. More...
 
virtual void setOrder (size_t order)
 Sets the order of the filter and updates the filter coefficients. More...
 
double lowerFreq () const
 Returns the lower edge frequency. More...
 
void setLowerFreq (double Fl)
 Sets the lower edge frequency. More...
 
double uppertFreq () const
 Returns the upper edge frequency. More...
 
void setUpperFreq (double Fu)
 Sets the upper edge frequency. More...
 
virtual void config (const Config &src_cfg)
 Configures the filter. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Performs the filtering. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::FIRFilter< Scalar, FIRHighPassCoeffs >
+void _process (const Buffer< Scalar > &in, const Buffer< Scalar > &out)
 performs the actual computation
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
- Protected Attributes inherited from sdr::FIRFilter< Scalar, FIRHighPassCoeffs >
bool _enabled
 If true, the filtering is enabled. More...
 
size_t _order
 The order of the filter. More...
 
double _Fl
 The lower edge frequency. More...
 
double _Fu
 The upper edge frequency. More...
 
double _Fs
 Current sample rate. More...
 
std::vector< double > _alpha
 The current filter coefficients. More...
 
Buffer< Scalar > _ring
 A "ring-buffer" used to perform the filtering. More...
 
size_t _ring_offset
 Offset of the "ring-buffer". More...
 
Buffer< Scalar > _buffer
 The output buffer, unused if filtering is performed in-place. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::FIRHighPass< Scalar >

+ +

High-pass FIR filter specialization.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::FIRHighPass< Scalar >::FIRHighPass (size_t order,
double Fc 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::FIRHighPass< Scalar >::~FIRHighPass ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
double sdr::FIRHighPass< Scalar >::freq () const
+
+inline
+
+ +

Returns the filter frequency.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::FIRHighPass< Scalar >::setFreq (double freq)
+
+inline
+
+ +

Sets the filter frequency.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_i_r_high_pass.png b/classsdr_1_1_f_i_r_high_pass.png new file mode 100644 index 0000000..8b10064 Binary files /dev/null and b/classsdr_1_1_f_i_r_high_pass.png differ diff --git a/classsdr_1_1_f_i_r_high_pass_coeffs-members.html b/classsdr_1_1_f_i_r_high_pass_coeffs-members.html new file mode 100644 index 0000000..db2faaf --- /dev/null +++ b/classsdr_1_1_f_i_r_high_pass_coeffs-members.html @@ -0,0 +1,107 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FIRHighPassCoeffs Member List
+
+
+ +

This is the complete list of members for sdr::FIRHighPassCoeffs, including all inherited members.

+ + +
coeffs(std::vector< double > &alpha, double Fl, double Fu, double Fs)sdr::FIRHighPassCoeffsinlinestatic
+ + + + diff --git a/classsdr_1_1_f_i_r_high_pass_coeffs.html b/classsdr_1_1_f_i_r_high_pass_coeffs.html new file mode 100644 index 0000000..eb87cef --- /dev/null +++ b/classsdr_1_1_f_i_r_high_pass_coeffs.html @@ -0,0 +1,172 @@ + + + + + + +libsdr: sdr::FIRHighPassCoeffs Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FIRHighPassCoeffs Class Reference
+
+
+ +

Implements the calculation of the filter coefficients for the use in the FIRFilter template class. + More...

+ +

#include <firfilter.hh>

+ + + + + +

+Static Public Member Functions

static void coeffs (std::vector< double > &alpha, double Fl, double Fu, double Fs)
 Calculates the filter coefficients. More...
 
+

Detailed Description

+

Implements the calculation of the filter coefficients for the use in the FIRFilter template class.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static void sdr::FIRHighPassCoeffs::coeffs (std::vector< double > & alpha,
double Fl,
double Fu,
double Fs 
)
+
+inlinestatic
+
+ +

Calculates the filter coefficients.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_i_r_low_pass-members.html b/classsdr_1_1_f_i_r_low_pass-members.html new file mode 100644 index 0000000..c7d7296 --- /dev/null +++ b/classsdr_1_1_f_i_r_low_pass-members.html @@ -0,0 +1,151 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FIRLowPass< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::FIRLowPass< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_alphasdr::FIRFilter< Scalar, FIRLowPassCoeffs >protected
_buffersdr::FIRFilter< Scalar, FIRLowPassCoeffs >protected
_configsdr::Sourceprotected
_enabledsdr::FIRFilter< Scalar, FIRLowPassCoeffs >protected
_eossdr::Sourceprotected
_Flsdr::FIRFilter< Scalar, FIRLowPassCoeffs >protected
_Fssdr::FIRFilter< Scalar, FIRLowPassCoeffs >protected
_Fusdr::FIRFilter< Scalar, FIRLowPassCoeffs >protected
_ordersdr::FIRFilter< Scalar, FIRLowPassCoeffs >protected
_process(const Buffer< Scalar > &in, const Buffer< Scalar > &out)sdr::FIRFilter< Scalar, FIRLowPassCoeffs >inlineprotected
_ringsdr::FIRFilter< Scalar, FIRLowPassCoeffs >protected
_ring_offsetsdr::FIRFilter< Scalar, FIRLowPassCoeffs >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::FIRFilter< Scalar, FIRLowPassCoeffs >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
enable(bool enable)sdr::FIRFilter< Scalar, FIRLowPassCoeffs >inline
enabled() constsdr::FIRFilter< Scalar, FIRLowPassCoeffs >inline
FIRFilter(size_t order, double Fl, double Fu)sdr::FIRFilter< Scalar, FIRLowPassCoeffs >inline
FIRLowPass(size_t order, double Fc)sdr::FIRLowPass< Scalar >inline
freq() const sdr::FIRLowPass< Scalar >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
lowerFreq() constsdr::FIRFilter< Scalar, FIRLowPassCoeffs >inline
order() constsdr::FIRFilter< Scalar, FIRLowPassCoeffs >inline
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::FIRFilter< Scalar, FIRLowPassCoeffs >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
setFreq(double freq)sdr::FIRLowPass< Scalar >inline
setLowerFreq(double Fl)sdr::FIRFilter< Scalar, FIRLowPassCoeffs >inline
setOrder(size_t order)sdr::FIRFilter< Scalar, FIRLowPassCoeffs >inlinevirtual
setUpperFreq(double Fu)sdr::FIRFilter< Scalar, FIRLowPassCoeffs >inline
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
uppertFreq() constsdr::FIRFilter< Scalar, FIRLowPassCoeffs >inline
~FIRFilter()sdr::FIRFilter< Scalar, FIRLowPassCoeffs >inlinevirtual
~FIRLowPass()sdr::FIRLowPass< Scalar >inlinevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_f_i_r_low_pass.html b/classsdr_1_1_f_i_r_low_pass.html new file mode 100644 index 0000000..53c45c5 --- /dev/null +++ b/classsdr_1_1_f_i_r_low_pass.html @@ -0,0 +1,405 @@ + + + + + + +libsdr: sdr::FIRLowPass< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FIRLowPass< Scalar > Class Template Reference
+
+
+ +

Low-pass FIR filter specialization. + More...

+ +

#include <firfilter.hh>

+
+Inheritance diagram for sdr::FIRLowPass< Scalar >:
+
+
+ + +sdr::FIRFilter< Scalar, FIRLowPassCoeffs > +sdr::Sink< Scalar > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FIRLowPass (size_t order, double Fc)
 Constructor. More...
 
virtual ~FIRLowPass ()
 Destructor. More...
 
double freq () const
 Returns the filter frequency. More...
 
void setFreq (double freq)
 Sets the filter frequency. More...
 
- Public Member Functions inherited from sdr::FIRFilter< Scalar, FIRLowPassCoeffs >
 FIRFilter (size_t order, double Fl, double Fu)
 Constructor. More...
 
virtual ~FIRFilter ()
 Destructor. More...
 
bool enabled () const
 Returns true if the filter is enabled. More...
 
void enable (bool enable)
 Enable/Disable the filter. More...
 
size_t order () const
 Returns the order of the filter. More...
 
virtual void setOrder (size_t order)
 Sets the order of the filter and updates the filter coefficients. More...
 
double lowerFreq () const
 Returns the lower edge frequency. More...
 
void setLowerFreq (double Fl)
 Sets the lower edge frequency. More...
 
double uppertFreq () const
 Returns the upper edge frequency. More...
 
void setUpperFreq (double Fu)
 Sets the upper edge frequency. More...
 
virtual void config (const Config &src_cfg)
 Configures the filter. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Performs the filtering. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::FIRFilter< Scalar, FIRLowPassCoeffs >
+void _process (const Buffer< Scalar > &in, const Buffer< Scalar > &out)
 performs the actual computation
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
- Protected Attributes inherited from sdr::FIRFilter< Scalar, FIRLowPassCoeffs >
bool _enabled
 If true, the filtering is enabled. More...
 
size_t _order
 The order of the filter. More...
 
double _Fl
 The lower edge frequency. More...
 
double _Fu
 The upper edge frequency. More...
 
double _Fs
 Current sample rate. More...
 
std::vector< double > _alpha
 The current filter coefficients. More...
 
Buffer< Scalar > _ring
 A "ring-buffer" used to perform the filtering. More...
 
size_t _ring_offset
 Offset of the "ring-buffer". More...
 
Buffer< Scalar > _buffer
 The output buffer, unused if filtering is performed in-place. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::FIRLowPass< Scalar >

+ +

Low-pass FIR filter specialization.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::FIRLowPass< Scalar >::FIRLowPass (size_t order,
double Fc 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::FIRLowPass< Scalar >::~FIRLowPass ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
double sdr::FIRLowPass< Scalar >::freq () const
+
+inline
+
+ +

Returns the filter frequency.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::FIRLowPass< Scalar >::setFreq (double freq)
+
+inline
+
+ +

Sets the filter frequency.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_i_r_low_pass.png b/classsdr_1_1_f_i_r_low_pass.png new file mode 100644 index 0000000..6828849 Binary files /dev/null and b/classsdr_1_1_f_i_r_low_pass.png differ diff --git a/classsdr_1_1_f_i_r_low_pass_coeffs-members.html b/classsdr_1_1_f_i_r_low_pass_coeffs-members.html new file mode 100644 index 0000000..86feb8c --- /dev/null +++ b/classsdr_1_1_f_i_r_low_pass_coeffs-members.html @@ -0,0 +1,107 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FIRLowPassCoeffs Member List
+
+
+ +

This is the complete list of members for sdr::FIRLowPassCoeffs, including all inherited members.

+ + +
coeffs(std::vector< double > &alpha, double Fl, double Fu, double Fs)sdr::FIRLowPassCoeffsinlinestatic
+ + + + diff --git a/classsdr_1_1_f_i_r_low_pass_coeffs.html b/classsdr_1_1_f_i_r_low_pass_coeffs.html new file mode 100644 index 0000000..324b6cf --- /dev/null +++ b/classsdr_1_1_f_i_r_low_pass_coeffs.html @@ -0,0 +1,172 @@ + + + + + + +libsdr: sdr::FIRLowPassCoeffs Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FIRLowPassCoeffs Class Reference
+
+
+ +

Implements the calculation of the filter coefficients for the use in the FIRFilter template class. + More...

+ +

#include <firfilter.hh>

+ + + + + +

+Static Public Member Functions

static void coeffs (std::vector< double > &alpha, double Fl, double Fu, double Fs)
 Calculates the filter coefficients. More...
 
+

Detailed Description

+

Implements the calculation of the filter coefficients for the use in the FIRFilter template class.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
static void sdr::FIRLowPassCoeffs::coeffs (std::vector< double > & alpha,
double Fl,
double Fu,
double Fs 
)
+
+inlinestatic
+
+ +

Calculates the filter coefficients.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_m_deemph-members.html b/classsdr_1_1_f_m_deemph-members.html new file mode 100644 index 0000000..d8c9dc0 --- /dev/null +++ b/classsdr_1_1_f_m_deemph-members.html @@ -0,0 +1,136 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FMDeemph< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::FMDeemph< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_alphasdr::FMDeemph< Scalar >protected
_avgsdr::FMDeemph< Scalar >protected
_buffersdr::FMDeemph< Scalar >protected
_configsdr::Sourceprotected
_enabledsdr::FMDeemph< Scalar >protected
_eossdr::Sourceprotected
_process(const Buffer< Scalar > &in, const Buffer< Scalar > &out)sdr::FMDeemph< Scalar >inlineprotected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::FMDeemph< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
enable(bool enabled)sdr::FMDeemph< Scalar >inline
FMDeemph(bool enabled=true)sdr::FMDeemph< Scalar >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
isEnabled() const sdr::FMDeemph< Scalar >inline
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::FMDeemph< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~FMDeemph()sdr::FMDeemph< Scalar >inlinevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_f_m_deemph.html b/classsdr_1_1_f_m_deemph.html new file mode 100644 index 0000000..dfb09d3 --- /dev/null +++ b/classsdr_1_1_f_m_deemph.html @@ -0,0 +1,556 @@ + + + + + + +libsdr: sdr::FMDeemph< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FMDeemph< Scalar > Class Template Reference
+
+
+ +

A tiny node to de-emphasize the higher frequencies of a FM transmitted audio signal. + More...

+ +

#include <demod.hh>

+
+Inheritance diagram for sdr::FMDeemph< Scalar >:
+
+
+ + +sdr::Sink< Scalar > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FMDeemph (bool enabled=true)
 Constructor. More...
 
virtual ~FMDeemph ()
 Destructor. More...
 
bool isEnabled () const
 Returns true if the filter node is enabled. More...
 
void enable (bool enabled)
 Enable/Disable the filter node. More...
 
virtual void config (const Config &src_cfg)
 Configures the node. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Dispatches in- or out-of-place filtering. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + +

+Protected Member Functions

void _process (const Buffer< Scalar > &in, const Buffer< Scalar > &out)
 Performs the actual filtering. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

bool _enabled
 If true, the filter is enabled. More...
 
int _alpha
 Filter constant. More...
 
Scalar _avg
 Current averaged value. More...
 
Buffer< Scalar > _buffer
 The output buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::FMDeemph< Scalar >

+ +

A tiny node to de-emphasize the higher frequencies of a FM transmitted audio signal.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::FMDeemph< Scalar >::FMDeemph (bool enabled = true)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::FMDeemph< Scalar >::~FMDeemph ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::FMDeemph< Scalar >::_process (const Buffer< Scalar > & in,
const Buffer< Scalar > & out 
)
+
+inlineprotected
+
+ +

Performs the actual filtering.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::FMDeemph< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::FMDeemph< Scalar >::enable (bool enabled)
+
+inline
+
+ +

Enable/Disable the filter node.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
bool sdr::FMDeemph< Scalar >::isEnabled () const
+
+inline
+
+ +

Returns true if the filter node is enabled.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::FMDeemph< Scalar >::process (const Buffer< Scalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Dispatches in- or out-of-place filtering.

+ +

Implements sdr::Sink< Scalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
int sdr::FMDeemph< Scalar >::_alpha
+
+protected
+
+ +

Filter constant.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Scalar sdr::FMDeemph< Scalar >::_avg
+
+protected
+
+ +

Current averaged value.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::FMDeemph< Scalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
bool sdr::FMDeemph< Scalar >::_enabled
+
+protected
+
+ +

If true, the filter is enabled.

+

If not, the node is a NOP.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_m_deemph.png b/classsdr_1_1_f_m_deemph.png new file mode 100644 index 0000000..a1e86fc Binary files /dev/null and b/classsdr_1_1_f_m_deemph.png differ diff --git a/classsdr_1_1_f_m_demod-members.html b/classsdr_1_1_f_m_demod-members.html new file mode 100644 index 0000000..dd1f400 --- /dev/null +++ b/classsdr_1_1_f_m_demod-members.html @@ -0,0 +1,135 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FMDemod< iScalar, oScalar > Member List
+
+
+ +

This is the complete list of members for sdr::FMDemod< iScalar, oScalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::FMDemod< iScalar, oScalar >protected
_can_overwritesdr::FMDemod< iScalar, oScalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_last_valuesdr::FMDemod< iScalar, oScalar >protected
_process(const Buffer< std::complex< iScalar > > &in, const Buffer< oScalar > &out)sdr::FMDemod< iScalar, oScalar >inlineprotected
_shiftsdr::FMDemod< iScalar, oScalar >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::FMDemod< iScalar, oScalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
FMDemod()sdr::FMDemod< iScalar, oScalar >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< std::complex< iScalar > >inlinevirtual
process(const Buffer< std::complex< iScalar > > &buffer, bool allow_overwrite)sdr::FMDemod< iScalar, oScalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< std::complex< iScalar > >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
SScalar typedefsdr::FMDemod< iScalar, oScalar >
type() const sdr::Sourcevirtual
~FMDemod()sdr::FMDemod< iScalar, oScalar >inlinevirtual
~Sink()sdr::Sink< std::complex< iScalar > >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_f_m_demod.html b/classsdr_1_1_f_m_demod.html new file mode 100644 index 0000000..ce24517 --- /dev/null +++ b/classsdr_1_1_f_m_demod.html @@ -0,0 +1,517 @@ + + + + + + +libsdr: sdr::FMDemod< iScalar, oScalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FMDemod< iScalar, oScalar > Class Template Reference
+
+
+ +

Demodulates FM from an I/Q signal. + More...

+ +

#include <demod.hh>

+
+Inheritance diagram for sdr::FMDemod< iScalar, oScalar >:
+
+
+ + +sdr::Sink< std::complex< iScalar > > +sdr::Source +sdr::SinkBase + +
+ + + + + +

+Public Types

typedef Traits< iScalar >::SScalar SScalar
 The super scalar. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FMDemod ()
 Constructor. More...
 
virtual ~FMDemod ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the FM demodulator. More...
 
virtual void process (const Buffer< std::complex< iScalar > > &buffer, bool allow_overwrite)
 Performs the FM demodulation. More...
 
- Public Member Functions inherited from sdr::Sink< std::complex< iScalar > >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + +

+Protected Member Functions

void _process (const Buffer< std::complex< iScalar > > &in, const Buffer< oScalar > &out)
 The actual demodulation. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

int _shift
 Output rescaling. More...
 
std::complex< iScalar > _last_value
 The last input value. More...
 
bool _can_overwrite
 If true, in-place demodulation is poissible. More...
 
Buffer< oScalar > _buffer
 The output buffer, unused if demodulation is performed in-place. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class iScalar, class oScalar = iScalar>
+class sdr::FMDemod< iScalar, oScalar >

+ +

Demodulates FM from an I/Q signal.

+

Member Typedef Documentation

+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + +
typedef Traits<iScalar>::SScalar sdr::FMDemod< iScalar, oScalar >::SScalar
+
+ +

The super scalar.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + + + + +
sdr::FMDemod< iScalar, oScalar >::FMDemod ()
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + + + + +
virtual sdr::FMDemod< iScalar, oScalar >::~FMDemod ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::FMDemod< iScalar, oScalar >::_process (const Buffer< std::complex< iScalar > > & in,
const Buffer< oScalar > & out 
)
+
+inlineprotected
+
+ +

The actual demodulation.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + + + + + +
virtual void sdr::FMDemod< iScalar, oScalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the FM demodulator.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::FMDemod< iScalar, oScalar >::process (const Buffer< std::complex< iScalar > > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Performs the FM demodulation.

+ +

Implements sdr::Sink< std::complex< iScalar > >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + +
Buffer<oScalar> sdr::FMDemod< iScalar, oScalar >::_buffer
+
+protected
+
+ +

The output buffer, unused if demodulation is performed in-place.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + +
bool sdr::FMDemod< iScalar, oScalar >::_can_overwrite
+
+protected
+
+ +

If true, in-place demodulation is poissible.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + +
std::complex<iScalar> sdr::FMDemod< iScalar, oScalar >::_last_value
+
+protected
+
+ +

The last input value.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + +
int sdr::FMDemod< iScalar, oScalar >::_shift
+
+protected
+
+ +

Output rescaling.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_f_m_demod.png b/classsdr_1_1_f_m_demod.png new file mode 100644 index 0000000..ccd36f9 Binary files /dev/null and b/classsdr_1_1_f_m_demod.png differ diff --git a/classsdr_1_1_filter_node-members.html b/classsdr_1_1_filter_node-members.html new file mode 100644 index 0000000..d7c0552 --- /dev/null +++ b/classsdr_1_1_filter_node-members.html @@ -0,0 +1,115 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FilterNode< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::FilterNode< Scalar >, including all inherited members.

+ + + + + + + + + + +
_block_sizesdr::FilterNode< Scalar >protected
_buffersdr::FilterNode< Scalar >protected
_fft_fwdsdr::FilterNode< Scalar >protected
_filterssdr::FilterNode< Scalar >protected
_sample_ratesdr::FilterNode< Scalar >protected
addFilter(double fmin, double fmax)sdr::FilterNode< Scalar >inline
FilterNode(size_t block_size=1024)sdr::FilterNode< Scalar >inline
sink() const sdr::FilterNode< Scalar >inline
~FilterNode()sdr::FilterNode< Scalar >inlinevirtual
+ + + + diff --git a/classsdr_1_1_filter_node.html b/classsdr_1_1_filter_node.html new file mode 100644 index 0000000..56b6912 --- /dev/null +++ b/classsdr_1_1_filter_node.html @@ -0,0 +1,399 @@ + + + + + + +libsdr: sdr::FilterNode< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FilterNode< Scalar > Class Template Reference
+
+
+ +

A FFT filter bank node wich consists of several filters. + More...

+ +

#include <filternode.hh>

+ + + + + + + + + + + + + + +

+Public Member Functions

 FilterNode (size_t block_size=1024)
 Constructor. More...
 
virtual ~FilterNode ()
 Destructor. More...
 
Sink< std::complex< Scalar > > * sink () const
 The filter sink. More...
 
FilterSource< Scalar > * addFilter (double fmin, double fmax)
 Adds a filter to the filter bank. More...
 
+ + + + + + + + + + + + + + + + +

+Protected Attributes

size_t _block_size
 The block size of the filters. More...
 
double _sample_rate
 The current sample rate. More...
 
BufferNode< std::complex
+< Scalar > > * 
_buffer
 The input buffer (to ensure buffers of _block_size size. More...
 
FilterSink< Scalar > * _fft_fwd
 The filter sink (forward FFT). More...
 
std::list< FilterSource
+< Scalar > * > 
_filters
 The filter bank. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::FilterNode< Scalar >

+ +

A FFT filter bank node wich consists of several filters.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::FilterNode< Scalar >::FilterNode (size_t block_size = 1024)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::FilterNode< Scalar >::~FilterNode ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
FilterSource<Scalar>* sdr::FilterNode< Scalar >::addFilter (double fmin,
double fmax 
)
+
+inline
+
+ +

Adds a filter to the filter bank.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
Sink< std::complex<Scalar> >* sdr::FilterNode< Scalar >::sink () const
+
+inline
+
+ +

The filter sink.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::FilterNode< Scalar >::_block_size
+
+protected
+
+ +

The block size of the filters.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
BufferNode< std::complex<Scalar> >* sdr::FilterNode< Scalar >::_buffer
+
+protected
+
+ +

The input buffer (to ensure buffers of _block_size size.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
FilterSink<Scalar>* sdr::FilterNode< Scalar >::_fft_fwd
+
+protected
+
+ +

The filter sink (forward FFT).

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::list<FilterSource<Scalar> *> sdr::FilterNode< Scalar >::_filters
+
+protected
+
+ +

The filter bank.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::FilterNode< Scalar >::_sample_rate
+
+protected
+
+ +

The current sample rate.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_filter_sink-members.html b/classsdr_1_1_filter_sink-members.html new file mode 100644 index 0000000..32f8ffa --- /dev/null +++ b/classsdr_1_1_filter_sink-members.html @@ -0,0 +1,133 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FilterSink< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::FilterSink< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_block_sizesdr::FilterSink< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_in_buffersdr::FilterSink< Scalar >protected
_out_buffersdr::FilterSink< Scalar >protected
_plansdr::FilterSink< Scalar >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::FilterSink< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
FilterSink(size_t block_size)sdr::FilterSink< Scalar >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< std::complex< Scalar > >inlinevirtual
process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)sdr::FilterSink< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< std::complex< Scalar > >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~FilterSink()sdr::FilterSink< Scalar >inlinevirtual
~Sink()sdr::Sink< std::complex< Scalar > >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_filter_sink.html b/classsdr_1_1_filter_sink.html new file mode 100644 index 0000000..04a6dd7 --- /dev/null +++ b/classsdr_1_1_filter_sink.html @@ -0,0 +1,452 @@ + + + + + + +libsdr: sdr::FilterSink< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FilterSink< Scalar > Class Template Reference
+
+
+ +

Performs the FFT forward transform. + More...

+ +

#include <filternode.hh>

+
+Inheritance diagram for sdr::FilterSink< Scalar >:
+
+
+ + +sdr::Sink< std::complex< Scalar > > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FilterSink (size_t block_size)
 Constructor, best performance with block-size being a power of 2. More...
 
virtual ~FilterSink ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the node. More...
 
virtual void process (const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
 Performs the FFT forward transform. More...
 
- Public Member Functions inherited from sdr::Sink< std::complex< Scalar > >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

size_t _block_size
 The block size. More...
 
Buffer< std::complex< Scalar > > _in_buffer
 The input buffer. More...
 
Buffer< std::complex< Scalar > > _out_buffer
 The output buffer (transformed). More...
 
FFTPlan< Scalar > _plan
 The plan for the FFT forward transform. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::FilterSink< Scalar >

+ +

Performs the FFT forward transform.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::FilterSink< Scalar >::FilterSink (size_t block_size)
+
+inline
+
+ +

Constructor, best performance with block-size being a power of 2.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::FilterSink< Scalar >::~FilterSink ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::FilterSink< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::FilterSink< Scalar >::process (const Buffer< std::complex< Scalar > > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Performs the FFT forward transform.

+ +

Implements sdr::Sink< std::complex< Scalar > >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::FilterSink< Scalar >::_block_size
+
+protected
+
+ +

The block size.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer< std::complex<Scalar> > sdr::FilterSink< Scalar >::_in_buffer
+
+protected
+
+ +

The input buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer< std::complex<Scalar> > sdr::FilterSink< Scalar >::_out_buffer
+
+protected
+
+ +

The output buffer (transformed).

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
FFTPlan<Scalar> sdr::FilterSink< Scalar >::_plan
+
+protected
+
+ +

The plan for the FFT forward transform.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_filter_sink.png b/classsdr_1_1_filter_sink.png new file mode 100644 index 0000000..dbebfb5 Binary files /dev/null and b/classsdr_1_1_filter_sink.png differ diff --git a/classsdr_1_1_filter_source-members.html b/classsdr_1_1_filter_source-members.html new file mode 100644 index 0000000..18295cb --- /dev/null +++ b/classsdr_1_1_filter_source-members.html @@ -0,0 +1,141 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FilterSource< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::FilterSource< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_block_sizesdr::FilterSource< Scalar >protected
_bufferssdr::FilterSource< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_fmaxsdr::FilterSource< Scalar >protected
_fminsdr::FilterSource< Scalar >protected
_in_buffersdr::FilterSource< Scalar >protected
_kernsdr::FilterSource< Scalar >protected
_last_trafosdr::FilterSource< Scalar >protected
_plansdr::FilterSource< Scalar >protected
_sample_ratesdr::FilterSource< Scalar >protected
_sinkssdr::Sourceprotected
_trafo_buffersdr::FilterSource< Scalar >protected
_updateFilter()sdr::FilterSource< Scalar >inlineprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::FilterSource< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
FilterSource(size_t block_size, double fmin, double fmax)sdr::FilterSource< Scalar >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< std::complex< Scalar > >inlinevirtual
process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)sdr::FilterSource< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
setFreq(double fmin, double fmax)sdr::FilterSource< Scalar >inline
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< std::complex< Scalar > >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~FilterSource()sdr::FilterSource< Scalar >inlinevirtual
~Sink()sdr::Sink< std::complex< Scalar > >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_filter_source.html b/classsdr_1_1_filter_source.html new file mode 100644 index 0000000..15c68d3 --- /dev/null +++ b/classsdr_1_1_filter_source.html @@ -0,0 +1,702 @@ + + + + + + +libsdr: sdr::FilterSource< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FilterSource< Scalar > Class Template Reference
+
+
+ +

Performs the overlap-add FFT filtering and back-transform. + More...

+ +

#include <filternode.hh>

+
+Inheritance diagram for sdr::FilterSource< Scalar >:
+
+
+ + +sdr::Sink< std::complex< Scalar > > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FilterSource (size_t block_size, double fmin, double fmax)
 Constructor. More...
 
virtual ~FilterSource ()
 Destructor. More...
 
void setFreq (double fmin, double fmax)
 Set the frequency range. More...
 
virtual void config (const Config &src_cfg)
 Configures the filter node. More...
 
virtual void process (const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
 Performs the FFT filtering and back-transform. More...
 
- Public Member Functions inherited from sdr::Sink< std::complex< Scalar > >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + +

+Protected Member Functions

void _updateFilter ()
 Updates the sink-filter. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

size_t _block_size
 Holds the block size of the filter. More...
 
double _sample_rate
 The current sample-rate. More...
 
Buffer< std::complex< Scalar > > _in_buffer
 An input buffer. More...
 
Buffer< std::complex< Scalar > > _trafo_buffer
 A compute buffer. More...
 
Buffer< std::complex< Scalar > > _last_trafo
 Holds a copy of the second-half of the last output signal. More...
 
Buffer< std::complex< Scalar > > _kern
 Holds the current filter kernel. More...
 
BufferSet< std::complex< Scalar > > _buffers
 The output buffers. More...
 
double _fmin
 The lower frequency range. More...
 
double _fmax
 The upper frequency range. More...
 
FFTPlan< Scalar > _plan
 The FFT plan for the FFT back-transform. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::FilterSource< Scalar >

+ +

Performs the overlap-add FFT filtering and back-transform.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
sdr::FilterSource< Scalar >::FilterSource (size_t block_size,
double fmin,
double fmax 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::FilterSource< Scalar >::~FilterSource ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
void sdr::FilterSource< Scalar >::_updateFilter ()
+
+inlineprotected
+
+ +

Updates the sink-filter.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::FilterSource< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the filter node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::FilterSource< Scalar >::process (const Buffer< std::complex< Scalar > > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Performs the FFT filtering and back-transform.

+ +

Implements sdr::Sink< std::complex< Scalar > >.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::FilterSource< Scalar >::setFreq (double fmin,
double fmax 
)
+
+inline
+
+ +

Set the frequency range.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::FilterSource< Scalar >::_block_size
+
+protected
+
+ +

Holds the block size of the filter.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
BufferSet< std::complex<Scalar> > sdr::FilterSource< Scalar >::_buffers
+
+protected
+
+ +

The output buffers.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::FilterSource< Scalar >::_fmax
+
+protected
+
+ +

The upper frequency range.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::FilterSource< Scalar >::_fmin
+
+protected
+
+ +

The lower frequency range.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer< std::complex<Scalar> > sdr::FilterSource< Scalar >::_in_buffer
+
+protected
+
+ +

An input buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer< std::complex<Scalar> > sdr::FilterSource< Scalar >::_kern
+
+protected
+
+ +

Holds the current filter kernel.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer< std::complex<Scalar> > sdr::FilterSource< Scalar >::_last_trafo
+
+protected
+
+ +

Holds a copy of the second-half of the last output signal.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
FFTPlan<Scalar> sdr::FilterSource< Scalar >::_plan
+
+protected
+
+ +

The FFT plan for the FFT back-transform.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::FilterSource< Scalar >::_sample_rate
+
+protected
+
+ +

The current sample-rate.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer< std::complex<Scalar> > sdr::FilterSource< Scalar >::_trafo_buffer
+
+protected
+
+ +

A compute buffer.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_filter_source.png b/classsdr_1_1_filter_source.png new file mode 100644 index 0000000..0aa96ee Binary files /dev/null and b/classsdr_1_1_filter_source.png differ diff --git a/classsdr_1_1_frac_sub_sample_base-members.html b/classsdr_1_1_frac_sub_sample_base-members.html new file mode 100644 index 0000000..b52f116 --- /dev/null +++ b/classsdr_1_1_frac_sub_sample_base-members.html @@ -0,0 +1,116 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FracSubSampleBase< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::FracSubSampleBase< Scalar >, including all inherited members.

+ + + + + + + + + + + +
_avgsdr::FracSubSampleBase< Scalar >protected
_periodsdr::FracSubSampleBase< Scalar >protected
_sample_countsdr::FracSubSampleBase< Scalar >protected
frac() const sdr::FracSubSampleBase< Scalar >inline
FracSubSampleBase(double frac)sdr::FracSubSampleBase< Scalar >inline
reset()sdr::FracSubSampleBase< Scalar >inline
setFrac(double frac)sdr::FracSubSampleBase< Scalar >inline
SScalar typedefsdr::FracSubSampleBase< Scalar >
subsample(const Buffer< Scalar > &in, const Buffer< Scalar > &out)sdr::FracSubSampleBase< Scalar >inline
~FracSubSampleBase()sdr::FracSubSampleBase< Scalar >inlinevirtual
+ + + + diff --git a/classsdr_1_1_frac_sub_sample_base.html b/classsdr_1_1_frac_sub_sample_base.html new file mode 100644 index 0000000..de6fd68 --- /dev/null +++ b/classsdr_1_1_frac_sub_sample_base.html @@ -0,0 +1,435 @@ + + + + + + +libsdr: sdr::FracSubSampleBase< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FracSubSampleBase< Scalar > Class Template Reference
+
+
+ +

Implements a fractional sub-sampler. + More...

+ +

#include <subsample.hh>

+ + + + + +

+Public Types

typedef Traits< Scalar >::SScalar SScalar
 The input & output type super-scalar. More...
 
+ + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FracSubSampleBase (double frac)
 Constructor. More...
 
virtual ~FracSubSampleBase ()
 Destructor. More...
 
void setFrac (double frac)
 Resets the sample rate fraction. More...
 
double frac () const
 Returns the effective sub-sample fraction. More...
 
void reset ()
 Reset sample counter. More...
 
Buffer< Scalar > subsample (const Buffer< Scalar > &in, const Buffer< Scalar > &out)
 Performs the sub-sampling. More...
 
+ + + + + + + + + + +

+Protected Attributes

SScalar _avg
 The average. More...
 
size_t _sample_count
 The number of samples collected times (1<<16). More...
 
size_t _period
 The sub-sample period. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::FracSubSampleBase< Scalar >

+ +

Implements a fractional sub-sampler.

+

Member Typedef Documentation

+ +
+
+
+template<class Scalar >
+ + + + +
typedef Traits<Scalar>::SScalar sdr::FracSubSampleBase< Scalar >::SScalar
+
+ +

The input & output type super-scalar.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::FracSubSampleBase< Scalar >::FracSubSampleBase (double frac)
+
+inline
+
+ +

Constructor.

+
Parameters
+ + +
fracSpecifies the output sample rate relative to the input sample rate. I.e. 2 means half the input sample rate.
+
+
+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::FracSubSampleBase< Scalar >::~FracSubSampleBase ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
double sdr::FracSubSampleBase< Scalar >::frac () const
+
+inline
+
+ +

Returns the effective sub-sample fraction.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
void sdr::FracSubSampleBase< Scalar >::reset ()
+
+inline
+
+ +

Reset sample counter.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::FracSubSampleBase< Scalar >::setFrac (double frac)
+
+inline
+
+ +

Resets the sample rate fraction.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
Buffer<Scalar> sdr::FracSubSampleBase< Scalar >::subsample (const Buffer< Scalar > & in,
const Buffer< Scalar > & out 
)
+
+inline
+
+ +

Performs the sub-sampling.

+

in and out may refer to the same buffer allowing for an in-place operation. Returns a view on the output buffer containing the sub-samples.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
SScalar sdr::FracSubSampleBase< Scalar >::_avg
+
+protected
+
+ +

The average.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::FracSubSampleBase< Scalar >::_period
+
+protected
+
+ +

The sub-sample period.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::FracSubSampleBase< Scalar >::_sample_count
+
+protected
+
+ +

The number of samples collected times (1<<16).

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_freq_shift-members.html b/classsdr_1_1_freq_shift-members.html new file mode 100644 index 0000000..4f146a5 --- /dev/null +++ b/classsdr_1_1_freq_shift-members.html @@ -0,0 +1,137 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FreqShift< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::FreqShift< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::FreqShift< Scalar >protected
_configsdr::Sourceprotected
_deltasdr::FreqShift< Scalar >protected
_eossdr::Sourceprotected
_factorsdr::FreqShift< Scalar >protected
_sample_ratesdr::FreqShift< Scalar >protected
_scalesdr::FreqShift< Scalar >protected
_shiftsdr::FreqShift< Scalar >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::FreqShift< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
FreqShift(double shift, Scalar scale=1.0)sdr::FreqShift< Scalar >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< std::complex< Scalar > >inlinevirtual
process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)sdr::FreqShift< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
setShift(double shift)sdr::FreqShift< Scalar >inline
shift() const sdr::FreqShift< Scalar >inline
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< std::complex< Scalar > >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~FreqShift()sdr::FreqShift< Scalar >inlinevirtual
~Sink()sdr::Sink< std::complex< Scalar > >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_freq_shift.html b/classsdr_1_1_freq_shift.html new file mode 100644 index 0000000..f6f3625 --- /dev/null +++ b/classsdr_1_1_freq_shift.html @@ -0,0 +1,579 @@ + + + + + + +libsdr: sdr::FreqShift< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FreqShift< Scalar > Class Template Reference
+
+
+ +

Performs a frequency shift on a complex input signal, by multiplying it with $e^{i\omega t}$. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::FreqShift< Scalar >:
+
+
+ + +sdr::Sink< std::complex< Scalar > > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FreqShift (double shift, Scalar scale=1.0)
 Constructs a frequency shift node with optional scaleing of the result. More...
 
virtual ~FreqShift ()
 Destructor. More...
 
double shift () const
 Returns the frequency shift. More...
 
void setShift (double shift)
 Sets the frequency shift. More...
 
virtual void config (const Config &src_cfg)
 Configures the frequency shift node. More...
 
virtual void process (const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
 Performs the frequency shift. More...
 
- Public Member Functions inherited from sdr::Sink< std::complex< Scalar > >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

Buffer< std::complex< Scalar > > _buffer
 The output buffer. More...
 
double _shift
 The frequency shift $f$ in Hz ( $\omega=2\pi f$). More...
 
Scalar _scale
 The optional scale. More...
 
std::complex< double > _factor
 The current exponental factor, gets updated for every sample. More...
 
double _sample_rate
 The current sample rate. More...
 
std::complex< double > _delta
 $\exp(i\omega t)$. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::FreqShift< Scalar >

+ +

Performs a frequency shift on a complex input signal, by multiplying it with $e^{i\omega t}$.

+

Please note, this node performs not optimal in cases, where the input scalar is an integer, as the computation is performed using double precision floating point numbers.

+
Deprecated:
Implement a more efficient variant using FreqShiftBase.
+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::FreqShift< Scalar >::FreqShift (double shift,
Scalar scale = 1.0 
)
+
+inline
+
+ +

Constructs a frequency shift node with optional scaleing of the result.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::FreqShift< Scalar >::~FreqShift ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::FreqShift< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the frequency shift node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::FreqShift< Scalar >::process (const Buffer< std::complex< Scalar > > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Performs the frequency shift.

+ +

Implements sdr::Sink< std::complex< Scalar > >.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::FreqShift< Scalar >::setShift (double shift)
+
+inline
+
+ +

Sets the frequency shift.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
double sdr::FreqShift< Scalar >::shift () const
+
+inline
+
+ +

Returns the frequency shift.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer< std::complex<Scalar> > sdr::FreqShift< Scalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::complex<double> sdr::FreqShift< Scalar >::_delta
+
+protected
+
+ +

$\exp(i\omega t)$.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::complex<double> sdr::FreqShift< Scalar >::_factor
+
+protected
+
+ +

The current exponental factor, gets updated for every sample.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::FreqShift< Scalar >::_sample_rate
+
+protected
+
+ +

The current sample rate.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Scalar sdr::FreqShift< Scalar >::_scale
+
+protected
+
+ +

The optional scale.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::FreqShift< Scalar >::_shift
+
+protected
+
+ +

The frequency shift $f$ in Hz ( $\omega=2\pi f$).

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_freq_shift.png b/classsdr_1_1_freq_shift.png new file mode 100644 index 0000000..d47bc05 Binary files /dev/null and b/classsdr_1_1_freq_shift.png differ diff --git a/classsdr_1_1_freq_shift_base-members.html b/classsdr_1_1_freq_shift_base-members.html new file mode 100644 index 0000000..a17d22f --- /dev/null +++ b/classsdr_1_1_freq_shift_base-members.html @@ -0,0 +1,123 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::FreqShiftBase< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::FreqShiftBase< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + +
_freq_shiftsdr::FreqShiftBase< Scalar >protected
_Fssdr::FreqShiftBase< Scalar >protected
_lutsdr::FreqShiftBase< Scalar >protected
_lut_countsdr::FreqShiftBase< Scalar >protected
_lut_incsdr::FreqShiftBase< Scalar >protected
_lut_sizesdr::FreqShiftBase< Scalar >protectedstatic
_update_lut_incr()sdr::FreqShiftBase< Scalar >inlineprotected
applyFrequencyShift(CSScalar value)sdr::FreqShiftBase< Scalar >inline
CScalar typedefsdr::FreqShiftBase< Scalar >
CSScalar typedefsdr::FreqShiftBase< Scalar >
FreqShiftBase(double F, double Fs)sdr::FreqShiftBase< Scalar >inline
frequencyShift() const sdr::FreqShiftBase< Scalar >inline
sampleRate() const sdr::FreqShiftBase< Scalar >inline
setFrequencyShift(double F)sdr::FreqShiftBase< Scalar >inlinevirtual
setSampleRate(double Fs)sdr::FreqShiftBase< Scalar >inlinevirtual
SScalar typedefsdr::FreqShiftBase< Scalar >
~FreqShiftBase()sdr::FreqShiftBase< Scalar >inlinevirtual
+ + + + diff --git a/classsdr_1_1_freq_shift_base.html b/classsdr_1_1_freq_shift_base.html new file mode 100644 index 0000000..92a7d2f --- /dev/null +++ b/classsdr_1_1_freq_shift_base.html @@ -0,0 +1,628 @@ + + + + + + +libsdr: sdr::FreqShiftBase< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::FreqShiftBase< Scalar > Class Template Reference
+
+
+ +

A performant implementation of a frequency shift operation on integer signals. + More...

+ +

#include <freqshift.hh>

+
+Inheritance diagram for sdr::FreqShiftBase< Scalar >:
+
+
+ + +sdr::BaseBand< Scalar > +sdr::IQBaseBand< Scalar > + +
+ + + + + + + + + + + +

+Public Types

typedef std::complex< Scalar > CScalar
 The complex input signal. More...
 
typedef Traits< Scalar >::SScalar SScalar
 The compute (super) scalar of the input type. More...
 
typedef std::complex< SScalarCSScalar
 The complex compute (super) scalar of the input type. More...
 
+ + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 FreqShiftBase (double F, double Fs)
 Constructor. More...
 
virtual ~FreqShiftBase ()
 Destructor. More...
 
double sampleRate () const
 Returns the sample rate. More...
 
virtual void setSampleRate (double Fs)
 Sets the sample rate and updates the LUT. More...
 
double frequencyShift () const
 Returns the frequency shift. More...
 
virtual void setFrequencyShift (double F)
 Sets the frequency shift and updates the LUT. More...
 
CSScalar applyFrequencyShift (CSScalar value)
 Performs the frequency shift on a single sample. More...
 
+ + + + +

+Protected Member Functions

void _update_lut_incr ()
 Updates the multiplier LUT. More...
 
+ + + + + + + + + + + + + + + + +

+Protected Attributes

double _freq_shift
 The current frequency shift. More...
 
double _Fs
 The current sample rate. More...
 
size_t _lut_inc
 The LUT increment. More...
 
size_t _lut_count
 The LUT index counter. More...
 
Buffer< CSScalar_lut
 The LUT. More...
 
+ + + + +

+Static Protected Attributes

static const size_t _lut_size = 128
 The size of the LUT. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::FreqShiftBase< Scalar >

+ +

A performant implementation of a frequency shift operation on integer signals.

+

Member Typedef Documentation

+ +
+
+
+template<class Scalar>
+ + + + +
typedef std::complex<Scalar> sdr::FreqShiftBase< Scalar >::CScalar
+
+ +

The complex input signal.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + +
typedef std::complex<SScalar> sdr::FreqShiftBase< Scalar >::CSScalar
+
+ +

The complex compute (super) scalar of the input type.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + +
typedef Traits<Scalar>::SScalar sdr::FreqShiftBase< Scalar >::SScalar
+
+ +

The compute (super) scalar of the input type.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::FreqShiftBase< Scalar >::FreqShiftBase (double F,
double Fs 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
virtual sdr::FreqShiftBase< Scalar >::~FreqShiftBase ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
void sdr::FreqShiftBase< Scalar >::_update_lut_incr ()
+
+inlineprotected
+
+ +

Updates the multiplier LUT.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
CSScalar sdr::FreqShiftBase< Scalar >::applyFrequencyShift (CSScalar value)
+
+inline
+
+ +

Performs the frequency shift on a single sample.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
double sdr::FreqShiftBase< Scalar >::frequencyShift () const
+
+inline
+
+ +

Returns the frequency shift.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
double sdr::FreqShiftBase< Scalar >::sampleRate () const
+
+inline
+
+ +

Returns the sample rate.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
virtual void sdr::FreqShiftBase< Scalar >::setFrequencyShift (double F)
+
+inlinevirtual
+
+ +

Sets the frequency shift and updates the LUT.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
virtual void sdr::FreqShiftBase< Scalar >::setSampleRate (double Fs)
+
+inlinevirtual
+
+ +

Sets the sample rate and updates the LUT.

+ +

Reimplemented in sdr::BaseBand< Scalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
double sdr::FreqShiftBase< Scalar >::_freq_shift
+
+protected
+
+ +

The current frequency shift.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
double sdr::FreqShiftBase< Scalar >::_Fs
+
+protected
+
+ +

The current sample rate.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
Buffer<CSScalar> sdr::FreqShiftBase< Scalar >::_lut
+
+protected
+
+ +

The LUT.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
size_t sdr::FreqShiftBase< Scalar >::_lut_count
+
+protected
+
+ +

The LUT index counter.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
size_t sdr::FreqShiftBase< Scalar >::_lut_inc
+
+protected
+
+ +

The LUT increment.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
const size_t sdr::FreqShiftBase< Scalar >::_lut_size = 128
+
+staticprotected
+
+ +

The size of the LUT.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_freq_shift_base.png b/classsdr_1_1_freq_shift_base.png new file mode 100644 index 0000000..6d74ebb Binary files /dev/null and b/classsdr_1_1_freq_shift_base.png differ diff --git a/classsdr_1_1_g_w_n_source-members.html b/classsdr_1_1_g_w_n_source-members.html new file mode 100644 index 0000000..0b35437 --- /dev/null +++ b/classsdr_1_1_g_w_n_source-members.html @@ -0,0 +1,128 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::GWNSource< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::GWNSource< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::GWNSource< Scalar >protected
_buffer_sizesdr::GWNSource< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_getNormal(double &a, double &b)sdr::GWNSource< Scalar >inlineprotected
_meansdr::GWNSource< Scalar >protected
_sample_ratesdr::GWNSource< Scalar >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
GWNSource(double sample_rate, size_t buffer_size=1024)sdr::GWNSource< Scalar >inline
next()sdr::GWNSource< Scalar >inline
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Source()sdr::Source
type() const sdr::Sourcevirtual
~GWNSource()sdr::GWNSource< Scalar >inlinevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_g_w_n_source.html b/classsdr_1_1_g_w_n_source.html new file mode 100644 index 0000000..0ba6bce --- /dev/null +++ b/classsdr_1_1_g_w_n_source.html @@ -0,0 +1,441 @@ + + + + + + +libsdr: sdr::GWNSource< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::GWNSource< Scalar > Class Template Reference
+
+
+ +

A Gaussian White Noise source. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::GWNSource< Scalar >:
+
+
+ + +sdr::Source + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 GWNSource (double sample_rate, size_t buffer_size=1024)
 Constructor. More...
 
virtual ~GWNSource ()
 Destructor. More...
 
void next ()
 Samples and emits the next chunk of data. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + +

+Protected Member Functions

void _getNormal (double &a, double &b)
 Sample two std. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

double _sample_rate
 The sample rate. More...
 
size_t _buffer_size
 The size of the buffer. More...
 
Buffer< Scalar > _buffer
 The output buffer. More...
 
double _mean
 The mean value of the GWN. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::GWNSource< Scalar >

+ +

A Gaussian White Noise source.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::GWNSource< Scalar >::GWNSource (double sample_rate,
size_t buffer_size = 1024 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::GWNSource< Scalar >::~GWNSource ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::GWNSource< Scalar >::_getNormal (double & a,
double & b 
)
+
+inlineprotected
+
+ +

Sample two std.

+

normal distributed RVs.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
void sdr::GWNSource< Scalar >::next ()
+
+inline
+
+ +

Samples and emits the next chunk of data.

+

This function can be connected to the idle event of the Queue instance, such that a new chunk gets emitted, once all previous chunks are processed.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::GWNSource< Scalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::GWNSource< Scalar >::_buffer_size
+
+protected
+
+ +

The size of the buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::GWNSource< Scalar >::_mean
+
+protected
+
+ +

The mean value of the GWN.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::GWNSource< Scalar >::_sample_rate
+
+protected
+
+ +

The sample rate.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_g_w_n_source.png b/classsdr_1_1_g_w_n_source.png new file mode 100644 index 0000000..14ed335 Binary files /dev/null and b/classsdr_1_1_g_w_n_source.png differ diff --git a/classsdr_1_1_i_q_balance-members.html b/classsdr_1_1_i_q_balance-members.html new file mode 100644 index 0000000..3ccf1b1 --- /dev/null +++ b/classsdr_1_1_i_q_balance-members.html @@ -0,0 +1,136 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::IQBalance< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::IQBalance< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::IQBalance< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_imagFactsdr::IQBalance< Scalar >protected
_process(const Buffer< std::complex< Scalar > > &in, const Buffer< std::complex< Scalar > > &out)sdr::IQBalance< Scalar >inlineprotected
_realFactsdr::IQBalance< Scalar >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
balance() const sdr::IQBalance< Scalar >inline
config(const Config &src_cfg)sdr::IQBalance< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< std::complex< Scalar > >inlinevirtual
IQBalance(double balance=0.0)sdr::IQBalance< Scalar >inline
process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)sdr::IQBalance< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setBalance(double balance)sdr::IQBalance< Scalar >inline
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< std::complex< Scalar > >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
SScalar typedefsdr::IQBalance< Scalar >
type() const sdr::Sourcevirtual
~IQBalance()sdr::IQBalance< Scalar >inlinevirtual
~Sink()sdr::Sink< std::complex< Scalar > >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_i_q_balance.html b/classsdr_1_1_i_q_balance.html new file mode 100644 index 0000000..dd91dbb --- /dev/null +++ b/classsdr_1_1_i_q_balance.html @@ -0,0 +1,558 @@ + + + + + + +libsdr: sdr::IQBalance< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::IQBalance< Scalar > Class Template Reference
+
+
+ +

A simple node, that allows to balance an IQ signal. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::IQBalance< Scalar >:
+
+
+ + +sdr::Sink< std::complex< Scalar > > +sdr::Source +sdr::SinkBase + +
+ + + + + +

+Public Types

typedef Traits< Scalar >::SScalar SScalar
 The internal used compute scalar. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 IQBalance (double balance=0.0)
 Constructor. More...
 
virtual ~IQBalance ()
 Destructor. More...
 
double balance () const
 Retunrs the balance. More...
 
void setBalance (double balance)
 Sets the I/Q balance. More...
 
virtual void config (const Config &src_cfg)
 Configures the node. More...
 
virtual void process (const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
 Processes a buffer. More...
 
- Public Member Functions inherited from sdr::Sink< std::complex< Scalar > >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + +

+Protected Member Functions

void _process (const Buffer< std::complex< Scalar > > &in, const Buffer< std::complex< Scalar > > &out)
 The actual implementation. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

int32_t _realFact
 Scaleing factor for the real part. More...
 
int32_t _imagFact
 Scaleing factor for the imaginary part. More...
 
Buffer< std::complex< Scalar > > _buffer
 The working buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::IQBalance< Scalar >

+ +

A simple node, that allows to balance an IQ signal.

+

Member Typedef Documentation

+ +
+
+
+template<class Scalar >
+ + + + +
typedef Traits<Scalar>::SScalar sdr::IQBalance< Scalar >::SScalar
+
+ +

The internal used compute scalar.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::IQBalance< Scalar >::IQBalance (double balance = 0.0)
+
+inline
+
+ +

Constructor.

+
Parameters
+ + +
balanceSpecifies the balance between the I and Q chanel. If balance = 1, only the I chanel remains, on balance = -1 only the Q chanel remains and on balance = 0 both chanels are balanced equally.
+
+
+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::IQBalance< Scalar >::~IQBalance ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::IQBalance< Scalar >::_process (const Buffer< std::complex< Scalar > > & in,
const Buffer< std::complex< Scalar > > & out 
)
+
+inlineprotected
+
+ +

The actual implementation.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
double sdr::IQBalance< Scalar >::balance () const
+
+inline
+
+ +

Retunrs the balance.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::IQBalance< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::IQBalance< Scalar >::process (const Buffer< std::complex< Scalar > > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Processes a buffer.

+ +

Implements sdr::Sink< std::complex< Scalar > >.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::IQBalance< Scalar >::setBalance (double balance)
+
+inline
+
+ +

Sets the I/Q balance.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer< std::complex<Scalar> > sdr::IQBalance< Scalar >::_buffer
+
+protected
+
+ +

The working buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
int32_t sdr::IQBalance< Scalar >::_imagFact
+
+protected
+
+ +

Scaleing factor for the imaginary part.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
int32_t sdr::IQBalance< Scalar >::_realFact
+
+protected
+
+ +

Scaleing factor for the real part.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_i_q_balance.png b/classsdr_1_1_i_q_balance.png new file mode 100644 index 0000000..14d906e Binary files /dev/null and b/classsdr_1_1_i_q_balance.png differ diff --git a/classsdr_1_1_i_q_base_band-members.html b/classsdr_1_1_i_q_base_band-members.html new file mode 100644 index 0000000..65d380a --- /dev/null +++ b/classsdr_1_1_i_q_base_band-members.html @@ -0,0 +1,175 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::IQBaseBand< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::IQBaseBand< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::IQBaseBand< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_Fcsdr::IQBaseBand< Scalar >protected
_Ffsdr::IQBaseBand< Scalar >protected
_filter_ring() const sdr::IQBaseBand< Scalar >inlineprotected
_freq_shiftsdr::FreqShiftBase< Scalar >protected
_Fssdr::IQBaseBand< Scalar >protected
_kernelsdr::IQBaseBand< Scalar >protected
_lastsdr::IQBaseBand< Scalar >protected
_lutsdr::FreqShiftBase< Scalar >protected
_lut_countsdr::FreqShiftBase< Scalar >protected
_lut_incsdr::FreqShiftBase< Scalar >protected
_lut_sizesdr::FreqShiftBase< Scalar >protectedstatic
_oFssdr::IQBaseBand< Scalar >protected
_ordersdr::IQBaseBand< Scalar >protected
_process(const Buffer< CScalar > &in, const Buffer< CScalar > &out)sdr::IQBaseBand< Scalar >inlineprotected
_reconfigure()sdr::IQBaseBand< Scalar >inlineprotected
_ringsdr::IQBaseBand< Scalar >protected
_ring_offsetsdr::IQBaseBand< Scalar >protected
_sample_countsdr::IQBaseBand< Scalar >protected
_sinkssdr::Sourceprotected
_sourceBssdr::IQBaseBand< Scalar >protected
_sub_samplesdr::IQBaseBand< Scalar >protected
_update_filter_kernel()sdr::IQBaseBand< Scalar >inlineprotected
_update_lut_incr()sdr::FreqShiftBase< Scalar >inlineprotected
_widthsdr::IQBaseBand< Scalar >protected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
applyFrequencyShift(CSScalar value)sdr::FreqShiftBase< Scalar >inline
centerFrequency() const sdr::IQBaseBand< Scalar >inline
config(const Config &src_cfg)sdr::IQBaseBand< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
CScalar typedefsdr::IQBaseBand< Scalar >
CSScalar typedefsdr::IQBaseBand< Scalar >
disconnect(SinkBase *sink)sdr::Source
filterFrequency() const sdr::IQBaseBand< Scalar >inline
filterWidth() const sdr::IQBaseBand< Scalar >inline
FreqShiftBase(double F, double Fs)sdr::FreqShiftBase< Scalar >inline
frequencyShift() const sdr::FreqShiftBase< Scalar >inline
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< std::complex< Scalar > >inlinevirtual
IQBaseBand(double Fc, double width, size_t order, size_t sub_sample, double oFs=0.0)sdr::IQBaseBand< Scalar >inline
IQBaseBand(double Fc, double Ff, double width, size_t order, size_t sub_sample, double oFs=0.0)sdr::IQBaseBand< Scalar >inline
order() const sdr::IQBaseBand< Scalar >inline
process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)sdr::IQBaseBand< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sdr::sampleRate() const sdr::Sourcevirtual
sdr::FreqShiftBase::sampleRate() const sdr::FreqShiftBase< Scalar >inline
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setCenterFrequency(double Fc)sdr::IQBaseBand< Scalar >inline
setConfig(const Config &config)sdr::Sourcevirtual
setFilterFrequency(double Ff)sdr::IQBaseBand< Scalar >inline
setFilterWidth(double width)sdr::IQBaseBand< Scalar >inline
setFrequencyShift(double F)sdr::FreqShiftBase< Scalar >inlinevirtual
setOrder(size_t o)sdr::IQBaseBand< Scalar >inline
setOutputSampleRate(double Fs)sdr::IQBaseBand< Scalar >inline
setSampleRate(double Fs)sdr::FreqShiftBase< Scalar >inlinevirtual
setSubsample(size_t sub_sample)sdr::IQBaseBand< Scalar >inline
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< std::complex< Scalar > >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
SScalar typedefsdr::IQBaseBand< Scalar >
subSample() const sdr::IQBaseBand< Scalar >inline
type() const sdr::Sourcevirtual
~FreqShiftBase()sdr::FreqShiftBase< Scalar >inlinevirtual
~IQBaseBand()sdr::IQBaseBand< Scalar >inlinevirtual
~Sink()sdr::Sink< std::complex< Scalar > >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_i_q_base_band.html b/classsdr_1_1_i_q_base_band.html new file mode 100644 index 0000000..f8f26f9 --- /dev/null +++ b/classsdr_1_1_i_q_base_band.html @@ -0,0 +1,1413 @@ + + + + + + +libsdr: sdr::IQBaseBand< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::IQBaseBand< Scalar > Class Template Reference
+
+
+ +

This class performs several operations on the complex (integral) input stream, it first filters out some part of the input stream using a FIR band pass (band pass is centerred around Ff with width width) then shifts the center frequency Fc to 0 and finally sub-samples the resulting stream. + More...

+ +

#include <baseband.hh>

+
+Inheritance diagram for sdr::IQBaseBand< Scalar >:
+
+
+ + +sdr::Sink< std::complex< Scalar > > +sdr::Source +sdr::FreqShiftBase< Scalar > +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + +

+Public Types

typedef std::complex< Scalar > CScalar
 The complex type of the input stream. More...
 
typedef int32_t SScalar
 The (real) computation scalar type (super scalar), the computations are performed with this scalar type. More...
 
typedef std::complex< SScalarCSScalar
 Complex SScalar type. More...
 
- Public Types inherited from sdr::FreqShiftBase< Scalar >
typedef std::complex< Scalar > CScalar
 The complex input signal. More...
 
typedef Traits< Scalar >::SScalar SScalar
 The compute (super) scalar of the input type. More...
 
typedef std::complex< SScalarCSScalar
 The complex compute (super) scalar of the input type. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 IQBaseBand (double Fc, double width, size_t order, size_t sub_sample, double oFs=0.0)
 Constructor, the filter center frequency Ff equals the given center frequency Fc. More...
 
 IQBaseBand (double Fc, double Ff, double width, size_t order, size_t sub_sample, double oFs=0.0)
 Constructor. More...
 
virtual ~IQBaseBand ()
 Destructor. More...
 
size_t order () const
 Returns the order of the band-pass filter. More...
 
void setOrder (size_t o)
 (Re-) Sets the filter order. More...
 
double centerFrequency () const
 Returns the center frequency. More...
 
void setCenterFrequency (double Fc)
 Resets the center frequency. More...
 
double filterFrequency () const
 Returns the filter frequency. More...
 
void setFilterFrequency (double Ff)
 (Re-) Sets the filter frequency. More...
 
double filterWidth () const
 Returns the filter width. More...
 
void setFilterWidth (double width)
 Sets the filter width. More...
 
size_t subSample () const
 Returns the sub sampling. More...
 
void setSubsample (size_t sub_sample)
 Resets the sub sampling. More...
 
void setOutputSampleRate (double Fs)
 Resets the output sample rate. More...
 
virtual void config (const Config &src_cfg)
 Configures the BaseBand node. More...
 
virtual void process (const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
 Processes the given buffer. More...
 
- Public Member Functions inherited from sdr::Sink< std::complex< Scalar > >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
- Public Member Functions inherited from sdr::FreqShiftBase< Scalar >
 FreqShiftBase (double F, double Fs)
 Constructor. More...
 
virtual ~FreqShiftBase ()
 Destructor. More...
 
double sampleRate () const
 Returns the sample rate. More...
 
virtual void setSampleRate (double Fs)
 Sets the sample rate and updates the LUT. More...
 
double frequencyShift () const
 Returns the frequency shift. More...
 
virtual void setFrequencyShift (double F)
 Sets the frequency shift and updates the LUT. More...
 
CSScalar applyFrequencyShift (CSScalar value)
 Performs the frequency shift on a single sample. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Member Functions

void _reconfigure ()
 Reconfigures the node. More...
 
void _process (const Buffer< CScalar > &in, const Buffer< CScalar > &out)
 Performs the base-band selection, frequency shift and sub-sampling. More...
 
CSScalar _filter_ring () const
 Applies the filter on the data stored in the ring buffer. More...
 
void _update_filter_kernel ()
 Updates the band-pass filter kernel. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
- Protected Member Functions inherited from sdr::FreqShiftBase< Scalar >
void _update_lut_incr ()
 Updates the multiplier LUT. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

int32_t _Fc
 The frequency shift of the base band. More...
 
int32_t _Ff
 The center frequency of the base band. More...
 
int32_t _Fs
 The input sample rate. More...
 
int32_t _width
 The filter width. More...
 
size_t _order
 The order of the filter. More...
 
size_t _sub_sample
 The number of sample averages for the sub sampling. More...
 
double _oFs
 Holds the desired output sample rate, _sub_sample will be adjusted accordingly. More...
 
size_t _ring_offset
 The current index of the ring buffer. More...
 
size_t _sample_count
 Holds the current number of samples averaged. More...
 
CSScalar _last
 Holds the current sum of the last _sample_count samples. More...
 
size_t _sourceBs
 Buffer size of the source. More...
 
Buffer< CSScalar_kernel
 The filter kernel of order _order. More...
 
Buffer< CSScalar_ring
 A ring buffer of past values. More...
 
Buffer< CScalar_buffer
 The output buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
- Protected Attributes inherited from sdr::FreqShiftBase< Scalar >
double _freq_shift
 The current frequency shift. More...
 
double _Fs
 The current sample rate. More...
 
size_t _lut_inc
 The LUT increment. More...
 
size_t _lut_count
 The LUT index counter. More...
 
Buffer< CSScalar_lut
 The LUT. More...
 
+ + + + + +

+Additional Inherited Members

- Static Protected Attributes inherited from sdr::FreqShiftBase< Scalar >
static const size_t _lut_size = 128
 The size of the LUT. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::IQBaseBand< Scalar >

+ +

This class performs several operations on the complex (integral) input stream, it first filters out some part of the input stream using a FIR band pass (band pass is centerred around Ff with width width) then shifts the center frequency Fc to 0 and finally sub-samples the resulting stream.

+

This node can be used to select a portion of the input stream and reduce the rate of the stream, allowing for some more expensive operations to be performed on the output stream.

+

Member Typedef Documentation

+ +
+
+
+template<class Scalar >
+ + + + +
typedef std::complex<Scalar> sdr::IQBaseBand< Scalar >::CScalar
+
+ +

The complex type of the input stream.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + +
typedef std::complex<SScalar> sdr::IQBaseBand< Scalar >::CSScalar
+
+ +

Complex SScalar type.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + +
typedef int32_t sdr::IQBaseBand< Scalar >::SScalar
+
+ +

The (real) computation scalar type (super scalar), the computations are performed with this scalar type.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sdr::IQBaseBand< Scalar >::IQBaseBand (double Fc,
double width,
size_t order,
size_t sub_sample,
double oFs = 0.0 
)
+
+inline
+
+ +

Constructor, the filter center frequency Ff equals the given center frequency Fc.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
sdr::IQBaseBand< Scalar >::IQBaseBand (double Fc,
double Ff,
double width,
size_t order,
size_t sub_sample,
double oFs = 0.0 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::IQBaseBand< Scalar >::~IQBaseBand ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
CSScalar sdr::IQBaseBand< Scalar >::_filter_ring () const
+
+inlineprotected
+
+ +

Applies the filter on the data stored in the ring buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::IQBaseBand< Scalar >::_process (const Buffer< CScalar > & in,
const Buffer< CScalar > & out 
)
+
+inlineprotected
+
+ +

Performs the base-band selection, frequency shift and sub-sampling.

+

Stores the results into out. The input and output buffer may overlapp.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
void sdr::IQBaseBand< Scalar >::_reconfigure ()
+
+inlineprotected
+
+ +

Reconfigures the node.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
void sdr::IQBaseBand< Scalar >::_update_filter_kernel ()
+
+inlineprotected
+
+ +

Updates the band-pass filter kernel.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
double sdr::IQBaseBand< Scalar >::centerFrequency () const
+
+inline
+
+ +

Returns the center frequency.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::IQBaseBand< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the BaseBand node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
double sdr::IQBaseBand< Scalar >::filterFrequency () const
+
+inline
+
+ +

Returns the filter frequency.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
double sdr::IQBaseBand< Scalar >::filterWidth () const
+
+inline
+
+ +

Returns the filter width.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
size_t sdr::IQBaseBand< Scalar >::order () const
+
+inline
+
+ +

Returns the order of the band-pass filter.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::IQBaseBand< Scalar >::process (const Buffer< std::complex< Scalar > > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Processes the given buffer.

+ +

Implements sdr::Sink< std::complex< Scalar > >.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::IQBaseBand< Scalar >::setCenterFrequency (double Fc)
+
+inline
+
+ +

Resets the center frequency.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::IQBaseBand< Scalar >::setFilterFrequency (double Ff)
+
+inline
+
+ +

(Re-) Sets the filter frequency.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::IQBaseBand< Scalar >::setFilterWidth (double width)
+
+inline
+
+ +

Sets the filter width.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::IQBaseBand< Scalar >::setOrder (size_t o)
+
+inline
+
+ +

(Re-) Sets the filter order.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::IQBaseBand< Scalar >::setOutputSampleRate (double Fs)
+
+inline
+
+ +

Resets the output sample rate.

+

The sub-sampling will be adjusted accordingly. Please note the the resulting output sample rate will be rounded up to be an integral fraction of the input sample rate.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::IQBaseBand< Scalar >::setSubsample (size_t sub_sample)
+
+inline
+
+ +

Resets the sub sampling.

+

Please note that the Queue needs to be stopped before calling this function!

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
size_t sdr::IQBaseBand< Scalar >::subSample () const
+
+inline
+
+ +

Returns the sub sampling.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<CScalar> sdr::IQBaseBand< Scalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
int32_t sdr::IQBaseBand< Scalar >::_Fc
+
+protected
+
+ +

The frequency shift of the base band.

+

The filter result will be shifted by -_Fc.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
int32_t sdr::IQBaseBand< Scalar >::_Ff
+
+protected
+
+ +

The center frequency of the base band.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
int32_t sdr::IQBaseBand< Scalar >::_Fs
+
+protected
+
+ +

The input sample rate.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<CSScalar> sdr::IQBaseBand< Scalar >::_kernel
+
+protected
+
+ +

The filter kernel of order _order.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
CSScalar sdr::IQBaseBand< Scalar >::_last
+
+protected
+
+ +

Holds the current sum of the last _sample_count samples.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::IQBaseBand< Scalar >::_oFs
+
+protected
+
+ +

Holds the desired output sample rate, _sub_sample will be adjusted accordingly.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::IQBaseBand< Scalar >::_order
+
+protected
+
+ +

The order of the filter.

+

Must be greater that 0.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<CSScalar> sdr::IQBaseBand< Scalar >::_ring
+
+protected
+
+ +

A ring buffer of past values.

+

The band-pass filtering is performed on this buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::IQBaseBand< Scalar >::_ring_offset
+
+protected
+
+ +

The current index of the ring buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::IQBaseBand< Scalar >::_sample_count
+
+protected
+
+ +

Holds the current number of samples averaged.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::IQBaseBand< Scalar >::_sourceBs
+
+protected
+
+ +

Buffer size of the source.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::IQBaseBand< Scalar >::_sub_sample
+
+protected
+
+ +

The number of sample averages for the sub sampling.

+

_sub_sample==1 means no subsampling.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
int32_t sdr::IQBaseBand< Scalar >::_width
+
+protected
+
+ +

The filter width.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_i_q_base_band.png b/classsdr_1_1_i_q_base_band.png new file mode 100644 index 0000000..a652eef Binary files /dev/null and b/classsdr_1_1_i_q_base_band.png differ diff --git a/classsdr_1_1_i_q_sig_gen-members.html b/classsdr_1_1_i_q_sig_gen-members.html new file mode 100644 index 0000000..f4802fd --- /dev/null +++ b/classsdr_1_1_i_q_sig_gen-members.html @@ -0,0 +1,132 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::IQSigGen< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::IQSigGen< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::IQSigGen< Scalar >protected
_bufferSizesdr::IQSigGen< Scalar >protected
_configsdr::Sourceprotected
_dtsdr::IQSigGen< Scalar >protected
_eossdr::Sourceprotected
_sampleRatesdr::IQSigGen< Scalar >protected
_scalesdr::IQSigGen< Scalar >protected
_signalssdr::IQSigGen< Scalar >protected
_sinkssdr::Sourceprotected
_tsdr::IQSigGen< Scalar >protected
_tMaxsdr::IQSigGen< Scalar >protected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
addSine(double freq, double ampl=1, double phase=0)sdr::IQSigGen< Scalar >inline
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
IQSigGen(double samplerate, size_t buffersize, double tmax=-1)sdr::IQSigGen< Scalar >inline
next()sdr::IQSigGen< Scalar >inline
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Source()sdr::Source
type() const sdr::Sourcevirtual
~IQSigGen()sdr::IQSigGen< Scalar >inlinevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_i_q_sig_gen.html b/classsdr_1_1_i_q_sig_gen.html new file mode 100644 index 0000000..b767c35 --- /dev/null +++ b/classsdr_1_1_i_q_sig_gen.html @@ -0,0 +1,559 @@ + + + + + + +libsdr: sdr::IQSigGen< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::IQSigGen< Scalar > Class Template Reference
+
+
+ +

Arbitrary function generator. + More...

+ +

#include <siggen.hh>

+
+Inheritance diagram for sdr::IQSigGen< Scalar >:
+
+
+ + +sdr::Source + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 IQSigGen (double samplerate, size_t buffersize, double tmax=-1)
 Constructs the function generator. More...
 
virtual ~IQSigGen ()
 Destructor. More...
 
void next ()
 Computes the next buffer. More...
 
void addSine (double freq, double ampl=1, double phase=0)
 Add a sine function to the function generator. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

double _sampleRate
 The sample rate of the function generator. More...
 
double _dt
 The sample period. More...
 
double _t
 The current time. More...
 
double _tMax
 The maximum time. More...
 
double _scale
 The scaling of the signal. More...
 
std::list< std::vector< double > > _signals
 A list of functions. More...
 
size_t _bufferSize
 The size of the output buffer. More...
 
Buffer< std::complex< Scalar > > _buffer
 The output buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::IQSigGen< Scalar >

+ +

Arbitrary function generator.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
sdr::IQSigGen< Scalar >::IQSigGen (double samplerate,
size_t buffersize,
double tmax = -1 
)
+
+inline
+
+ +

Constructs the function generator.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::IQSigGen< Scalar >::~IQSigGen ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sdr::IQSigGen< Scalar >::addSine (double freq,
double ampl = 1,
double phase = 0 
)
+
+inline
+
+ +

Add a sine function to the function generator.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
void sdr::IQSigGen< Scalar >::next ()
+
+inline
+
+ +

Computes the next buffer.

+

This function can be connected to the idle signal of the Queue.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer< std::complex<Scalar> > sdr::IQSigGen< Scalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::IQSigGen< Scalar >::_bufferSize
+
+protected
+
+ +

The size of the output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::IQSigGen< Scalar >::_dt
+
+protected
+
+ +

The sample period.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::IQSigGen< Scalar >::_sampleRate
+
+protected
+
+ +

The sample rate of the function generator.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::IQSigGen< Scalar >::_scale
+
+protected
+
+ +

The scaling of the signal.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::list< std::vector<double> > sdr::IQSigGen< Scalar >::_signals
+
+protected
+
+ +

A list of functions.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::IQSigGen< Scalar >::_t
+
+protected
+
+ +

The current time.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::IQSigGen< Scalar >::_tMax
+
+protected
+
+ +

The maximum time.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_i_q_sig_gen.png b/classsdr_1_1_i_q_sig_gen.png new file mode 100644 index 0000000..ae5aaaf Binary files /dev/null and b/classsdr_1_1_i_q_sig_gen.png differ diff --git a/classsdr_1_1_imag_part-members.html b/classsdr_1_1_imag_part-members.html new file mode 100644 index 0000000..68c9c9b --- /dev/null +++ b/classsdr_1_1_imag_part-members.html @@ -0,0 +1,132 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::ImagPart< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::ImagPart< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::RealImagPart< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_scalesdr::RealImagPart< Scalar >protected
_select_realsdr::RealImagPart< Scalar >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::RealImagPart< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< std::complex< Scalar > >inlinevirtual
ImagPart(double scale=1.0)sdr::ImagPart< Scalar >inline
process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)sdr::RealImagPart< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
RealImagPart(bool select_real, double scale=1.0)sdr::RealImagPart< Scalar >inline
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< std::complex< Scalar > >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~Sink()sdr::Sink< std::complex< Scalar > >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_imag_part.html b/classsdr_1_1_imag_part.html new file mode 100644 index 0000000..fdf1555 --- /dev/null +++ b/classsdr_1_1_imag_part.html @@ -0,0 +1,253 @@ + + + + + + +libsdr: sdr::ImagPart< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::ImagPart< Scalar > Class Template Reference
+
+
+ +

Selects the imaginary part of a complex signal. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::ImagPart< Scalar >:
+
+
+ + +sdr::RealImagPart< Scalar > +sdr::Sink< std::complex< Scalar > > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ImagPart (double scale=1.0)
 Constructor. More...
 
- Public Member Functions inherited from sdr::RealImagPart< Scalar >
 RealImagPart (bool select_real, double scale=1.0)
 Constructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the node. More...
 
virtual void process (const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
 Processes the incomming data. More...
 
- Public Member Functions inherited from sdr::Sink< std::complex< Scalar > >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
- Protected Attributes inherited from sdr::RealImagPart< Scalar >
Buffer< Scalar > _buffer
 The output buffer. More...
 
bool _select_real
 Real/Imag selection. More...
 
double _scale
 The scale. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::ImagPart< Scalar >

+ +

Selects the imaginary part of a complex signal.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::ImagPart< Scalar >::ImagPart (double scale = 1.0)
+
+inline
+
+ +

Constructor.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_imag_part.png b/classsdr_1_1_imag_part.png new file mode 100644 index 0000000..13405ab Binary files /dev/null and b/classsdr_1_1_imag_part.png differ diff --git a/classsdr_1_1_inpol_sub_sampler-members.html b/classsdr_1_1_inpol_sub_sampler-members.html new file mode 100644 index 0000000..7b9bd34 --- /dev/null +++ b/classsdr_1_1_inpol_sub_sampler-members.html @@ -0,0 +1,134 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::InpolSubSampler< iScalar, oScalar > Member List
+
+
+ +

This is the complete list of members for sdr::InpolSubSampler< iScalar, oScalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::InpolSubSampler< iScalar, oScalar >protected
_configsdr::Sourceprotected
_dlsdr::InpolSubSampler< iScalar, oScalar >protected
_dl_idxsdr::InpolSubSampler< iScalar, oScalar >protected
_eossdr::Sourceprotected
_fracsdr::InpolSubSampler< iScalar, oScalar >protected
_musdr::InpolSubSampler< iScalar, oScalar >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::InpolSubSampler< iScalar, oScalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< iScalar >inlinevirtual
InpolSubSampler(float frac)sdr::InpolSubSampler< iScalar, oScalar >inline
process(const Buffer< iScalar > &buffer, bool allow_overwrite)sdr::InpolSubSampler< iScalar, oScalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< iScalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~InpolSubSampler()sdr::InpolSubSampler< iScalar, oScalar >inlinevirtual
~Sink()sdr::Sink< iScalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_inpol_sub_sampler.html b/classsdr_1_1_inpol_sub_sampler.html new file mode 100644 index 0000000..937f99c --- /dev/null +++ b/classsdr_1_1_inpol_sub_sampler.html @@ -0,0 +1,486 @@ + + + + + + +libsdr: sdr::InpolSubSampler< iScalar, oScalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::InpolSubSampler< iScalar, oScalar > Class Template Reference
+
+
+ +

An interpolating sub-sampler. + More...

+ +

#include <subsample.hh>

+
+Inheritance diagram for sdr::InpolSubSampler< iScalar, oScalar >:
+
+
+ + +sdr::Sink< iScalar > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 InpolSubSampler (float frac)
 Constructor. More...
 
virtual ~InpolSubSampler ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the sub-sampling node. More...
 
virtual void process (const Buffer< iScalar > &buffer, bool allow_overwrite)
 Performs the sub-sampling. More...
 
- Public Member Functions inherited from sdr::Sink< iScalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

float _frac
 The sub-sampling fraction. More...
 
float _mu
 The current (fractional) sample count. More...
 
Buffer< oScalar > _dl
 A delay-line (buffer) for the interpolation. More...
 
size_t _dl_idx
 Index of the delay-line. More...
 
Buffer< oScalar > _buffer
 The output buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class iScalar, class oScalar = iScalar>
+class sdr::InpolSubSampler< iScalar, oScalar >

+ +

An interpolating sub-sampler.

+

This node uses an 8-tap FIR filter to interpolate between two values (given 8). Please do not use this node to subsample by a factor grater than 8, as this may result into artifacts unless the signal was filtered accordingly before subsampling it.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + + + + + +
sdr::InpolSubSampler< iScalar, oScalar >::InpolSubSampler (float frac)
+
+inline
+
+ +

Constructor.

+
Parameters
+ + +
fracSpecifies the sub-sampling fraction. I.e. frac=2 will result into half the input sample-rate.
+
+
+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + + + + +
virtual sdr::InpolSubSampler< iScalar, oScalar >::~InpolSubSampler ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + + + + + +
virtual void sdr::InpolSubSampler< iScalar, oScalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the sub-sampling node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::InpolSubSampler< iScalar, oScalar >::process (const Buffer< iScalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Performs the sub-sampling.

+ +

Implements sdr::Sink< iScalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + +
Buffer<oScalar> sdr::InpolSubSampler< iScalar, oScalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + +
Buffer<oScalar> sdr::InpolSubSampler< iScalar, oScalar >::_dl
+
+protected
+
+ +

A delay-line (buffer) for the interpolation.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + +
size_t sdr::InpolSubSampler< iScalar, oScalar >::_dl_idx
+
+protected
+
+ +

Index of the delay-line.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + +
float sdr::InpolSubSampler< iScalar, oScalar >::_frac
+
+protected
+
+ +

The sub-sampling fraction.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + +
float sdr::InpolSubSampler< iScalar, oScalar >::_mu
+
+protected
+
+ +

The current (fractional) sample count.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_inpol_sub_sampler.png b/classsdr_1_1_inpol_sub_sampler.png new file mode 100644 index 0000000..84c07d7 Binary files /dev/null and b/classsdr_1_1_inpol_sub_sampler.png differ diff --git a/classsdr_1_1_interleave-members.html b/classsdr_1_1_interleave-members.html new file mode 100644 index 0000000..045ecfe --- /dev/null +++ b/classsdr_1_1_interleave-members.html @@ -0,0 +1,133 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Interleave< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::Interleave< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::Interleave< Scalar >protected
_bufferssdr::Combine< Scalar >protected
sdr::_configsdr::Combine< Scalar >protected
sdr::Source::_configsdr::Sourceprotected
_eossdr::Sourceprotected
_Nsdr::Interleave< Scalar >protected
sdr::_sinkssdr::Combine< Scalar >protected
sdr::Source::_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
Combine(size_t N)sdr::Combine< Scalar >inline
config(const Config &cfg)sdr::Interleave< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
Interleave(size_t N)sdr::Interleave< Scalar >inline
notifyConfig(size_t idx, const Config &cfg)sdr::Combine< Scalar >inlineprotected
notifyData(size_t idx)sdr::Combine< Scalar >inlineprotected
process(std::vector< RingBuffer< Scalar > > &buffers, size_t N)sdr::Interleave< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
sink(size_t i)sdr::Interleave< Scalar >inline
Source()sdr::Source
type() const sdr::Sourcevirtual
~Combine()sdr::Combine< Scalar >inlinevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_interleave.html b/classsdr_1_1_interleave.html new file mode 100644 index 0000000..fc9fb40 --- /dev/null +++ b/classsdr_1_1_interleave.html @@ -0,0 +1,407 @@ + + + + + + +libsdr: sdr::Interleave< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Interleave< Scalar > Class Template Reference
+
+
+ +

Interleaves several input streams. + More...

+ +

#include <combine.hh>

+
+Inheritance diagram for sdr::Interleave< Scalar >:
+
+
+ + +sdr::Combine< Scalar > +sdr::Source + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Interleave (size_t N)
 Constructor. More...
 
Sink< Scalar > * sink (size_t i)
 Retunrs the i-th sink. More...
 
virtual void config (const Config &cfg)
 Configures the interleave node. More...
 
virtual void process (std::vector< RingBuffer< Scalar > > &buffers, size_t N)
 Processes the data from all sinks. More...
 
- Public Member Functions inherited from sdr::Combine< Scalar >
 Combine (size_t N)
 Constructor,
+ N specifies the number of sinks. More...
 
virtual ~Combine ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

size_t _N
 The number of sinks. More...
 
Buffer< Scalar > _buffer
 The putput buffer. More...
 
- Protected Attributes inherited from sdr::Combine< Scalar >
std::vector< RingBuffer< Scalar > > _buffers
 The ring buffers of all combine sinks. More...
 
std::vector< CombineSink
+< Scalar > * > 
_sinks
 The combine sinks. More...
 
Config _config
 The output configuration. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Combine< Scalar >
void notifyConfig (size_t idx, const Config &cfg)
 Unifies the configuration of all sinks. More...
 
void notifyData (size_t idx)
 Determines the minimum amount of data that is available on all ring buffers. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::Interleave< Scalar >

+ +

Interleaves several input streams.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::Interleave< Scalar >::Interleave (size_t N)
+
+inline
+
+ +

Constructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::Interleave< Scalar >::config (const Configcfg)
+
+inlinevirtual
+
+ +

Configures the interleave node.

+ +

Implements sdr::Combine< Scalar >.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::Interleave< Scalar >::process (std::vector< RingBuffer< Scalar > > & buffers,
size_t N 
)
+
+inlinevirtual
+
+ +

Processes the data from all sinks.

+ +

Implements sdr::Combine< Scalar >.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
Sink<Scalar>* sdr::Interleave< Scalar >::sink (size_t i)
+
+inline
+
+ +

Retunrs the i-th sink.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::Interleave< Scalar >::_buffer
+
+protected
+
+ +

The putput buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::Interleave< Scalar >::_N
+
+protected
+
+ +

The number of sinks.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_interleave.png b/classsdr_1_1_interleave.png new file mode 100644 index 0000000..3191193 Binary files /dev/null and b/classsdr_1_1_interleave.png differ diff --git a/classsdr_1_1_log_handler-members.html b/classsdr_1_1_log_handler-members.html new file mode 100644 index 0000000..5ef16c6 --- /dev/null +++ b/classsdr_1_1_log_handler-members.html @@ -0,0 +1,109 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::LogHandler Member List
+
+
+ +

This is the complete list of members for sdr::LogHandler, including all inherited members.

+ + + + +
handle(const LogMessage &msg)=0sdr::LogHandlerpure virtual
LogHandler()sdr::LogHandlerprotected
~LogHandler()sdr::LogHandlervirtual
+ + + + diff --git a/classsdr_1_1_log_handler.html b/classsdr_1_1_log_handler.html new file mode 100644 index 0000000..ac40e41 --- /dev/null +++ b/classsdr_1_1_log_handler.html @@ -0,0 +1,223 @@ + + + + + + +libsdr: sdr::LogHandler Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::LogHandler Class Referenceabstract
+
+
+ +

Base class of all log message handlers. + More...

+ +

#include <logger.hh>

+
+Inheritance diagram for sdr::LogHandler:
+
+
+ + +sdr::StreamLogHandler + +
+ + + + + + + + +

+Public Member Functions

virtual ~LogHandler ()
 Destructor. More...
 
virtual void handle (const LogMessage &msg)=0
 Needs to be implemented by sub-classes to handle log messages. More...
 
+ + + + +

+Protected Member Functions

 LogHandler ()
 Hidden constructor. More...
 
+

Detailed Description

+

Base class of all log message handlers.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
LogHandler::LogHandler ()
+
+protected
+
+ +

Hidden constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
LogHandler::~LogHandler ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
virtual void sdr::LogHandler::handle (const LogMessagemsg)
+
+pure virtual
+
+ +

Needs to be implemented by sub-classes to handle log messages.

+ +

Implemented in sdr::StreamLogHandler.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_log_handler.png b/classsdr_1_1_log_handler.png new file mode 100644 index 0000000..0e8ecb2 Binary files /dev/null and b/classsdr_1_1_log_handler.png differ diff --git a/classsdr_1_1_log_message-members.html b/classsdr_1_1_log_message-members.html new file mode 100644 index 0000000..06bb024 --- /dev/null +++ b/classsdr_1_1_log_message-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::LogMessage Member List
+
+
+ +

This is the complete list of members for sdr::LogMessage, including all inherited members.

+ + + + + + + +
_levelsdr::LogMessageprotected
level() const sdr::LogMessage
LogMessage(LogLevel level, const std::string &msg="")sdr::LogMessage
LogMessage(const LogMessage &other)sdr::LogMessage
message() const sdr::LogMessageinline
~LogMessage()sdr::LogMessagevirtual
+ + + + diff --git a/classsdr_1_1_log_message.html b/classsdr_1_1_log_message.html new file mode 100644 index 0000000..566af8a --- /dev/null +++ b/classsdr_1_1_log_message.html @@ -0,0 +1,296 @@ + + + + + + +libsdr: sdr::LogMessage Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::LogMessage Class Reference
+
+
+ +

A log message. + More...

+ +

#include <logger.hh>

+
+Inheritance diagram for sdr::LogMessage:
+
+
+ + + +
+ + + + + + + + + + + + + + + + + +

+Public Member Functions

 LogMessage (LogLevel level, const std::string &msg="")
 Constructor. More...
 
 LogMessage (const LogMessage &other)
 Copy constructor. More...
 
virtual ~LogMessage ()
 Destructor. More...
 
LogLevel level () const
 Returns the level of the message. More...
 
std::string message () const
 Returns the message. More...
 
+ + + + +

+Protected Attributes

LogLevel _level
 The level of the message. More...
 
+

Detailed Description

+

A log message.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
LogMessage::LogMessage (LogLevel level,
const std::string & msg = "" 
)
+
+ +

Constructor.

+
Parameters
+ + + +
levelSpecified the log-level of the message.
msgAn optional message.
+
+
+ +
+
+ +
+
+ + + + + + + + +
LogMessage::LogMessage (const LogMessageother)
+
+ +

Copy constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
LogMessage::~LogMessage ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
LogLevel LogMessage::level () const
+
+ +

Returns the level of the message.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
std::string sdr::LogMessage::message () const
+
+inline
+
+ +

Returns the message.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
LogLevel sdr::LogMessage::_level
+
+protected
+
+ +

The level of the message.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_log_message.png b/classsdr_1_1_log_message.png new file mode 100644 index 0000000..8abf806 Binary files /dev/null and b/classsdr_1_1_log_message.png differ diff --git a/classsdr_1_1_logger-members.html b/classsdr_1_1_logger-members.html new file mode 100644 index 0000000..5aea775 --- /dev/null +++ b/classsdr_1_1_logger-members.html @@ -0,0 +1,113 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Logger Member List
+
+
+ +

This is the complete list of members for sdr::Logger, including all inherited members.

+ + + + + + + + +
_handlersdr::Loggerprotected
_instancesdr::Loggerprotectedstatic
addHandler(LogHandler *handler)sdr::Logger
get()sdr::Loggerstatic
log(const LogMessage &message)sdr::Logger
Logger()sdr::Loggerprotected
~Logger()sdr::Loggervirtual
+ + + + diff --git a/classsdr_1_1_logger.html b/classsdr_1_1_logger.html new file mode 100644 index 0000000..749c9d4 --- /dev/null +++ b/classsdr_1_1_logger.html @@ -0,0 +1,318 @@ + + + + + + +libsdr: sdr::Logger Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Logger Class Reference
+
+
+ +

The logger class (singleton). + More...

+ +

#include <logger.hh>

+ + + + + + + + + + + +

+Public Member Functions

virtual ~Logger ()
 Destructor. More...
 
void log (const LogMessage &message)
 Logs a message. More...
 
void addHandler (LogHandler *handler)
 Adds a message handler. More...
 
+ + + + +

+Static Public Member Functions

static Loggerget ()
 Returns the singleton instance of the logger. More...
 
+ + + + +

+Protected Member Functions

 Logger ()
 Hidden constructor. More...
 
+ + + + +

+Protected Attributes

std::list< LogHandler * > _handler
 All registered handlers. More...
 
+ + + + +

+Static Protected Attributes

static Logger_instance = 0
 The singleton instance. More...
 
+

Detailed Description

+

The logger class (singleton).

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Logger::Logger ()
+
+protected
+
+ +

Hidden constructor.

+

Use get to obtain an instance.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Logger::~Logger ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
void Logger::addHandler (LogHandlerhandler)
+
+ +

Adds a message handler.

+

The ownership of the hander is transferred to the logger instance.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Logger & Logger::get ()
+
+static
+
+ +

Returns the singleton instance of the logger.

+ +
+
+ +
+
+ + + + + + + + +
void Logger::log (const LogMessagemessage)
+
+ +

Logs a message.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
std::list<LogHandler *> sdr::Logger::_handler
+
+protected
+
+ +

All registered handlers.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Logger * Logger::_instance = 0
+
+staticprotected
+
+ +

The singleton instance.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_options-members.html b/classsdr_1_1_options-members.html new file mode 100644 index 0000000..3ce26fc --- /dev/null +++ b/classsdr_1_1_options-members.html @@ -0,0 +1,117 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Options Member List
+
+
+ +

This is the complete list of members for sdr::Options, including all inherited members.

+ + + + + + + + + + + + +
_optionssdr::Optionsprotected
ANY enum valuesdr::Options
ArgType enum namesdr::Options
FLAG enum valuesdr::Options
FLOAT enum valuesdr::Options
get(const char *name)sdr::Options
has(const char *name)sdr::Options
INTEGER enum valuesdr::Options
Options()sdr::Options
parse(const Definition defs[], int argc, char *argv[], Options &options)sdr::Optionsstatic
print_help(std::ostream &stream, const Definition defs[])sdr::Optionsstatic
+ + + + diff --git a/classsdr_1_1_options.html b/classsdr_1_1_options.html new file mode 100644 index 0000000..f61584e --- /dev/null +++ b/classsdr_1_1_options.html @@ -0,0 +1,360 @@ + + + + + + +libsdr: sdr::Options Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Options Class Reference
+
+
+ +

Convenience functions for command line arguments. + More...

+ +

#include <options.hh>

+ + + + + + + + +

+Classes

struct  Definition
 Argument definition. More...
 
class  Value
 The argument value. More...
 
+ + + + +

+Public Types

enum  ArgType { FLAG, +INTEGER, +FLOAT, +ANY + }
 Possible argument types. More...
 
+ + + + + + + + + + +

+Public Member Functions

 Options ()
 Empty constructor. More...
 
bool has (const char *name)
 Returns true if the specified option was found (long name). More...
 
const Valueget (const char *name)
 Returns the argument of the specified option (long name). More...
 
+ + + + + + + +

+Static Public Member Functions

static bool parse (const Definition defs[], int argc, char *argv[], Options &options)
 Parse the given arguments (argc, argv) using the definitions defs and stores the results into options. More...
 
static void print_help (std::ostream &stream, const Definition defs[])
 Serializes a help text derived from given the definitions into stream. More...
 
+ + + + +

+Protected Attributes

std::map< std::string, Value_options
 The table of option names and argument values. More...
 
+

Detailed Description

+

Convenience functions for command line arguments.

+

Member Enumeration Documentation

+ +
+
+ + + + +
enum sdr::Options::ArgType
+
+ +

Possible argument types.

+ + + + + +
Enumerator
FLAG  +

No argument (flag).

+
INTEGER  +

Integer argument.

+
FLOAT  +

Floating point argument.

+
ANY  +

Any argument (string).

+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
Options::Options ()
+
+ +

Empty constructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + + +
const Options::Value & Options::get (const char * name)
+
+ +

Returns the argument of the specified option (long name).

+ +
+
+ +
+
+ + + + + + + + +
bool Options::has (const char * name)
+
+ +

Returns true if the specified option was found (long name).

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
bool Options::parse (const Definition defs[],
int argc,
char * argv[],
Optionsoptions 
)
+
+static
+
+ +

Parse the given arguments (argc, argv) using the definitions defs and stores the results into options.

+

Returns false on error.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Options::print_help (std::ostream & stream,
const Definition defs[] 
)
+
+static
+
+ +

Serializes a help text derived from given the definitions into stream.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
std::map<std::string, Value> sdr::Options::_options
+
+protected
+
+ +

The table of option names and argument values.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_options_1_1_value-members.html b/classsdr_1_1_options_1_1_value-members.html new file mode 100644 index 0000000..19407bf --- /dev/null +++ b/classsdr_1_1_options_1_1_value-members.html @@ -0,0 +1,130 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Options::Value Member List
+
+
+ +

This is the complete list of members for sdr::Options::Value, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
_typesdr::Options::Valueprotected
_valuesdr::Options::Valueprotected
as_float (defined in sdr::Options::Value)sdr::Options::Value
as_int (defined in sdr::Options::Value)sdr::Options::Value
as_string (defined in sdr::Options::Value)sdr::Options::Value
FLOAT enum valuesdr::Options::Valueprotected
INTEGER enum valuesdr::Options::Valueprotected
isFloat() const sdr::Options::Value
isInteger() const sdr::Options::Value
isNone() const sdr::Options::Value
isString() const sdr::Options::Value
NONE enum valuesdr::Options::Valueprotected
operator=(const Value &other)sdr::Options::Value
STRING enum valuesdr::Options::Valueprotected
toFloat() const sdr::Options::Value
toInteger() const sdr::Options::Value
toString() const sdr::Options::Value
Type enum namesdr::Options::Valueprotected
Value()sdr::Options::Value
Value(long value)sdr::Options::Value
Value(double value)sdr::Options::Value
Value(const std::string &value)sdr::Options::Value
Value(const Value &other)sdr::Options::Value
~Value()sdr::Options::Value
+ + + + diff --git a/classsdr_1_1_options_1_1_value.html b/classsdr_1_1_options_1_1_value.html new file mode 100644 index 0000000..a864adb --- /dev/null +++ b/classsdr_1_1_options_1_1_value.html @@ -0,0 +1,513 @@ + + + + + + +libsdr: sdr::Options::Value Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Options::Value Class Reference
+
+
+ +

The argument value. + More...

+ +

#include <options.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Value ()
 Empty constructor. More...
 
 Value (long value)
 Integer constructor. More...
 
 Value (double value)
 Floating point constructor. More...
 
 Value (const std::string &value)
 String constructor. More...
 
 Value (const Value &other)
 Copy constructor. More...
 
 ~Value ()
 Destructor. More...
 
const Valueoperator= (const Value &other)
 Assignment. More...
 
bool isNone () const
 Returns true if the value is empty. More...
 
bool isInteger () const
 Returns true if the value is an integer. More...
 
bool isFloat () const
 Returns true if the value is a floating point number. More...
 
bool isString () const
 Returns true if the value is a string. More...
 
long toInteger () const
 Turns the value into an integer. More...
 
double toFloat () const
 Turns the value into a floating point number. More...
 
std::string toString () const
 Turns the value into a string. More...
 
+ + + + +

+Protected Types

enum  Type { NONE, +INTEGER, +FLOAT, +STRING + }
 Value type. More...
 
+ + + + + + + + + + + + + + +

+Protected Attributes

Type _type
 The type of the value. More...
 
union {
+   long   as_int
 
+   double   as_float
 
+   char *   as_string
 
_value
 Values. More...
 
+

Detailed Description

+

The argument value.

+

Member Enumeration Documentation

+ +
+
+ + + + + +
+ + + + +
enum sdr::Options::Value::Type
+
+protected
+
+ +

Value type.

+ + + + + +
Enumerator
NONE  +

Empty or invalid value.

+
INTEGER  +

An integer (long int).

+
FLOAT  +

A floating point number (double).

+
STRING  +

An ASCII string.

+
+ +
+
+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
Options::Value::Value ()
+
+ +

Empty constructor.

+ +
+
+ +
+
+ + + + + + + + +
Options::Value::Value (long value)
+
+ +

Integer constructor.

+ +
+
+ +
+
+ + + + + + + + +
Options::Value::Value (double value)
+
+ +

Floating point constructor.

+ +
+
+ +
+
+ + + + + + + + +
Options::Value::Value (const std::string & value)
+
+ +

String constructor.

+ +
+
+ +
+
+ + + + + + + + +
Options::Value::Value (const Valueother)
+
+ +

Copy constructor.

+ +
+
+ +
+
+ + + + + + + +
Options::Value::~Value ()
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
bool Options::Value::isFloat () const
+
+ +

Returns true if the value is a floating point number.

+ +
+
+ +
+
+ + + + + + + +
bool Options::Value::isInteger () const
+
+ +

Returns true if the value is an integer.

+ +
+
+ +
+
+ + + + + + + +
bool Options::Value::isNone () const
+
+ +

Returns true if the value is empty.

+ +
+
+ +
+
+ + + + + + + +
bool Options::Value::isString () const
+
+ +

Returns true if the value is a string.

+ +
+
+ +
+
+ + + + + + + + +
const Options::Value & Options::Value::operator= (const Valueother)
+
+ +

Assignment.

+ +
+
+ +
+
+ + + + + + + +
double Options::Value::toFloat () const
+
+ +

Turns the value into a floating point number.

+ +
+
+ +
+
+ + + + + + + +
long Options::Value::toInteger () const
+
+ +

Turns the value into an integer.

+ +
+
+ +
+
+ + + + + + + +
std::string Options::Value::toString () const
+
+ +

Turns the value into a string.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Type sdr::Options::Value::_type
+
+protected
+
+ +

The type of the value.

+ +
+
+ +
+
+ + + + +
union { ... } sdr::Options::Value::_value
+
+ +

Values.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_port_audio-members.html b/classsdr_1_1_port_audio-members.html new file mode 100644 index 0000000..c1d7a8b --- /dev/null +++ b/classsdr_1_1_port_audio-members.html @@ -0,0 +1,114 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::PortAudio Member List
+
+
+ +

This is the complete list of members for sdr::PortAudio, including all inherited members.

+ + + + + + + + + +
defaultInputDevice()sdr::PortAudiostatic
defaultOutputDevice()sdr::PortAudiostatic
deviceName(int idx)sdr::PortAudiostatic
hasInputStream(int idx)sdr::PortAudiostatic
hasOutputStream(int idx)sdr::PortAudiostatic
init()sdr::PortAudiostatic
numDevices()sdr::PortAudiostatic
terminate()sdr::PortAudiostatic
+ + + + diff --git a/classsdr_1_1_port_audio.html b/classsdr_1_1_port_audio.html new file mode 100644 index 0000000..6f40b29 --- /dev/null +++ b/classsdr_1_1_port_audio.html @@ -0,0 +1,349 @@ + + + + + + +libsdr: sdr::PortAudio Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::PortAudio Class Reference
+
+
+ +

"Namespace" to collect all static, PortAudio related functions. + More...

+ +

#include <portaudio.hh>

+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Static Public Member Functions

static void init ()
 Initializes the PortAudio system, must be called first. More...
 
static void terminate ()
 Shutdown. More...
 
static int numDevices ()
 Returns the number of devices available. More...
 
static int defaultInputDevice ()
 Returns the index of the default input device. More...
 
static int defaultOutputDevice ()
 Returns the index of the default output device. More...
 
static bool hasInputStream (int idx)
 Returns true of the given device provides an input chanel. More...
 
static bool hasOutputStream (int idx)
 Returns true of the given device provides an output chanel. More...
 
static std::string deviceName (int idx)
 Returns the device name. More...
 
+

Detailed Description

+

"Namespace" to collect all static, PortAudio related functions.

+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
int PortAudio::defaultInputDevice ()
+
+static
+
+ +

Returns the index of the default input device.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int PortAudio::defaultOutputDevice ()
+
+static
+
+ +

Returns the index of the default output device.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
std::string PortAudio::deviceName (int idx)
+
+static
+
+ +

Returns the device name.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool PortAudio::hasInputStream (int idx)
+
+static
+
+ +

Returns true of the given device provides an input chanel.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool PortAudio::hasOutputStream (int idx)
+
+static
+
+ +

Returns true of the given device provides an output chanel.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void PortAudio::init ()
+
+static
+
+ +

Initializes the PortAudio system, must be called first.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int PortAudio::numDevices ()
+
+static
+
+ +

Returns the number of devices available.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void PortAudio::terminate ()
+
+static
+
+ +

Shutdown.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_port_sink-members.html b/classsdr_1_1_port_sink-members.html new file mode 100644 index 0000000..8b48584 --- /dev/null +++ b/classsdr_1_1_port_sink-members.html @@ -0,0 +1,114 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::PortSink Member List
+
+
+ +

This is the complete list of members for sdr::PortSink, including all inherited members.

+ + + + + + + + + +
_frame_sizesdr::PortSinkprotected
_streamsdr::PortSinkprotected
config(const Config &src_cfg)sdr::PortSinkvirtual
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::PortSinkvirtual
PortSink()sdr::PortSink
SinkBase()sdr::SinkBase
~PortSink()sdr::PortSinkvirtual
~SinkBase()sdr::SinkBasevirtual
+ + + + diff --git a/classsdr_1_1_port_sink.html b/classsdr_1_1_port_sink.html new file mode 100644 index 0000000..4ee28c0 --- /dev/null +++ b/classsdr_1_1_port_sink.html @@ -0,0 +1,314 @@ + + + + + + +libsdr: sdr::PortSink Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::PortSink Class Reference
+
+
+ +

PortAudio playback node. + More...

+ +

#include <portaudio.hh>

+
+Inheritance diagram for sdr::PortSink:
+
+
+ + +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 PortSink ()
 Constructor. More...
 
virtual ~PortSink ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the PortAudio output. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Playback. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
+ + + + + + + +

+Protected Attributes

PaStream * _stream
 The PortAudio stream. More...
 
size_t _frame_size
 The frame-size. More...
 
+

Detailed Description

+

PortAudio playback node.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
PortSink::PortSink ()
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
PortSink::~PortSink ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
void PortSink::config (const Configsrc_cfg)
+
+virtual
+
+ +

Configures the PortAudio output.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void PortSink::handleBuffer (const RawBufferbuffer,
bool allow_overwrite 
)
+
+virtual
+
+ +

Playback.

+ +

Implements sdr::SinkBase.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
size_t sdr::PortSink::_frame_size
+
+protected
+
+ +

The frame-size.

+ +
+
+ +
+
+ + + + + +
+ + + + +
PaStream* sdr::PortSink::_stream
+
+protected
+
+ +

The PortAudio stream.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_port_sink.png b/classsdr_1_1_port_sink.png new file mode 100644 index 0000000..2b8bd6b Binary files /dev/null and b/classsdr_1_1_port_sink.png differ diff --git a/classsdr_1_1_port_source-members.html b/classsdr_1_1_port_source-members.html new file mode 100644 index 0000000..d0a79dc --- /dev/null +++ b/classsdr_1_1_port_source-members.html @@ -0,0 +1,135 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::PortSource< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::PortSource< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::PortSource< Scalar >protected
_configsdr::Sourceprotected
_deviceIndexsdr::PortSource< Scalar >protected
_eossdr::Sourceprotected
_fmtsdr::PortSource< Scalar >protected
_initializeStream(int idx=-1)sdr::PortSource< Scalar >inlineprotected
_is_realsdr::PortSource< Scalar >protected
_sampleRatesdr::PortSource< Scalar >protected
_sinkssdr::Sourceprotected
_streamsdr::PortSource< Scalar >protected
_streamIsOpensdr::PortSource< Scalar >protected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
connect(SinkBase *sink, bool direct=false)sdr::Source
deviceIndex() const sdr::PortSource< Scalar >inline
disconnect(SinkBase *sink)sdr::Source
hasSampleRate(double sampleRate)sdr::PortSource< Scalar >inline
next()sdr::PortSource< Scalar >inline
PortSource(double sampleRate, size_t bufferSize, int dev=-1)sdr::PortSource< Scalar >inline
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
setDeviceIndex(int idx=-1)sdr::PortSource< Scalar >inline
setSampleRate(double sampleRate)sdr::PortSource< Scalar >inline
signalEOS()sdr::Sourceprotected
Source()sdr::Source
type() const sdr::Sourcevirtual
~PortSource()sdr::PortSource< Scalar >inlinevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_port_source.html b/classsdr_1_1_port_source.html new file mode 100644 index 0000000..73e5c63 --- /dev/null +++ b/classsdr_1_1_port_source.html @@ -0,0 +1,644 @@ + + + + + + +libsdr: sdr::PortSource< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::PortSource< Scalar > Class Template Reference
+
+
+ +

PortAudio input stream as a Source. + More...

+ +

#include <portaudio.hh>

+
+Inheritance diagram for sdr::PortSource< Scalar >:
+
+
+ + +sdr::Source + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 PortSource (double sampleRate, size_t bufferSize, int dev=-1)
 Constructor. More...
 
virtual ~PortSource ()
 Destructor. More...
 
void next ()
 Reads (blocking) the next buffer from the PortAudio stream. More...
 
int deviceIndex () const
 Returns the currently selected input device. More...
 
void setDeviceIndex (int idx=-1)
 Selects the input device, throws a ConfigError exception if the device can not be setup as an input device. More...
 
bool hasSampleRate (double sampleRate)
 Checks if the given sample rate is supported by the device. More...
 
void setSampleRate (double sampleRate)
 Resets the sample rate of the input device. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + +

+Protected Member Functions

void _initializeStream (int idx=-1)
 Device setup. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

bool _streamIsOpen
 If true, the PortAudio stream, _stream is open. More...
 
PaStream * _stream
 The PortAudio input stream. More...
 
PaSampleFormat _fmt
 The current format of the PortAudio stream. More...
 
double _sampleRate
 The current sample rate. More...
 
int _deviceIndex
 The current input device index. More...
 
bool _is_real
 If true, the input stream is real (1 chanel), otherwise complex (2 chanels). More...
 
Buffer< Scalar > _buffer
 The output buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::PortSource< Scalar >

+ +

PortAudio input stream as a Source.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
sdr::PortSource< Scalar >::PortSource (double sampleRate,
size_t bufferSize,
int dev = -1 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::PortSource< Scalar >::~PortSource ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::PortSource< Scalar >::_initializeStream (int idx = -1)
+
+inlineprotected
+
+ +

Device setup.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
int sdr::PortSource< Scalar >::deviceIndex () const
+
+inline
+
+ +

Returns the currently selected input device.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
bool sdr::PortSource< Scalar >::hasSampleRate (double sampleRate)
+
+inline
+
+ +

Checks if the given sample rate is supported by the device.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
void sdr::PortSource< Scalar >::next ()
+
+inline
+
+ +

Reads (blocking) the next buffer from the PortAudio stream.

+

This function can be connected to the idle event of the Queue.

+
Todo:
Signal loss of samples in debug mode.
+
Bug:
Drop data if output buffer is in use.
+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::PortSource< Scalar >::setDeviceIndex (int idx = -1)
+
+inline
+
+ +

Selects the input device, throws a ConfigError exception if the device can not be setup as an input device.

+

Do not call this function, while the Queue is running.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
void sdr::PortSource< Scalar >::setSampleRate (double sampleRate)
+
+inline
+
+ +

Resets the sample rate of the input device.

+

Do not call this function, while the Queue is running.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::PortSource< Scalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
int sdr::PortSource< Scalar >::_deviceIndex
+
+protected
+
+ +

The current input device index.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
PaSampleFormat sdr::PortSource< Scalar >::_fmt
+
+protected
+
+ +

The current format of the PortAudio stream.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
bool sdr::PortSource< Scalar >::_is_real
+
+protected
+
+ +

If true, the input stream is real (1 chanel), otherwise complex (2 chanels).

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::PortSource< Scalar >::_sampleRate
+
+protected
+
+ +

The current sample rate.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
PaStream* sdr::PortSource< Scalar >::_stream
+
+protected
+
+ +

The PortAudio input stream.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
bool sdr::PortSource< Scalar >::_streamIsOpen
+
+protected
+
+ +

If true, the PortAudio stream, _stream is open.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_port_source.png b/classsdr_1_1_port_source.png new file mode 100644 index 0000000..4951a53 Binary files /dev/null and b/classsdr_1_1_port_source.png differ diff --git a/classsdr_1_1_proxy-members.html b/classsdr_1_1_proxy-members.html new file mode 100644 index 0000000..9bba006 --- /dev/null +++ b/classsdr_1_1_proxy-members.html @@ -0,0 +1,126 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Proxy Member List
+
+
+ +

This is the complete list of members for sdr::Proxy, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + +
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::Proxyvirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Proxyvirtual
propagateConfig(const Config &config)sdr::Sourceprotected
Proxy()sdr::Proxy
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~Proxy()sdr::Proxyvirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_proxy.html b/classsdr_1_1_proxy.html new file mode 100644 index 0000000..d489a98 --- /dev/null +++ b/classsdr_1_1_proxy.html @@ -0,0 +1,309 @@ + + + + + + +libsdr: sdr::Proxy Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Proxy Class Reference
+
+
+ +

A NOP node. + More...

+ +

#include <node.hh>

+
+Inheritance diagram for sdr::Proxy:
+
+
+ + +sdr::SinkBase +sdr::Source + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Proxy ()
 Constructor. More...
 
virtual ~Proxy ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the node. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Forwards the buffer. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

A NOP node.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
Proxy::Proxy ()
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Proxy::~Proxy ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
void Proxy::config (const Configsrc_cfg)
+
+virtual
+
+ +

Configures the node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Proxy::handleBuffer (const RawBufferbuffer,
bool allow_overwrite 
)
+
+virtual
+
+ +

Forwards the buffer.

+ +

Implements sdr::SinkBase.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_proxy.png b/classsdr_1_1_proxy.png new file mode 100644 index 0000000..4a1b96c Binary files /dev/null and b/classsdr_1_1_proxy.png differ diff --git a/classsdr_1_1_queue-members.html b/classsdr_1_1_queue-members.html new file mode 100644 index 0000000..771088a --- /dev/null +++ b/classsdr_1_1_queue-members.html @@ -0,0 +1,133 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Queue Member List
+
+
+ +

This is the complete list of members for sdr::Queue, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_idlesdr::Queueprotected
_main()sdr::Queueprotected
_onStartsdr::Queueprotected
_onStopsdr::Queueprotected
_queuesdr::Queueprotected
_queue_condsdr::Queueprotected
_queue_locksdr::Queueprotected
_runningsdr::Queueprotected
_signalIdle()sdr::Queueprotected
_signalStart()sdr::Queueprotected
_signalStop()sdr::Queueprotected
_threadsdr::Queueprotected
addIdle(T *instance, void(T::*function)(void))sdr::Queueinline
addStart(T *instance, void(T::*function)(void))sdr::Queueinline
addStop(T *instance, void(T::*function)(void))sdr::Queueinline
get()sdr::Queuestatic
isRunning() const sdr::Queue
isStopped() const sdr::Queue
Queue()sdr::Queueprotected
remIdle(T *instance)sdr::Queueinline
remStart(T *instance)sdr::Queueinline
remStop(T *instance)sdr::Queueinline
send(const RawBuffer &buffer, SinkBase *sink, bool allow_overwrite=false)sdr::Queue
start()sdr::Queue
stop()sdr::Queue
wait()sdr::Queue
~Queue()sdr::Queuevirtual
+ + + + diff --git a/classsdr_1_1_queue.html b/classsdr_1_1_queue.html new file mode 100644 index 0000000..75f0eaf --- /dev/null +++ b/classsdr_1_1_queue.html @@ -0,0 +1,905 @@ + + + + + + +libsdr: sdr::Queue Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Queue Class Reference
+
+
+ +

Central message queue (singleton). + More...

+ +

#include <queue.hh>

+ + + + + +

+Classes

class  Message
 The internal used message type. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

virtual ~Queue ()
 Destructor. More...
 
void send (const RawBuffer &buffer, SinkBase *sink, bool allow_overwrite=false)
 Adds a buffer and its receiver to the queue. More...
 
void start ()
 Enters the queue loop, if parallel=true was passed to get, exec will execute the queue loop in a separate thread and returns immediately. More...
 
void stop ()
 Signals the queue to stop processing. More...
 
void wait ()
 Wait for the queue to exit the queue loop. More...
 
bool isStopped () const
 Returns true if the queue loop is stopped. More...
 
bool isRunning () const
 Returns true if the queue loop is running. More...
 
template<class T >
void addIdle (T *instance, void(T::*function)(void))
 Adds a callback to the idle event. More...
 
template<class T >
void remIdle (T *instance)
 Removes all callbacks of the given instance from the idle signal. More...
 
template<class T >
void addStart (T *instance, void(T::*function)(void))
 Adds a callback to the start event. More...
 
template<class T >
void remStart (T *instance)
 Removes all callbacks of the given instance from the start signal. More...
 
template<class T >
void addStop (T *instance, void(T::*function)(void))
 Adds a callback to the stop event. More...
 
template<class T >
void remStop (T *instance)
 Removes all callbacks of the given instance from the stop signal. More...
 
+ + + + +

+Static Public Member Functions

static Queueget ()
 Get a reference to the global instance of the queue. More...
 
+ + + + + + + + + + + + + + + + +

+Protected Member Functions

 Queue ()
 Hidden constructor, use get to get the singleton instance. More...
 
void _main ()
 The actual queue loop. More...
 
void _signalIdle ()
 Emits the idle signal. More...
 
void _signalStart ()
 Emits the start signal. More...
 
void _signalStop ()
 Emits the stop signal. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

bool _running
 While this is true, the queue loop is executed. More...
 
pthread_t _thread
 If _parallel is true, the thread of the queue loop. More...
 
pthread_mutex_t _queue_lock
 The queue mutex. More...
 
pthread_cond_t _queue_cond
 The queue condition. More...
 
std::list< Message_queue
 The message queue. More...
 
std::list< DelegateInterface * > _idle
 Idle event callbacks. More...
 
std::list< DelegateInterface * > _onStart
 Start event callbacks. More...
 
std::list< DelegateInterface * > _onStop
 Stop event callbacks. More...
 
+

Detailed Description

+

Central message queue (singleton).

+

Must be created before any other SDR object is constructed. The queue collects all buffers for processing and routes them to their destination. The queue loop can either be run in a separate thread by passing parallel=true to the factory method get. In this case, the exec method will return immediately. Otherwise, the queue loop will be executed in the thread calling exec which blocks until the queue is stopped by a call to stop.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
Queue::Queue ()
+
+protected
+
+ +

Hidden constructor, use get to get the singleton instance.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Queue::~Queue ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
void Queue::_main ()
+
+protected
+
+ +

The actual queue loop.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void Queue::_signalIdle ()
+
+protected
+
+ +

Emits the idle signal.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void Queue::_signalStart ()
+
+protected
+
+ +

Emits the start signal.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void Queue::_signalStop ()
+
+protected
+
+ +

Emits the stop signal.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::Queue::addIdle (T * instance,
void(T::*)(void) function 
)
+
+inline
+
+ +

Adds a callback to the idle event.

+

The method gets called repeatedly while the queue looop is idle, means that there are no messages to be processed. This can be used to trigger an input source to read more data.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::Queue::addStart (T * instance,
void(T::*)(void) function 
)
+
+inline
+
+ +

Adds a callback to the start event.

+

The method gets called once the queue loop is started.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::Queue::addStop (T * instance,
void(T::*)(void) function 
)
+
+inline
+
+ +

Adds a callback to the stop event.

+

The method gets called once the queue loop is stopped.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Queue & Queue::get ()
+
+static
+
+ +

Get a reference to the global instance of the queue.

+

If parallel is true, the queue will be constructed in parallel mode, means the queue loop will be executed in a separate thread. Please note that this option is only used in the first call, when the singleton instance of the queue is created.

+ +
+
+ +
+
+ + + + + + + +
bool Queue::isRunning () const
+
+ +

Returns true if the queue loop is running.

+ +
+
+ +
+
+ + + + + + + +
bool Queue::isStopped () const
+
+ +

Returns true if the queue loop is stopped.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
void sdr::Queue::remIdle (T * instance)
+
+inline
+
+ +

Removes all callbacks of the given instance from the idle signal.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
void sdr::Queue::remStart (T * instance)
+
+inline
+
+ +

Removes all callbacks of the given instance from the start signal.

+ +
+
+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + +
void sdr::Queue::remStop (T * instance)
+
+inline
+
+ +

Removes all callbacks of the given instance from the stop signal.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
void Queue::send (const RawBufferbuffer,
SinkBasesink,
bool allow_overwrite = false 
)
+
+ +

Adds a buffer and its receiver to the queue.

+

If allow_overwrite is true, the the receiver is allowed to overwrite the content of the buffer.

+ +
+
+ +
+
+ + + + + + + +
void Queue::start ()
+
+ +

Enters the queue loop, if parallel=true was passed to get, exec will execute the queue loop in a separate thread and returns immediately.

+

Otherwise, exec will block until the queue is stopped.

+ +
+
+ +
+
+ + + + + + + +
void Queue::stop ()
+
+ +

Signals the queue to stop processing.

+ +
+
+ +
+
+ + + + + + + +
void Queue::wait ()
+
+ +

Wait for the queue to exit the queue loop.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
std::list<DelegateInterface *> sdr::Queue::_idle
+
+protected
+
+ +

Idle event callbacks.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::list<DelegateInterface *> sdr::Queue::_onStart
+
+protected
+
+ +

Start event callbacks.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::list<DelegateInterface *> sdr::Queue::_onStop
+
+protected
+
+ +

Stop event callbacks.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::list<Message> sdr::Queue::_queue
+
+protected
+
+ +

The message queue.

+ +
+
+ +
+
+ + + + + +
+ + + + +
pthread_cond_t sdr::Queue::_queue_cond
+
+protected
+
+ +

The queue condition.

+ +
+
+ +
+
+ + + + + +
+ + + + +
pthread_mutex_t sdr::Queue::_queue_lock
+
+protected
+
+ +

The queue mutex.

+ +
+
+ +
+
+ + + + + +
+ + + + +
bool sdr::Queue::_running
+
+protected
+
+ +

While this is true, the queue loop is executed.

+ +
+
+ +
+
+ + + + + +
+ + + + +
pthread_t sdr::Queue::_thread
+
+protected
+
+ +

If _parallel is true, the thread of the queue loop.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_queue_1_1_message-members.html b/classsdr_1_1_queue_1_1_message-members.html new file mode 100644 index 0000000..902704c --- /dev/null +++ b/classsdr_1_1_queue_1_1_message-members.html @@ -0,0 +1,116 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Queue::Message Member List
+
+
+ +

This is the complete list of members for sdr::Queue::Message, including all inherited members.

+ + + + + + + + + + + +
_allow_overwritesdr::Queue::Messageprotected
_buffersdr::Queue::Messageprotected
_sinksdr::Queue::Messageprotected
allowOverwrite() const sdr::Queue::Messageinline
buffer() const sdr::Queue::Messageinline
buffer()sdr::Queue::Messageinline
Message(const RawBuffer &buffer, SinkBase *sink, bool allow_overwrite)sdr::Queue::Messageinline
Message(const Message &other)sdr::Queue::Messageinline
operator=(const Message &other)sdr::Queue::Messageinline
sink() const sdr::Queue::Messageinline
+ + + + diff --git a/classsdr_1_1_queue_1_1_message.html b/classsdr_1_1_queue_1_1_message.html new file mode 100644 index 0000000..3cf05d4 --- /dev/null +++ b/classsdr_1_1_queue_1_1_message.html @@ -0,0 +1,417 @@ + + + + + + +libsdr: sdr::Queue::Message Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Queue::Message Class Reference
+
+
+ +

The internal used message type. + More...

+ +

#include <queue.hh>

+ + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Message (const RawBuffer &buffer, SinkBase *sink, bool allow_overwrite)
 Constructor. More...
 
 Message (const Message &other)
 Copy constructor. More...
 
const Messageoperator= (const Message &other)
 Assignment operator. More...
 
const RawBufferbuffer () const
 Returns the buffer of the message. More...
 
RawBufferbuffer ()
 Returns the buffer of the message. More...
 
SinkBasesink () const
 Returns the destination of the message. More...
 
bool allowOverwrite () const
 If true, the sender allows to overwrite the content of the buffer. More...
 
+ + + + + + + + + + +

+Protected Attributes

RawBuffer _buffer
 The buffer being send. More...
 
SinkBase_sink
 The destination. More...
 
bool _allow_overwrite
 If true, the sender allows to overwrite the buffer. More...
 
+

Detailed Description

+

The internal used message type.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
sdr::Queue::Message::Message (const RawBufferbuffer,
SinkBasesink,
bool allow_overwrite 
)
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
sdr::Queue::Message::Message (const Messageother)
+
+inline
+
+ +

Copy constructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
bool sdr::Queue::Message::allowOverwrite () const
+
+inline
+
+ +

If true, the sender allows to overwrite the content of the buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const RawBuffer& sdr::Queue::Message::buffer () const
+
+inline
+
+ +

Returns the buffer of the message.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
RawBuffer& sdr::Queue::Message::buffer ()
+
+inline
+
+ +

Returns the buffer of the message.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const Message& sdr::Queue::Message::operator= (const Messageother)
+
+inline
+
+ +

Assignment operator.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SinkBase* sdr::Queue::Message::sink () const
+
+inline
+
+ +

Returns the destination of the message.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
bool sdr::Queue::Message::_allow_overwrite
+
+protected
+
+ +

If true, the sender allows to overwrite the buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
RawBuffer sdr::Queue::Message::_buffer
+
+protected
+
+ +

The buffer being send.

+ +
+
+ +
+
+ + + + + +
+ + + + +
SinkBase* sdr::Queue::Message::_sink
+
+protected
+
+ +

The destination.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_r_t_l_source-members.html b/classsdr_1_1_r_t_l_source-members.html new file mode 100644 index 0000000..8cf9016 --- /dev/null +++ b/classsdr_1_1_r_t_l_source-members.html @@ -0,0 +1,145 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::RTLSource Member List
+
+
+ +

This is the complete list of members for sdr::RTLSource, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
__rtl_sdr_callback(unsigned char *buffer, uint32_t len, void *ctx)sdr::RTLSourceprotectedstatic
__rtl_srd_parallel_main(void *ctx)sdr::RTLSourceprotectedstatic
_agc_enabledsdr::RTLSourceprotected
_buffer_sizesdr::RTLSourceprotected
_configsdr::Sourceprotected
_devicesdr::RTLSourceprotected
_eossdr::Sourceprotected
_frequencysdr::RTLSourceprotected
_gainssdr::RTLSourceprotected
_sample_ratesdr::RTLSourceprotected
_sinkssdr::Sourceprotected
_threadsdr::RTLSourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
agcEnabled() const sdr::RTLSourceinline
connect(SinkBase *sink, bool direct=false)sdr::Source
deviceName(size_t idx)sdr::RTLSourcestatic
disconnect(SinkBase *sink)sdr::Source
enableAGC(bool enable)sdr::RTLSource
freqCorrection() const sdr::RTLSourceinline
frequency() const sdr::RTLSourceinline
gain() const sdr::RTLSourceinline
gainFactors() const sdr::RTLSourceinline
numDevices()sdr::RTLSourcestatic
propagateConfig(const Config &config)sdr::Sourceprotected
RTLSource(double frequency, double sample_rate=1e6, size_t device_idx=0)sdr::RTLSource
sampleRate() const sdr::RTLSourceinlinevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
setFreqCorrection(double ppm)sdr::RTLSource
setFrequency(double frequency)sdr::RTLSource
setGain(double gain)sdr::RTLSource
setSampleRate(double sample_rate)sdr::RTLSource
signalEOS()sdr::Sourceprotected
Source()sdr::Source
start()sdr::RTLSource
stop()sdr::RTLSource
type() const sdr::Sourcevirtual
~RTLSource()sdr::RTLSourcevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_r_t_l_source.html b/classsdr_1_1_r_t_l_source.html new file mode 100644 index 0000000..60e3b7c --- /dev/null +++ b/classsdr_1_1_r_t_l_source.html @@ -0,0 +1,888 @@ + + + + + + +libsdr: sdr::RTLSource Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::RTLSource Class Reference
+
+
+ +

Implements a uint_8 I/Q source for RTL2832 based TV dongles. + More...

+ +

#include <rtlsource.hh>

+
+Inheritance diagram for sdr::RTLSource:
+
+
+ + +sdr::Source + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RTLSource (double frequency, double sample_rate=1e6, size_t device_idx=0)
 Constructor. More...
 
virtual ~RTLSource ()
 Destructor. More...
 
double frequency () const
 Returns the freuency of the tuner. More...
 
void setFrequency (double frequency)
 (Re-) Sets the tuner frequency. More...
 
double freqCorrection () const
 Returns the frequency correction in parts per million (ppm). More...
 
void setFreqCorrection (double ppm)
 (Re-) Sets the frequency correction in ppm. More...
 
double sampleRate () const
 Returns the sample rate. More...
 
void setSampleRate (double sample_rate)
 (Re-) sets the sample rate. More...
 
bool agcEnabled () const
 Returns true if AGC is enabled. More...
 
void enableAGC (bool enable)
 Enable/Disable AGC. More...
 
double gain () const
 Returns the tuner gain. More...
 
void setGain (double gain)
 (Re-) Sets the tuner gain. More...
 
const std::vector< double > & gainFactors () const
 Retunrs a vector of supported gain factors. More...
 
void start ()
 Starts the reception. More...
 
void stop ()
 Stops the reception. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + +

+Static Public Member Functions

static size_t numDevices ()
 Returns the number of compatible devices found. More...
 
static std::string deviceName (size_t idx)
 Returns the name of the specified device. More...
 
+ + + + + + + +

+Static Protected Member Functions

static void * __rtl_srd_parallel_main (void *ctx)
 Prallel routine to receive some data from the device. More...
 
static void __rtl_sdr_callback (unsigned char *buffer, uint32_t len, void *ctx)
 Callback to process received data. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

double _frequency
 The current tuner frequency. More...
 
double _sample_rate
 The current sample rate. More...
 
bool _agc_enabled
 If true, the AGC is enabled. More...
 
std::vector< double > _gains
 A vector of gain factors supported by the device. More...
 
size_t _buffer_size
 The buffer size. More...
 
rtlsdr_dev_t * _device
 The RTL2832 device object. More...
 
pthread_t _thread
 The thread object. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

Implements a uint_8 I/Q source for RTL2832 based TV dongles.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
RTLSource::RTLSource (double frequency,
double sample_rate = 1e6,
size_t device_idx = 0 
)
+
+ +

Constructor.

+

By default the gain is set to be automatically determined, this can be changed with the enableAGC and setGain methods.

+
Parameters
+ + + + +
frequencySpecifies the tuner frequency.
sample_rateSpecifies the sample rate.
device_idxSpecifies the device to be used.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
RTLSource::~RTLSource ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void RTLSource::__rtl_sdr_callback (unsigned char * buffer,
uint32_t len,
void * ctx 
)
+
+staticprotected
+
+ +

Callback to process received data.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void * RTLSource::__rtl_srd_parallel_main (void * ctx)
+
+staticprotected
+
+ +

Prallel routine to receive some data from the device.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sdr::RTLSource::agcEnabled () const
+
+inline
+
+ +

Returns true if AGC is enabled.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
std::string RTLSource::deviceName (size_t idx)
+
+static
+
+ +

Returns the name of the specified device.

+ +
+
+ +
+
+ + + + + + + + +
void RTLSource::enableAGC (bool enable)
+
+ +

Enable/Disable AGC.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
double sdr::RTLSource::freqCorrection () const
+
+inline
+
+ +

Returns the frequency correction in parts per million (ppm).

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
double sdr::RTLSource::frequency () const
+
+inline
+
+ +

Returns the freuency of the tuner.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
double sdr::RTLSource::gain () const
+
+inline
+
+ +

Returns the tuner gain.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
const std::vector<double>& sdr::RTLSource::gainFactors () const
+
+inline
+
+ +

Retunrs a vector of supported gain factors.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t RTLSource::numDevices ()
+
+static
+
+ +

Returns the number of compatible devices found.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
double sdr::RTLSource::sampleRate () const
+
+inlinevirtual
+
+ +

Returns the sample rate.

+ +

Reimplemented from sdr::Source.

+ +
+
+ +
+
+ + + + + + + + +
void RTLSource::setFreqCorrection (double ppm)
+
+ +

(Re-) Sets the frequency correction in ppm.

+ +
+
+ +
+
+ + + + + + + + +
void RTLSource::setFrequency (double frequency)
+
+ +

(Re-) Sets the tuner frequency.

+ +
+
+ +
+
+ + + + + + + + +
void RTLSource::setGain (double gain)
+
+ +

(Re-) Sets the tuner gain.

+

Has no effect in AGC mode.

+ +
+
+ +
+
+ + + + + + + + +
void RTLSource::setSampleRate (double sample_rate)
+
+ +

(Re-) sets the sample rate.

+

This method also triggers the reconfiguration of all connected sinks.

+ +
+
+ +
+
+ + + + + + + +
void RTLSource::start ()
+
+ +

Starts the reception.

+ +
+
+ +
+
+ + + + + + + +
void RTLSource::stop ()
+
+ +

Stops the reception.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
bool sdr::RTLSource::_agc_enabled
+
+protected
+
+ +

If true, the AGC is enabled.

+ +
+
+ +
+
+ + + + + +
+ + + + +
size_t sdr::RTLSource::_buffer_size
+
+protected
+
+ +

The buffer size.

+ +
+
+ +
+
+ + + + + +
+ + + + +
rtlsdr_dev_t* sdr::RTLSource::_device
+
+protected
+
+ +

The RTL2832 device object.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double sdr::RTLSource::_frequency
+
+protected
+
+ +

The current tuner frequency.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::vector<double> sdr::RTLSource::_gains
+
+protected
+
+ +

A vector of gain factors supported by the device.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double sdr::RTLSource::_sample_rate
+
+protected
+
+ +

The current sample rate.

+ +
+
+ +
+
+ + + + + +
+ + + + +
pthread_t sdr::RTLSource::_thread
+
+protected
+
+ +

The thread object.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_r_t_l_source.png b/classsdr_1_1_r_t_l_source.png new file mode 100644 index 0000000..5463dc4 Binary files /dev/null and b/classsdr_1_1_r_t_l_source.png differ diff --git a/classsdr_1_1_raw_buffer-members.html b/classsdr_1_1_raw_buffer-members.html new file mode 100644 index 0000000..42ff3af --- /dev/null +++ b/classsdr_1_1_raw_buffer-members.html @@ -0,0 +1,129 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::RawBuffer Member List
+
+
+ +

This is the complete list of members for sdr::RawBuffer, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + +
_b_lengthsdr::RawBufferprotected
_b_offsetsdr::RawBufferprotected
_ownersdr::RawBufferprotected
_ptrsdr::RawBufferprotected
_refcountsdr::RawBufferprotected
_storage_sizesdr::RawBufferprotected
bytesLen() const sdr::RawBufferinline
bytesOffset() const sdr::RawBufferinline
data() const sdr::RawBufferinline
isEmpty() const sdr::RawBufferinline
isUnused() const sdr::RawBufferinline
operator=(const RawBuffer &other)sdr::RawBufferinline
ptr() const sdr::RawBufferinline
RawBuffer()sdr::RawBuffer
RawBuffer(char *data, size_t offset, size_t len)sdr::RawBuffer
RawBuffer(size_t N, BufferOwner *owner=0)sdr::RawBuffer
RawBuffer(const RawBuffer &other)sdr::RawBuffer
RawBuffer(const RawBuffer &other, size_t offset, size_t len)sdr::RawBuffer
ref() const sdr::RawBuffer
refCount() const sdr::RawBufferinline
storageSize() const sdr::RawBufferinline
unref()sdr::RawBuffer
~RawBuffer()sdr::RawBuffervirtual
+ + + + diff --git a/classsdr_1_1_raw_buffer.html b/classsdr_1_1_raw_buffer.html new file mode 100644 index 0000000..4bfa779 --- /dev/null +++ b/classsdr_1_1_raw_buffer.html @@ -0,0 +1,768 @@ + + + + + + +libsdr: sdr::RawBuffer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::RawBuffer Class Reference
+
+
+ +

Base class of all buffers, represents an untyped array of bytes. + More...

+ +

#include <buffer.hh>

+
+Inheritance diagram for sdr::RawBuffer:
+
+
+ + +sdr::Buffer< CScalar > +sdr::Buffer< CSScalar > +sdr::Buffer< float > +sdr::Buffer< oScalar > +sdr::Buffer< Scalar > +sdr::Buffer< SScalar > +sdr::Buffer< std::complex< double > > +sdr::Buffer< std::complex< float > > +sdr::Buffer< std::complex< oScalar > > +sdr::Buffer< std::complex< Scalar > > +sdr::Buffer< std::complex< SScalar > > +sdr::Buffer< uint8_t > +sdr::Buffer< T > +sdr::RawRingBuffer + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RawBuffer ()
 Constructs an empty buffer. More...
 
 RawBuffer (char *data, size_t offset, size_t len)
 Constructor from unowned data. More...
 
 RawBuffer (size_t N, BufferOwner *owner=0)
 Constructs a buffer and allocates N bytes. More...
 
 RawBuffer (const RawBuffer &other)
 Copy constructor. More...
 
 RawBuffer (const RawBuffer &other, size_t offset, size_t len)
 Creates a new view on the buffer. More...
 
virtual ~RawBuffer ()
 Destructor. More...
 
const RawBufferoperator= (const RawBuffer &other)
 Assignment. More...
 
char * ptr () const
 Returns the pointer to the data (w/o view). More...
 
char * data () const
 Returns the pointer to the data of the buffer view. More...
 
size_t bytesOffset () const
 Returns the offset of the data by the view. More...
 
size_t bytesLen () const
 Returns the size of the buffer by the view. More...
 
size_t storageSize () const
 Returns the raw buffer size in bytes. More...
 
bool isEmpty () const
 Returns true if the buffer is invalid/empty. More...
 
void ref () const
 Increment reference counter. More...
 
void unref ()
 Dereferences the buffer. More...
 
int refCount () const
 Returns the reference counter. More...
 
bool isUnused () const
 We assume here that buffers are owned by some object: A buffer is therefore "unused" if the owner holds the only reference to the buffer. More...
 
+ + + + + + + + + + + + + + + + + + + +

+Protected Attributes

char * _ptr
 Holds the pointer to the data or 0, if buffer is empty. More...
 
size_t _storage_size
 Holds the size of the buffer in bytes. More...
 
size_t _b_offset
 Holds the offset of the buffer in bytes. More...
 
size_t _b_length
 Holds the length of the buffer (view) in bytes. More...
 
int * _refcount
 The reference counter. More...
 
BufferOwner_owner
 Holds a weak reference the buffer owner. More...
 
+

Detailed Description

+

Base class of all buffers, represents an untyped array of bytes.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
RawBuffer::RawBuffer ()
+
+ +

Constructs an empty buffer.

+

An empty buffer cannot be owned.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
RawBuffer::RawBuffer (char * data,
size_t offset,
size_t len 
)
+
+ +

Constructor from unowned data.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
RawBuffer::RawBuffer (size_t N,
BufferOwnerowner = 0 
)
+
+ +

Constructs a buffer and allocates N bytes.

+ +
+
+ +
+
+ + + + + + + + +
RawBuffer::RawBuffer (const RawBufferother)
+
+ +

Copy constructor.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + + + + + + + +
RawBuffer::RawBuffer (const RawBufferother,
size_t offset,
size_t len 
)
+
+ +

Creates a new view on the buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
RawBuffer::~RawBuffer ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
size_t sdr::RawBuffer::bytesLen () const
+
+inline
+
+ +

Returns the size of the buffer by the view.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t sdr::RawBuffer::bytesOffset () const
+
+inline
+
+ +

Returns the offset of the data by the view.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char* sdr::RawBuffer::data () const
+
+inline
+
+ +

Returns the pointer to the data of the buffer view.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sdr::RawBuffer::isEmpty () const
+
+inline
+
+ +

Returns true if the buffer is invalid/empty.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
bool sdr::RawBuffer::isUnused () const
+
+inline
+
+ +

We assume here that buffers are owned by some object: A buffer is therefore "unused" if the owner holds the only reference to the buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const RawBuffer& sdr::RawBuffer::operator= (const RawBufferother)
+
+inline
+
+ +

Assignment.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
char* sdr::RawBuffer::ptr () const
+
+inline
+
+ +

Returns the pointer to the data (w/o view).

+ +
+
+ +
+
+ + + + + + + +
void RawBuffer::ref () const
+
+ +

Increment reference counter.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
int sdr::RawBuffer::refCount () const
+
+inline
+
+ +

Returns the reference counter.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t sdr::RawBuffer::storageSize () const
+
+inline
+
+ +

Returns the raw buffer size in bytes.

+ +
+
+ +
+
+ + + + + + + +
void RawBuffer::unref ()
+
+ +

Dereferences the buffer.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
size_t sdr::RawBuffer::_b_length
+
+protected
+
+ +

Holds the length of the buffer (view) in bytes.

+ +
+
+ +
+
+ + + + + +
+ + + + +
size_t sdr::RawBuffer::_b_offset
+
+protected
+
+ +

Holds the offset of the buffer in bytes.

+ +
+
+ +
+
+ + + + + +
+ + + + +
BufferOwner* sdr::RawBuffer::_owner
+
+protected
+
+ +

Holds a weak reference the buffer owner.

+ +
+
+ +
+
+ + + + + +
+ + + + +
char* sdr::RawBuffer::_ptr
+
+protected
+
+ +

Holds the pointer to the data or 0, if buffer is empty.

+ +
+
+ +
+
+ + + + + +
+ + + + +
int* sdr::RawBuffer::_refcount
+
+protected
+
+ +

The reference counter.

+ +
+
+ +
+
+ + + + + +
+ + + + +
size_t sdr::RawBuffer::_storage_size
+
+protected
+
+ +

Holds the size of the buffer in bytes.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_raw_buffer.png b/classsdr_1_1_raw_buffer.png new file mode 100644 index 0000000..1ec86f8 Binary files /dev/null and b/classsdr_1_1_raw_buffer.png differ diff --git a/classsdr_1_1_raw_ring_buffer-members.html b/classsdr_1_1_raw_ring_buffer-members.html new file mode 100644 index 0000000..197fe76 --- /dev/null +++ b/classsdr_1_1_raw_ring_buffer-members.html @@ -0,0 +1,143 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::RawRingBuffer Member List
+
+
+ +

This is the complete list of members for sdr::RawRingBuffer, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_b_lengthsdr::RawBufferprotected
_b_offsetsdr::RawBufferprotected
_b_storedsdr::RawRingBufferprotected
_ownersdr::RawBufferprotected
_ptrsdr::RawBufferprotected
_refcountsdr::RawBufferprotected
_storage_sizesdr::RawBufferprotected
_take_idxsdr::RawRingBufferprotected
bytesFree() const sdr::RawRingBufferinline
bytesLen() const sdr::RawRingBufferinline
bytesOffset() const sdr::RawBufferinline
clear()sdr::RawRingBufferinline
data() const sdr::RawBufferinline
drop(size_t N)sdr::RawRingBufferinline
isEmpty() const sdr::RawBufferinline
isUnused() const sdr::RawBufferinline
operator=(const RawRingBuffer &other)sdr::RawRingBufferinline
sdr::RawBuffer::operator=(const RawBuffer &other)sdr::RawBufferinline
operator[](int idx)sdr::RawRingBufferinline
ptr() const sdr::RawBufferinline
put(const RawBuffer &src)sdr::RawRingBufferinline
RawBuffer()sdr::RawBuffer
RawBuffer(char *data, size_t offset, size_t len)sdr::RawBuffer
RawBuffer(size_t N, BufferOwner *owner=0)sdr::RawBuffer
RawBuffer(const RawBuffer &other)sdr::RawBuffer
RawBuffer(const RawBuffer &other, size_t offset, size_t len)sdr::RawBuffer
RawRingBuffer()sdr::RawRingBuffer
RawRingBuffer(size_t size)sdr::RawRingBuffer
RawRingBuffer(const RawRingBuffer &other)sdr::RawRingBuffer
ref() const sdr::RawBuffer
refCount() const sdr::RawBufferinline
resize(size_t N)sdr::RawRingBufferinline
storageSize() const sdr::RawBufferinline
take(const RawBuffer &dest, size_t N)sdr::RawRingBufferinline
unref()sdr::RawBuffer
~RawBuffer()sdr::RawBuffervirtual
~RawRingBuffer()sdr::RawRingBuffervirtual
+ + + + diff --git a/classsdr_1_1_raw_ring_buffer.html b/classsdr_1_1_raw_ring_buffer.html new file mode 100644 index 0000000..3b406f7 --- /dev/null +++ b/classsdr_1_1_raw_ring_buffer.html @@ -0,0 +1,621 @@ + + + + + + +libsdr: sdr::RawRingBuffer Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::RawRingBuffer Class Reference
+
+
+ +

A simple ring buffer. + More...

+ +

#include <buffer.hh>

+
+Inheritance diagram for sdr::RawRingBuffer:
+
+
+ + +sdr::RawBuffer +sdr::RingBuffer< Scalar > + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RawRingBuffer ()
 Empty constructor. More...
 
 RawRingBuffer (size_t size)
 Constructs a raw ring buffer with size size. More...
 
 RawRingBuffer (const RawRingBuffer &other)
 Copy constructor. More...
 
virtual ~RawRingBuffer ()
 Destructor. More...
 
const RawRingBufferoperator= (const RawRingBuffer &other)
 Assignment operator, turns this ring buffer into a reference to the other one. More...
 
char & operator[] (int idx)
 Element access. More...
 
size_t bytesLen () const
 Returns the number of bytes available for reading. More...
 
size_t bytesFree () const
 Returns the number of free bytes in the ring buffer. More...
 
bool put (const RawBuffer &src)
 Puts the given data into the ring-buffer. More...
 
bool take (const RawBuffer &dest, size_t N)
 Take N bytes from the ring buffer and store it into the given buffer dest. More...
 
void drop (size_t N)
 Drops at most N bytes from the buffer. More...
 
void clear ()
 Clear the ring-buffer. More...
 
void resize (size_t N)
 Resizes the ring buffer. More...
 
- Public Member Functions inherited from sdr::RawBuffer
 RawBuffer ()
 Constructs an empty buffer. More...
 
 RawBuffer (char *data, size_t offset, size_t len)
 Constructor from unowned data. More...
 
 RawBuffer (size_t N, BufferOwner *owner=0)
 Constructs a buffer and allocates N bytes. More...
 
 RawBuffer (const RawBuffer &other)
 Copy constructor. More...
 
 RawBuffer (const RawBuffer &other, size_t offset, size_t len)
 Creates a new view on the buffer. More...
 
virtual ~RawBuffer ()
 Destructor. More...
 
const RawBufferoperator= (const RawBuffer &other)
 Assignment. More...
 
char * ptr () const
 Returns the pointer to the data (w/o view). More...
 
char * data () const
 Returns the pointer to the data of the buffer view. More...
 
size_t bytesOffset () const
 Returns the offset of the data by the view. More...
 
size_t bytesLen () const
 Returns the size of the buffer by the view. More...
 
size_t storageSize () const
 Returns the raw buffer size in bytes. More...
 
bool isEmpty () const
 Returns true if the buffer is invalid/empty. More...
 
void ref () const
 Increment reference counter. More...
 
void unref ()
 Dereferences the buffer. More...
 
int refCount () const
 Returns the reference counter. More...
 
bool isUnused () const
 We assume here that buffers are owned by some object: A buffer is therefore "unused" if the owner holds the only reference to the buffer. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

size_t _take_idx
 The current read pointer. More...
 
size_t _b_stored
 Offset of the write pointer relative to the _take_idx ptr, such that the number of stored bytes is _b_stored and the write index is (_take_idx+_b_stored) % _storage_size. More...
 
- Protected Attributes inherited from sdr::RawBuffer
char * _ptr
 Holds the pointer to the data or 0, if buffer is empty. More...
 
size_t _storage_size
 Holds the size of the buffer in bytes. More...
 
size_t _b_offset
 Holds the offset of the buffer in bytes. More...
 
size_t _b_length
 Holds the length of the buffer (view) in bytes. More...
 
int * _refcount
 The reference counter. More...
 
BufferOwner_owner
 Holds a weak reference the buffer owner. More...
 
+

Detailed Description

+

A simple ring buffer.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
RawRingBuffer::RawRingBuffer ()
+
+ +

Empty constructor.

+ +
+
+ +
+
+ + + + + + + + +
RawRingBuffer::RawRingBuffer (size_t size)
+
+ +

Constructs a raw ring buffer with size size.

+ +
+
+ +
+
+ + + + + + + + +
RawRingBuffer::RawRingBuffer (const RawRingBufferother)
+
+ +

Copy constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
RawRingBuffer::~RawRingBuffer ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + +
size_t sdr::RawRingBuffer::bytesFree () const
+
+inline
+
+ +

Returns the number of free bytes in the ring buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
size_t sdr::RawRingBuffer::bytesLen () const
+
+inline
+
+ +

Returns the number of bytes available for reading.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void sdr::RawRingBuffer::clear ()
+
+inline
+
+ +

Clear the ring-buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sdr::RawRingBuffer::drop (size_t N)
+
+inline
+
+ +

Drops at most N bytes from the buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
const RawRingBuffer& sdr::RawRingBuffer::operator= (const RawRingBufferother)
+
+inline
+
+ +

Assignment operator, turns this ring buffer into a reference to the other one.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
char& sdr::RawRingBuffer::operator[] (int idx)
+
+inline
+
+ +

Element access.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
bool sdr::RawRingBuffer::put (const RawBuffersrc)
+
+inline
+
+ +

Puts the given data into the ring-buffer.

+

The size of src must be smaller or equal to the number of free bytes. Returns true if the data was written successfully to the buffer.

+
Todo:
Allow overwrite
+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void sdr::RawRingBuffer::resize (size_t N)
+
+inline
+
+ +

Resizes the ring buffer.

+

Also clears it.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool sdr::RawRingBuffer::take (const RawBufferdest,
size_t N 
)
+
+inline
+
+ +

Take N bytes from the ring buffer and store it into the given buffer dest.

+

Returns true if the data was taken successfully from the ring buffer.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
size_t sdr::RawRingBuffer::_b_stored
+
+protected
+
+ +

Offset of the write pointer relative to the _take_idx ptr, such that the number of stored bytes is _b_stored and the write index is (_take_idx+_b_stored) % _storage_size.

+ +
+
+ +
+
+ + + + + +
+ + + + +
size_t sdr::RawRingBuffer::_take_idx
+
+protected
+
+ +

The current read pointer.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_raw_ring_buffer.png b/classsdr_1_1_raw_ring_buffer.png new file mode 100644 index 0000000..fb1c62a Binary files /dev/null and b/classsdr_1_1_raw_ring_buffer.png differ diff --git a/classsdr_1_1_real_imag_part-members.html b/classsdr_1_1_real_imag_part-members.html new file mode 100644 index 0000000..c11023d --- /dev/null +++ b/classsdr_1_1_real_imag_part-members.html @@ -0,0 +1,131 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::RealImagPart< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::RealImagPart< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::RealImagPart< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_scalesdr::RealImagPart< Scalar >protected
_select_realsdr::RealImagPart< Scalar >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::RealImagPart< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< std::complex< Scalar > >inlinevirtual
process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)sdr::RealImagPart< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
RealImagPart(bool select_real, double scale=1.0)sdr::RealImagPart< Scalar >inline
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< std::complex< Scalar > >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~Sink()sdr::Sink< std::complex< Scalar > >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_real_imag_part.html b/classsdr_1_1_real_imag_part.html new file mode 100644 index 0000000..0194634 --- /dev/null +++ b/classsdr_1_1_real_imag_part.html @@ -0,0 +1,408 @@ + + + + + + +libsdr: sdr::RealImagPart< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::RealImagPart< Scalar > Class Template Reference
+
+
+ +

Extracts the real or imaginary part of a complex valued data stream. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::RealImagPart< Scalar >:
+
+
+ + +sdr::Sink< std::complex< Scalar > > +sdr::Source +sdr::SinkBase +sdr::ImagPart< Scalar > +sdr::RealPart< Scalar > + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RealImagPart (bool select_real, double scale=1.0)
 Constructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the node. More...
 
virtual void process (const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
 Processes the incomming data. More...
 
- Public Member Functions inherited from sdr::Sink< std::complex< Scalar > >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

Buffer< Scalar > _buffer
 The output buffer. More...
 
bool _select_real
 Real/Imag selection. More...
 
double _scale
 The scale. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::RealImagPart< Scalar >

+ +

Extracts the real or imaginary part of a complex valued data stream.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::RealImagPart< Scalar >::RealImagPart (bool select_real,
double scale = 1.0 
)
+
+inline
+
+ +

Constructor.

+

If select_real is true, the real part is selected, if select_real is false, the imaginary part is selected.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::RealImagPart< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::RealImagPart< Scalar >::process (const Buffer< std::complex< Scalar > > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Processes the incomming data.

+ +

Implements sdr::Sink< std::complex< Scalar > >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::RealImagPart< Scalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::RealImagPart< Scalar >::_scale
+
+protected
+
+ +

The scale.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
bool sdr::RealImagPart< Scalar >::_select_real
+
+protected
+
+ +

Real/Imag selection.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_real_imag_part.png b/classsdr_1_1_real_imag_part.png new file mode 100644 index 0000000..2641997 Binary files /dev/null and b/classsdr_1_1_real_imag_part.png differ diff --git a/classsdr_1_1_real_part-members.html b/classsdr_1_1_real_part-members.html new file mode 100644 index 0000000..3bf9d13 --- /dev/null +++ b/classsdr_1_1_real_part-members.html @@ -0,0 +1,132 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::RealPart< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::RealPart< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::RealImagPart< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_scalesdr::RealImagPart< Scalar >protected
_select_realsdr::RealImagPart< Scalar >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::RealImagPart< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< std::complex< Scalar > >inlinevirtual
process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)sdr::RealImagPart< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
RealImagPart(bool select_real, double scale=1.0)sdr::RealImagPart< Scalar >inline
RealPart(double scale=1.0)sdr::RealPart< Scalar >inline
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< std::complex< Scalar > >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~Sink()sdr::Sink< std::complex< Scalar > >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_real_part.html b/classsdr_1_1_real_part.html new file mode 100644 index 0000000..d7c3e02 --- /dev/null +++ b/classsdr_1_1_real_part.html @@ -0,0 +1,253 @@ + + + + + + +libsdr: sdr::RealPart< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::RealPart< Scalar > Class Template Reference
+
+
+ +

Selects the real part of a complex signal. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::RealPart< Scalar >:
+
+
+ + +sdr::RealImagPart< Scalar > +sdr::Sink< std::complex< Scalar > > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RealPart (double scale=1.0)
 Constructor. More...
 
- Public Member Functions inherited from sdr::RealImagPart< Scalar >
 RealImagPart (bool select_real, double scale=1.0)
 Constructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the node. More...
 
virtual void process (const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
 Processes the incomming data. More...
 
- Public Member Functions inherited from sdr::Sink< std::complex< Scalar > >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
- Protected Attributes inherited from sdr::RealImagPart< Scalar >
Buffer< Scalar > _buffer
 The output buffer. More...
 
bool _select_real
 Real/Imag selection. More...
 
double _scale
 The scale. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::RealPart< Scalar >

+ +

Selects the real part of a complex signal.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::RealPart< Scalar >::RealPart (double scale = 1.0)
+
+inline
+
+ +

Constructor.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_real_part.png b/classsdr_1_1_real_part.png new file mode 100644 index 0000000..09ca7c0 Binary files /dev/null and b/classsdr_1_1_real_part.png differ diff --git a/classsdr_1_1_ring_buffer-members.html b/classsdr_1_1_ring_buffer-members.html new file mode 100644 index 0000000..266926e --- /dev/null +++ b/classsdr_1_1_ring_buffer-members.html @@ -0,0 +1,155 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::RingBuffer< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::RingBuffer< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_b_lengthsdr::RawBufferprotected
_b_offsetsdr::RawBufferprotected
_b_storedsdr::RawRingBufferprotected
_ownersdr::RawBufferprotected
_ptrsdr::RawBufferprotected
_refcountsdr::RawBufferprotected
_sizesdr::RingBuffer< Scalar >protected
_storage_sizesdr::RawBufferprotected
_storedsdr::RingBuffer< Scalar >protected
_take_idxsdr::RawRingBufferprotected
bytesFree() const sdr::RawRingBufferinline
bytesLen() const sdr::RawRingBufferinline
bytesOffset() const sdr::RawBufferinline
clear()sdr::RawRingBufferinline
data() const sdr::RawBufferinline
drop(size_t N)sdr::RingBuffer< Scalar >inline
free() const sdr::RingBuffer< Scalar >inline
isEmpty() const sdr::RawBufferinline
isUnused() const sdr::RawBufferinline
operator=(const RingBuffer< Scalar > &other)sdr::RingBuffer< Scalar >inline
sdr::RawRingBuffer::operator=(const RawRingBuffer &other)sdr::RawRingBufferinline
sdr::RawBuffer::operator=(const RawBuffer &other)sdr::RawBufferinline
operator[](int idx)sdr::RingBuffer< Scalar >inline
ptr() const sdr::RawBufferinline
put(const Buffer< Scalar > &data)sdr::RingBuffer< Scalar >inline
sdr::RawRingBuffer::put(const RawBuffer &src)sdr::RawRingBufferinline
RawBuffer()sdr::RawBuffer
RawBuffer(char *data, size_t offset, size_t len)sdr::RawBuffer
RawBuffer(size_t N, BufferOwner *owner=0)sdr::RawBuffer
RawBuffer(const RawBuffer &other)sdr::RawBuffer
RawBuffer(const RawBuffer &other, size_t offset, size_t len)sdr::RawBuffer
RawRingBuffer()sdr::RawRingBuffer
RawRingBuffer(size_t size)sdr::RawRingBuffer
RawRingBuffer(const RawRingBuffer &other)sdr::RawRingBuffer
ref() const sdr::RawBuffer
refCount() const sdr::RawBufferinline
resize(size_t N)sdr::RingBuffer< Scalar >inline
RingBuffer()sdr::RingBuffer< Scalar >inline
RingBuffer(size_t N)sdr::RingBuffer< Scalar >inline
RingBuffer(const RingBuffer< Scalar > &other)sdr::RingBuffer< Scalar >inline
size() const sdr::RingBuffer< Scalar >inline
storageSize() const sdr::RawBufferinline
stored() const sdr::RingBuffer< Scalar >inline
take(const Buffer< Scalar > &dest, size_t N)sdr::RingBuffer< Scalar >inline
sdr::RawRingBuffer::take(const RawBuffer &dest, size_t N)sdr::RawRingBufferinline
unref()sdr::RawBuffer
~RawBuffer()sdr::RawBuffervirtual
~RawRingBuffer()sdr::RawRingBuffervirtual
~RingBuffer()sdr::RingBuffer< Scalar >inlinevirtual
+ + + + diff --git a/classsdr_1_1_ring_buffer.html b/classsdr_1_1_ring_buffer.html new file mode 100644 index 0000000..f689381 --- /dev/null +++ b/classsdr_1_1_ring_buffer.html @@ -0,0 +1,722 @@ + + + + + + +libsdr: sdr::RingBuffer< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::RingBuffer< Scalar > Class Template Reference
+
+
+ +

A simple typed ring-buffer. + More...

+ +

#include <buffer.hh>

+
+Inheritance diagram for sdr::RingBuffer< Scalar >:
+
+
+ + +sdr::RawRingBuffer +sdr::RawBuffer + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RingBuffer ()
 Empty constructor. More...
 
 RingBuffer (size_t N)
 Constructs a ring buffer of size N. More...
 
 RingBuffer (const RingBuffer< Scalar > &other)
 Copy constructor, creates a reference to the other ring buffer. More...
 
virtual ~RingBuffer ()
 Destructor. More...
 
const RingBuffer< Scalar > & operator= (const RingBuffer< Scalar > &other)
 Assigment operator, turns this buffer into a reference to the other ring buffer. More...
 
Scalar & operator[] (int idx)
 Element access. More...
 
size_t stored () const
 Returns the number of stored elements. More...
 
size_t free () const
 Returns the number of free elements. More...
 
size_t size () const
 Returns the size of the ring buffer. More...
 
bool put (const Buffer< Scalar > &data)
 Puts the given elements into the ring buffer. More...
 
bool take (const Buffer< Scalar > &dest, size_t N)
 Takes N elements from the buffer and stores them into dest. More...
 
void drop (size_t N)
 Drops N elements from the ring buffer. More...
 
void resize (size_t N)
 Resizes the ring buffer to N elements. More...
 
- Public Member Functions inherited from sdr::RawRingBuffer
 RawRingBuffer ()
 Empty constructor. More...
 
 RawRingBuffer (size_t size)
 Constructs a raw ring buffer with size size. More...
 
 RawRingBuffer (const RawRingBuffer &other)
 Copy constructor. More...
 
virtual ~RawRingBuffer ()
 Destructor. More...
 
const RawRingBufferoperator= (const RawRingBuffer &other)
 Assignment operator, turns this ring buffer into a reference to the other one. More...
 
char & operator[] (int idx)
 Element access. More...
 
size_t bytesLen () const
 Returns the number of bytes available for reading. More...
 
size_t bytesFree () const
 Returns the number of free bytes in the ring buffer. More...
 
bool put (const RawBuffer &src)
 Puts the given data into the ring-buffer. More...
 
bool take (const RawBuffer &dest, size_t N)
 Take N bytes from the ring buffer and store it into the given buffer dest. More...
 
void drop (size_t N)
 Drops at most N bytes from the buffer. More...
 
void clear ()
 Clear the ring-buffer. More...
 
void resize (size_t N)
 Resizes the ring buffer. More...
 
- Public Member Functions inherited from sdr::RawBuffer
 RawBuffer ()
 Constructs an empty buffer. More...
 
 RawBuffer (char *data, size_t offset, size_t len)
 Constructor from unowned data. More...
 
 RawBuffer (size_t N, BufferOwner *owner=0)
 Constructs a buffer and allocates N bytes. More...
 
 RawBuffer (const RawBuffer &other)
 Copy constructor. More...
 
 RawBuffer (const RawBuffer &other, size_t offset, size_t len)
 Creates a new view on the buffer. More...
 
virtual ~RawBuffer ()
 Destructor. More...
 
const RawBufferoperator= (const RawBuffer &other)
 Assignment. More...
 
char * ptr () const
 Returns the pointer to the data (w/o view). More...
 
char * data () const
 Returns the pointer to the data of the buffer view. More...
 
size_t bytesOffset () const
 Returns the offset of the data by the view. More...
 
size_t bytesLen () const
 Returns the size of the buffer by the view. More...
 
size_t storageSize () const
 Returns the raw buffer size in bytes. More...
 
bool isEmpty () const
 Returns true if the buffer is invalid/empty. More...
 
void ref () const
 Increment reference counter. More...
 
void unref ()
 Dereferences the buffer. More...
 
int refCount () const
 Returns the reference counter. More...
 
bool isUnused () const
 We assume here that buffers are owned by some object: A buffer is therefore "unused" if the owner holds the only reference to the buffer. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

size_t _size
 The size of the ring buffer. More...
 
size_t _stored
 The number of stored elements. More...
 
- Protected Attributes inherited from sdr::RawRingBuffer
size_t _take_idx
 The current read pointer. More...
 
size_t _b_stored
 Offset of the write pointer relative to the _take_idx ptr, such that the number of stored bytes is _b_stored and the write index is (_take_idx+_b_stored) % _storage_size. More...
 
- Protected Attributes inherited from sdr::RawBuffer
char * _ptr
 Holds the pointer to the data or 0, if buffer is empty. More...
 
size_t _storage_size
 Holds the size of the buffer in bytes. More...
 
size_t _b_offset
 Holds the offset of the buffer in bytes. More...
 
size_t _b_length
 Holds the length of the buffer (view) in bytes. More...
 
int * _refcount
 The reference counter. More...
 
BufferOwner_owner
 Holds a weak reference the buffer owner. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::RingBuffer< Scalar >

+ +

A simple typed ring-buffer.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
sdr::RingBuffer< Scalar >::RingBuffer ()
+
+inline
+
+ +

Empty constructor.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
sdr::RingBuffer< Scalar >::RingBuffer (size_t N)
+
+inline
+
+ +

Constructs a ring buffer of size N.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
sdr::RingBuffer< Scalar >::RingBuffer (const RingBuffer< Scalar > & other)
+
+inline
+
+ +

Copy constructor, creates a reference to the other ring buffer.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
virtual sdr::RingBuffer< Scalar >::~RingBuffer ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
void sdr::RingBuffer< Scalar >::drop (size_t N)
+
+inline
+
+ +

Drops N elements from the ring buffer.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
size_t sdr::RingBuffer< Scalar >::free () const
+
+inline
+
+ +

Returns the number of free elements.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
const RingBuffer<Scalar>& sdr::RingBuffer< Scalar >::operator= (const RingBuffer< Scalar > & other)
+
+inline
+
+ +

Assigment operator, turns this buffer into a reference to the other ring buffer.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
Scalar& sdr::RingBuffer< Scalar >::operator[] (int idx)
+
+inline
+
+ +

Element access.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
bool sdr::RingBuffer< Scalar >::put (const Buffer< Scalar > & data)
+
+inline
+
+ +

Puts the given elements into the ring buffer.

+

If the elements do not fit into the buffer, false is returned.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + +
void sdr::RingBuffer< Scalar >::resize (size_t N)
+
+inline
+
+ +

Resizes the ring buffer to N elements.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
size_t sdr::RingBuffer< Scalar >::size () const
+
+inline
+
+ +

Returns the size of the ring buffer.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
size_t sdr::RingBuffer< Scalar >::stored () const
+
+inline
+
+ +

Returns the number of stored elements.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
bool sdr::RingBuffer< Scalar >::take (const Buffer< Scalar > & dest,
size_t N 
)
+
+inline
+
+ +

Takes N elements from the buffer and stores them into dest.

+

Returns true on success.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
size_t sdr::RingBuffer< Scalar >::_size
+
+protected
+
+ +

The size of the ring buffer.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + +
size_t sdr::RingBuffer< Scalar >::_stored
+
+protected
+
+ +

The number of stored elements.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_ring_buffer.png b/classsdr_1_1_ring_buffer.png new file mode 100644 index 0000000..1a4586a Binary files /dev/null and b/classsdr_1_1_ring_buffer.png differ diff --git a/classsdr_1_1_runtime_error-members.html b/classsdr_1_1_runtime_error-members.html new file mode 100644 index 0000000..eb91a4d --- /dev/null +++ b/classsdr_1_1_runtime_error-members.html @@ -0,0 +1,113 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::RuntimeError Member List
+
+
+ +

This is the complete list of members for sdr::RuntimeError, including all inherited members.

+ + + + + + + + +
RuntimeError()sdr::RuntimeErrorinline
RuntimeError(const RuntimeError &other)sdr::RuntimeErrorinline
SDRError()sdr::SDRErrorinline
SDRError(const SDRError &other)sdr::SDRErrorinline
what() const sdr::SDRErrorinlinevirtual
~RuntimeError()sdr::RuntimeErrorinlinevirtual
~SDRError()sdr::SDRErrorinlinevirtual
+ + + + diff --git a/classsdr_1_1_runtime_error.html b/classsdr_1_1_runtime_error.html new file mode 100644 index 0000000..ed2ad08 --- /dev/null +++ b/classsdr_1_1_runtime_error.html @@ -0,0 +1,234 @@ + + + + + + +libsdr: sdr::RuntimeError Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::RuntimeError Class Reference
+
+
+ +

The runtime error class. + More...

+ +

#include <exception.hh>

+
+Inheritance diagram for sdr::RuntimeError:
+
+
+ + +sdr::SDRError + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 RuntimeError ()
 Constructor. More...
 
 RuntimeError (const RuntimeError &other)
 Copy constructor. More...
 
virtual ~RuntimeError () throw ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::SDRError
 SDRError ()
 Constructor. More...
 
 SDRError (const SDRError &other)
 Copy constructor. More...
 
virtual ~SDRError () throw ()
 Destructor. More...
 
virtual const char * what () const throw ()
 Implements the std::exception interface. More...
 
+

Detailed Description

+

The runtime error class.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
sdr::RuntimeError::RuntimeError ()
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
sdr::RuntimeError::RuntimeError (const RuntimeErrorother)
+
+inline
+
+ +

Copy constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + +
virtual sdr::RuntimeError::~RuntimeError ()
throw (
)
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_runtime_error.png b/classsdr_1_1_runtime_error.png new file mode 100644 index 0000000..7548f45 Binary files /dev/null and b/classsdr_1_1_runtime_error.png differ diff --git a/classsdr_1_1_s_d_r_error-members.html b/classsdr_1_1_s_d_r_error-members.html new file mode 100644 index 0000000..b7c3c8a --- /dev/null +++ b/classsdr_1_1_s_d_r_error-members.html @@ -0,0 +1,110 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::SDRError Member List
+
+
+ +

This is the complete list of members for sdr::SDRError, including all inherited members.

+ + + + + +
SDRError()sdr::SDRErrorinline
SDRError(const SDRError &other)sdr::SDRErrorinline
what() const sdr::SDRErrorinlinevirtual
~SDRError()sdr::SDRErrorinlinevirtual
+ + + + diff --git a/classsdr_1_1_s_d_r_error.html b/classsdr_1_1_s_d_r_error.html new file mode 100644 index 0000000..4465855 --- /dev/null +++ b/classsdr_1_1_s_d_r_error.html @@ -0,0 +1,257 @@ + + + + + + +libsdr: sdr::SDRError Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::SDRError Class Reference
+
+
+ +

Base class of all SDR exceptions. + More...

+ +

#include <exception.hh>

+
+Inheritance diagram for sdr::SDRError:
+
+
+ + +sdr::ConfigError +sdr::RuntimeError + +
+ + + + + + + + + + + + + + +

+Public Member Functions

 SDRError ()
 Constructor. More...
 
 SDRError (const SDRError &other)
 Copy constructor. More...
 
virtual ~SDRError () throw ()
 Destructor. More...
 
virtual const char * what () const throw ()
 Implements the std::exception interface. More...
 
+

Detailed Description

+

Base class of all SDR exceptions.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + +
+ + + + + + + +
sdr::SDRError::SDRError ()
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
sdr::SDRError::SDRError (const SDRErrorother)
+
+inline
+
+ +

Copy constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + +
virtual sdr::SDRError::~SDRError ()
throw (
)
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + +
virtual const char* sdr::SDRError::what () const
throw (
)
+
+inlinevirtual
+
+ +

Implements the std::exception interface.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_s_d_r_error.png b/classsdr_1_1_s_d_r_error.png new file mode 100644 index 0000000..d0ceb3f Binary files /dev/null and b/classsdr_1_1_s_d_r_error.png differ diff --git a/classsdr_1_1_scale-members.html b/classsdr_1_1_scale-members.html new file mode 100644 index 0000000..c8ebdaa --- /dev/null +++ b/classsdr_1_1_scale-members.html @@ -0,0 +1,132 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Scale< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::Scale< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::Scale< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_scalesdr::Scale< Scalar >protected
_shiftsdr::Scale< Scalar >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::Scale< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::Scale< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
Scale(float scale=1, Scalar shift=0)sdr::Scale< Scalar >inline
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~Scale()sdr::Scale< Scalar >inlinevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_scale.html b/classsdr_1_1_scale.html new file mode 100644 index 0000000..44f9906 --- /dev/null +++ b/classsdr_1_1_scale.html @@ -0,0 +1,435 @@ + + + + + + +libsdr: sdr::Scale< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Scale< Scalar > Class Template Reference
+
+
+ +

Simple scaling node. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::Scale< Scalar >:
+
+
+ + +sdr::Sink< Scalar > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Scale (float scale=1, Scalar shift=0)
 Constructs the scaling node. More...
 
virtual ~Scale ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the scaleing node. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Performs the scaleing. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

Buffer< Scalar > _buffer
 The output buffer, unused if the scaling is performed in-place. More...
 
float _scale
 The scaling. More...
 
Scalar _shift
 Alternative formulation for the scaling, using integer shift operators. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::Scale< Scalar >

+ +

Simple scaling node.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
sdr::Scale< Scalar >::Scale (float scale = 1,
Scalar shift = 0 
)
+
+inline
+
+ +

Constructs the scaling node.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::Scale< Scalar >::~Scale ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::Scale< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the scaleing node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::Scale< Scalar >::process (const Buffer< Scalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Performs the scaleing.

+ +

Implements sdr::Sink< Scalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::Scale< Scalar >::_buffer
+
+protected
+
+ +

The output buffer, unused if the scaling is performed in-place.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
float sdr::Scale< Scalar >::_scale
+
+protected
+
+ +

The scaling.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Scalar sdr::Scale< Scalar >::_shift
+
+protected
+
+ +

Alternative formulation for the scaling, using integer shift operators.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_scale.png b/classsdr_1_1_scale.png new file mode 100644 index 0000000..78504b4 Binary files /dev/null and b/classsdr_1_1_scale.png differ diff --git a/classsdr_1_1_sig_gen-members.html b/classsdr_1_1_sig_gen-members.html new file mode 100644 index 0000000..78cdbce --- /dev/null +++ b/classsdr_1_1_sig_gen-members.html @@ -0,0 +1,132 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::SigGen< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::SigGen< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::SigGen< Scalar >protected
_bufferSizesdr::SigGen< Scalar >protected
_configsdr::Sourceprotected
_dtsdr::SigGen< Scalar >protected
_eossdr::Sourceprotected
_sampleRatesdr::SigGen< Scalar >protected
_scalesdr::SigGen< Scalar >protected
_signalssdr::SigGen< Scalar >protected
_sinkssdr::Sourceprotected
_tsdr::SigGen< Scalar >protected
_tMaxsdr::SigGen< Scalar >protected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
addSine(double freq, double ampl=1, double phase=0)sdr::SigGen< Scalar >inline
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
next()sdr::SigGen< Scalar >inline
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
SigGen(double samplerate, size_t buffersize, double tmax=-1)sdr::SigGen< Scalar >inline
signalEOS()sdr::Sourceprotected
Source()sdr::Source
type() const sdr::Sourcevirtual
~SigGen()sdr::SigGen< Scalar >inlinevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_sig_gen.html b/classsdr_1_1_sig_gen.html new file mode 100644 index 0000000..4dc7806 --- /dev/null +++ b/classsdr_1_1_sig_gen.html @@ -0,0 +1,559 @@ + + + + + + +libsdr: sdr::SigGen< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::SigGen< Scalar > Class Template Reference
+
+
+ +

Arbitrary function generator. + More...

+ +

#include <siggen.hh>

+
+Inheritance diagram for sdr::SigGen< Scalar >:
+
+
+ + +sdr::Source + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SigGen (double samplerate, size_t buffersize, double tmax=-1)
 Constructs the function generator. More...
 
virtual ~SigGen ()
 Destructor. More...
 
void next ()
 Computes the next buffer. More...
 
void addSine (double freq, double ampl=1, double phase=0)
 Add a sine function to the function generator. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

double _sampleRate
 The sample rate of the function generator. More...
 
double _dt
 The sample period. More...
 
double _t
 The current time. More...
 
double _tMax
 The maximum time. More...
 
double _scale
 The scaling of the signal. More...
 
std::list< std::vector< double > > _signals
 A list of functions. More...
 
size_t _bufferSize
 The size of the output buffer. More...
 
Buffer< Scalar > _buffer
 The output buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::SigGen< Scalar >

+ +

Arbitrary function generator.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
sdr::SigGen< Scalar >::SigGen (double samplerate,
size_t buffersize,
double tmax = -1 
)
+
+inline
+
+ +

Constructs the function generator.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::SigGen< Scalar >::~SigGen ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
void sdr::SigGen< Scalar >::addSine (double freq,
double ampl = 1,
double phase = 0 
)
+
+inline
+
+ +

Add a sine function to the function generator.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
void sdr::SigGen< Scalar >::next ()
+
+inline
+
+ +

Computes the next buffer.

+

This function can be connected to the idle signal of the Queue.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::SigGen< Scalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::SigGen< Scalar >::_bufferSize
+
+protected
+
+ +

The size of the output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::SigGen< Scalar >::_dt
+
+protected
+
+ +

The sample period.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::SigGen< Scalar >::_sampleRate
+
+protected
+
+ +

The sample rate of the function generator.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::SigGen< Scalar >::_scale
+
+protected
+
+ +

The scaling of the signal.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::list< std::vector<double> > sdr::SigGen< Scalar >::_signals
+
+protected
+
+ +

A list of functions.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::SigGen< Scalar >::_t
+
+protected
+
+ +

The current time.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::SigGen< Scalar >::_tMax
+
+protected
+
+ +

The maximum time.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_sig_gen.png b/classsdr_1_1_sig_gen.png new file mode 100644 index 0000000..12935fe Binary files /dev/null and b/classsdr_1_1_sig_gen.png differ diff --git a/classsdr_1_1_signed_to_unsigned-members.html b/classsdr_1_1_signed_to_unsigned-members.html new file mode 100644 index 0000000..be5b95c --- /dev/null +++ b/classsdr_1_1_signed_to_unsigned-members.html @@ -0,0 +1,130 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::SignedToUnsigned Member List
+
+
+ +

This is the complete list of members for sdr::SignedToUnsigned, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::SignedToUnsignedprotected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_processsdr::SignedToUnsignedprotected
_process_int16(const RawBuffer &in, const RawBuffer &out)sdr::SignedToUnsignedprotected
_process_int8(const RawBuffer &in, const RawBuffer &out)sdr::SignedToUnsignedprotected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::SignedToUnsignedvirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::SignedToUnsignedvirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
SignedToUnsigned()sdr::SignedToUnsigned
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
~SignedToUnsigned()sdr::SignedToUnsignedvirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_signed_to_unsigned.html b/classsdr_1_1_signed_to_unsigned.html new file mode 100644 index 0000000..96531ab --- /dev/null +++ b/classsdr_1_1_signed_to_unsigned.html @@ -0,0 +1,443 @@ + + + + + + +libsdr: sdr::SignedToUnsigned Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::SignedToUnsigned Class Reference
+
+
+ +

Performs a reinterprete cast from an unsinged value to a singed one. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::SignedToUnsigned:
+
+
+ + +sdr::SinkBase +sdr::Source + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SignedToUnsigned ()
 Constructor with optional scaleing. More...
 
virtual ~SignedToUnsigned ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the cast node. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Performs the cast. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + +

+Protected Member Functions

void _process_int8 (const RawBuffer &in, const RawBuffer &out)
 Performs the int8 -> uint8 cast. More...
 
void _process_int16 (const RawBuffer &in, const RawBuffer &out)
 Performs the int16 -> uint16 cast. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + + + + +

+Protected Attributes

void(SignedToUnsigned::* _process )(const RawBuffer &in, const RawBuffer &out)
 Type-cast callback. More...
 
RawBuffer _buffer
 The output buffer, unused if the cast is performed in-place. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

Performs a reinterprete cast from an unsinged value to a singed one.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
SignedToUnsigned::SignedToUnsigned ()
+
+ +

Constructor with optional scaleing.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SignedToUnsigned::~SignedToUnsigned ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SignedToUnsigned::_process_int16 (const RawBufferin,
const RawBufferout 
)
+
+protected
+
+ +

Performs the int16 -> uint16 cast.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SignedToUnsigned::_process_int8 (const RawBufferin,
const RawBufferout 
)
+
+protected
+
+ +

Performs the int8 -> uint8 cast.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void SignedToUnsigned::config (const Configsrc_cfg)
+
+virtual
+
+ +

Configures the cast node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void SignedToUnsigned::handleBuffer (const RawBufferbuffer,
bool allow_overwrite 
)
+
+virtual
+
+ +

Performs the cast.

+ +

Implements sdr::SinkBase.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
RawBuffer sdr::SignedToUnsigned::_buffer
+
+protected
+
+ +

The output buffer, unused if the cast is performed in-place.

+ +
+
+ +
+
+ + + + + +
+ + + + +
void(SignedToUnsigned::* sdr::SignedToUnsigned::_process)(const RawBuffer &in, const RawBuffer &out)
+
+protected
+
+ +

Type-cast callback.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_signed_to_unsigned.png b/classsdr_1_1_signed_to_unsigned.png new file mode 100644 index 0000000..ac56074 Binary files /dev/null and b/classsdr_1_1_signed_to_unsigned.png differ diff --git a/classsdr_1_1_sink-members.html b/classsdr_1_1_sink-members.html new file mode 100644 index 0000000..e6d41d4 --- /dev/null +++ b/classsdr_1_1_sink-members.html @@ -0,0 +1,113 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Sink< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::Sink< Scalar >, including all inherited members.

+ + + + + + + + +
config(const Config &src_cfg)=0sdr::SinkBasepure virtual
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
process(const Buffer< Scalar > &buffer, bool allow_overwrite)=0sdr::Sink< Scalar >pure virtual
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
+ + + + diff --git a/classsdr_1_1_sink.html b/classsdr_1_1_sink.html new file mode 100644 index 0000000..9890561 --- /dev/null +++ b/classsdr_1_1_sink.html @@ -0,0 +1,307 @@ + + + + + + +libsdr: sdr::Sink< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Sink< Scalar > Class Template Referenceabstract
+
+
+ +

Typed sink. + More...

+ +

#include <node.hh>

+
+Inheritance diagram for sdr::Sink< Scalar >:
+
+
+ + +sdr::SinkBase +sdr::FIRFilter< Scalar, FIRBandPassCoeffs > +sdr::FIRFilter< Scalar, FIRBandStopCoeffs > +sdr::FIRFilter< Scalar, FIRHighPassCoeffs > +sdr::FIRFilter< Scalar, FIRLowPassCoeffs > +sdr::AGC< Scalar > +sdr::BaseBand< Scalar > +sdr::BufferNode< Scalar > +sdr::CombineSink< Scalar > +sdr::DebugDump< Scalar > +sdr::DebugStore< Scalar > +sdr::FIRFilter< Scalar, FilterCoeffs > +sdr::FMDeemph< Scalar > +sdr::Scale< Scalar > +sdr::StreamSink< Scalar > +sdr::SubSample< Scalar > +sdr::WavSink< Scalar > + +
+ + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)=0
 Needs to be implemented by any sub-type to process the received data. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)=0
 Needs to be implemented by any sub-type to check and perform the configuration of the node. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::Sink< Scalar >

+ +

Typed sink.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
sdr::Sink< Scalar >::Sink ()
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + +
virtual sdr::Sink< Scalar >::~Sink ()
+
+inlinevirtual
+
+ +

Drestructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::Sink< Scalar >::handleBuffer (const RawBufferbuffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Re-implemented from SinkBase.

+

Casts the buffer into the requested type and forwards the call to process.

+ +

Implements sdr::SinkBase.

+ +
+
+ + +
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_sink.png b/classsdr_1_1_sink.png new file mode 100644 index 0000000..40c29d6 Binary files /dev/null and b/classsdr_1_1_sink.png differ diff --git a/classsdr_1_1_sink_base-members.html b/classsdr_1_1_sink_base-members.html new file mode 100644 index 0000000..2e88a08 --- /dev/null +++ b/classsdr_1_1_sink_base-members.html @@ -0,0 +1,110 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::SinkBase Member List
+
+
+ +

This is the complete list of members for sdr::SinkBase, including all inherited members.

+ + + + + +
config(const Config &src_cfg)=0sdr::SinkBasepure virtual
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)=0sdr::SinkBasepure virtual
SinkBase()sdr::SinkBase
~SinkBase()sdr::SinkBasevirtual
+ + + + diff --git a/classsdr_1_1_sink_base.html b/classsdr_1_1_sink_base.html new file mode 100644 index 0000000..63bc60d --- /dev/null +++ b/classsdr_1_1_sink_base.html @@ -0,0 +1,262 @@ + + + + + + +libsdr: sdr::SinkBase Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::SinkBase Class Referenceabstract
+
+
+ +

Basic interface of all Sinks. + More...

+ +

#include <node.hh>

+
+Inheritance diagram for sdr::SinkBase:
+
+
+ + +sdr::AutoCast< Scalar > +sdr::PortSink +sdr::Proxy +sdr::SignedToUnsigned +sdr::Sink< Scalar > +sdr::UnsignedToSigned +sdr::Sink< iScalar > +sdr::Sink< std::complex< iScalar > > +sdr::Sink< std::complex< Scalar > > +sdr::Sink< uint8_t > + +
+ + + + + + + + + + + + + + +

+Public Member Functions

 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)=0
 Needs to be implemented by any sub-type to process the received data. More...
 
virtual void config (const Config &src_cfg)=0
 Needs to be implemented by any sub-type to check and perform the configuration of the node. More...
 
+

Detailed Description

+

Basic interface of all Sinks.

+

Usually, sinks are derived from the Sink template.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
SinkBase::SinkBase ()
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
SinkBase::~SinkBase ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ + + +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::SinkBase::handleBuffer (const RawBufferbuffer,
bool allow_overwrite 
)
+
+pure virtual
+
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_sink_base.png b/classsdr_1_1_sink_base.png new file mode 100644 index 0000000..c0d2c12 Binary files /dev/null and b/classsdr_1_1_sink_base.png differ diff --git a/classsdr_1_1_source-members.html b/classsdr_1_1_source-members.html new file mode 100644 index 0000000..bbff59e --- /dev/null +++ b/classsdr_1_1_source-members.html @@ -0,0 +1,120 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Source Member List
+
+
+ +

This is the complete list of members for sdr::Source, including all inherited members.

+ + + + + + + + + + + + + + + +
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Source()sdr::Source
type() const sdr::Sourcevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_source.html b/classsdr_1_1_source.html new file mode 100644 index 0000000..2c8a99c --- /dev/null +++ b/classsdr_1_1_source.html @@ -0,0 +1,579 @@ + + + + + + +libsdr: sdr::Source Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Source Class Reference
+
+
+ +

Generic source class. + More...

+ +

#include <node.hh>

+
+Inheritance diagram for sdr::Source:
+
+
+ + +sdr::BufferNode< std::complex< Scalar > > +sdr::FIRFilter< Scalar, FIRBandPassCoeffs > +sdr::FIRFilter< Scalar, FIRBandStopCoeffs > +sdr::FIRFilter< Scalar, FIRHighPassCoeffs > +sdr::FIRFilter< Scalar, FIRLowPassCoeffs > +sdr::AGC< Scalar > +sdr::AMDemod< Scalar > +sdr::AutoCast< Scalar > +sdr::BaseBand< Scalar > +sdr::BlockingSource +sdr::BPSK31< Scalar > +sdr::BufferNode< Scalar > +sdr::Cast< iScalar, oScalar > +sdr::FilterSink< Scalar > +sdr::FilterSource< Scalar > +sdr::FIRFilter< Scalar, FilterCoeffs > +sdr::FMDeemph< Scalar > +sdr::FMDemod< iScalar, oScalar > +sdr::FreqShift< Scalar > +sdr::GWNSource< Scalar > +sdr::InpolSubSampler< iScalar, oScalar > +sdr::Interleave< Scalar > +sdr::IQBalance< Scalar > +sdr::IQBaseBand< Scalar > +sdr::IQSigGen< Scalar > +sdr::PortSource< Scalar > +sdr::Proxy +sdr::RealImagPart< Scalar > +sdr::RTLSource +sdr::Scale< Scalar > +sdr::SigGen< Scalar > +sdr::SignedToUnsigned +sdr::StreamSource< Scalar > +sdr::SubSample< Scalar > +sdr::ToComplex< iScalar, oScalar > +sdr::UnsignedToSigned +sdr::USBDemod< Scalar > +sdr::Varicode +sdr::WavSource + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + +

+Protected Member Functions

void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + +

+Protected Attributes

Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

Generic source class.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
Source::Source ()
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Source::~Source ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class T >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::Source::addEOS (T * instance,
void(T::*)() function 
)
+
+inline
+
+ +

Adds a callback to the end-of-stream signal of the source.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
void Source::connect (SinkBasesink,
bool direct = false 
)
+
+ +

Connect this source to a sink.

+ +
+
+ +
+
+ + + + + + + + +
void Source::disconnect (SinkBasesink)
+
+ +

Disconnect a sink again.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void Source::propagateConfig (const Configconfig)
+
+protected
+
+ +

Propagates the given configuration to all connected sinks.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
double Source::sampleRate () const
+
+virtual
+
+ +

Returns the configured sample rate or 0 otherwise.

+ +

Reimplemented in sdr::RTLSource.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Source::send (const RawBufferbuffer,
bool allow_overwrite = false 
)
+
+virtual
+
+ +

Sends the given buffer to all connected sinks.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void Source::setConfig (const Configconfig)
+
+virtual
+
+ +

Stores the configuration and propergates it if the configuration has been changed.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
void Source::signalEOS ()
+
+protected
+
+ +

Signals the EOS.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Config::Type Source::type () const
+
+virtual
+
+ +

Returns the configured source type or Config::Type_UNDEFINED otherwise.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Config sdr::Source::_config
+
+protected
+
+ +

Holds the source configuration, this can be updated by calling setConfig.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::list<DelegateInterface *> sdr::Source::_eos
+
+protected
+
+ +

The connected EOS singal handlers.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::map<SinkBase *, bool> sdr::Source::_sinks
+
+protected
+
+ +

The connected sinks.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_source.png b/classsdr_1_1_source.png new file mode 100644 index 0000000..2518c79 Binary files /dev/null and b/classsdr_1_1_source.png differ diff --git a/classsdr_1_1_stream_log_handler-members.html b/classsdr_1_1_stream_log_handler-members.html new file mode 100644 index 0000000..01b35bb --- /dev/null +++ b/classsdr_1_1_stream_log_handler-members.html @@ -0,0 +1,113 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::StreamLogHandler Member List
+
+
+ +

This is the complete list of members for sdr::StreamLogHandler, including all inherited members.

+ + + + + + + + +
_levelsdr::StreamLogHandlerprotected
_streamsdr::StreamLogHandlerprotected
handle(const LogMessage &msg)sdr::StreamLogHandlervirtual
LogHandler()sdr::LogHandlerprotected
StreamLogHandler(std::ostream &stream, LogLevel level)sdr::StreamLogHandler
~LogHandler()sdr::LogHandlervirtual
~StreamLogHandler()sdr::StreamLogHandlervirtual
+ + + + diff --git a/classsdr_1_1_stream_log_handler.html b/classsdr_1_1_stream_log_handler.html new file mode 100644 index 0000000..f379c41 --- /dev/null +++ b/classsdr_1_1_stream_log_handler.html @@ -0,0 +1,295 @@ + + + + + + +libsdr: sdr::StreamLogHandler Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::StreamLogHandler Class Reference
+
+
+ +

Serializes log message into the specified stream. + More...

+ +

#include <logger.hh>

+
+Inheritance diagram for sdr::StreamLogHandler:
+
+
+ + +sdr::LogHandler + +
+ + + + + + + + + + + + + + + +

+Public Member Functions

 StreamLogHandler (std::ostream &stream, LogLevel level)
 Constructor. More...
 
virtual ~StreamLogHandler ()
 Destructor. More...
 
virtual void handle (const LogMessage &msg)
 Handles the message. More...
 
- Public Member Functions inherited from sdr::LogHandler
virtual ~LogHandler ()
 Destructor. More...
 
+ + + + + + + +

+Protected Attributes

std::ostream & _stream
 The output stream. More...
 
LogLevel _level
 The minimum log-level. More...
 
+ + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::LogHandler
 LogHandler ()
 Hidden constructor. More...
 
+

Detailed Description

+

Serializes log message into the specified stream.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + + + + + + + + + + + +
StreamLogHandler::StreamLogHandler (std::ostream & stream,
LogLevel level 
)
+
+ +

Constructor.

+
Parameters
+ + + +
streamSpecifies the stream, the messages are serialized into.
levelSpecifies the minimum log level of the messages being serialized.
+
+
+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
StreamLogHandler::~StreamLogHandler ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
void StreamLogHandler::handle (const LogMessagemsg)
+
+virtual
+
+ +

Handles the message.

+ +

Implements sdr::LogHandler.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
LogLevel sdr::StreamLogHandler::_level
+
+protected
+
+ +

The minimum log-level.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::ostream& sdr::StreamLogHandler::_stream
+
+protected
+
+ +

The output stream.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_stream_log_handler.png b/classsdr_1_1_stream_log_handler.png new file mode 100644 index 0000000..8322a78 Binary files /dev/null and b/classsdr_1_1_stream_log_handler.png differ diff --git a/classsdr_1_1_stream_sink-members.html b/classsdr_1_1_stream_sink-members.html new file mode 100644 index 0000000..b2a0439 --- /dev/null +++ b/classsdr_1_1_stream_sink-members.html @@ -0,0 +1,115 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::StreamSink< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::StreamSink< Scalar >, including all inherited members.

+ + + + + + + + + + +
_streamsdr::StreamSink< Scalar >protected
config(const Config &src_cfg)sdr::StreamSink< Scalar >inlinevirtual
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::StreamSink< Scalar >inlinevirtual
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
StreamSink(std::ostream &stream)sdr::StreamSink< Scalar >inline
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
+ + + + diff --git a/classsdr_1_1_stream_sink.html b/classsdr_1_1_stream_sink.html new file mode 100644 index 0000000..f2b0cc6 --- /dev/null +++ b/classsdr_1_1_stream_sink.html @@ -0,0 +1,292 @@ + + + + + + +libsdr: sdr::StreamSink< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::StreamSink< Scalar > Class Template Reference
+
+
+ +

Serializes the incomming buffers as raw data. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::StreamSink< Scalar >:
+
+
+ + +sdr::Sink< Scalar > +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 StreamSink (std::ostream &stream)
 Constructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the raw sink. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Dumps the buffer into the stream as raw data. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
+ + + + +

+Protected Attributes

std::ostream & _stream
 The output stream. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::StreamSink< Scalar >

+ +

Serializes the incomming buffers as raw data.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::StreamSink< Scalar >::StreamSink (std::ostream & stream)
+
+inline
+
+ +

Constructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::StreamSink< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the raw sink.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::StreamSink< Scalar >::process (const Buffer< Scalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Dumps the buffer into the stream as raw data.

+
Bug:
Check if buffer was send completely:
+ +

Implements sdr::Sink< Scalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::ostream& sdr::StreamSink< Scalar >::_stream
+
+protected
+
+ +

The output stream.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_stream_sink.png b/classsdr_1_1_stream_sink.png new file mode 100644 index 0000000..8c2c898 Binary files /dev/null and b/classsdr_1_1_stream_sink.png differ diff --git a/classsdr_1_1_stream_source-members.html b/classsdr_1_1_stream_source-members.html new file mode 100644 index 0000000..a6f1d1c --- /dev/null +++ b/classsdr_1_1_stream_source-members.html @@ -0,0 +1,124 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::StreamSource< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::StreamSource< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + +
_buffersdr::StreamSource< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_sinkssdr::Sourceprotected
_streamsdr::StreamSource< Scalar >protected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
next()sdr::StreamSource< Scalar >inline
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Source()sdr::Source
StreamSource(std::istream &stream, double sample_rate=1, size_t buffersize=1024)sdr::StreamSource< Scalar >inline
type() const sdr::Sourcevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_stream_source.html b/classsdr_1_1_stream_source.html new file mode 100644 index 0000000..0f718a6 --- /dev/null +++ b/classsdr_1_1_stream_source.html @@ -0,0 +1,320 @@ + + + + + + +libsdr: sdr::StreamSource< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::StreamSource< Scalar > Class Template Reference
+
+
+ +

Reads raw samples from an imput stream, (ie a file). + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::StreamSource< Scalar >:
+
+
+ + +sdr::Source + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 StreamSource (std::istream &stream, double sample_rate=1, size_t buffersize=1024)
 Constructs a raw input source. More...
 
void next ()
 Reads the next chunk. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + +

+Protected Attributes

std::istream & _stream
 The input stream. More...
 
Buffer< Scalar > _buffer
 The output buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::StreamSource< Scalar >

+ +

Reads raw samples from an imput stream, (ie a file).

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + + + +
sdr::StreamSource< Scalar >::StreamSource (std::istream & stream,
double sample_rate = 1,
size_t buffersize = 1024 
)
+
+inline
+
+ +

Constructs a raw input source.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
void sdr::StreamSource< Scalar >::next ()
+
+inline
+
+ +

Reads the next chunk.

+

This function might be connected to the idle event of the Queue, then a new chunk gets read once all processing has been performed.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::StreamSource< Scalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::istream& sdr::StreamSource< Scalar >::_stream
+
+protected
+
+ +

The input stream.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_stream_source.png b/classsdr_1_1_stream_source.png new file mode 100644 index 0000000..e0bdbaa Binary files /dev/null and b/classsdr_1_1_stream_source.png differ diff --git a/classsdr_1_1_sub_sample-members.html b/classsdr_1_1_sub_sample-members.html new file mode 100644 index 0000000..e3d1286 --- /dev/null +++ b/classsdr_1_1_sub_sample-members.html @@ -0,0 +1,136 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::SubSample< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::SubSample< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::SubSample< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_lastsdr::SubSample< Scalar >protected
_leftsdr::SubSample< Scalar >protected
_nsdr::SubSample< Scalar >protected
_oFssdr::SubSample< Scalar >protected
_process(const Buffer< Scalar > &in, const Buffer< Scalar > &out)sdr::SubSample< Scalar >inlineprotected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::SubSample< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::SubSample< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
SScalar typedefsdr::SubSample< Scalar >
SubSample(size_t n)sdr::SubSample< Scalar >inline
SubSample(double Fs)sdr::SubSample< Scalar >inline
type() const sdr::Sourcevirtual
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_sub_sample.html b/classsdr_1_1_sub_sample.html new file mode 100644 index 0000000..27df069 --- /dev/null +++ b/classsdr_1_1_sub_sample.html @@ -0,0 +1,546 @@ + + + + + + +libsdr: sdr::SubSample< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::SubSample< Scalar > Class Template Reference
+
+
+ +

Simple averaging sub-sampler. + More...

+ +

#include <subsample.hh>

+
+Inheritance diagram for sdr::SubSample< Scalar >:
+
+
+ + +sdr::Sink< Scalar > +sdr::Source +sdr::SinkBase + +
+ + + + + +

+Public Types

typedef Traits< Scalar >::SScalar SScalar
 The super-scalar of the input type. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 SubSample (size_t n)
 Constructs a sub-sampler. More...
 
 SubSample (double Fs)
 Constructs a sub-sampler by target sample rate. More...
 
virtual void config (const Config &src_cfg)
 Configures the sub-sampler. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Performs the sub-sampling on the given buffer. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + +

+Protected Member Functions

void _process (const Buffer< Scalar > &in, const Buffer< Scalar > &out)
 Performs the sub-sampling from in into out. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

size_t _n
 The sub-sampling, n=1 means no sub-sampling at all. More...
 
double _oFs
 Target sample rate. More...
 
SScalar _last
 The last value. More...
 
size_t _left
 How many samples are left. More...
 
Buffer< Scalar > _buffer
 The output buffer, unused if the sub-sampling is performed in-place. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::SubSample< Scalar >

+ +

Simple averaging sub-sampler.

+

Member Typedef Documentation

+ +
+
+
+template<class Scalar >
+ + + + +
typedef Traits<Scalar>::SScalar sdr::SubSample< Scalar >::SScalar
+
+ +

The super-scalar of the input type.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::SubSample< Scalar >::SubSample (size_t n)
+
+inline
+
+ +

Constructs a sub-sampler.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::SubSample< Scalar >::SubSample (double Fs)
+
+inline
+
+ +

Constructs a sub-sampler by target sample rate.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::SubSample< Scalar >::_process (const Buffer< Scalar > & in,
const Buffer< Scalar > & out 
)
+
+inlineprotected
+
+ +

Performs the sub-sampling from in into out.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::SubSample< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the sub-sampler.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::SubSample< Scalar >::process (const Buffer< Scalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Performs the sub-sampling on the given buffer.

+ +

Implements sdr::Sink< Scalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::SubSample< Scalar >::_buffer
+
+protected
+
+ +

The output buffer, unused if the sub-sampling is performed in-place.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
SScalar sdr::SubSample< Scalar >::_last
+
+protected
+
+ +

The last value.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::SubSample< Scalar >::_left
+
+protected
+
+ +

How many samples are left.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
size_t sdr::SubSample< Scalar >::_n
+
+protected
+
+ +

The sub-sampling, n=1 means no sub-sampling at all.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
double sdr::SubSample< Scalar >::_oFs
+
+protected
+
+ +

Target sample rate.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_sub_sample.png b/classsdr_1_1_sub_sample.png new file mode 100644 index 0000000..7a4be86 Binary files /dev/null and b/classsdr_1_1_sub_sample.png differ diff --git a/classsdr_1_1_to_complex-members.html b/classsdr_1_1_to_complex-members.html new file mode 100644 index 0000000..eb41778 --- /dev/null +++ b/classsdr_1_1_to_complex-members.html @@ -0,0 +1,130 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::ToComplex< iScalar, oScalar > Member List
+
+
+ +

This is the complete list of members for sdr::ToComplex< iScalar, oScalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::ToComplex< iScalar, oScalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_scalesdr::ToComplex< iScalar, oScalar >protected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::ToComplex< iScalar, oScalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< iScalar >inlinevirtual
process(const Buffer< iScalar > &buffer, bool allow_overwrite)sdr::ToComplex< iScalar, oScalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< iScalar >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
ToComplex(double scale=1.0)sdr::ToComplex< iScalar, oScalar >inline
type() const sdr::Sourcevirtual
~Sink()sdr::Sink< iScalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
+ + + + diff --git a/classsdr_1_1_to_complex.html b/classsdr_1_1_to_complex.html new file mode 100644 index 0000000..1775568 --- /dev/null +++ b/classsdr_1_1_to_complex.html @@ -0,0 +1,368 @@ + + + + + + +libsdr: sdr::ToComplex< iScalar, oScalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::ToComplex< iScalar, oScalar > Class Template Reference
+
+
+ +

Tiny helper node to transform a real part into a complex, including a possible type-cast. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::ToComplex< iScalar, oScalar >:
+
+
+ + +sdr::Sink< iScalar > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 ToComplex (double scale=1.0)
 Constructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the node. More...
 
virtual void process (const Buffer< iScalar > &buffer, bool allow_overwrite)
 Casts the input real buffer into the complex output buffer. More...
 
- Public Member Functions inherited from sdr::Sink< iScalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + +

+Protected Attributes

double _scale
 The scale. More...
 
Buffer< std::complex< oScalar > > _buffer
 The output buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

template<class iScalar, class oScalar = iScalar>
+class sdr::ToComplex< iScalar, oScalar >

+ +

Tiny helper node to transform a real part into a complex, including a possible type-cast.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + + + + + +
sdr::ToComplex< iScalar, oScalar >::ToComplex (double scale = 1.0)
+
+inline
+
+ +

Constructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + + + + + +
virtual void sdr::ToComplex< iScalar, oScalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::ToComplex< iScalar, oScalar >::process (const Buffer< iScalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Casts the input real buffer into the complex output buffer.

+ +

Implements sdr::Sink< iScalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + +
Buffer< std::complex<oScalar> > sdr::ToComplex< iScalar, oScalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+
+template<class iScalar , class oScalar = iScalar>
+ + + + + +
+ + + + +
double sdr::ToComplex< iScalar, oScalar >::_scale
+
+protected
+
+ +

The scale.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_to_complex.png b/classsdr_1_1_to_complex.png new file mode 100644 index 0000000..30c9be3 Binary files /dev/null and b/classsdr_1_1_to_complex.png differ diff --git a/classsdr_1_1_traits.html b/classsdr_1_1_traits.html new file mode 100644 index 0000000..4e00af3 --- /dev/null +++ b/classsdr_1_1_traits.html @@ -0,0 +1,117 @@ + + + + + + +libsdr: sdr::Traits< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Traits< Scalar > Class Template Reference
+
+
+ +

Forward declaration of type tratis template. + More...

+ +

#include <traits.hh>

+

Detailed Description

+

template<class Scalar>
+class sdr::Traits< Scalar >

+ +

Forward declaration of type tratis template.

+

For each supported type, uint8_t, std::comple<uint8_t>, int8_t, std::complex<uint8_t>, uint16_t, std::complex<uint16_t>, int16_t, std::complex<int16_t>, float, std::complex<float>, double and std::complex<double>, the Traits template povides the Scalar type (the template argument type), its real type (i.e. for the type std::complex<int16_t> it would be int16_t), its super scalar (i.e. for the int16_t, it would be int32_t but for float it is flaot again) which allows for safe multiplications of these values, the scale mapping the interval [-1,1] to the values of the scalar type, the bit shift from the scalar type to the super scalar type and the type id for the scalar.

+

The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_traits_3_01double_01_4-members.html b/classsdr_1_1_traits_3_01double_01_4-members.html new file mode 100644 index 0000000..c248702 --- /dev/null +++ b/classsdr_1_1_traits_3_01double_01_4-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Traits< double > Member List
+
+
+ +

This is the complete list of members for sdr::Traits< double >, including all inherited members.

+ + + + + + + +
RScalar typedefsdr::Traits< double >
Scalar typedefsdr::Traits< double >
scalarIdsdr::Traits< double >static
scalesdr::Traits< double >static
shiftsdr::Traits< double >static
SScalar typedefsdr::Traits< double >
+ + + + diff --git a/classsdr_1_1_traits_3_01double_01_4.html b/classsdr_1_1_traits_3_01double_01_4.html new file mode 100644 index 0000000..79686c4 --- /dev/null +++ b/classsdr_1_1_traits_3_01double_01_4.html @@ -0,0 +1,255 @@ + + + + + + +libsdr: sdr::Traits< double > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Traits< double > Class Template Reference
+
+
+ +

Template specialization of type traits for float scalar. + More...

+ +

#include <traits.hh>

+ + + + + + + + + + + +

+Public Types

typedef double Scalar
 The scalar type. More...
 
typedef double RScalar
 The real scalar type. More...
 
typedef double SScalar
 The compute scalar type. More...
 
+ + + + + + + + + + +

+Static Public Attributes

static const float scale
 The scaleing factor from floating point to integer. More...
 
static const size_t shift
 The scaleing factor from floating point to integer expressed as 2^exp. More...
 
static const Config::Type scalarId = Config::Type_f64
 The type id of the scalar type. More...
 
+

Detailed Description

+

template<>
+class sdr::Traits< double >

+ +

Template specialization of type traits for float scalar.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef double sdr::Traits< double >::RScalar
+
+ +

The real scalar type.

+ +
+
+ +
+
+ + + + +
typedef double sdr::Traits< double >::Scalar
+
+ +

The scalar type.

+ +
+
+ +
+
+ + + + +
typedef double sdr::Traits< double >::SScalar
+
+ +

The compute scalar type.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Config::Type sdr::Traits< double >::scalarId = Config::Type_f64
+
+static
+
+ +

The type id of the scalar type.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const float sdr::Traits< double >::scale
+
+static
+
+ +

The scaleing factor from floating point to integer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const size_t sdr::Traits< double >::shift
+
+static
+
+ +

The scaleing factor from floating point to integer expressed as 2^exp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_traits_3_01float_01_4-members.html b/classsdr_1_1_traits_3_01float_01_4-members.html new file mode 100644 index 0000000..580aa7f --- /dev/null +++ b/classsdr_1_1_traits_3_01float_01_4-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Traits< float > Member List
+
+
+ +

This is the complete list of members for sdr::Traits< float >, including all inherited members.

+ + + + + + + +
RScalar typedefsdr::Traits< float >
Scalar typedefsdr::Traits< float >
scalarIdsdr::Traits< float >static
scalesdr::Traits< float >static
shiftsdr::Traits< float >static
SScalar typedefsdr::Traits< float >
+ + + + diff --git a/classsdr_1_1_traits_3_01float_01_4.html b/classsdr_1_1_traits_3_01float_01_4.html new file mode 100644 index 0000000..7f96796 --- /dev/null +++ b/classsdr_1_1_traits_3_01float_01_4.html @@ -0,0 +1,255 @@ + + + + + + +libsdr: sdr::Traits< float > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Traits< float > Class Template Reference
+
+
+ +

Template specialization of type traits for float scalar. + More...

+ +

#include <traits.hh>

+ + + + + + + + + + + +

+Public Types

typedef float Scalar
 The Scalar type. More...
 
typedef float RScalar
 The real scalar type. More...
 
typedef float SScalar
 The compute scalar type. More...
 
+ + + + + + + + + + +

+Static Public Attributes

static const float scale
 The scaleing factor from floating point to integer. More...
 
static const size_t shift
 The scaleing factor from floating point to integer expressed as 2^exp. More...
 
static const Config::Type scalarId = Config::Type_f32
 The type id of the scalar type. More...
 
+

Detailed Description

+

template<>
+class sdr::Traits< float >

+ +

Template specialization of type traits for float scalar.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef float sdr::Traits< float >::RScalar
+
+ +

The real scalar type.

+ +
+
+ +
+
+ + + + +
typedef float sdr::Traits< float >::Scalar
+
+ +

The Scalar type.

+ +
+
+ +
+
+ + + + +
typedef float sdr::Traits< float >::SScalar
+
+ +

The compute scalar type.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Config::Type sdr::Traits< float >::scalarId = Config::Type_f32
+
+static
+
+ +

The type id of the scalar type.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const float sdr::Traits< float >::scale
+
+static
+
+ +

The scaleing factor from floating point to integer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const size_t sdr::Traits< float >::shift
+
+static
+
+ +

The scaleing factor from floating point to integer expressed as 2^exp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_traits_3_01int16__t_01_4-members.html b/classsdr_1_1_traits_3_01int16__t_01_4-members.html new file mode 100644 index 0000000..28a9e1b --- /dev/null +++ b/classsdr_1_1_traits_3_01int16__t_01_4-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Traits< int16_t > Member List
+
+
+ +

This is the complete list of members for sdr::Traits< int16_t >, including all inherited members.

+ + + + + + + +
RScalar typedefsdr::Traits< int16_t >
Scalar typedefsdr::Traits< int16_t >
scalarIdsdr::Traits< int16_t >static
scalesdr::Traits< int16_t >static
shiftsdr::Traits< int16_t >static
SScalar typedefsdr::Traits< int16_t >
+ + + + diff --git a/classsdr_1_1_traits_3_01int16__t_01_4.html b/classsdr_1_1_traits_3_01int16__t_01_4.html new file mode 100644 index 0000000..a275abd --- /dev/null +++ b/classsdr_1_1_traits_3_01int16__t_01_4.html @@ -0,0 +1,255 @@ + + + + + + +libsdr: sdr::Traits< int16_t > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Traits< int16_t > Class Template Reference
+
+
+ +

Template specialization of type traits for int16_t scalar. + More...

+ +

#include <traits.hh>

+ + + + + + + + + + + +

+Public Types

typedef int16_t Scalar
 The scalar type. More...
 
typedef int16_t RScalar
 The real scalar type. More...
 
typedef int32_t SScalar
 The compute scalar type. More...
 
+ + + + + + + + + + +

+Static Public Attributes

static const float scale
 The scaleing factor from floating point to integer. More...
 
static const size_t shift
 The scaleing factor from floating point to integer expressed as 2^exp. More...
 
static const Config::Type scalarId = Config::Type_s16
 The type id of the scalar type. More...
 
+

Detailed Description

+

template<>
+class sdr::Traits< int16_t >

+ +

Template specialization of type traits for int16_t scalar.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef int16_t sdr::Traits< int16_t >::RScalar
+
+ +

The real scalar type.

+ +
+
+ +
+
+ + + + +
typedef int16_t sdr::Traits< int16_t >::Scalar
+
+ +

The scalar type.

+ +
+
+ +
+
+ + + + +
typedef int32_t sdr::Traits< int16_t >::SScalar
+
+ +

The compute scalar type.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Config::Type sdr::Traits< int16_t >::scalarId = Config::Type_s16
+
+static
+
+ +

The type id of the scalar type.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const float sdr::Traits< int16_t >::scale
+
+static
+
+ +

The scaleing factor from floating point to integer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const size_t sdr::Traits< int16_t >::shift
+
+static
+
+ +

The scaleing factor from floating point to integer expressed as 2^exp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_traits_3_01int8__t_01_4-members.html b/classsdr_1_1_traits_3_01int8__t_01_4-members.html new file mode 100644 index 0000000..0c4f8ec --- /dev/null +++ b/classsdr_1_1_traits_3_01int8__t_01_4-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Traits< int8_t > Member List
+
+
+ +

This is the complete list of members for sdr::Traits< int8_t >, including all inherited members.

+ + + + + + + +
RScalar typedefsdr::Traits< int8_t >
Scalar typedefsdr::Traits< int8_t >
scalarIdsdr::Traits< int8_t >static
scalesdr::Traits< int8_t >static
shiftsdr::Traits< int8_t >static
SScalar typedefsdr::Traits< int8_t >
+ + + + diff --git a/classsdr_1_1_traits_3_01int8__t_01_4.html b/classsdr_1_1_traits_3_01int8__t_01_4.html new file mode 100644 index 0000000..1b71a6d --- /dev/null +++ b/classsdr_1_1_traits_3_01int8__t_01_4.html @@ -0,0 +1,255 @@ + + + + + + +libsdr: sdr::Traits< int8_t > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Traits< int8_t > Class Template Reference
+
+
+ +

Template specialization of type tratis for int8_t scalar. + More...

+ +

#include <traits.hh>

+ + + + + + + + + + + +

+Public Types

typedef int8_t Scalar
 The scalar type. More...
 
typedef int8_t RScalar
 The real scalar type. More...
 
typedef int16_t SScalar
 The compute scalar type. More...
 
+ + + + + + + + + + +

+Static Public Attributes

static const float scale
 The scaleing factor from floating point to integer. More...
 
static const size_t shift
 The scaleing factor from floating point to integer expressed as 2^exp. More...
 
static const Config::Type scalarId = Config::Type_s8
 The type id of the scalar type. More...
 
+

Detailed Description

+

template<>
+class sdr::Traits< int8_t >

+ +

Template specialization of type tratis for int8_t scalar.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef int8_t sdr::Traits< int8_t >::RScalar
+
+ +

The real scalar type.

+ +
+
+ +
+
+ + + + +
typedef int8_t sdr::Traits< int8_t >::Scalar
+
+ +

The scalar type.

+ +
+
+ +
+
+ + + + +
typedef int16_t sdr::Traits< int8_t >::SScalar
+
+ +

The compute scalar type.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Config::Type sdr::Traits< int8_t >::scalarId = Config::Type_s8
+
+static
+
+ +

The type id of the scalar type.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const float sdr::Traits< int8_t >::scale
+
+static
+
+ +

The scaleing factor from floating point to integer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const size_t sdr::Traits< int8_t >::shift
+
+static
+
+ +

The scaleing factor from floating point to integer expressed as 2^exp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4-members.html b/classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4-members.html new file mode 100644 index 0000000..00131e5 --- /dev/null +++ b/classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Traits< std::complex< double > > Member List
+
+
+ +

This is the complete list of members for sdr::Traits< std::complex< double > >, including all inherited members.

+ + + + + + + +
RScalar typedefsdr::Traits< std::complex< double > >
Scalar typedefsdr::Traits< std::complex< double > >
scalarIdsdr::Traits< std::complex< double > >static
scalesdr::Traits< std::complex< double > >static
shiftsdr::Traits< std::complex< double > >static
SScalar typedefsdr::Traits< std::complex< double > >
+ + + + diff --git a/classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html b/classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html new file mode 100644 index 0000000..271afcf --- /dev/null +++ b/classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html @@ -0,0 +1,255 @@ + + + + + + +libsdr: sdr::Traits< std::complex< double > > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Traits< std::complex< double > > Class Template Reference
+
+
+ +

Template specialization of type traits for complex float scalar. + More...

+ +

#include <traits.hh>

+ + + + + + + + + + + +

+Public Types

typedef std::complex< double > Scalar
 The scalar type. More...
 
typedef double RScalar
 The real scalar type. More...
 
typedef std::complex< double > SScalar
 The compute (super) scalar type. More...
 
+ + + + + + + + + + +

+Static Public Attributes

static const float scale
 The scaleing factor from floating point to integer. More...
 
static const size_t shift
 The scaleing factor from floating point to integer expressed as 2^exp. More...
 
static const Config::Type scalarId = Config::Type_cf64
 The type id of the scalar type. More...
 
+

Detailed Description

+

template<>
+class sdr::Traits< std::complex< double > >

+ +

Template specialization of type traits for complex float scalar.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef double sdr::Traits< std::complex< double > >::RScalar
+
+ +

The real scalar type.

+ +
+
+ +
+
+ + + + +
typedef std::complex<double> sdr::Traits< std::complex< double > >::Scalar
+
+ +

The scalar type.

+ +
+
+ +
+
+ + + + +
typedef std::complex<double> sdr::Traits< std::complex< double > >::SScalar
+
+ +

The compute (super) scalar type.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Config::Type sdr::Traits< std::complex< double > >::scalarId = Config::Type_cf64
+
+static
+
+ +

The type id of the scalar type.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const float sdr::Traits< std::complex< double > >::scale
+
+static
+
+ +

The scaleing factor from floating point to integer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const size_t sdr::Traits< std::complex< double > >::shift
+
+static
+
+ +

The scaleing factor from floating point to integer expressed as 2^exp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4-members.html b/classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4-members.html new file mode 100644 index 0000000..2637280 --- /dev/null +++ b/classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Traits< std::complex< float > > Member List
+
+
+ +

This is the complete list of members for sdr::Traits< std::complex< float > >, including all inherited members.

+ + + + + + + +
RScalar typedefsdr::Traits< std::complex< float > >
Scalar typedefsdr::Traits< std::complex< float > >
scalarIdsdr::Traits< std::complex< float > >static
scalesdr::Traits< std::complex< float > >static
shiftsdr::Traits< std::complex< float > >static
SScalar typedefsdr::Traits< std::complex< float > >
+ + + + diff --git a/classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html b/classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html new file mode 100644 index 0000000..195be23 --- /dev/null +++ b/classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html @@ -0,0 +1,255 @@ + + + + + + +libsdr: sdr::Traits< std::complex< float > > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Traits< std::complex< float > > Class Template Reference
+
+
+ +

Template specialization of type traits for complex float scalar. + More...

+ +

#include <traits.hh>

+ + + + + + + + + + + +

+Public Types

typedef std::complex< float > Scalar
 The scalar type. More...
 
typedef float RScalar
 The real scalar type. More...
 
typedef std::complex< float > SScalar
 The compute scalar type. More...
 
+ + + + + + + + + + +

+Static Public Attributes

static const float scale
 The scaleing factor from floating point to integer. More...
 
static const size_t shift
 The scaleing factor from floating point to integer expressed as 2^exp. More...
 
static const Config::Type scalarId = Config::Type_cf32
 The type id of the scalar type. More...
 
+

Detailed Description

+

template<>
+class sdr::Traits< std::complex< float > >

+ +

Template specialization of type traits for complex float scalar.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef float sdr::Traits< std::complex< float > >::RScalar
+
+ +

The real scalar type.

+ +
+
+ +
+
+ + + + +
typedef std::complex<float> sdr::Traits< std::complex< float > >::Scalar
+
+ +

The scalar type.

+ +
+
+ +
+
+ + + + +
typedef std::complex<float> sdr::Traits< std::complex< float > >::SScalar
+
+ +

The compute scalar type.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Config::Type sdr::Traits< std::complex< float > >::scalarId = Config::Type_cf32
+
+static
+
+ +

The type id of the scalar type.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const float sdr::Traits< std::complex< float > >::scale
+
+static
+
+ +

The scaleing factor from floating point to integer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const size_t sdr::Traits< std::complex< float > >::shift
+
+static
+
+ +

The scaleing factor from floating point to integer expressed as 2^exp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4-members.html b/classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4-members.html new file mode 100644 index 0000000..3b0e648 --- /dev/null +++ b/classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Traits< std::complex< int16_t > > Member List
+
+
+ +

This is the complete list of members for sdr::Traits< std::complex< int16_t > >, including all inherited members.

+ + + + + + + +
RScalar typedefsdr::Traits< std::complex< int16_t > >
Scalar typedefsdr::Traits< std::complex< int16_t > >
scalarIdsdr::Traits< std::complex< int16_t > >static
scalesdr::Traits< std::complex< int16_t > >static
shiftsdr::Traits< std::complex< int16_t > >static
SScalar typedefsdr::Traits< std::complex< int16_t > >
+ + + + diff --git a/classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html b/classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html new file mode 100644 index 0000000..1a61022 --- /dev/null +++ b/classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html @@ -0,0 +1,255 @@ + + + + + + +libsdr: sdr::Traits< std::complex< int16_t > > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Traits< std::complex< int16_t > > Class Template Reference
+
+
+ +

Template specialization of type traits for complex int16_t scalar. + More...

+ +

#include <traits.hh>

+ + + + + + + + + + + +

+Public Types

typedef std::complex< int16_t > Scalar
 The scalar type. More...
 
typedef int16_t RScalar
 The real Scalar type. More...
 
typedef std::complex< int32_t > SScalar
 The compute scalar type. More...
 
+ + + + + + + + + + +

+Static Public Attributes

static const float scale
 The scaleing factor from floating point to integer. More...
 
static const size_t shift
 The scaleing factor from floating point to integer expressed as 2^exp. More...
 
static const Config::Type scalarId = Config::Type_cs16
 The type id of the scalar type. More...
 
+

Detailed Description

+

template<>
+class sdr::Traits< std::complex< int16_t > >

+ +

Template specialization of type traits for complex int16_t scalar.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef int16_t sdr::Traits< std::complex< int16_t > >::RScalar
+
+ +

The real Scalar type.

+ +
+
+ +
+
+ + + + +
typedef std::complex<int16_t> sdr::Traits< std::complex< int16_t > >::Scalar
+
+ +

The scalar type.

+ +
+
+ +
+
+ + + + +
typedef std::complex<int32_t> sdr::Traits< std::complex< int16_t > >::SScalar
+
+ +

The compute scalar type.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Config::Type sdr::Traits< std::complex< int16_t > >::scalarId = Config::Type_cs16
+
+static
+
+ +

The type id of the scalar type.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const float sdr::Traits< std::complex< int16_t > >::scale
+
+static
+
+ +

The scaleing factor from floating point to integer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const size_t sdr::Traits< std::complex< int16_t > >::shift
+
+static
+
+ +

The scaleing factor from floating point to integer expressed as 2^exp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4-members.html b/classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4-members.html new file mode 100644 index 0000000..6529bba --- /dev/null +++ b/classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Traits< std::complex< int8_t > > Member List
+
+
+ +

This is the complete list of members for sdr::Traits< std::complex< int8_t > >, including all inherited members.

+ + + + + + + +
RScalar typedefsdr::Traits< std::complex< int8_t > >
Scalar typedefsdr::Traits< std::complex< int8_t > >
scalarIdsdr::Traits< std::complex< int8_t > >static
scalesdr::Traits< std::complex< int8_t > >static
shiftsdr::Traits< std::complex< int8_t > >static
SScalar typedefsdr::Traits< std::complex< int8_t > >
+ + + + diff --git a/classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html b/classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html new file mode 100644 index 0000000..d132a6a --- /dev/null +++ b/classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html @@ -0,0 +1,255 @@ + + + + + + +libsdr: sdr::Traits< std::complex< int8_t > > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Traits< std::complex< int8_t > > Class Template Reference
+
+
+ +

Template specialization of type tratis for complex int8_t scalar. + More...

+ +

#include <traits.hh>

+ + + + + + + + + + + +

+Public Types

typedef std::complex< int8_t > Scalar
 The scalar type. More...
 
typedef int8_t RScalar
 The real scalar type. More...
 
typedef std::complex< int16_t > SScalar
 The compute scalar type. More...
 
+ + + + + + + + + + +

+Static Public Attributes

static const float scale
 The scaleing factor from floating point to integer. More...
 
static const size_t shift
 The scaleing factor from floating point to integer expressed as 2^exp. More...
 
static const Config::Type scalarId = Config::Type_cs8
 The type id of the scalar type. More...
 
+

Detailed Description

+

template<>
+class sdr::Traits< std::complex< int8_t > >

+ +

Template specialization of type tratis for complex int8_t scalar.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef int8_t sdr::Traits< std::complex< int8_t > >::RScalar
+
+ +

The real scalar type.

+ +
+
+ +
+
+ + + + +
typedef std::complex<int8_t> sdr::Traits< std::complex< int8_t > >::Scalar
+
+ +

The scalar type.

+ +
+
+ +
+
+ + + + +
typedef std::complex<int16_t> sdr::Traits< std::complex< int8_t > >::SScalar
+
+ +

The compute scalar type.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Config::Type sdr::Traits< std::complex< int8_t > >::scalarId = Config::Type_cs8
+
+static
+
+ +

The type id of the scalar type.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const float sdr::Traits< std::complex< int8_t > >::scale
+
+static
+
+ +

The scaleing factor from floating point to integer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const size_t sdr::Traits< std::complex< int8_t > >::shift
+
+static
+
+ +

The scaleing factor from floating point to integer expressed as 2^exp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4-members.html b/classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4-members.html new file mode 100644 index 0000000..d0e2c1e --- /dev/null +++ b/classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Traits< std::complex< uint16_t > > Member List
+
+
+ +

This is the complete list of members for sdr::Traits< std::complex< uint16_t > >, including all inherited members.

+ + + + + + + +
RScalar typedefsdr::Traits< std::complex< uint16_t > >
Scalar typedefsdr::Traits< std::complex< uint16_t > >
scalarIdsdr::Traits< std::complex< uint16_t > >static
scalesdr::Traits< std::complex< uint16_t > >static
shiftsdr::Traits< std::complex< uint16_t > >static
SScalar typedefsdr::Traits< std::complex< uint16_t > >
+ + + + diff --git a/classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html b/classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html new file mode 100644 index 0000000..882fa98 --- /dev/null +++ b/classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html @@ -0,0 +1,255 @@ + + + + + + +libsdr: sdr::Traits< std::complex< uint16_t > > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Traits< std::complex< uint16_t > > Class Template Reference
+
+
+ +

Template specialization of type traits for complex uint16_t scalar. + More...

+ +

#include <traits.hh>

+ + + + + + + + + + + +

+Public Types

typedef std::complex< uint16_t > Scalar
 The scalar type. More...
 
typedef uint16_t RScalar
 The real scalar type. More...
 
typedef std::complex< uint32_t > SScalar
 The compute scalar type. More...
 
+ + + + + + + + + + +

+Static Public Attributes

static const float scale
 The scaleing factor from floating point to integer. More...
 
static const size_t shift
 The scaleing factor from floating point to integer expressed as 2^exp. More...
 
static const Config::Type scalarId = Config::Type_cu16
 The type id of the scalar type. More...
 
+

Detailed Description

+

template<>
+class sdr::Traits< std::complex< uint16_t > >

+ +

Template specialization of type traits for complex uint16_t scalar.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef uint16_t sdr::Traits< std::complex< uint16_t > >::RScalar
+
+ +

The real scalar type.

+ +
+
+ +
+
+ + + + +
typedef std::complex<uint16_t> sdr::Traits< std::complex< uint16_t > >::Scalar
+
+ +

The scalar type.

+ +
+
+ +
+
+ + + + +
typedef std::complex<uint32_t> sdr::Traits< std::complex< uint16_t > >::SScalar
+
+ +

The compute scalar type.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Config::Type sdr::Traits< std::complex< uint16_t > >::scalarId = Config::Type_cu16
+
+static
+
+ +

The type id of the scalar type.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const float sdr::Traits< std::complex< uint16_t > >::scale
+
+static
+
+ +

The scaleing factor from floating point to integer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const size_t sdr::Traits< std::complex< uint16_t > >::shift
+
+static
+
+ +

The scaleing factor from floating point to integer expressed as 2^exp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4-members.html b/classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4-members.html new file mode 100644 index 0000000..5bde6b2 --- /dev/null +++ b/classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Traits< std::complex< uint8_t > > Member List
+
+
+ +

This is the complete list of members for sdr::Traits< std::complex< uint8_t > >, including all inherited members.

+ + + + + + + +
RScalar typedefsdr::Traits< std::complex< uint8_t > >
Scalar typedefsdr::Traits< std::complex< uint8_t > >
scalarIdsdr::Traits< std::complex< uint8_t > >static
scalesdr::Traits< std::complex< uint8_t > >static
shiftsdr::Traits< std::complex< uint8_t > >static
SScalar typedefsdr::Traits< std::complex< uint8_t > >
+ + + + diff --git a/classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html b/classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html new file mode 100644 index 0000000..9b1f6eb --- /dev/null +++ b/classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html @@ -0,0 +1,255 @@ + + + + + + +libsdr: sdr::Traits< std::complex< uint8_t > > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Traits< std::complex< uint8_t > > Class Template Reference
+
+
+ +

Template specialization of type tratis for complex uint8_t scalar. + More...

+ +

#include <traits.hh>

+ + + + + + + + + + + +

+Public Types

typedef std::complex< uint8_t > Scalar
 The scalar type. More...
 
typedef uint8_t RScalar
 The real scalar type. More...
 
typedef std::complex< uint16_t > SScalar
 The compute scalar type. More...
 
+ + + + + + + + + + +

+Static Public Attributes

static const float scale
 The scaleing factor from floating point to integer. More...
 
static const size_t shift
 The scaleing factor from floating point to integer expressed as 2^exp. More...
 
static const Config::Type scalarId = Config::Type_cu8
 The type id of the scalar type. More...
 
+

Detailed Description

+

template<>
+class sdr::Traits< std::complex< uint8_t > >

+ +

Template specialization of type tratis for complex uint8_t scalar.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef uint8_t sdr::Traits< std::complex< uint8_t > >::RScalar
+
+ +

The real scalar type.

+ +
+
+ +
+
+ + + + +
typedef std::complex<uint8_t> sdr::Traits< std::complex< uint8_t > >::Scalar
+
+ +

The scalar type.

+ +
+
+ +
+
+ + + + +
typedef std::complex<uint16_t> sdr::Traits< std::complex< uint8_t > >::SScalar
+
+ +

The compute scalar type.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Config::Type sdr::Traits< std::complex< uint8_t > >::scalarId = Config::Type_cu8
+
+static
+
+ +

The type id of the scalar type.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const float sdr::Traits< std::complex< uint8_t > >::scale
+
+static
+
+ +

The scaleing factor from floating point to integer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const size_t sdr::Traits< std::complex< uint8_t > >::shift
+
+static
+
+ +

The scaleing factor from floating point to integer expressed as 2^exp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_traits_3_01uint16__t_01_4-members.html b/classsdr_1_1_traits_3_01uint16__t_01_4-members.html new file mode 100644 index 0000000..2e7d8a0 --- /dev/null +++ b/classsdr_1_1_traits_3_01uint16__t_01_4-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Traits< uint16_t > Member List
+
+
+ +

This is the complete list of members for sdr::Traits< uint16_t >, including all inherited members.

+ + + + + + + +
RScalar typedefsdr::Traits< uint16_t >
Scalar typedefsdr::Traits< uint16_t >
scalarIdsdr::Traits< uint16_t >static
scalesdr::Traits< uint16_t >static
shiftsdr::Traits< uint16_t >static
SScalar typedefsdr::Traits< uint16_t >
+ + + + diff --git a/classsdr_1_1_traits_3_01uint16__t_01_4.html b/classsdr_1_1_traits_3_01uint16__t_01_4.html new file mode 100644 index 0000000..9b8e7ea --- /dev/null +++ b/classsdr_1_1_traits_3_01uint16__t_01_4.html @@ -0,0 +1,255 @@ + + + + + + +libsdr: sdr::Traits< uint16_t > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Traits< uint16_t > Class Template Reference
+
+
+ +

Template specialization of type traits for uint16_t scalar. + More...

+ +

#include <traits.hh>

+ + + + + + + + + + + +

+Public Types

typedef uint16_t Scalar
 The scalar type. More...
 
typedef uint16_t RScalar
 The real scalar type. More...
 
typedef uint32_t SScalar
 The compute scalar type. More...
 
+ + + + + + + + + + +

+Static Public Attributes

static const float scale
 The scaleing factor from floating point to integer. More...
 
static const size_t shift
 The scaleing factor from floating point to integer expressed as 2^exp. More...
 
static const Config::Type scalarId = Config::Type_u16
 The type id of the scalar type. More...
 
+

Detailed Description

+

template<>
+class sdr::Traits< uint16_t >

+ +

Template specialization of type traits for uint16_t scalar.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef uint16_t sdr::Traits< uint16_t >::RScalar
+
+ +

The real scalar type.

+ +
+
+ +
+
+ + + + +
typedef uint16_t sdr::Traits< uint16_t >::Scalar
+
+ +

The scalar type.

+ +
+
+ +
+
+ + + + +
typedef uint32_t sdr::Traits< uint16_t >::SScalar
+
+ +

The compute scalar type.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Config::Type sdr::Traits< uint16_t >::scalarId = Config::Type_u16
+
+static
+
+ +

The type id of the scalar type.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const float sdr::Traits< uint16_t >::scale
+
+static
+
+ +

The scaleing factor from floating point to integer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const size_t sdr::Traits< uint16_t >::shift
+
+static
+
+ +

The scaleing factor from floating point to integer expressed as 2^exp.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_traits_3_01uint8__t_01_4-members.html b/classsdr_1_1_traits_3_01uint8__t_01_4-members.html new file mode 100644 index 0000000..18f6f0e --- /dev/null +++ b/classsdr_1_1_traits_3_01uint8__t_01_4-members.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Traits< uint8_t > Member List
+
+
+ +

This is the complete list of members for sdr::Traits< uint8_t >, including all inherited members.

+ + + + + + + +
RScalar typedefsdr::Traits< uint8_t >
Scalar typedefsdr::Traits< uint8_t >
scalarIdsdr::Traits< uint8_t >static
scalesdr::Traits< uint8_t >static
shiftsdr::Traits< uint8_t >static
SScalar typedefsdr::Traits< uint8_t >
+ + + + diff --git a/classsdr_1_1_traits_3_01uint8__t_01_4.html b/classsdr_1_1_traits_3_01uint8__t_01_4.html new file mode 100644 index 0000000..1ab358f --- /dev/null +++ b/classsdr_1_1_traits_3_01uint8__t_01_4.html @@ -0,0 +1,255 @@ + + + + + + +libsdr: sdr::Traits< uint8_t > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Traits< uint8_t > Class Template Reference
+
+
+ +

Template specialization of type tratis for uint8_t scalar. + More...

+ +

#include <traits.hh>

+ + + + + + + + + + + +

+Public Types

typedef uint8_t Scalar
 The scalar type. More...
 
typedef uint8_t RScalar
 The real scalar type. More...
 
typedef uint16_t SScalar
 The compute scalar type. More...
 
+ + + + + + + + + + +

+Static Public Attributes

static const float scale
 The scaleing factor from floating point to integer. More...
 
static const size_t shift
 Shift from Scalar to SScalar. More...
 
static const Config::Type scalarId = Config::Type_u8
 The type id of the scalar type. More...
 
+

Detailed Description

+

template<>
+class sdr::Traits< uint8_t >

+ +

Template specialization of type tratis for uint8_t scalar.

+

Member Typedef Documentation

+ +
+
+ + + + +
typedef uint8_t sdr::Traits< uint8_t >::RScalar
+
+ +

The real scalar type.

+ +
+
+ +
+
+ + + + +
typedef uint8_t sdr::Traits< uint8_t >::Scalar
+
+ +

The scalar type.

+ +
+
+ +
+
+ + + + +
typedef uint16_t sdr::Traits< uint8_t >::SScalar
+
+ +

The compute scalar type.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
const Config::Type sdr::Traits< uint8_t >::scalarId = Config::Type_u8
+
+static
+
+ +

The type id of the scalar type.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const float sdr::Traits< uint8_t >::scale
+
+static
+
+ +

The scaleing factor from floating point to integer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
const size_t sdr::Traits< uint8_t >::shift
+
+static
+
+ +

Shift from Scalar to SScalar.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_u_s_b_demod-members.html b/classsdr_1_1_u_s_b_demod-members.html new file mode 100644 index 0000000..85a7f93 --- /dev/null +++ b/classsdr_1_1_u_s_b_demod-members.html @@ -0,0 +1,133 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::USBDemod< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::USBDemod< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::USBDemod< Scalar >protected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_process(const Buffer< std::complex< Scalar > > &in, const Buffer< Scalar > &out)sdr::USBDemod< Scalar >inlineprotected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::USBDemod< Scalar >inlinevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
CScalar typedefsdr::USBDemod< Scalar >
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< std::complex< Scalar > >inlinevirtual
process(const Buffer< CScalar > &buffer, bool allow_overwrite)sdr::USBDemod< Scalar >inlinevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< std::complex< Scalar > >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
SScalar typedefsdr::USBDemod< Scalar >
type() const sdr::Sourcevirtual
USBDemod()sdr::USBDemod< Scalar >inline
~Sink()sdr::Sink< std::complex< Scalar > >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
~USBDemod()sdr::USBDemod< Scalar >inlinevirtual
+ + + + diff --git a/classsdr_1_1_u_s_b_demod.html b/classsdr_1_1_u_s_b_demod.html new file mode 100644 index 0000000..66a787e --- /dev/null +++ b/classsdr_1_1_u_s_b_demod.html @@ -0,0 +1,455 @@ + + + + + + +libsdr: sdr::USBDemod< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::USBDemod< Scalar > Class Template Reference
+
+
+ +

SSB upper side band (USB) demodulator from an I/Q signal. + More...

+ +

#include <demod.hh>

+
+Inheritance diagram for sdr::USBDemod< Scalar >:
+
+
+ + +sdr::Sink< std::complex< Scalar > > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + +

+Public Types

typedef std::complex< Scalar > CScalar
 The complex input scalar. More...
 
typedef Traits< Scalar >::SScalar SScalar
 The real compute scalar. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 USBDemod ()
 Constructor. More...
 
virtual ~USBDemod ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the USB demodulator. More...
 
virtual void process (const Buffer< CScalar > &buffer, bool allow_overwrite)
 Performs the demodulation. More...
 
- Public Member Functions inherited from sdr::Sink< std::complex< Scalar > >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + +

+Protected Member Functions

void _process (const Buffer< std::complex< Scalar > > &in, const Buffer< Scalar > &out)
 The actual demodulation. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + +

+Protected Attributes

Buffer< Scalar > _buffer
 The output buffer. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::USBDemod< Scalar >

+ +

SSB upper side band (USB) demodulator from an I/Q signal.

+

Member Typedef Documentation

+ +
+
+
+template<class Scalar >
+ + + + +
typedef std::complex<Scalar> sdr::USBDemod< Scalar >::CScalar
+
+ +

The complex input scalar.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + +
typedef Traits<Scalar>::SScalar sdr::USBDemod< Scalar >::SScalar
+
+ +

The real compute scalar.

+ +
+
+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
sdr::USBDemod< Scalar >::USBDemod ()
+
+inline
+
+ +

Constructor.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::USBDemod< Scalar >::~USBDemod ()
+
+inlinevirtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void sdr::USBDemod< Scalar >::_process (const Buffer< std::complex< Scalar > > & in,
const Buffer< Scalar > & out 
)
+
+inlineprotected
+
+ +

The actual demodulation.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::USBDemod< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the USB demodulator.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::USBDemod< Scalar >::process (const Buffer< CScalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Performs the demodulation.

+ +

Implements sdr::Sink< std::complex< Scalar > >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
Buffer<Scalar> sdr::USBDemod< Scalar >::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_u_s_b_demod.png b/classsdr_1_1_u_s_b_demod.png new file mode 100644 index 0000000..1ad8fd1 Binary files /dev/null and b/classsdr_1_1_u_s_b_demod.png differ diff --git a/classsdr_1_1_unsigned_to_signed-members.html b/classsdr_1_1_unsigned_to_signed-members.html new file mode 100644 index 0000000..ee3012f --- /dev/null +++ b/classsdr_1_1_unsigned_to_signed-members.html @@ -0,0 +1,131 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::UnsignedToSigned Member List
+
+
+ +

This is the complete list of members for sdr::UnsignedToSigned, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::UnsignedToSignedprotected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_processsdr::UnsignedToSignedprotected
_process_int16(const RawBuffer &in, const RawBuffer &out)sdr::UnsignedToSignedprotected
_process_int8(const RawBuffer &in, const RawBuffer &out)sdr::UnsignedToSignedprotected
_scalesdr::UnsignedToSignedprotected
_sinkssdr::Sourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::UnsignedToSignedvirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::UnsignedToSignedvirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
UnsignedToSigned(float scale=1.0)sdr::UnsignedToSigned
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
~UnsignedToSigned()sdr::UnsignedToSignedvirtual
+ + + + diff --git a/classsdr_1_1_unsigned_to_signed.html b/classsdr_1_1_unsigned_to_signed.html new file mode 100644 index 0000000..8ed91c2 --- /dev/null +++ b/classsdr_1_1_unsigned_to_signed.html @@ -0,0 +1,469 @@ + + + + + + +libsdr: sdr::UnsignedToSigned Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::UnsignedToSigned Class Reference
+
+
+ +

Performs a reinterprete cast from an unsinged value to a singed one. + More...

+ +

#include <utils.hh>

+
+Inheritance diagram for sdr::UnsignedToSigned:
+
+
+ + +sdr::SinkBase +sdr::Source + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 UnsignedToSigned (float scale=1.0)
 Constructor with optional scaleing. More...
 
virtual ~UnsignedToSigned ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the cast node. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Performs the cast. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + +

+Protected Member Functions

void _process_int8 (const RawBuffer &in, const RawBuffer &out)
 Performs the cast for uint8 -> int8. More...
 
void _process_int16 (const RawBuffer &in, const RawBuffer &out)
 Performs the cast for uint16 -> int16. More...
 
- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+ + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

void(UnsignedToSigned::* _process )(const RawBuffer &in, const RawBuffer &out)
 Type-cast callback. More...
 
RawBuffer _buffer
 The output buffer, unused if the cast can be performed in-place. More...
 
float _scale
 Holds the scaleing. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+

Detailed Description

+

Performs a reinterprete cast from an unsinged value to a singed one.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
UnsignedToSigned::UnsignedToSigned (float scale = 1.0)
+
+ +

Constructor with optional scaleing.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
UnsignedToSigned::~UnsignedToSigned ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void UnsignedToSigned::_process_int16 (const RawBufferin,
const RawBufferout 
)
+
+protected
+
+ +

Performs the cast for uint16 -> int16.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void UnsignedToSigned::_process_int8 (const RawBufferin,
const RawBufferout 
)
+
+protected
+
+ +

Performs the cast for uint8 -> int8.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + +
void UnsignedToSigned::config (const Configsrc_cfg)
+
+virtual
+
+ +

Configures the cast node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void UnsignedToSigned::handleBuffer (const RawBufferbuffer,
bool allow_overwrite 
)
+
+virtual
+
+ +

Performs the cast.

+ +

Implements sdr::SinkBase.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
RawBuffer sdr::UnsignedToSigned::_buffer
+
+protected
+
+ +

The output buffer, unused if the cast can be performed in-place.

+ +
+
+ +
+
+ + + + + +
+ + + + +
void(UnsignedToSigned::* sdr::UnsignedToSigned::_process)(const RawBuffer &in, const RawBuffer &out)
+
+protected
+
+ +

Type-cast callback.

+ +
+
+ +
+
+ + + + + +
+ + + + +
float sdr::UnsignedToSigned::_scale
+
+protected
+
+ +

Holds the scaleing.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_unsigned_to_signed.png b/classsdr_1_1_unsigned_to_signed.png new file mode 100644 index 0000000..b56ee21 Binary files /dev/null and b/classsdr_1_1_unsigned_to_signed.png differ diff --git a/classsdr_1_1_varicode-members.html b/classsdr_1_1_varicode-members.html new file mode 100644 index 0000000..a3840de --- /dev/null +++ b/classsdr_1_1_varicode-members.html @@ -0,0 +1,132 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Varicode Member List
+
+
+ +

This is the complete list of members for sdr::Varicode, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::Varicodeprotected
_code_tablesdr::Varicodeprotected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_sinkssdr::Sourceprotected
_valuesdr::Varicodeprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
config(const Config &src_cfg)sdr::Varicodevirtual
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< uint8_t >inlinevirtual
process(const Buffer< uint8_t > &buffer, bool allow_overwrite)sdr::Varicodevirtual
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Sink()sdr::Sink< uint8_t >inline
SinkBase()sdr::SinkBase
Source()sdr::Source
type() const sdr::Sourcevirtual
Varicode()sdr::Varicode
~Sink()sdr::Sink< uint8_t >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~Source()sdr::Sourcevirtual
~Varicode()sdr::Varicodevirtual
+ + + + diff --git a/classsdr_1_1_varicode.html b/classsdr_1_1_varicode.html new file mode 100644 index 0000000..e4afb25 --- /dev/null +++ b/classsdr_1_1_varicode.html @@ -0,0 +1,401 @@ + + + + + + +libsdr: sdr::Varicode Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Varicode Class Reference
+
+
+ +

Simple varicode (Huffman code) decoder node. + More...

+ +

#include <psk31.hh>

+
+Inheritance diagram for sdr::Varicode:
+
+
+ + +sdr::Sink< uint8_t > +sdr::Source +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 Varicode ()
 Constructor. More...
 
virtual ~Varicode ()
 Destructor. More...
 
virtual void config (const Config &src_cfg)
 Configures the node. More...
 
virtual void process (const Buffer< uint8_t > &buffer, bool allow_overwrite)
 Converts the input bit stream to ASCII chars. More...
 
- Public Member Functions inherited from sdr::Sink< uint8_t >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

uint16_t _value
 The shift register of the last received bits. More...
 
Buffer< uint8_t > _buffer
 The output buffer. More...
 
std::map< uint16_t, char > _code_table
 The conversion table. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

Simple varicode (Huffman code) decoder node.

+

It consumes a bit-stream (uint8_t) and produces a uint8_t stream of ascii chars. Non-printable chars (except for new-line) are ignored. The output stream has no samplerate!

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + +
Varicode::Varicode ()
+
+ +

Constructor.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
Varicode::~Varicode ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + +
+ + + + + + + + +
void Varicode::config (const Configsrc_cfg)
+
+virtual
+
+ +

Configures the node.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
void Varicode::process (const Buffer< uint8_t > & buffer,
bool allow_overwrite 
)
+
+virtual
+
+ +

Converts the input bit stream to ASCII chars.

+ +

Implements sdr::Sink< uint8_t >.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
Buffer<uint8_t> sdr::Varicode::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::map<uint16_t, char> sdr::Varicode::_code_table
+
+protected
+
+ +

The conversion table.

+ +
+
+ +
+
+ + + + + +
+ + + + +
uint16_t sdr::Varicode::_value
+
+protected
+
+ +

The shift register of the last received bits.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_varicode.png b/classsdr_1_1_varicode.png new file mode 100644 index 0000000..ad1d02b Binary files /dev/null and b/classsdr_1_1_varicode.png differ diff --git a/classsdr_1_1_wav_sink-members.html b/classsdr_1_1_wav_sink-members.html new file mode 100644 index 0000000..c35a496 --- /dev/null +++ b/classsdr_1_1_wav_sink-members.html @@ -0,0 +1,121 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::WavSink< Scalar > Member List
+
+
+ +

This is the complete list of members for sdr::WavSink< Scalar >, including all inherited members.

+ + + + + + + + + + + + + + + + +
_bitsPerSamplesdr::WavSink< Scalar >protected
_filesdr::WavSink< Scalar >protected
_frameCountsdr::WavSink< Scalar >protected
_numChanelssdr::WavSink< Scalar >protected
_sampleRatesdr::WavSink< Scalar >protected
close()sdr::WavSink< Scalar >inline
config(const Config &src_cfg)sdr::WavSink< Scalar >inlinevirtual
handleBuffer(const RawBuffer &buffer, bool allow_overwrite)sdr::Sink< Scalar >inlinevirtual
process(const Buffer< Scalar > &buffer, bool allow_overwrite)sdr::WavSink< Scalar >inlinevirtual
Sink()sdr::Sink< Scalar >inline
SinkBase()sdr::SinkBase
WavSink(const std::string &filename)sdr::WavSink< Scalar >inline
~Sink()sdr::Sink< Scalar >inlinevirtual
~SinkBase()sdr::SinkBasevirtual
~WavSink()sdr::WavSink< Scalar >inlinevirtual
+ + + + diff --git a/classsdr_1_1_wav_sink.html b/classsdr_1_1_wav_sink.html new file mode 100644 index 0000000..56761e0 --- /dev/null +++ b/classsdr_1_1_wav_sink.html @@ -0,0 +1,465 @@ + + + + + + +libsdr: sdr::WavSink< Scalar > Class Template Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::WavSink< Scalar > Class Template Reference
+
+
+ +

Stores the received buffers into a WAV file. + More...

+ +

#include <wavfile.hh>

+
+Inheritance diagram for sdr::WavSink< Scalar >:
+
+
+ + +sdr::Sink< Scalar > +sdr::SinkBase + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 WavSink (const std::string &filename)
 Constructor, filename specifies the file name, the WAV data is stored into. More...
 
virtual ~WavSink ()
 Destructor, closes the file if not done yet. More...
 
virtual void config (const Config &src_cfg)
 Configures the sink. More...
 
void close ()
 Completes the WAV header and closes the file. More...
 
virtual void process (const Buffer< Scalar > &buffer, bool allow_overwrite)
 Writes some data into the WAV file. More...
 
- Public Member Functions inherited from sdr::Sink< Scalar >
 Sink ()
 Constructor. More...
 
virtual ~Sink ()
 Drestructor. More...
 
virtual void handleBuffer (const RawBuffer &buffer, bool allow_overwrite)
 Re-implemented from SinkBase. More...
 
- Public Member Functions inherited from sdr::SinkBase
 SinkBase ()
 Constructor. More...
 
virtual ~SinkBase ()
 Destructor. More...
 
+ + + + + + + + + + + + + + + + +

+Protected Attributes

std::fstream _file
 The file output stream. More...
 
uint16_t _bitsPerSample
 The number of bits per sample (depends on the template type). More...
 
uint32_t _frameCount
 The total number of frame counts. More...
 
uint32_t _sampleRate
 The sample rate. More...
 
uint16_t _numChanels
 The number of chanels. More...
 
+

Detailed Description

+

template<class Scalar>
+class sdr::WavSink< Scalar >

+ +

Stores the received buffers into a WAV file.

+

Constructor & Destructor Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
sdr::WavSink< Scalar >::WavSink (const std::string & filename)
+
+inline
+
+ +

Constructor, filename specifies the file name, the WAV data is stored into.

+
Exceptions
+ + +
ConfigErrorIf the specified file can not be opened for output.
+
+
+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
virtual sdr::WavSink< Scalar >::~WavSink ()
+
+inlinevirtual
+
+ +

Destructor, closes the file if not done yet.

+ +
+
+

Member Function Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + +
void sdr::WavSink< Scalar >::close ()
+
+inline
+
+ +

Completes the WAV header and closes the file.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + +
virtual void sdr::WavSink< Scalar >::config (const Configsrc_cfg)
+
+inlinevirtual
+
+ +

Configures the sink.

+ +

Implements sdr::SinkBase.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + + + + + + + + + + + + + + + +
virtual void sdr::WavSink< Scalar >::process (const Buffer< Scalar > & buffer,
bool allow_overwrite 
)
+
+inlinevirtual
+
+ +

Writes some data into the WAV file.

+ +

Implements sdr::Sink< Scalar >.

+ +
+
+

Member Data Documentation

+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
uint16_t sdr::WavSink< Scalar >::_bitsPerSample
+
+protected
+
+ +

The number of bits per sample (depends on the template type).

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
std::fstream sdr::WavSink< Scalar >::_file
+
+protected
+
+ +

The file output stream.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
uint32_t sdr::WavSink< Scalar >::_frameCount
+
+protected
+
+ +

The total number of frame counts.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
uint16_t sdr::WavSink< Scalar >::_numChanels
+
+protected
+
+ +

The number of chanels.

+ +
+
+ +
+
+
+template<class Scalar >
+ + + + + +
+ + + + +
uint32_t sdr::WavSink< Scalar >::_sampleRate
+
+protected
+
+ +

The sample rate.

+ +
+
+
The documentation for this class was generated from the following file: +
+ + + + diff --git a/classsdr_1_1_wav_sink.png b/classsdr_1_1_wav_sink.png new file mode 100644 index 0000000..30ba67d Binary files /dev/null and b/classsdr_1_1_wav_sink.png differ diff --git a/classsdr_1_1_wav_source-members.html b/classsdr_1_1_wav_source-members.html new file mode 100644 index 0000000..2ee867c --- /dev/null +++ b/classsdr_1_1_wav_source-members.html @@ -0,0 +1,135 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::WavSource Member List
+
+
+ +

This is the complete list of members for sdr::WavSource, including all inherited members.

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
_buffersdr::WavSourceprotected
_buffer_sizesdr::WavSourceprotected
_configsdr::Sourceprotected
_eossdr::Sourceprotected
_filesdr::WavSourceprotected
_frame_countsdr::WavSourceprotected
_frames_leftsdr::WavSourceprotected
_sample_ratesdr::WavSourceprotected
_sinkssdr::Sourceprotected
_typesdr::WavSourceprotected
addEOS(T *instance, void(T::*function)())sdr::Sourceinline
close()sdr::WavSource
connect(SinkBase *sink, bool direct=false)sdr::Source
disconnect(SinkBase *sink)sdr::Source
isOpen() const sdr::WavSource
isReal() const sdr::WavSource
next()sdr::WavSource
open(const std::string &filename)sdr::WavSource
propagateConfig(const Config &config)sdr::Sourceprotected
sampleRate() const sdr::Sourcevirtual
send(const RawBuffer &buffer, bool allow_overwrite=false)sdr::Sourcevirtual
setConfig(const Config &config)sdr::Sourcevirtual
signalEOS()sdr::Sourceprotected
Source()sdr::Source
type() const sdr::Sourcevirtual
WavSource(size_t buffer_size=1024)sdr::WavSource
WavSource(const std::string &filename, size_t buffer_size=1024)sdr::WavSource
~Source()sdr::Sourcevirtual
~WavSource()sdr::WavSourcevirtual
+ + + + diff --git a/classsdr_1_1_wav_source.html b/classsdr_1_1_wav_source.html new file mode 100644 index 0000000..7884af2 --- /dev/null +++ b/classsdr_1_1_wav_source.html @@ -0,0 +1,543 @@ + + + + + + +libsdr: sdr::WavSource Class Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::WavSource Class Reference
+
+
+ +

A simple imput source that reads from a wav file. + More...

+ +

#include <wavfile.hh>

+
+Inheritance diagram for sdr::WavSource:
+
+
+ + +sdr::Source + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Public Member Functions

 WavSource (size_t buffer_size=1024)
 Constructor, buffer_size specified the output buffer size. More...
 
 WavSource (const std::string &filename, size_t buffer_size=1024)
 Constructor with file name, buffer_size specified the output buffer size. More...
 
virtual ~WavSource ()
 Destructor. More...
 
bool isOpen () const
 Returns true if the file is open. More...
 
void open (const std::string &filename)
 Open a new file. More...
 
void close ()
 Close the current file. More...
 
bool isReal () const
 Returns true, if the input is real (stereo files are handled as I/Q signals). More...
 
void next ()
 Read the next data. More...
 
- Public Member Functions inherited from sdr::Source
 Source ()
 Constructor. More...
 
virtual ~Source ()
 Destructor. More...
 
virtual void send (const RawBuffer &buffer, bool allow_overwrite=false)
 Sends the given buffer to all connected sinks. More...
 
void connect (SinkBase *sink, bool direct=false)
 Connect this source to a sink. More...
 
void disconnect (SinkBase *sink)
 Disconnect a sink again. More...
 
virtual void setConfig (const Config &config)
 Stores the configuration and propergates it if the configuration has been changed. More...
 
virtual double sampleRate () const
 Returns the configured sample rate or 0 otherwise. More...
 
virtual Config::Type type () const
 Returns the configured source type or Config::Type_UNDEFINED otherwise. More...
 
template<class T >
void addEOS (T *instance, void(T::*function)())
 Adds a callback to the end-of-stream signal of the source. More...
 
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Protected Attributes

std::fstream _file
 The input file stream. More...
 
RawBuffer _buffer
 The output buffer. More...
 
size_t _buffer_size
 The current buffer size. More...
 
size_t _frame_count
 The number of available frames. More...
 
Config::Type _type
 The type of the data in the WAV file. More...
 
double _sample_rate
 The sample rate. More...
 
size_t _frames_left
 The number of frames left to be read. More...
 
- Protected Attributes inherited from sdr::Source
Config _config
 Holds the source configuration, this can be updated by calling setConfig. More...
 
std::map< SinkBase *, bool > _sinks
 The connected sinks. More...
 
std::list< DelegateInterface * > _eos
 The connected EOS singal handlers. More...
 
+ + + + + + + + +

+Additional Inherited Members

- Protected Member Functions inherited from sdr::Source
void signalEOS ()
 Signals the EOS. More...
 
void propagateConfig (const Config &config)
 Propagates the given configuration to all connected sinks. More...
 
+

Detailed Description

+

A simple imput source that reads from a wav file.

+

Some data is read from the file on every call to next until the end of file is reached.

+

Constructor & Destructor Documentation

+ +
+
+ + + + + + + + +
WavSource::WavSource (size_t buffer_size = 1024)
+
+ +

Constructor, buffer_size specified the output buffer size.

+ +
+
+ +
+
+ + + + + + + + + + + + + + + + + + +
WavSource::WavSource (const std::string & filename,
size_t buffer_size = 1024 
)
+
+ +

Constructor with file name, buffer_size specified the output buffer size.

+ +
+
+ +
+
+ + + + + +
+ + + + + + + +
WavSource::~WavSource ()
+
+virtual
+
+ +

Destructor.

+ +
+
+

Member Function Documentation

+ +
+
+ + + + + + + +
void WavSource::close ()
+
+ +

Close the current file.

+ +
+
+ +
+
+ + + + + + + +
bool WavSource::isOpen () const
+
+ +

Returns true if the file is open.

+ +
+
+ +
+
+ + + + + + + +
bool WavSource::isReal () const
+
+ +

Returns true, if the input is real (stereo files are handled as I/Q signals).

+ +
+
+ +
+
+ + + + + + + +
void WavSource::next ()
+
+ +

Read the next data.

+ +
+
+ +
+
+ + + + + + + + +
void WavSource::open (const std::string & filename)
+
+ +

Open a new file.

+ +
+
+

Member Data Documentation

+ +
+
+ + + + + +
+ + + + +
RawBuffer sdr::WavSource::_buffer
+
+protected
+
+ +

The output buffer.

+ +
+
+ +
+
+ + + + + +
+ + + + +
size_t sdr::WavSource::_buffer_size
+
+protected
+
+ +

The current buffer size.

+ +
+
+ +
+
+ + + + + +
+ + + + +
std::fstream sdr::WavSource::_file
+
+protected
+
+ +

The input file stream.

+ +
+
+ +
+
+ + + + + +
+ + + + +
size_t sdr::WavSource::_frame_count
+
+protected
+
+ +

The number of available frames.

+ +
+
+ +
+
+ + + + + +
+ + + + +
size_t sdr::WavSource::_frames_left
+
+protected
+
+ +

The number of frames left to be read.

+ +
+
+ +
+
+ + + + + +
+ + + + +
double sdr::WavSource::_sample_rate
+
+protected
+
+ +

The sample rate.

+ +
+
+ +
+
+ + + + + +
+ + + + +
Config::Type sdr::WavSource::_type
+
+protected
+
+ +

The type of the data in the WAV file.

+ +
+
+
The documentation for this class was generated from the following files: +
+ + + + diff --git a/classsdr_1_1_wav_source.png b/classsdr_1_1_wav_source.png new file mode 100644 index 0000000..5747232 Binary files /dev/null and b/classsdr_1_1_wav_source.png differ diff --git a/closed.png b/closed.png new file mode 100644 index 0000000..98cc2c9 Binary files /dev/null and b/closed.png differ diff --git a/combine_8hh_source.html b/combine_8hh_source.html new file mode 100644 index 0000000..48aaae7 --- /dev/null +++ b/combine_8hh_source.html @@ -0,0 +1,350 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/combine.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
combine.hh
+
+
+
1 #ifndef __SDR_COMBINE_HH__
+
2 #define __SDR_COMBINE_HH__
+
3 
+
4 #include "config.hh"
+
5 #include "traits.hh"
+
6 #include "node.hh"
+
7 #include "buffer.hh"
+
8 #include "logger.hh"
+
9 #include <limits>
+
10 
+
11 namespace sdr {
+
12 
+
13 template <class Scalar> class Combine;
+
14 
+
16 template <class Scalar>
+
17 class CombineSink: public Sink<Scalar>
+
18 {
+
19 public:
+
21  CombineSink(Combine<Scalar> *combine, size_t index, RingBuffer<Scalar> &buffer)
+
22  : Sink<Scalar>(), _index(index), _parent(combine), _buffer(buffer)
+
23  {
+
24  // Pass...
+
25  }
+
27  virtual ~CombineSink() {
+
28  // pass...
+
29  }
+
30 
+
32  virtual void config(const Config &src_cfg) {
+
33  // Requires sample rate and type
+
34  if (!src_cfg.hasType() || !src_cfg.hasSampleRate()) { return; }
+
35  // Check type
+
36  if (Config::typeId<Scalar>() != src_cfg.type()) {
+
37  ConfigError err;
+
38  err << "Can not configure CombinSink: Invalid source type " << src_cfg.type()
+
39  << ", expected " << Config::typeId<Scalar>();
+
40  throw err;
+
41  }
+
42  // Notify parent
+
43  _parent->notifyConfig(_index, src_cfg);
+
44  }
+
45 
+
47  virtual void process(const Buffer<Scalar> &buffer, bool allow_overwrite) {
+
48  // Copy data into ring buffer and notify parent
+
49  _buffer.put(buffer);
+
50  _parent->notifyData(_index);
+
51  }
+
52 
+
53 protected:
+
55  size_t _index;
+ + +
60 };
+
61 
+
62 
+
64 template <class Scalar>
+
65 class Combine
+
66 {
+
67 public:
+
69  Combine(size_t N) {
+
70  _buffers.reserve(N); _sinks.reserve(N);
+
71  for (size_t i=0; i<N; i++) {
+
72  _buffers.push_back(RingBuffer<Scalar>());
+
73  _sinks.push_back(new CombineSink<Scalar>(this, i, _buffers.back()));
+
74  }
+
75  }
+
76 
+
78  virtual ~Combine() {
+
79  // Unref all buffers and free sinks
+
80  for (size_t i=0; i<_sinks.size(); i++) {
+
81  _buffers[i].unref(); delete _sinks[i];
+
82  }
+
83  _buffers.clear(); _sinks.clear();
+
84  }
+
85 
+
87  virtual void config(const Config &cfg) = 0;
+
89  virtual void process(std::vector< RingBuffer<Scalar> > &buffers, size_t N) = 0;
+
90 
+
91 
+
92 protected:
+
94  void notifyConfig(size_t idx, const Config &cfg)
+
95  {
+
96  // Requires type, sampleRate and buffer size
+
97  if (!cfg.hasType() || !cfg.hasSampleRate() || !cfg.hasBufferSize()) { return; }
+
98  // check or unify type
+
99  if (!_config.hasType()) { _config.setType(cfg.type()); }
+
100  else if (_config.type() != cfg.type()) {
+
101  ConfigError err;
+
102  err << "Can not configure Combine node: Invalid type of sink #" << idx
+
103  << " " << cfg.type() << ", expected " << _config.type();
+
104  throw err;
+
105  }
+
106  // Check sample rate
+ +
108  else if (_config.sampleRate() != cfg.sampleRate()) {
+
109  ConfigError err;
+
110  err << "Can ont configure Combine node: Invalid sample rate of sink #" << idx
+
111  << " " << cfg.sampleRate() << ", expected " << _config.sampleRate();
+
112  throw err;
+
113  }
+
114  // Determine max buffer size
+ +
116  else {
+
117  // Take maximum:
+
118  _config.setBufferSize(std::max(_config.bufferSize(), cfg.bufferSize()));
+
119  }
+
120  // Reallocate buffers
+
121  for (size_t i=0; i<_sinks.size(); i++) {
+ +
123  }
+
124  // Propergate config
+
125  this->config(_config);
+
126  }
+
127 
+
129  void notifyData(size_t idx) {
+
130  // Determine minimum size of available data
+
131  size_t N = std::numeric_limits<size_t>::max();
+
132  for (size_t i=0; i<_sinks.size(); i++) {
+
133  N = std::min(N, _buffers[i].stored());
+
134  }
+
135  if (N > 0) { this->process(_buffers, N); }
+
136  }
+
137 
+
138 protected:
+
140  std::vector< RingBuffer<Scalar> > _buffers;
+
142  std::vector< CombineSink<Scalar> *> _sinks;
+ +
145 
+
146  friend class CombineSink<Scalar>;
+
147 };
+
148 
+
149 
+
151 template <class Scalar>
+
152 class Interleave : public Combine<Scalar>, public Source
+
153 {
+
154 public:
+
156  Interleave(size_t N)
+
157  : Combine<Scalar>(N), Source(), _N(N), _buffer()
+
158  {
+
159  // pass...
+
160  }
+
161 
+
163  Sink<Scalar> *sink(size_t i) {
+
164  if (i >= _N) {
+
165  RuntimeError err;
+
166  err << "Interleave: Sink index " << i << " out of range [0," << _N << ")";
+
167  throw err;
+
168  }
+
169  return Combine<Scalar>::_sinks[i];
+
170  }
+
171 
+
173  virtual void config(const Config &cfg) {
+
174  //Requres type & buffer size
+
175  if (!cfg.hasType() || !cfg.hasBufferSize()) { return; }
+
176  // Check type
+
177  if (Config::typeId<Scalar>() != cfg.type()) {
+
178  ConfigError err;
+
179  err << "Can not configure Interleave node: Invalid source type " << cfg.type()
+
180  << ", expected " << Config::typeId<Scalar>();
+
181  throw err;
+
182  }
+
183  // Allocate buffer:
+ +
185  // Propergate config
+
186  this->setConfig(Config(Config::typeId<Scalar>(), cfg.sampleRate(), _buffer.size(), 1));
+
187  }
+
188 
+
190  virtual void process(std::vector<RingBuffer<Scalar> > &buffers, size_t N) {
+
191  if (0 == N) { return; }
+
192  if (! _buffer.isUnused()) {
+
193 #ifdef SDR_DEBUG
+
194  LogMessage msg(LOG_WARNING);
+
195  msg << "Interleave: Output buffer in use: Drop " << _N << "x" << N
+
196  << " input values";
+
197  Logger::get().log(msg);
+
198 #endif
+
199  for (size_t i=0; i<buffers.size(); i++) { buffers[i].drop(N); }
+
200  return;
+
201  }
+
202  size_t num = std::min(_buffer.size()/_N,N);
+
203  // Interleave data
+
204  size_t idx = 0;
+
205  for (size_t i=0; i<num; i++) {
+
206  for (size_t j=0; j<_N; j++, idx++) {
+
207  _buffer[idx] = buffers[j][i];
+
208  }
+
209  }
+
210  // Drop num elements from all ring buffers
+
211  for (size_t i=0; i<_N; i++) {
+
212  buffers[i].drop(num);
+
213  }
+
214  // Send buffer
+
215  this->send(_buffer.head(num*_N));
+
216  }
+
217 
+
218 protected:
+
220  size_t _N;
+ +
223 };
+
224 
+
225 }
+
226 #endif // __SDR_COMBINE_HH__
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
virtual void config(const Config &cfg)
Configures the interleave node.
Definition: combine.hh:173
+
Interleaves several input streams.
Definition: combine.hh:152
+
size_t _index
The index of the sink within the combine node.
Definition: combine.hh:55
+
void notifyData(size_t idx)
Determines the minimum amount of data that is available on all ring buffers.
Definition: combine.hh:129
+
A simple typed ring-buffer.
Definition: buffer.hh:473
+
virtual void send(const RawBuffer &buffer, bool allow_overwrite=false)
Sends the given buffer to all connected sinks.
Definition: node.cc:67
+
Buffer< Scalar > _buffer
The putput buffer.
Definition: combine.hh:222
+
Typed sink.
Definition: node.hh:176
+
virtual void process(const Buffer< Scalar > &buffer, bool allow_overwrite)
Handles the given buffer.
Definition: combine.hh:47
+
virtual void config(const Config &cfg)=0
Needs to be overridden.
+
bool hasSampleRate() const
If true, the configuration has a sample rate.
Definition: node.hh:59
+
Generic source class.
Definition: node.hh:197
+
RingBuffer< Scalar > & _buffer
The input ring-buffer.
Definition: combine.hh:59
+
The runtime error class.
Definition: exception.hh:36
+
size_t _N
The number of sinks.
Definition: combine.hh:220
+
size_t size() const
Returns the number of elements of type T in this buffer.
Definition: buffer.hh:166
+
bool hasType() const
If true, the configuration has a type.
Definition: node.hh:53
+
virtual void process(std::vector< RingBuffer< Scalar > > &buffers, size_t N)=0
Needs to be overridden.
+
A combine node.
Definition: combine.hh:13
+
virtual void setConfig(const Config &config)
Stores the configuration and propergates it if the configuration has been changed.
Definition: node.cc:98
+
Buffer< T > head(size_t n) const
Returns a new view on this buffer.
Definition: buffer.hh:237
+
void log(const LogMessage &message)
Logs a message.
Definition: logger.cc:100
+
std::vector< RingBuffer< Scalar > > _buffers
The ring buffers of all combine sinks.
Definition: combine.hh:140
+
Type type() const
Returns the type.
Definition: node.hh:55
+
void setType(Type type)
Sets the type.
Definition: node.hh:57
+
std::vector< CombineSink< Scalar > * > _sinks
The combine sinks.
Definition: combine.hh:142
+
virtual void config(const Config &src_cfg)
Configures the sink.
Definition: combine.hh:32
+
static Logger & get()
Returns the singleton instance of the logger.
Definition: logger.cc:89
+
Combine< Scalar > * _parent
A reference to the combine node.
Definition: combine.hh:57
+
The configuration error class.
Definition: exception.hh:24
+
virtual void process(std::vector< RingBuffer< Scalar > > &buffers, size_t N)
Processes the data from all sinks.
Definition: combine.hh:190
+
A log message.
Definition: logger.hh:21
+
size_t bufferSize() const
Returns the max.
Definition: node.hh:67
+
Combine(size_t N)
Constructor, N specifies the number of sinks.
Definition: combine.hh:69
+
Interleave(size_t N)
Constructor.
Definition: combine.hh:156
+
virtual ~CombineSink()
Destructor.
Definition: combine.hh:27
+
void setSampleRate(double rate)
Sets the sample rate.
Definition: node.hh:63
+
Sink< Scalar > * sink(size_t i)
Retunrs the i-th sink.
Definition: combine.hh:163
+
Config _config
The output configuration.
Definition: combine.hh:144
+
bool isUnused() const
We assume here that buffers are owned by some object: A buffer is therefore "unused" if the owner hol...
Definition: buffer.hh:87
+
void notifyConfig(size_t idx, const Config &cfg)
Unifies the configuration of all sinks.
Definition: combine.hh:94
+
CombineSink(Combine< Scalar > *combine, size_t index, RingBuffer< Scalar > &buffer)
Constructor.
Definition: combine.hh:21
+
A single sink of a Combine node.
Definition: combine.hh:17
+
virtual ~Combine()
Destructor.
Definition: combine.hh:78
+ +
void setBufferSize(size_t size)
Sets the max.
Definition: node.hh:69
+
bool hasBufferSize() const
If true, the configuration has a buffer size.
Definition: node.hh:65
+
double sampleRate() const
Returns the sample rate.
Definition: node.hh:61
+
+ + + + diff --git a/demod_8hh_source.html b/demod_8hh_source.html new file mode 100644 index 0000000..393a9a3 --- /dev/null +++ b/demod_8hh_source.html @@ -0,0 +1,511 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/demod.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
demod.hh
+
+
+
1 #ifndef __SDR_DEMOD_HH__
+
2 #define __SDR_DEMOD_HH__
+
3 
+
4 #include "node.hh"
+
5 #include "traits.hh"
+
6 #include "config.hh"
+
7 #include "combine.hh"
+
8 #include "logger.hh"
+
9 #include "math.hh"
+
10 
+
11 
+
12 namespace sdr {
+
13 
+
14 
+
16 template <class Scalar>
+
17 class AMDemod
+
18  : public Sink< std::complex<Scalar> >, public Source
+
19 {
+
20 public:
+
22  AMDemod() : Sink< std::complex<Scalar> >(), Source()
+
23  {
+
24  // pass...
+
25  }
+
26 
+
28  virtual ~AMDemod() {
+
29  // pass...
+
30  }
+
31 
+
33  virtual void config(const Config &src_cfg) {
+
34  // Requires type & buffer size
+
35  if (!src_cfg.hasType() || !src_cfg.hasBufferSize()) { return; }
+
36  // Check if buffer type matches template
+
37  if (Config::typeId< std::complex<Scalar> >() != src_cfg.type()) {
+
38  ConfigError err;
+
39  err << "Can not configure AMDemod: Invalid type " << src_cfg.type()
+
40  << ", expected " << Config::typeId< std::complex<Scalar> >();
+
41  throw err;
+
42  }
+
43  // Allocate buffer
+
44  _buffer = Buffer<Scalar>(src_cfg.bufferSize());
+
45 
+
46  LogMessage msg(LOG_DEBUG);
+
47  msg << "Configure AMDemod: " << this << std::endl
+
48  << " input type: " << Traits< std::complex<Scalar> >::scalarId << std::endl
+
49  << " output type: " << Traits<Scalar>::scalarId << std::endl
+
50  << " sample rate: " << src_cfg.sampleRate() << std::endl
+
51  << " buffer size: " << src_cfg.bufferSize();
+
52  Logger::get().log(msg);
+
53 
+
54  // Propergate config
+
55  this->setConfig(Config(Config::typeId<Scalar>(), src_cfg.sampleRate(),
+
56  src_cfg.bufferSize(), src_cfg.numBuffers()));
+
57  }
+
58 
+
60  virtual void process(const Buffer<std::complex<Scalar> > &buffer, bool allow_overwrite)
+
61  {
+
62  // Drop buffer if output buffer is still in use:
+
63  if (! _buffer.isUnused()) {
+
64 #ifdef SDR_DEBUG
+
65  LogMessage msg(LOG_WARNING);
+
66  msg << __FILE__ << ": Output buffer still in use: Drop received buffer...";
+
67  Logger::get().log(msg);
+
68  return;
+
69 #endif
+
70  }
+
71 
+
72  Buffer<Scalar> out_buffer;
+
73  // If source allow to overwrite the buffer, use it otherwise rely on own buffer
+
74  if (allow_overwrite) { out_buffer = Buffer<Scalar>(buffer); }
+
75  else { out_buffer = _buffer; }
+
76 
+
77  // Perform demodulation
+
78  for (size_t i=0; i<buffer.size(); i++) {
+
79  out_buffer[i] = std::sqrt(buffer[i].real()*buffer[i].real() +
+
80  buffer[i].imag()*buffer[i].imag());
+
81  }
+
82 
+
83  // If the source allowed to overwrite the buffer, this source will allow it too.
+
84  // If this source used the internal buffer (_buffer), it allows to overwrite it anyway.
+
85  this->send(out_buffer.head(buffer.size()), true);
+
86  }
+
87 
+
88 protected:
+ +
91 };
+
92 
+
93 
+
95 template <class Scalar>
+
96 class USBDemod
+
97  : public Sink< std::complex<Scalar> >, public Source
+
98 {
+
99 public:
+
101  typedef std::complex<Scalar> CScalar;
+ +
104 
+
105 public:
+ +
108  {
+
109  // pass...
+
110  }
+
111 
+
113  virtual ~USBDemod() {
+
114  // pass...
+
115  }
+
116 
+
118  virtual void config(const Config &src_cfg) {
+
119  // Requires type & buffer size
+
120  if (!src_cfg.hasType() || !src_cfg.hasBufferSize()) { return; }
+
121  // Check if buffer type matches template
+
122  if (Config::typeId<CScalar>() != src_cfg.type()) {
+
123  ConfigError err;
+
124  err << "Can not configure USBDemod: Invalid type " << src_cfg.type()
+
125  << ", expected " << Config::typeId<CScalar>();
+
126  throw err;
+
127  }
+
128  // Allocate buffer
+
129  _buffer = Buffer<Scalar>(src_cfg.bufferSize());
+
130 
+
131  LogMessage msg(LOG_DEBUG);
+
132  msg << "Configure USBDemod: " << this << std::endl
+
133  << " input type: " << Traits< std::complex<Scalar> >::scalarId << std::endl
+
134  << " output type: " << Traits<Scalar>::scalarId << std::endl
+
135  << " sample rate: " << src_cfg.sampleRate() << std::endl
+
136  << " buffer size: " << src_cfg.bufferSize();
+
137  Logger::get().log(msg);
+
138 
+
139  // Propergate config
+
140  this->setConfig(Config(Config::typeId<Scalar>(), src_cfg.sampleRate(),
+
141  src_cfg.bufferSize(), 1));
+
142  }
+
143 
+
145  virtual void process(const Buffer<CScalar> &buffer, bool allow_overwrite) {
+
146  if (allow_overwrite) {
+
147  // Process in-place
+
148  _process(buffer, Buffer<Scalar>(buffer));
+
149  } else if (_buffer.isUnused()) {
+
150  // Store result in buffer
+
151  _process(buffer, _buffer);
+
152  } else {
+
153  // Drop buffer
+
154 #ifdef SDR_DEBUG
+
155  LogMessage msg(LOG_WARNING);
+
156  msg << "SSBDemod: Drop buffer.";
+
157  Logger::get().log(msg);
+
158 #endif
+
159  }
+
160  }
+
161 
+
162 protected:
+
164  void _process(const Buffer< std::complex<Scalar> > &in, const Buffer< Scalar> &out) {
+
165  for (size_t i=0; i<in.size(); i++) {
+
166  out[i] = (SScalar(std::real(in[i])) + SScalar(std::imag(in[i])))/2;
+
167  }
+
168  this->send(out.head(in.size()));
+
169  }
+
170 
+
171 protected:
+ +
174 };
+
175 
+
176 
+
177 
+
179 template <class iScalar, class oScalar=iScalar>
+
180 class FMDemod: public Sink< std::complex<iScalar> >, public Source
+
181 {
+
182 public:
+ +
185 
+
186 public:
+ +
189  Sink< std::complex<iScalar> >(), Source(), _shift(0), _can_overwrite(false)
+
190  {
+
191  _shift = 8*(sizeof(oScalar)-sizeof(iScalar));
+
192  }
+
193 
+
195  virtual ~FMDemod() {
+
196  // pass...
+
197  }
+
198 
+
200  virtual void config(const Config &src_cfg) {
+
201  // Requires type & buffer size
+
202  if (!src_cfg.hasType() || !src_cfg.hasBufferSize()) { return; }
+
203  // Check if buffer type matches template
+
204  if (Config::typeId< std::complex<iScalar> >() != src_cfg.type()) {
+
205  ConfigError err;
+
206  err << "Can not configure FMDemod: Invalid type " << src_cfg.type()
+
207  << ", expected " << Config::typeId< std::complex<iScalar> >();
+
208  throw err;
+
209  }
+
210  // Unreference buffer if non-empty
+
211  if (! _buffer.isEmpty()) { _buffer.unref(); }
+
212  // Allocate buffer
+
213  _buffer = Buffer<oScalar>(src_cfg.bufferSize());
+
214  // reset last value
+
215  _last_value = 0;
+
216  // Check if FM demod can be performed in-place
+
217  _can_overwrite = (sizeof(std::complex<iScalar>) >= sizeof(oScalar));
+
218 
+
219  LogMessage msg(LOG_DEBUG);
+
220  msg << "Configured FMDemod node: " << this << std::endl
+
221  << " sample-rate: " << src_cfg.sampleRate() << std::endl
+
222  << " in-type / out-type: " << src_cfg.type()
+
223  << " / " << Config::typeId<oScalar>() << std::endl
+
224  << " in-place: " << (_can_overwrite ? "true" : "false") << std::endl
+
225  << " output scale: 2^" << _shift;
+
226  Logger::get().log(msg);
+
227 
+
228  // Propergate config
+
229  this->setConfig(Config(Config::typeId<oScalar>(), src_cfg.sampleRate(),
+
230  src_cfg.bufferSize(), 1));
+
231  }
+
232 
+
234  virtual void process(const Buffer<std::complex<iScalar> > &buffer, bool allow_overwrite)
+
235  {
+
236  if (0 == buffer.size()) { return; }
+
237 
+
238  if (allow_overwrite && _can_overwrite) {
+
239  _process(buffer, Buffer<oScalar>(buffer));
+
240  } else if (_buffer.isUnused()) {
+
241  _process(buffer, _buffer);
+
242  } else {
+
243 #ifdef SDR_DEBUG
+
244  LogMessage msg(LOG_WARNING);
+
245  msg << "FMDemod: Drop buffer: Output buffer still in use.";
+
246  Logger::get().log(msg);
+
247 #endif
+
248  }
+
249  }
+
250 
+
251 protected:
+
253  void _process(const Buffer< std::complex<iScalar> > &in, const Buffer<oScalar> &out)
+
254  {
+
255  // The last input value
+
256  std::complex<iScalar> last_value = _last_value;
+
257  // calc first value
+
258  SScalar a = (SScalar(in[0].real())*SScalar(last_value.real()))/2
+
259  + (SScalar(in[0].imag())*SScalar(last_value.imag()))/2;
+
260  SScalar b = (SScalar(in[0].imag())*SScalar(last_value.real()))/2
+
261  - (SScalar(in[0].real())*SScalar(last_value.imag()))/2;
+ +
263  // update last value
+
264  last_value = in[0];
+
265  // calc output (prob. overwriting the last value)
+
266  out[0] = fast_atan2<iScalar, oScalar>(a, b);
+
267  //out[0] = (1<<12)*(std::atan2(float(a),float(b))/M_PI);
+
268 
+
269  // Calc remaining values
+
270  for (size_t i=1; i<in.size(); i++) {
+
271  a = (SScalar(in[i].real())*SScalar(last_value.real()))/2
+
272  + (SScalar(in[i].imag())*SScalar(last_value.imag()))/2;
+
273  b = (SScalar(in[i].imag())*SScalar(last_value.real()))/2
+
274  - (SScalar(in[i].real())*SScalar(last_value.imag()))/2;
+ +
276  last_value = in[i];
+
277  out[i] = fast_atan2<iScalar,oScalar>(a, b);
+
278  //out[i] = (1<<12)*(std::atan2(float(a),float(b))/M_PI);
+
279  }
+
280 
+
281  // Store last value
+
282  _last_value = last_value;
+
283  // propergate result
+
284  this->send(out.head(in.size()));
+
285  }
+
286 
+
287 
+
288 protected:
+
290  int _shift;
+
292  std::complex<iScalar> _last_value;
+ + +
297 };
+
298 
+
299 
+
301 template <class Scalar>
+
302 class FMDeemph: public Sink<Scalar>, public Source
+
303 {
+
304 public:
+
306  FMDeemph(bool enabled=true)
+
307  : Sink<Scalar>(), Source(), _enabled(enabled), _alpha(0), _avg(0), _buffer(0)
+
308  {
+
309  // pass...
+
310  }
+
311 
+
313  virtual ~FMDeemph() {
+
314  // pass...
+
315  }
+
316 
+
318  inline bool isEnabled() const { return _enabled; }
+
319 
+
321  inline void enable(bool enabled) { _enabled = enabled; }
+
322 
+
324  virtual void config(const Config &src_cfg) {
+
325  // Requires type, sample rate & buffer size
+
326  if (!src_cfg.hasType() || !src_cfg.hasSampleRate() || !src_cfg.hasBufferSize()) { return; }
+
327  // Check if buffer type matches template
+
328  if (Config::typeId<Scalar>() != src_cfg.type()) {
+
329  ConfigError err;
+
330  err << "Can not configure FMDeemph: Invalid type " << src_cfg.type()
+
331  << ", expected " << Config::typeId<Scalar>();
+
332  throw err;
+
333  }
+
334  // Determine filter constant alpha:
+
335  _alpha = (int)round(
+
336  1.0/( (1.0-exp(-1.0/(src_cfg.sampleRate() * 75e-6) )) ) );
+
337  // Reset average:
+
338  _avg = 0;
+
339  // Allocate buffer:
+
340  _buffer = Buffer<Scalar>(src_cfg.bufferSize());
+
341  // Propergate config:
+
342  this->setConfig(Config(src_cfg.type(), src_cfg.sampleRate(), src_cfg.bufferSize(), 1));
+
343  }
+
344 
+
346  virtual void process(const Buffer<Scalar> &buffer, bool allow_overwrite)
+
347  {
+
348  // Skip if disabled:
+
349  if (!_enabled) { this->send(buffer, allow_overwrite); return; }
+
350 
+
351  // Process in-place or not
+
352  if (allow_overwrite) {
+
353  _process(buffer, buffer);
+
354  this->send(buffer, allow_overwrite);
+
355  } else {
+
356  _process(buffer, _buffer);
+
357  this->send(_buffer.head(buffer.size()), false);
+
358  }
+
359  }
+
360 
+
361 protected:
+
363  void _process(const Buffer<Scalar> &in, const Buffer<Scalar> &out) {
+
364  for (size_t i=0; i<in.size(); i++) {
+
365  // Update average:
+
366  Scalar diff = in[i] - _avg;
+
367  if (diff > 0) { _avg += (diff + _alpha/2) / _alpha; }
+
368  else { _avg += (diff - _alpha/2) / _alpha; }
+
369  // Store result
+
370  out[i] = _avg;
+
371  }
+
372  }
+
373 
+
374 protected:
+
376  bool _enabled;
+
378  int _alpha;
+
380  Scalar _avg;
+ +
383 };
+
384 
+
385 }
+
386 
+
387 #endif // __SDR_DEMOD_HH__
+
bool isEnabled() const
Returns true if the filter node is enabled.
Definition: demod.hh:318
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
virtual void config(const Config &src_cfg)
Configures the USB demodulator.
Definition: demod.hh:118
+
std::complex< Scalar > CScalar
The complex input scalar.
Definition: demod.hh:101
+
virtual ~FMDemod()
Destructor.
Definition: demod.hh:195
+
virtual ~USBDemod()
Destructor.
Definition: demod.hh:113
+
void _process(const Buffer< Scalar > &in, const Buffer< Scalar > &out)
Performs the actual filtering.
Definition: demod.hh:363
+
virtual void send(const RawBuffer &buffer, bool allow_overwrite=false)
Sends the given buffer to all connected sinks.
Definition: node.cc:67
+
Traits< iScalar >::SScalar SScalar
The super scalar.
Definition: demod.hh:184
+
virtual void config(const Config &src_cfg)
Configures the FM demodulator.
Definition: demod.hh:200
+
Typed sink.
Definition: node.hh:176
+
size_t numBuffers() const
Returns the max.
Definition: node.hh:73
+
A tiny node to de-emphasize the higher frequencies of a FM transmitted audio signal.
Definition: demod.hh:302
+
bool isEmpty() const
Returns true if the buffer is invalid/empty.
Definition: buffer.hh:77
+
Buffer< Scalar > _buffer
The output buffer.
Definition: demod.hh:173
+
bool hasSampleRate() const
If true, the configuration has a sample rate.
Definition: node.hh:59
+
virtual ~FMDeemph()
Destructor.
Definition: demod.hh:313
+
Generic source class.
Definition: node.hh:197
+
int _shift
Output rescaling.
Definition: demod.hh:290
+
size_t size() const
Returns the number of elements of type T in this buffer.
Definition: buffer.hh:166
+
bool hasType() const
If true, the configuration has a type.
Definition: node.hh:53
+
bool _enabled
If true, the filter is enabled.
Definition: demod.hh:376
+
virtual void config(const Config &src_cfg)
Configures the node.
Definition: demod.hh:324
+
int _alpha
Filter constant.
Definition: demod.hh:378
+
virtual void process(const Buffer< CScalar > &buffer, bool allow_overwrite)
Performs the demodulation.
Definition: demod.hh:145
+
virtual void process(const Buffer< Scalar > &buffer, bool allow_overwrite)
Dispatches in- or out-of-place filtering.
Definition: demod.hh:346
+
virtual void setConfig(const Config &config)
Stores the configuration and propergates it if the configuration has been changed.
Definition: node.cc:98
+
Amplitude modulation (AM) demodulator from an I/Q signal.
Definition: demod.hh:17
+
virtual ~AMDemod()
Destructor.
Definition: demod.hh:28
+
Buffer< Scalar > _buffer
The output buffer.
Definition: demod.hh:382
+
Demodulates FM from an I/Q signal.
Definition: demod.hh:180
+
Buffer< T > head(size_t n) const
Returns a new view on this buffer.
Definition: buffer.hh:237
+
void log(const LogMessage &message)
Logs a message.
Definition: logger.cc:100
+
FMDemod()
Constructor.
Definition: demod.hh:188
+
Buffer< oScalar > _buffer
The output buffer, unused if demodulation is performed in-place.
Definition: demod.hh:296
+
bool _can_overwrite
If true, in-place demodulation is poissible.
Definition: demod.hh:294
+
Type type() const
Returns the type.
Definition: node.hh:55
+
static Type typeId()
Returns the type-id of the template type.
+
virtual void process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
Handles the I/Q input buffer.
Definition: demod.hh:60
+
static Logger & get()
Returns the singleton instance of the logger.
Definition: logger.cc:89
+
The configuration error class.
Definition: exception.hh:24
+
A log message.
Definition: logger.hh:21
+
size_t bufferSize() const
Returns the max.
Definition: node.hh:67
+
USBDemod()
Constructor.
Definition: demod.hh:107
+
virtual void process(const Buffer< std::complex< iScalar > > &buffer, bool allow_overwrite)
Performs the FM demodulation.
Definition: demod.hh:234
+
void _process(const Buffer< std::complex< iScalar > > &in, const Buffer< oScalar > &out)
The actual demodulation.
Definition: demod.hh:253
+
void unref()
Dereferences the buffer.
Definition: buffer.cc:61
+
FMDeemph(bool enabled=true)
Constructor.
Definition: demod.hh:306
+
void enable(bool enabled)
Enable/Disable the filter node.
Definition: demod.hh:321
+
bool isUnused() const
We assume here that buffers are owned by some object: A buffer is therefore "unused" if the owner hol...
Definition: buffer.hh:87
+
Buffer< Scalar > _buffer
The output buffer.
Definition: demod.hh:90
+
SSB upper side band (USB) demodulator from an I/Q signal.
Definition: demod.hh:96
+
Forward declaration of type tratis template.
Definition: traits.hh:20
+
virtual void config(const Config &src_cfg)
Configures the AM demod.
Definition: demod.hh:33
+
void _process(const Buffer< std::complex< Scalar > > &in, const Buffer< Scalar > &out)
The actual demodulation.
Definition: demod.hh:164
+
AMDemod()
Constructor.
Definition: demod.hh:22
+ +
Traits< Scalar >::SScalar SScalar
The real compute scalar.
Definition: demod.hh:103
+
bool hasBufferSize() const
If true, the configuration has a buffer size.
Definition: node.hh:65
+
double sampleRate() const
Returns the sample rate.
Definition: node.hh:61
+
std::complex< iScalar > _last_value
The last input value.
Definition: demod.hh:292
+
Scalar _avg
Current averaged value.
Definition: demod.hh:380
+
+ + + + diff --git a/deprecated.html b/deprecated.html new file mode 100644 index 0000000..21674b1 --- /dev/null +++ b/deprecated.html @@ -0,0 +1,95 @@ + + + + + + +libsdr: Deprecated List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + +
+ +
+ +
+
+
+
Deprecated List
+
+
+
+
Class sdr::FreqShift< Scalar >
+
Implement a more efficient variant using FreqShiftBase.
+
+
+ + + + diff --git a/dir_68267d1309a1af8e8297ef4c3efbcdba.html b/dir_68267d1309a1af8e8297ef4c3efbcdba.html new file mode 100644 index 0000000..122c86d --- /dev/null +++ b/dir_68267d1309a1af8e8297ef4c3efbcdba.html @@ -0,0 +1,183 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src Directory Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + +
+ +
+ + +
+
+
+
src Directory Reference
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

+Files

file  autocast.hh [code]
 
file  baseband.hh [code]
 
file  buffer.cc
 
file  buffer.hh [code]
 
file  buffernode.hh [code]
 
file  combine.hh [code]
 
file  demod.hh [code]
 
file  exception.cc
 
file  exception.hh [code]
 
file  fftplan.hh [code]
 
file  fftplan_fftw3.hh [code]
 
file  fftplan_native.hh [code]
 
file  filternode.hh [code]
 
file  firfilter.hh [code]
 
file  freqshift.hh [code]
 
file  interpolate.hh [code]
 
file  logger.cc
 
file  logger.hh [code]
 
file  math.hh [code]
 
file  node.cc
 
file  node.hh [code]
 
file  operators.hh [code]
 
file  options.cc
 
file  options.hh [code]
 
file  portaudio.cc
 
file  portaudio.hh [code]
 
file  psk31.cc
 
file  psk31.hh [code]
 
file  queue.cc
 
file  queue.hh [code]
 
file  rtlsource.cc
 
file  rtlsource.hh [code]
 
file  sdr.hh [code]
 
file  siggen.hh [code]
 
file  streamsource.hh [code]
 
file  subsample.hh [code]
 
file  traits.cc
 
file  traits.hh [code]
 
file  utils.cc
 
file  utils.hh [code]
 
file  wavfile.cc
 
file  wavfile.hh [code]
 
+
+ + + + diff --git a/doxygen.css b/doxygen.css new file mode 100644 index 0000000..f0f36f8 --- /dev/null +++ b/doxygen.css @@ -0,0 +1,1366 @@ +/* The standard CSS for doxygen 1.8.6 */ + +body, table, div, p, dl { + font: 400 14px/22px Roboto,sans-serif; +} + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font: 400 14px/28px Roboto,sans-serif; + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #879ECB; + color: #354C7B; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd { + margin-top: 2px; +} + +p.starttd { + margin-top: 0px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #3D578C; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #4665A2; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited, a.line, a.line:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited, a.lineRef, a.lineRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px 6px; + margin: 4px 8px 4px 2px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: black; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; + border: solid thin #333; + border-radius: 0.5em; + -webkit-border-radius: .5em; + -moz-border-radius: .5em; + box-shadow: 2px 2px 3px #999; + -webkit-box-shadow: 2px 2px 3px #999; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444)); + background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000); +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin-top: 10px; + margin-left: 12px; + margin-right: 8px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: right; + padding-right: 12px; +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + border-top: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + /* opera specific markup */ + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + border-top-right-radius: 4px; + border-top-left-radius: 4px; + /* firefox specific markup */ + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + -moz-border-radius-topright: 4px; + -moz-border-radius-topleft: 4px; + /* webkit specific markup */ + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + -webkit-border-top-right-radius: 4px; + -webkit-border-top-left-radius: 4px; + +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #A8B8D9; + border-left: 1px solid #A8B8D9; + border-right: 1px solid #A8B8D9; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-image:url('nav_g.png'); + background-repeat:repeat-x; + background-color: #FFFFFF; + /* opera specific markup */ + border-bottom-left-radius: 4px; + border-bottom-right-radius: 4px; + box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); + /* firefox specific markup */ + -moz-border-radius-bottomleft: 4px; + -moz-border-radius-bottomright: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px; + /* webkit specific markup */ + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #602020; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + border-top:1px solid #5373B4; + border-left:1px solid #5373B4; + border-right:1px solid #C4CFE5; + border-bottom:1px solid #C4CFE5; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 2px 3px; + border-radius: 3px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; + padding-top: 3px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + /*width: 100%;*/ + margin-bottom: 10px; + border: 1px solid #A8B8D9; + border-spacing: 0px; + -moz-border-radius: 4px; + -webkit-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px; + -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); + box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15); +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + vertical-align: top; +} + +.fieldtable td.fieldname { + padding-top: 3px; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #A8B8D9; + /*width: 100%;*/ +} + +.fieldtable td.fielddoc p:first-child { + margin-top: 0px; +} + +.fieldtable td.fielddoc p:last-child { + margin-bottom: 2px; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-image:url('nav_f.png'); + background-repeat:repeat-x; + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-top-left-radius: 4px; + border-top-right-radius: 4px; + border-bottom: 1px solid #A8B8D9; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-image:url('tab_b.png'); + background-repeat:repeat-x; + background-position: 0 -5px; + height:30px; + line-height:30px; + color:#8AA0CC; + border:solid 1px #C2CDE4; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + background-image:url('nav_h.png'); + background-repeat:repeat-x; + background-color: #F9FAFC; + margin: 0px; + border-bottom: 1px solid #C4CFE5; +} + +div.headertitle +{ + padding: 5px 5px 5px 10px; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname +{ + font: 300% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 2px 0px; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + border-bottom: 1px solid #5373B4; +} + +.image +{ + text-align: center; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.diagraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +/* tooltip related style info */ + +.ttc { + position: absolute; + display: none; +} + +#powerTip { + cursor: default; + white-space: nowrap; + background-color: white; + border: 1px solid gray; + border-radius: 4px 4px 4px 4px; + box-shadow: 1px 1px 7px gray; + display: none; + font-size: smaller; + max-width: 80%; + opacity: 0.9; + padding: 1ex 1em 1em; + position: absolute; + z-index: 2147483647; +} + +#powerTip div.ttdoc { + color: grey; + font-style: italic; +} + +#powerTip div.ttname a { + font-weight: bold; +} + +#powerTip div.ttname { + font-weight: bold; +} + +#powerTip div.ttdeci { + color: #006318; +} + +#powerTip div { + margin: 0px; + padding: 0px; + font: 12px/16px Roboto,sans-serif; +} + +#powerTip:before, #powerTip:after { + content: ""; + position: absolute; + margin: 0px; +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.s:after, #powerTip.s:before, +#powerTip.w:after, #powerTip.w:before, +#powerTip.e:after, #powerTip.e:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.nw:after, #powerTip.nw:before, +#powerTip.sw:after, #powerTip.sw:before { + border: solid transparent; + content: " "; + height: 0; + width: 0; + position: absolute; +} + +#powerTip.n:after, #powerTip.s:after, +#powerTip.w:after, #powerTip.e:after, +#powerTip.nw:after, #powerTip.ne:after, +#powerTip.sw:after, #powerTip.se:after { + border-color: rgba(255, 255, 255, 0); +} + +#powerTip.n:before, #powerTip.s:before, +#powerTip.w:before, #powerTip.e:before, +#powerTip.nw:before, #powerTip.ne:before, +#powerTip.sw:before, #powerTip.se:before { + border-color: rgba(128, 128, 128, 0); +} + +#powerTip.n:after, #powerTip.n:before, +#powerTip.ne:after, #powerTip.ne:before, +#powerTip.nw:after, #powerTip.nw:before { + top: 100%; +} + +#powerTip.n:after, #powerTip.ne:after, #powerTip.nw:after { + border-top-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} +#powerTip.n:before { + border-top-color: #808080; + border-width: 11px; + margin: 0px -11px; +} +#powerTip.n:after, #powerTip.n:before { + left: 50%; +} + +#powerTip.nw:after, #powerTip.nw:before { + right: 14px; +} + +#powerTip.ne:after, #powerTip.ne:before { + left: 14px; +} + +#powerTip.s:after, #powerTip.s:before, +#powerTip.se:after, #powerTip.se:before, +#powerTip.sw:after, #powerTip.sw:before { + bottom: 100%; +} + +#powerTip.s:after, #powerTip.se:after, #powerTip.sw:after { + border-bottom-color: #ffffff; + border-width: 10px; + margin: 0px -10px; +} + +#powerTip.s:before, #powerTip.se:before, #powerTip.sw:before { + border-bottom-color: #808080; + border-width: 11px; + margin: 0px -11px; +} + +#powerTip.s:after, #powerTip.s:before { + left: 50%; +} + +#powerTip.sw:after, #powerTip.sw:before { + right: 14px; +} + +#powerTip.se:after, #powerTip.se:before { + left: 14px; +} + +#powerTip.e:after, #powerTip.e:before { + left: 100%; +} +#powerTip.e:after { + border-left-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.e:before { + border-left-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +#powerTip.w:after, #powerTip.w:before { + right: 100%; +} +#powerTip.w:after { + border-right-color: #ffffff; + border-width: 10px; + top: 50%; + margin-top: -10px; +} +#powerTip.w:before { + border-right-color: #808080; + border-width: 11px; + top: 50%; + margin-top: -11px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + diff --git a/doxygen.png b/doxygen.png new file mode 100644 index 0000000..3ff17d8 Binary files /dev/null and b/doxygen.png differ diff --git a/dynsections.js b/dynsections.js new file mode 100644 index 0000000..ed092c7 --- /dev/null +++ b/dynsections.js @@ -0,0 +1,97 @@ +function toggleVisibility(linkObj) +{ + var base = $(linkObj).attr('id'); + var summary = $('#'+base+'-summary'); + var content = $('#'+base+'-content'); + var trigger = $('#'+base+'-trigger'); + var src=$(trigger).attr('src'); + if (content.is(':visible')===true) { + content.hide(); + summary.show(); + $(linkObj).addClass('closed').removeClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-8)+'closed.png'); + } else { + content.show(); + summary.hide(); + $(linkObj).removeClass('closed').addClass('opened'); + $(trigger).attr('src',src.substring(0,src.length-10)+'open.png'); + } + return false; +} + +function updateStripes() +{ + $('table.directory tr'). + removeClass('even').filter(':visible:even').addClass('even'); +} +function toggleLevel(level) +{ + $('table.directory tr').each(function(){ + var l = this.id.split('_').length-1; + var i = $('#img'+this.id.substring(3)); + var a = $('#arr'+this.id.substring(3)); + if (l + + + + + +libsdr: /home/hannes/sdr/libsdr/src/exception.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
exception.hh
+
+
+
1 #ifndef __SDR_EXCEPTION_HH__
+
2 #define __SDR_EXCEPTION_HH__
+
3 
+
4 #include <exception>
+
5 #include <sstream>
+
6 
+
7 namespace sdr {
+
8 
+
10 class SDRError : public std::exception, public std::stringstream {
+
11 public:
+
13  SDRError(): std::exception(), std::stringstream() { }
+
15  SDRError(const SDRError &other)
+
16  : std::exception(), std::stringstream() { this->str(other.str()); }
+
18  virtual ~SDRError() throw() { }
+
20  virtual const char *what() const throw() { return this->str().c_str(); }
+
21 };
+
22 
+
24 class ConfigError : public SDRError {
+
25 public:
+ +
29  ConfigError(const ConfigError &other): SDRError(other) {}
+
31  virtual ~ConfigError() throw() { }
+
32 };
+
33 
+
34 
+
36 class RuntimeError: public SDRError {
+
37 public:
+ +
41  RuntimeError(const RuntimeError &other): SDRError(other) {}
+
43  virtual ~RuntimeError() throw() { }
+
44 };
+
45 
+
46 
+
47 
+
48 }
+
49 #endif // __SDR_EXCEPTION_HH__
+
virtual ~ConfigError()
Destructor.
Definition: exception.hh:31
+
virtual const char * what() const
Implements the std::exception interface.
Definition: exception.hh:20
+
ConfigError(const ConfigError &other)
Copy constructor.
Definition: exception.hh:29
+
Base class of all SDR exceptions.
Definition: exception.hh:10
+
The runtime error class.
Definition: exception.hh:36
+
virtual ~RuntimeError()
Destructor.
Definition: exception.hh:43
+
SDRError(const SDRError &other)
Copy constructor.
Definition: exception.hh:15
+
RuntimeError()
Constructor.
Definition: exception.hh:39
+
RuntimeError(const RuntimeError &other)
Copy constructor.
Definition: exception.hh:41
+
The configuration error class.
Definition: exception.hh:24
+
ConfigError()
Constructor.
Definition: exception.hh:27
+
virtual ~SDRError()
Destructor.
Definition: exception.hh:18
+
SDRError()
Constructor.
Definition: exception.hh:13
+
+ + + + diff --git a/fftplan_8hh_source.html b/fftplan_8hh_source.html new file mode 100644 index 0000000..aaadd65 --- /dev/null +++ b/fftplan_8hh_source.html @@ -0,0 +1,148 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/fftplan.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
fftplan.hh
+
+
+
1 #ifndef __SDR_FFTPLAN_HH__
+
2 #define __SDR_FFTPLAN_HH__
+
3 
+
4 #include "buffer.hh"
+
5 #include "node.hh"
+
6 #include "config.hh"
+
7 
+
8 namespace sdr {
+
9 
+
10 // Forward declaration of FFTPlan
+
11 template <class Scalar> class FFTPlan { };
+
12 
+
14 class FFT {
+
15 public:
+
17  typedef enum {
+
18  FORWARD, BACKWARD
+
19  } Direction;
+
20 
+
22  template <class Scalar>
+
23  static void exec(const Buffer< std::complex<Scalar> > &in,
+
24  const Buffer< std::complex<Scalar> > &out, FFT::Direction dir)
+
25  {
+
26  FFTPlan<Scalar> plan(in, out, dir); plan();
+
27  }
+
28 
+
30  template <class Scalar>
+
31  static void exec(const Buffer< std::complex<Scalar> > &inplace, FFT::Direction dir)
+
32  {
+
33  FFTPlan<Scalar> plan(inplace, dir); plan();
+
34  }
+
35 
+
36 };
+
37 
+
38 }
+
39 
+
40 
+
41 #ifdef SDR_WITH_FFTW
+
42 #include "fftplan_fftw3.hh"
+
43 #endif
+
44 
+
45 
+
46 #endif // __SDR_FFTPLAN_HH__
+
Direction
Direction type.
Definition: fftplan.hh:17
+
Trivial FFT implementation for buffer sizes of N=2**K.
Definition: fftplan.hh:11
+
static void exec(const Buffer< std::complex< Scalar > > &in, const Buffer< std::complex< Scalar > > &out, FFT::Direction dir)
Performs a FFT transform.
Definition: fftplan.hh:23
+
static void exec(const Buffer< std::complex< Scalar > > &inplace, FFT::Direction dir)
Performs an in-place FFT transform.
Definition: fftplan.hh:31
+
FFT module class, provides static methods to perfrom a FFT directly.
Definition: fftplan.hh:14
+
A typed buffer.
Definition: buffer.hh:111
+
+ + + + diff --git a/fftplan__fftw3_8hh_source.html b/fftplan__fftw3_8hh_source.html new file mode 100644 index 0000000..e2f4966 --- /dev/null +++ b/fftplan__fftw3_8hh_source.html @@ -0,0 +1,252 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/fftplan_fftw3.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
fftplan_fftw3.hh
+
+
+
1 #ifndef __SDR_FFTPLAN_FFTW3_HH__
+
2 #define __SDR_FFTPLAN_FFTW3_HH__
+
3 
+
4 #include "fftplan.hh"
+
5 #include <fftw3.h>
+
6 
+
7 
+
8 namespace sdr {
+
9 
+
11 template<>
+
12 class FFTPlan<double>
+
13 {
+
14 public:
+
16  FFTPlan(const Buffer< std::complex<double> > &in, const Buffer< std::complex<double> > &out,
+
17  FFT::Direction dir)
+
18  : _in(in), _out(out)
+
19  {
+
20  if (in.size() != out.size()) {
+
21  ConfigError err;
+
22  err << "Can not construct FFT plan: input & output buffers are of different size!";
+
23  throw err;
+
24  }
+
25  if (in.isEmpty() || out.isEmpty()) {
+
26  ConfigError err;
+
27  err << "Can not construct FFT plan: input or output buffer is empty!";
+
28  throw err;
+
29  }
+
30 
+
31  int fftw_dir = FFTW_FORWARD;
+
32  if (FFT::BACKWARD == dir) { fftw_dir = FFTW_BACKWARD; }
+
33 
+
34  _plan = fftw_plan_dft_1d(
+
35  in.size(), (fftw_complex *)in.data(), (fftw_complex *)out.data(),
+
36  fftw_dir, FFTW_ESTIMATE);
+
37  }
+
38 
+
40  FFTPlan(const Buffer< std::complex<double> > &inplace, FFT::Direction dir)
+
41  : _in(inplace), _out(inplace)
+
42  {
+
43  if (inplace.isEmpty()) {
+
44  ConfigError err;
+
45  err << "Can not construct FFT plan: Buffer is empty!";
+
46  throw err;
+
47  }
+
48 
+
49  int fftw_dir = FFTW_FORWARD;
+
50  if (FFT::BACKWARD == dir) { fftw_dir = FFTW_BACKWARD; }
+
51 
+
52  _plan = fftw_plan_dft_1d(
+
53  inplace.size(), (fftw_complex *)inplace.data(), (fftw_complex *)inplace.data(),
+
54  fftw_dir, FFTW_ESTIMATE);
+
55  }
+
56 
+
58  virtual ~FFTPlan() {
+
59  fftw_destroy_plan(_plan);
+
60  }
+
61 
+
63  void operator() () {
+
64  fftw_execute(_plan);
+
65  }
+
66 
+
67 protected:
+ + +
73  fftw_plan _plan;
+
74 };
+
75 
+
76 
+
78 template<>
+
79 class FFTPlan<float>
+
80 {
+
81 public:
+
83  FFTPlan(const Buffer< std::complex<float> > &in, const Buffer< std::complex<float> > &out,
+
84  FFT::Direction dir)
+
85  : _in(in), _out(out)
+
86  {
+
87  if (in.size() != out.size()) {
+
88  ConfigError err;
+
89  err << "Can not construct FFT plan: input & output buffers are of different size!";
+
90  throw err;
+
91  }
+
92 
+
93  if (in.isEmpty() || out.isEmpty()) {
+
94  ConfigError err;
+
95  err << "Can not construct FFT plan: input or output buffer is empty!";
+
96  throw err;
+
97  }
+
98 
+
99  int fftw_dir = FFTW_FORWARD;
+
100  if (FFT::BACKWARD == dir) { fftw_dir = FFTW_BACKWARD; }
+
101 
+
102  _plan = fftwf_plan_dft_1d(
+
103  in.size(), (fftwf_complex *)in.data(), (fftwf_complex *)out.data(),
+
104  fftw_dir, FFTW_ESTIMATE);
+
105  }
+
106 
+
108  FFTPlan(const Buffer< std::complex<float> > &inplace, FFT::Direction dir)
+
109  : _in(inplace), _out(inplace)
+
110  {
+
111  if (inplace.isEmpty()) {
+
112  ConfigError err;
+
113  err << "Can not construct FFT plan: Buffer is empty!";
+
114  throw err;
+
115  }
+
116 
+
117  int fftw_dir = FFTW_FORWARD;
+
118  if (FFT::BACKWARD == dir) { fftw_dir = FFTW_BACKWARD; }
+
119 
+
120  _plan = fftwf_plan_dft_1d(
+
121  inplace.size(), (fftwf_complex *)inplace.data(), (fftwf_complex *)inplace.data(),
+
122  fftw_dir, FFTW_ESTIMATE);
+
123  }
+
124 
+
126  virtual ~FFTPlan() {
+
127  fftwf_destroy_plan(_plan);
+
128  }
+
129 
+
131  void operator() () {
+
132  fftwf_execute(_plan);
+
133  }
+
134 
+
135 protected:
+ + +
141  fftwf_plan _plan;
+
142 };
+
143 
+
144 
+
145 
+
146 
+
147 }
+
148 
+
149 #endif // __SDR_FFTPLAN_FFTW3_HH__
+
FFTPlan(const Buffer< std::complex< double > > &in, const Buffer< std::complex< double > > &out, FFT::Direction dir)
Constructor.
Definition: fftplan_fftw3.hh:16
+
FFTPlan(const Buffer< std::complex< float > > &in, const Buffer< std::complex< float > > &out, FFT::Direction dir)
Constructor.
Definition: fftplan_fftw3.hh:83
+
void operator()()
Performs the FFT.
Definition: fftplan_native.hh:53
+
Direction
Direction type.
Definition: fftplan.hh:17
+
Buffer< std::complex< Scalar > > _in
The input buffer.
Definition: fftplan_native.hh:79
+
Buffer< std::complex< float > > _out
Output buffer.
Definition: fftplan_fftw3.hh:139
+
Buffer< std::complex< double > > _in
Input buffer.
Definition: fftplan_fftw3.hh:69
+
virtual ~FFTPlan()
Destructor.
Definition: fftplan_fftw3.hh:126
+
Buffer< std::complex< Scalar > > _out
The output buffer.
Definition: fftplan_native.hh:81
+
FFTPlan(const Buffer< std::complex< float > > &inplace, FFT::Direction dir)
Constructor.
Definition: fftplan_fftw3.hh:108
+
fftw_plan _plan
The FFT plan.
Definition: fftplan_fftw3.hh:73
+
Buffer< std::complex< float > > _in
Input buffer.
Definition: fftplan_fftw3.hh:137
+
Buffer< std::complex< double > > _out
Output buffer.
Definition: fftplan_fftw3.hh:71
+
Trivial FFT implementation for buffer sizes of N=2**K.
Definition: fftplan.hh:11
+
fftwf_plan _plan
The fft plan.
Definition: fftplan_fftw3.hh:141
+
The configuration error class.
Definition: exception.hh:24
+
virtual ~FFTPlan()
Destructor.
Definition: fftplan_fftw3.hh:58
+
FFTPlan(const Buffer< std::complex< double > > &inplace, FFT::Direction dir)
Constructor.
Definition: fftplan_fftw3.hh:40
+
A typed buffer.
Definition: buffer.hh:111
+
+ + + + diff --git a/fftplan__native_8hh_source.html b/fftplan__native_8hh_source.html new file mode 100644 index 0000000..f701c51 --- /dev/null +++ b/fftplan__native_8hh_source.html @@ -0,0 +1,195 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/fftplan_native.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
fftplan_native.hh
+
+
+
1 #ifndef __SDR_FFTPLAN_NATIVE_HH__
+
2 #define __SDR_FFTPLAN_NATIVE_HH__
+
3 
+
4 #include "traits.hh"
+
5 #include "fftplan.hh"
+
6 
+
7 namespace sdr {
+
8 
+
10 template <class Scalar>
+
11 class FFTPlan
+
12 {
+
13 public:
+ +
16 
+
17 public:
+
19  FFTPlan(const Buffer< std::complex<Scalar> > &in, const Buffer< std::complex<Scalar> > &out,
+
20  FFT::Direction dir)
+
21  : _N(in.size()), _in(in), _out(out)
+
22  {
+
23  // Check dimensions
+
24  if (_in.size() != _out.size()) {
+
25  ConfigError err;
+
26  err << "Can not construct FFT plan: input & output buffers are of different size!";
+
27  throw err;
+
28  }
+
29  if (_in.isEmpty() || _out.isEmpty()) {
+
30  ConfigError err;
+
31  err << "Can not construct FFT plan: input or output buffer is empty!";
+
32  throw err;
+
33  }
+
34  // Check if N is power of two
+
35  if (_N != std::pow(2.0, std::log2(_N))) {
+
36  err << "Can not construct FFT plan: input and output buffer length must be a power of 2!";
+
37  throw err;
+
38  }
+
39 
+
40  // Assemble lookuptable
+
41  int dir_fac = (dir==FFT::FORWARD) ? 1 : -1;
+
42  for (size_t i=0; i<_N; i++) {
+
43  _lut[i] = (std::exp(std::complex<double>(0,(-2*M_PI*i*dir_fac)/N)) * (1<<Traits<Scalar>::shift));
+
44  }
+
45  }
+
46 
+
48  virtual ~FFTPlan() {
+
49  _lut.unref();
+
50  }
+
51 
+
53  void operator() () {
+
54  _calc(reinterpret_cast< std::complex<Scalar> >(_in.data()),
+
55  reinterpret_cast< std::complex<Scalar> >(_out.data()), _N, 1);
+
56  }
+
57 
+
58 protected:
+
60  void _calc(std::complex<Scalar> *a, std::complex<Scalar> *b, size_t N, size_t stride) {
+
61  // Recursion exit
+
62  if (1 == N) { b[0] = a[0]; return; }
+
63  // Calc FFT recursive
+
64  _calc(a, b, N/2, 2*stride);
+
65  _calc(a+stride, b+N/2, N/2, 2*stride);
+
66  // Radix-2...
+
67  for (size_t i=0; i<N/2; i++) {
+
68  std::complex<SScalar> tmp = b[i];
+
69  // I hope that the compiler will turn the (x/(1<<L)) into a (x >> L) if x is an integer...
+
70  b[i] = tmp + (_lut[i]*std::complex<SScalar>(b[i+N/2])) / (1<<Traits<Scalar>::shift);
+
71  b[i+N/2] = tmp - (_lut[i]*std::complex<SScalar>(b[i+N/2])) / (1<<Traits<Scalar>::shift);
+
72  }
+
73  }
+
74 
+
75 protected:
+
77  size_t _N;
+ + + +
84 };
+
85 
+
86 }
+
87 
+
88 #endif // __SDR_FFTPLAN_NATIVE_HH__
+
virtual ~FFTPlan()
Destructor.
Definition: fftplan_native.hh:48
+
void operator()()
Performs the FFT.
Definition: fftplan_native.hh:53
+
Direction
Direction type.
Definition: fftplan.hh:17
+
bool isEmpty() const
Returns true if the buffer is invalid/empty.
Definition: buffer.hh:77
+
Buffer< std::complex< Scalar > > _in
The input buffer.
Definition: fftplan_native.hh:79
+
size_t size() const
Returns the number of elements of type T in this buffer.
Definition: buffer.hh:166
+
char * data() const
Returns the pointer to the data of the buffer view.
Definition: buffer.hh:69
+
Buffer< std::complex< Scalar > > _out
The output buffer.
Definition: fftplan_native.hh:81
+
void _calc(std::complex< Scalar > *a, std::complex< Scalar > *b, size_t N, size_t stride)
Actual FFT implmenetation.
Definition: fftplan_native.hh:60
+
Buffer< std::complex< SScalar > > _lut
The exp(-i 2 pi k / N) look-up table.
Definition: fftplan_native.hh:83
+
The configuration error class.
Definition: exception.hh:24
+
Traits< Scalar >::SScalar SScalar
The super-scalar of the input type.
Definition: fftplan_native.hh:15
+
void unref()
Dereferences the buffer.
Definition: buffer.cc:61
+
FFTPlan(const Buffer< std::complex< Scalar > > &in, const Buffer< std::complex< Scalar > > &out, FFT::Direction dir)
Constructs a FFT plan for the input and output buffers.
Definition: fftplan_native.hh:19
+
Forward declaration of type tratis template.
Definition: traits.hh:20
+
A typed buffer.
Definition: buffer.hh:111
+
size_t _N
FFT size, needs to be a power of 2.
Definition: fftplan_native.hh:77
+
+ + + + diff --git a/files.html b/files.html new file mode 100644 index 0000000..90bcbff --- /dev/null +++ b/files.html @@ -0,0 +1,131 @@ + + + + + + +libsdr: File List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
File List
+
+
+
Here is a list of all documented files with brief descriptions:
+
[detail level 12]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
\-src
 o*autocast.hh
 o*baseband.hh
 o*buffer.hh
 o*buffernode.hh
 o*combine.hh
 o*demod.hh
 o*exception.hh
 o*fftplan.hh
 o*fftplan_fftw3.hh
 o*fftplan_native.hh
 o*filternode.hh
 o*firfilter.hh
 o*freqshift.hh
 o*interpolate.hh
 o*logger.hh
 o*math.hh
 o*node.hh
 o*operators.hh
 o*options.hh
 o*portaudio.hh
 o*psk31.hh
 o*queue.hh
 o*rtlsource.hh
 o*sdr.hh
 o*siggen.hh
 o*streamsource.hh
 o*subsample.hh
 o*traits.hh
 o*utils.hh
 \*wavfile.hh
+
+
+ + + + diff --git a/filternode_8hh_source.html b/filternode_8hh_source.html new file mode 100644 index 0000000..55ab8f7 --- /dev/null +++ b/filternode_8hh_source.html @@ -0,0 +1,406 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/filternode.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
filternode.hh
+
+
+
1 #ifndef __SDR_FILTERNODE_HH__
+
2 #define __SDR_FILTERNODE_HH__
+
3 
+
4 #include <limits>
+
5 #include <list>
+
6 
+
7 #include "config.hh"
+
8 #include "node.hh"
+
9 #include "buffer.hh"
+
10 #include "buffernode.hh"
+
11 #include "fftplan.hh"
+
12 
+
13 
+
14 namespace sdr {
+
15 
+
17 template <class Scalar>
+
18 inline std::complex<Scalar> sinc_flt_kernel(int i, int N, double Fc, double bw, double Fs) {
+
19  std::complex<Scalar> v;
+
20  // Eval sinc
+
21  if ( (N/2) == i) { v = M_PI*(bw/Fs); }
+
22  else { v = std::sin(M_PI*(bw/Fs)*(i-N/2))/(i-N/2); }
+
23  // shift frequency
+
24  v *= std::exp(std::complex<Scalar>(0.0, (2*M_PI*Fc*i)/Fs));
+
25  // Apply window
+
26  v *= (0.42 - 0.5*cos((2*M_PI*i)/N) + 0.08*cos((4*M_PI*i)/N));
+
27  return v;
+
28 }
+
29 
+
30 
+
31 
+
33 template <class Scalar>
+
34 class FilterSink: public Sink< std::complex<Scalar> >, public Source
+
35 {
+
36 public:
+
38  FilterSink(size_t block_size)
+
39  : Sink< std::complex<Scalar> >(), Source(), _block_size(block_size),
+
40  _in_buffer(2*block_size), _out_buffer(2*block_size),
+
41  _plan(_in_buffer, _out_buffer, FFT::FORWARD)
+
42  {
+
43  // Fill second half of input buffer with 0s
+
44  for(size_t i=0; i<2*_block_size; i++) {
+
45  _in_buffer[i] = 0;
+
46  }
+
47  }
+
48 
+
50  virtual ~FilterSink() { }
+
51 
+
53  virtual void config(const Config &src_cfg) {
+
54  // Skip if config is incomplete
+
55  if ((Config::Type_UNDEFINED==src_cfg.type()) || (0 == src_cfg.sampleRate()) || (0 == src_cfg.bufferSize())) {
+
56  return;
+
57  }
+
58  // Now check type (must be real double)
+
59  if (Config::typeId< std::complex<Scalar> >() != src_cfg.type()) {
+
60  ConfigError err;
+
61  err << "Can not configure filter-sink: Invalid type " << src_cfg.type()
+
62  << ", expected " << Config::typeId< std::complex<Scalar> >();
+
63  throw err;
+
64  }
+
65  // Check buffer size
+
66  if (_block_size != src_cfg.bufferSize()) {
+
67  ConfigError err;
+
68  err << "Can not configure filter-sink: Invalid buffer size " << src_cfg.bufferSize()
+
69  << ", expected " << _block_size;
+
70  throw err;
+
71  }
+
72  // Propagate configuration
+
73  setConfig(Config(Config::typeId< std::complex<Scalar> >(), src_cfg.sampleRate(),
+
74  src_cfg.bufferSize(), src_cfg.numBuffers()));
+
75  }
+
76 
+
78  virtual void process(const Buffer< std::complex<Scalar> > &buffer, bool allow_overwrite) {
+
79  // Copy buffer into 1st half of input buffer
+
80  for (size_t i=0; i<_block_size; i++) { _in_buffer[i] = buffer[i]; }
+
81  // perform fft
+
82  _plan();
+
83  // send fft result
+
84  this->send(_out_buffer);
+
85  }
+
86 
+
87 protected:
+
89  size_t _block_size;
+ + + +
96 };
+
97 
+
98 
+
99 
+
101 template <class Scalar>
+
102 class FilterSource: public Sink< std::complex<Scalar> >, public Source
+
103 {
+
104 public:
+
106  FilterSource(size_t block_size, double fmin, double fmax)
+
107  : Sink< std::complex<Scalar> >(), Source(),
+
108  _block_size(block_size), _sample_rate(0),
+ +
110  _kern(2u*_block_size), _buffers(1, _block_size), _fmin(fmin), _fmax(fmax),
+
111  _plan(_in_buffer, _trafo_buffer, FFT::BACKWARD)
+
112  {
+
113  // Set input & output buffer to 0
+
114  for (size_t i=0; i<_block_size; i++) {
+
115  _last_trafo[i] = 0;
+
116  }
+
117  }
+
118 
+
120  virtual ~FilterSource() {
+
121  // pas...
+
122  }
+
123 
+
125  void setFreq(double fmin, double fmax) {
+
126  _fmin = fmin; _fmax = fmax; _updateFilter();
+
127  }
+
128 
+
130  virtual void config(const Config &src_cfg) {
+
131  // Check config
+
132  if ((0 == src_cfg.sampleRate()) || (0 == src_cfg.bufferSize())) { return; }
+
133  if (_block_size != src_cfg.bufferSize()) {
+
134  ConfigError err;
+
135  err << "Can not configure FilterSource, block-size (=" << _block_size
+
136  << ") != buffer-size (=" << src_cfg.bufferSize() << ")!";
+
137  throw err;
+
138  }
+
139  // calc filter kernel
+
140  _sample_rate = src_cfg.sampleRate();
+
141  _updateFilter();
+
142  // Resize buffer-set
+
143  _buffers.resize(src_cfg.numBuffers());
+
144 
+
145  LogMessage msg(LOG_DEBUG);
+
146  double fmin = std::max(_fmin, -src_cfg.sampleRate()/2);
+
147  double fmax = std::min(_fmax, src_cfg.sampleRate()/2);
+
148  msg << "Configured FFT Filter: " << std::endl
+
149  << " range: [" << fmin << ", " << fmax << "]" << std::endl
+
150  << " fft size: " << 2*_block_size << std::endl
+
151  << " Fc/BW: " << fmin+(fmax-fmin)/2 << " / " << (fmax-fmin) << std::endl
+
152  << " sample rate: " << src_cfg.sampleRate();
+
153  Logger::get().log(msg);
+
154 
+
155  // Propergate config
+
156  Source::setConfig(Config(Config::typeId< std::complex<Scalar> >(), src_cfg.sampleRate(),
+
157  _block_size, src_cfg.numBuffers()));
+
158  }
+
159 
+
161  virtual void process(const Buffer<std::complex<Scalar> > &buffer, bool allow_overwrite) {
+
162  // Multiply with F(_kern)
+
163  for (size_t i=0; i<(2*_block_size); i++) {
+
164  _in_buffer[i] = buffer[i]*_kern[i];
+
165  }
+
166  // perform FFT
+
167  _plan();
+
168  // Get a output buffer
+ +
170  // Add first half of trafo buffer to second half of last trafo
+
171  // and store second half of the current trafo
+
172  for (size_t i=0; i<_block_size; i++) {
+
173  out[i] = _last_trafo[i] + (_trafo_buffer[i]/((Scalar)(2*_block_size)));
+
174  _last_trafo[i] = (_trafo_buffer[i+_block_size]/((Scalar)(2*_block_size)));
+
175  }
+
176  // Send output
+
177  this->send(out);
+
178  }
+
179 
+
180 
+
181 protected:
+
183  void _updateFilter() {
+
184  // Calc filter kernel
+
185  double Fs = _sample_rate;
+
186  double fmin = std::max(_fmin, -Fs/2);
+
187  double fmax = std::min(_fmax, Fs/2);
+
188  double bw = fmax-fmin;
+
189  double Fc = fmin + bw/2;
+
190  for (size_t i=0; i<_block_size; i++) {
+
191  // Eval kernel
+
192  _kern[i] = sinc_flt_kernel<Scalar>(i, _block_size, Fc, bw, Fs);
+
193  // set second half to 0
+
194  _kern[i+_block_size] = 0;
+
195  }
+
196  // Calculate FFT in-place
+
197  FFT::exec(_kern, FFT::FORWARD);
+
198  // Normalize filter kernel
+
199  _kern /= _kern.norm2();
+
200  }
+
201 
+
202 protected:
+
204  size_t _block_size;
+
206  double _sample_rate;
+ + + + + +
218  double _fmin;
+
220  double _fmax;
+ +
223 };
+
224 
+
225 
+
227 template <class Scalar>
+ +
229 {
+
230 public:
+
232  FilterNode(size_t block_size=1024)
+
233  : _block_size(block_size), _buffer(0), _fft_fwd(0), _filters()
+
234  {
+
235  // Create input buffer node
+
236  _buffer = new BufferNode< std::complex<Scalar> >(block_size);
+
237  // Create FFT fwd transform
+
238  _fft_fwd = new FilterSink<Scalar>(block_size);
+
239  // Connect buffer source to FFT sink directly
+
240  _buffer->connect(_fft_fwd, true);
+
241  }
+
242 
+
244  virtual ~FilterNode() {
+
245  delete _buffer; delete _fft_fwd;
+
246  typename std::list< FilterSource<Scalar> *>::iterator item=_filters.begin();
+
247  for (; item!=_filters.end(); item++) {
+
248  delete *item;
+
249  }
+
250  }
+
251 
+ +
254  return _buffer;
+
255  }
+
256 
+
258  FilterSource<Scalar> *addFilter(double fmin, double fmax) {
+
259  // Check if fmin < fmax
+
260  if (fmax < fmin) { std::swap(fmin, fmax); }
+
261  // Create and store filter instance
+
262  _filters.push_back(new FilterSource<Scalar>(_block_size, fmin, fmax));
+
263  // Connect fft_fwd trafo to filter directly
+
264  _fft_fwd->connect(_filters.back(), true);
+
265  return _filters.back();
+
266  }
+
267 
+
268 protected:
+
270  size_t _block_size;
+
272  double _sample_rate;
+ + +
278  std::list<FilterSource<Scalar> *> _filters;
+
279 };
+
280 
+
281 }
+
282 
+
283 #endif // __SDR_FILTERNODE_HH__
+
double _sample_rate
The current sample rate.
Definition: filternode.hh:272
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
FFTPlan< Scalar > _plan
The FFT plan for the FFT back-transform.
Definition: filternode.hh:222
+
void _updateFilter()
Updates the sink-filter.
Definition: filternode.hh:183
+
FilterSink(size_t block_size)
Constructor, best performance with block-size being a power of 2.
Definition: filternode.hh:38
+
Performs the overlap-add FFT filtering and back-transform.
Definition: filternode.hh:102
+
virtual void send(const RawBuffer &buffer, bool allow_overwrite=false)
Sends the given buffer to all connected sinks.
Definition: node.cc:67
+
Sink< std::complex< Scalar > > * sink() const
The filter sink.
Definition: filternode.hh:253
+
Typed sink.
Definition: node.hh:176
+
size_t numBuffers() const
Returns the max.
Definition: node.hh:73
+
size_t _block_size
The block size of the filters.
Definition: filternode.hh:270
+
Performs the FFT forward transform.
Definition: filternode.hh:34
+
void setFreq(double fmin, double fmax)
Set the frequency range.
Definition: filternode.hh:125
+
Generic source class.
Definition: node.hh:197
+
virtual void process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
Performs the FFT forward transform.
Definition: filternode.hh:78
+
A set of buffers, that tracks their usage.
Definition: buffer.hh:288
+
A simple buffering node, that ensures a fixed buffer size.
Definition: buffernode.hh:17
+
BufferSet< std::complex< Scalar > > _buffers
The output buffers.
Definition: filternode.hh:216
+
virtual void setConfig(const Config &config)
Stores the configuration and propergates it if the configuration has been changed.
Definition: node.cc:98
+
Buffer< std::complex< Scalar > > _out_buffer
The output buffer (transformed).
Definition: filternode.hh:93
+
Buffer< std::complex< Scalar > > _last_trafo
Holds a copy of the second-half of the last output signal.
Definition: filternode.hh:212
+
double norm2() const
Returns the norm of the buffer.
Definition: buffer.hh:182
+
void connect(SinkBase *sink, bool direct=false)
Connect this source to a sink.
Definition: node.cc:87
+
FFTPlan< Scalar > _plan
The plan for the FFT forward transform.
Definition: filternode.hh:95
+
Trivial FFT implementation for buffer sizes of N=2**K.
Definition: fftplan.hh:11
+
double _fmin
The lower frequency range.
Definition: filternode.hh:218
+
FilterSink< Scalar > * _fft_fwd
The filter sink (forward FFT).
Definition: filternode.hh:276
+
virtual void process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
Performs the FFT filtering and back-transform.
Definition: filternode.hh:161
+
Buffer< std::complex< Scalar > > _kern
Holds the current filter kernel.
Definition: filternode.hh:214
+
double _sample_rate
The current sample-rate.
Definition: filternode.hh:206
+
void log(const LogMessage &message)
Logs a message.
Definition: logger.cc:100
+
virtual void config(const Config &src_cfg)
Configures the node.
Definition: filternode.hh:53
+
Type type() const
Returns the type.
Definition: node.hh:55
+
Buffer< std::complex< Scalar > > _in_buffer
An input buffer.
Definition: filternode.hh:208
+
static void exec(const Buffer< std::complex< Scalar > > &in, const Buffer< std::complex< Scalar > > &out, FFT::Direction dir)
Performs a FFT transform.
Definition: fftplan.hh:23
+
static Type typeId()
Returns the type-id of the template type.
+
void resize(size_t numBuffers)
Resize the buffer set.
Definition: buffer.hh:332
+
static Logger & get()
Returns the singleton instance of the logger.
Definition: logger.cc:89
+
std::list< FilterSource< Scalar > * > _filters
The filter bank.
Definition: filternode.hh:278
+
virtual ~FilterSink()
Destructor.
Definition: filternode.hh:50
+
Buffer< std::complex< Scalar > > _in_buffer
The input buffer.
Definition: filternode.hh:91
+
The configuration error class.
Definition: exception.hh:24
+
A log message.
Definition: logger.hh:21
+
size_t bufferSize() const
Returns the max.
Definition: node.hh:67
+
FilterSource< Scalar > * addFilter(double fmin, double fmax)
Adds a filter to the filter bank.
Definition: filternode.hh:258
+
double _fmax
The upper frequency range.
Definition: filternode.hh:220
+
virtual ~FilterSource()
Destructor.
Definition: filternode.hh:120
+
virtual ~FilterNode()
Destructor.
Definition: filternode.hh:244
+
FilterSource(size_t block_size, double fmin, double fmax)
Constructor.
Definition: filternode.hh:106
+
Buffer< std::complex< Scalar > > _trafo_buffer
A compute buffer.
Definition: filternode.hh:210
+
size_t _block_size
The block size.
Definition: filternode.hh:89
+
Buffer< Scalar > getBuffer()
Obtains a free buffer.
Definition: buffer.hh:318
+
FFT module class, provides static methods to perfrom a FFT directly.
Definition: fftplan.hh:14
+
BufferNode< std::complex< Scalar > > * _buffer
The input buffer (to ensure buffers of _block_size size.
Definition: filternode.hh:274
+
virtual void config(const Config &src_cfg)
Configures the filter node.
Definition: filternode.hh:130
+
A typed buffer.
Definition: buffer.hh:111
+
FilterNode(size_t block_size=1024)
Constructor.
Definition: filternode.hh:232
+
double sampleRate() const
Returns the sample rate.
Definition: node.hh:61
+
A FFT filter bank node wich consists of several filters.
Definition: filternode.hh:228
+
size_t _block_size
Holds the block size of the filter.
Definition: filternode.hh:204
+
+ + + + diff --git a/firfilter_8hh_source.html b/firfilter_8hh_source.html new file mode 100644 index 0000000..ee6777c --- /dev/null +++ b/firfilter_8hh_source.html @@ -0,0 +1,447 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/firfilter.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
firfilter.hh
+
+
+
1 #ifndef __SDR_FIRFILTER_HH__
+
2 #define __SDR_FIRFILTER_HH__
+
3 
+
4 #include "config.hh"
+
5 #include "node.hh"
+
6 #include "logger.hh"
+
7 
+
8 namespace sdr {
+
9 
+ +
13 {
+
14 public:
+
16  static inline void coeffs(std::vector<double> &alpha, double Fl, double Fu, double Fs)
+
17  {
+
18  size_t N = alpha.size();
+
19  double w = 2*M_PI*Fu/Fs;
+
20  double M = double(N)/2;
+
21  double norm = 0;
+
22  for (size_t i=0; i<N; i++) {
+
23  if (N == 2*i) { alpha[i] = 4*w/M_PI; }
+
24  else { alpha[i] = std::sin(w*(i-M))/(w*(i-M)); }
+
25  // apply window function
+
26  alpha[i] *= (0.42 - 0.5*cos((2*M_PI*i)/N) + 0.08*cos((4*M_PI*i)/N));
+
27  // Calc norm
+
28  norm += std::abs(alpha[i]);
+
29  }
+
30  // Normalize filter coeffs:
+
31  for (size_t i=0; i<N; i++) { alpha[i] /= norm; }
+
32  }
+
33 };
+
34 
+
35 
+ +
39 {
+
40 public:
+
42  static inline void coeffs(std::vector<double> &alpha, double Fl, double Fu, double Fs)
+
43  {
+
44  size_t N = alpha.size();
+
45  double w = 2*M_PI*Fl/Fs;
+
46  double M = double(N)/2;
+
47  double norm = 0;
+
48  for (size_t i=0; i<N; i++) {
+
49  if (N == 2*i) { alpha[i] = -std::sin(w*(i-M))/(w*(i-N)); }
+
50  else { alpha[i] = 1-4*w/M_PI; }
+
51  // apply window function
+
52  alpha[i] *= (0.42 - 0.5*cos((2*M_PI*i)/N) + 0.08*cos((4*M_PI*i)/N));
+
53  norm += std::abs(alpha[i]);
+
54  }
+
55  // Normalize filter coeffs:
+
56  for (size_t i=0; i<N; i++) { alpha[i] /= norm; }
+
57  }
+
58 };
+
59 
+
60 
+ +
64 {
+
65 public:
+
67  static inline void coeffs(std::vector<double> &alpha, double Fl, double Fu, double Fs)
+
68  {
+
69  size_t N = alpha.size();
+
70  double wl = 2*M_PI*Fl/Fs;
+
71  double wu = 2*M_PI*Fu/Fs;
+
72  double M = double(N)/2;
+
73  double norm = 0;
+
74  for (size_t i=0; i<N; i++) {
+
75  if (N == 2*i) { alpha[i] = 4*(wl-wu)/M_PI; }
+
76  else { alpha[i] = std::sin(wl*(i-M)/(wl*(i-M))) - std::sin(wu*(i-M)/(wu*(i-M))); }
+
77  // apply window function
+
78  alpha[i] *= (0.42 - 0.5*cos((2*M_PI*i)/N) + 0.08*cos((4*M_PI*i)/N));
+
79  norm += std::abs(alpha[i]);
+
80  }
+
81  // Normalize filter coeffs:
+
82  for (size_t i=0; i<N; i++) { alpha[i] /= norm; }
+
83  }
+
84 };
+
85 
+
86 
+ +
90 {
+
91 public:
+
93  static inline void coeffs(std::vector<double> &alpha, double Fl, double Fu, double Fs)
+
94  {
+
95  size_t N = alpha.size();
+
96  double wl = 2*M_PI*Fl/Fs;
+
97  double wu = 2*M_PI*Fl/Fs;
+
98  double M = double(N)/2;
+
99  double norm = 0;
+
100  for (size_t i=0; i<N; i++) {
+
101  if (N == 2*i) { alpha[i] = 1-4*(wl-wu)/M_PI; }
+
102  else { alpha[i] = std::sin(wu*(i-M)/(wu*(i-M))) - std::sin(wl*(i-M)/(wl*(i-M))); }
+
103  // apply window function
+
104  alpha[i] *= (0.42 - 0.5*cos((2*M_PI*i)/N) + 0.08*cos((4*M_PI*i)/N));
+
105  norm += std::abs(alpha[i]);
+
106  }
+
107  // Normalize filter coeffs:
+
108  for (size_t i=0; i<N; i++) { alpha[i] /= norm; }
+
109  }
+
110 };
+
111 
+
112 
+
115 template <class Scalar, class FilterCoeffs>
+
116 class FIRFilter: public Sink<Scalar>, public Source
+
117 {
+
118 public:
+
120  FIRFilter(size_t order, double Fl, double Fu)
+
121  : Sink<Scalar>(), Source(), _enabled(true), _order(std::max(size_t(1), order)), _Fl(Fl), _Fu(Fu),
+
122  _Fs(0), _alpha(_order, 0), _ring(_order), _ring_offset(0)
+
123  {
+
124  // pass...
+
125  }
+
126 
+
128  virtual ~FIRFilter() {
+
129  _ring.unref();
+
130  _buffer.unref();
+
131  }
+
132 
+
134  inline bool enabled() const { return _enabled; }
+
136  inline void enable(bool enable) { _enabled = enable; }
+
137 
+
139  inline size_t order() const { return _order; }
+
141  virtual void setOrder(size_t order) {
+
142  // Ensure order is larger 0:
+
143  order = std::max(size_t(1), order);
+
144  if (order == _order) { return; }
+
145  _order = order;
+
146  // Resize past and coeffs
+
147  _alpha.resize(_order);
+ +
149  _ring_offset = 0;
+
150  // Update coeffs:
+
151  FilterCoeffs::coeffs(_alpha, _Fl, _Fu, _Fs);
+
152  }
+
153 
+
155  inline double lowerFreq() const { return _Fl; }
+
157  inline void setLowerFreq(double Fl) {
+
158  _Fl = Fl;
+
159  FilterCoeffs::coeffs(_alpha, _Fl, _Fu, _Fs);
+
160  }
+
161 
+
163  inline double uppertFreq() const { return _Fl; }
+
165  inline void setUpperFreq(double Fu) {
+
166  _Fu = Fu;
+
167  FilterCoeffs::coeffs(_alpha, _Fl, _Fu, _Fs);
+
168  }
+
169 
+
171  virtual void config(const Config &src_cfg) {
+
172  // Requires type, sample-rate and buffer-size
+
173  if (!src_cfg.hasType() || !src_cfg.hasSampleRate() || !src_cfg.hasBufferSize()) { return; }
+
174  // check type
+
175  if (Config::typeId<Scalar>() != src_cfg.type()) {
+
176  ConfigError err;
+
177  err << "Can not configure FIRLowPass: Invalid type " << src_cfg.type()
+
178  << ", expected " << Config::typeId<Scalar>();
+
179  throw err;
+
180  }
+
181 
+
182  // Calc coeff
+
183  _Fs = src_cfg.sampleRate();
+
184  FilterCoeffs::coeffs(_alpha, _Fl, _Fu, _Fs);
+
185 
+
186  // unref buffer if non-empty
+
187  if (!_buffer.isEmpty()) { _buffer.unref(); }
+
188 
+
189  // allocate buffer
+
190  _buffer = Buffer<Scalar>(src_cfg.bufferSize());
+
191 
+
192  // Clear ring buffer
+
193  for (size_t i=0; i<_order; i++) { _ring[i] = 0; }
+
194  _ring_offset = 0;
+
195 
+
196  LogMessage msg(LOG_DEBUG);
+
197  msg << "Configured FIRFilter:" << std::endl
+
198  << " type " << src_cfg.type() << std::endl
+
199  << " sample rate " << _Fs << std::endl
+
200  << " buffer size " << src_cfg.bufferSize() << std::endl
+
201  << " order " << _order;
+
202  Logger::get().log(msg);
+
203 
+
204  // Propergate config
+
205  this->setConfig(Config(src_cfg.type(), src_cfg.sampleRate(), src_cfg.bufferSize(), 1));
+
206  }
+
207 
+
208 
+
210  virtual void process(const Buffer<Scalar> &buffer, bool allow_overwrite) {
+
211  // If emtpy
+
212  if (0 == buffer.size()) { /* drop buffer */ }
+
213  // If disabled -> pass
+
214  if (!_enabled) { this->send(buffer, allow_overwrite); return; }
+
215 
+
216  // Perform filtering in-place or out-of-place filtering
+
217  if (allow_overwrite) { _process(buffer, buffer); }
+
218  else if (_buffer.isUnused()) { _process(buffer, _buffer); }
+
219  else {
+
220 #ifdef SDR_DEBUG
+
221  LogMessage msg(LOG_WARNING);
+
222  msg << "FIR Filter: Drop buffer, output buffer still in use.";
+
223  Logger::get().log(msg);
+
224 #endif
+
225  }
+
226  }
+
227 
+
228 protected:
+
230  inline void _process(const Buffer<Scalar> &in, const Buffer<Scalar> &out)
+
231  {
+
232  for (size_t i=0; i<in.size(); i++) {
+
233  // Store input value into ring buffer
+
234  _ring[_ring_offset] = in[i]; _ring_offset++;
+
235  if (_ring_offset == _order) { _ring_offset=0; }
+
236  out[i] = 0;
+
237  // Apply filter on ring buffer
+
238  size_t idx = _ring_offset;
+
239  for (size_t j=0; j<_order; j++, idx++) {
+
240  if (idx == _order) { idx = 0; }
+
241  out[i] += _alpha[j]*_ring[idx];
+
242  }
+
243  }
+
244 
+
245  // Done.
+
246  this->send(out.head(in.size()), true);
+
247  }
+
248 
+
249 
+
250 protected:
+
252  bool _enabled;
+
254  size_t _order;
+
256  double _Fl;
+
258  double _Fu;
+
260  double _Fs;
+
262  std::vector<double> _alpha;
+ +
266  size_t _ring_offset;
+ +
269 };
+
270 
+
271 
+
273 template <class Scalar>
+
274 class FIRLowPass: public FIRFilter<Scalar, FIRLowPassCoeffs>
+
275 {
+
276 public:
+
278  FIRLowPass(size_t order, double Fc)
+
279  : FIRFilter<Scalar, FIRLowPassCoeffs>(order, 0, Fc) { }
+
281  virtual ~FIRLowPass() { }
+
283  inline double freq() const { return FIRFilter<Scalar, FIRLowPassCoeffs>::_Fu; }
+ +
286 };
+
287 
+
289 template <class Scalar>
+
290 class FIRHighPass: public FIRFilter<Scalar, FIRHighPassCoeffs>
+
291 {
+
292 public:
+
294  FIRHighPass(size_t order, double Fc)
+
295  : FIRFilter<Scalar, FIRHighPassCoeffs>(order, Fc, 0) { }
+
297  virtual ~FIRHighPass() { }
+
299  inline double freq() const { return FIRFilter<Scalar, FIRLowPassCoeffs>::_Fl; }
+ +
302 };
+
303 
+
304 
+
306 template <class Scalar>
+
307 class FIRBandPass: public FIRFilter<Scalar, FIRBandPassCoeffs>
+
308 {
+
309 public:
+
311  FIRBandPass(size_t order, double Fl, double Fu)
+
312  : FIRFilter<Scalar, FIRBandPassCoeffs>(order, Fl, Fu) { }
+
314  virtual ~FIRBandPass() { }
+
315 };
+
316 
+
318 template <class Scalar>
+
319 class FIRBandStop: public FIRFilter<Scalar, FIRBandStopCoeffs>
+
320 {
+
321 public:
+
323  FIRBandStop(size_t order, double Fl, double Fu)
+
324  : FIRFilter<Scalar, FIRBandStopCoeffs>(order, Fl, Fu) { }
+
326  virtual ~FIRBandStop() { }
+
327 };
+
328 
+
329 }
+
330 
+
331 #endif // FIRFILTER_HH
+
Band-stop FIR filter specialization.
Definition: firfilter.hh:319
+
virtual ~FIRBandStop()
Destructor.
Definition: firfilter.hh:326
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
virtual ~FIRFilter()
Destructor.
Definition: firfilter.hh:128
+
Band-pass FIR filter specialization.
Definition: firfilter.hh:307
+
static void coeffs(std::vector< double > &alpha, double Fl, double Fu, double Fs)
Calculates the filter coefficients.
Definition: firfilter.hh:93
+
double _Fu
The upper edge frequency.
Definition: firfilter.hh:258
+
static void coeffs(std::vector< double > &alpha, double Fl, double Fu, double Fs)
Calculates the filter coefficients.
Definition: firfilter.hh:67
+
Implements the calculation of the filter coefficients for the use in the FIRFilter template class...
Definition: firfilter.hh:12
+
double _Fs
Current sample rate.
Definition: firfilter.hh:260
+
virtual void send(const RawBuffer &buffer, bool allow_overwrite=false)
Sends the given buffer to all connected sinks.
Definition: node.cc:67
+
void _process(const Buffer< Scalar > &in, const Buffer< Scalar > &out)
performs the actual computation
Definition: firfilter.hh:230
+
Typed sink.
Definition: node.hh:176
+
double freq() const
Returns the filter frequency.
Definition: firfilter.hh:299
+
bool isEmpty() const
Returns true if the buffer is invalid/empty.
Definition: buffer.hh:77
+
FIRHighPass(size_t order, double Fc)
Constructor.
Definition: firfilter.hh:294
+
bool hasSampleRate() const
If true, the configuration has a sample rate.
Definition: node.hh:59
+
Generic source class.
Definition: node.hh:197
+
Implements the calculation of the filter coefficients for the use in the FIRFilter template class...
Definition: firfilter.hh:89
+
virtual ~FIRLowPass()
Destructor.
Definition: firfilter.hh:281
+
virtual ~FIRHighPass()
Destructor.
Definition: firfilter.hh:297
+
static void coeffs(std::vector< double > &alpha, double Fl, double Fu, double Fs)
Calculates the filter coefficients.
Definition: firfilter.hh:16
+
size_t size() const
Returns the number of elements of type T in this buffer.
Definition: buffer.hh:166
+
bool hasType() const
If true, the configuration has a type.
Definition: node.hh:53
+
double lowerFreq() const
Returns the lower edge frequency.
Definition: firfilter.hh:155
+
virtual void setConfig(const Config &config)
Stores the configuration and propergates it if the configuration has been changed.
Definition: node.cc:98
+
Buffer< Scalar > _ring
A "ring-buffer" used to perform the filtering.
Definition: firfilter.hh:264
+
Buffer< T > head(size_t n) const
Returns a new view on this buffer.
Definition: buffer.hh:237
+
FIRLowPass(size_t order, double Fc)
Constructor.
Definition: firfilter.hh:278
+
Implements the calculation of the filter coefficients for the use in the FIRFilter template class...
Definition: firfilter.hh:63
+
Implements the calculation of the filter coefficients for the use in the FIRFilter template class...
Definition: firfilter.hh:38
+
bool _enabled
If true, the filtering is enabled.
Definition: firfilter.hh:252
+
Generic FIR filter class.
Definition: firfilter.hh:116
+
void enable(bool enable)
Enable/Disable the filter.
Definition: firfilter.hh:136
+
FIRBandStop(size_t order, double Fl, double Fu)
Constructor.
Definition: firfilter.hh:323
+
virtual ~FIRBandPass()
Destructor.
Definition: firfilter.hh:314
+
void log(const LogMessage &message)
Logs a message.
Definition: logger.cc:100
+
Type type() const
Returns the type.
Definition: node.hh:55
+
double freq() const
Returns the filter frequency.
Definition: firfilter.hh:283
+
FIRBandPass(size_t order, double Fl, double Fu)
Constructor.
Definition: firfilter.hh:311
+
static void coeffs(std::vector< double > &alpha, double Fl, double Fu, double Fs)
Calculates the filter coefficients.
Definition: firfilter.hh:42
+
static Logger & get()
Returns the singleton instance of the logger.
Definition: logger.cc:89
+
The configuration error class.
Definition: exception.hh:24
+
A log message.
Definition: logger.hh:21
+
size_t bufferSize() const
Returns the max.
Definition: node.hh:67
+
size_t _ring_offset
Offset of the "ring-buffer".
Definition: firfilter.hh:266
+
virtual void setOrder(size_t order)
Sets the order of the filter and updates the filter coefficients.
Definition: firfilter.hh:141
+
size_t order() const
Returns the order of the filter.
Definition: firfilter.hh:139
+
double uppertFreq() const
Returns the upper edge frequency.
Definition: firfilter.hh:163
+
Buffer< Scalar > _buffer
The output buffer, unused if filtering is performed in-place.
Definition: firfilter.hh:268
+
size_t _order
The order of the filter.
Definition: firfilter.hh:254
+
virtual void config(const Config &src_cfg)
Configures the filter.
Definition: firfilter.hh:171
+
bool enabled() const
Returns true if the filter is enabled.
Definition: firfilter.hh:134
+
void setFreq(double freq)
Sets the filter frequency.
Definition: firfilter.hh:301
+
std::vector< double > _alpha
The current filter coefficients.
Definition: firfilter.hh:262
+
void unref()
Dereferences the buffer.
Definition: buffer.cc:61
+
High-pass FIR filter specialization.
Definition: firfilter.hh:290
+
bool isUnused() const
We assume here that buffers are owned by some object: A buffer is therefore "unused" if the owner hol...
Definition: buffer.hh:87
+
void setFreq(double freq)
Sets the filter frequency.
Definition: firfilter.hh:285
+
void setLowerFreq(double Fl)
Sets the lower edge frequency.
Definition: firfilter.hh:157
+
double _Fl
The lower edge frequency.
Definition: firfilter.hh:256
+
void setUpperFreq(double Fu)
Sets the upper edge frequency.
Definition: firfilter.hh:165
+
Low-pass FIR filter specialization.
Definition: firfilter.hh:274
+ +
bool hasBufferSize() const
If true, the configuration has a buffer size.
Definition: node.hh:65
+
double sampleRate() const
Returns the sample rate.
Definition: node.hh:61
+
virtual void process(const Buffer< Scalar > &buffer, bool allow_overwrite)
Performs the filtering.
Definition: firfilter.hh:210
+
FIRFilter(size_t order, double Fl, double Fu)
Constructor.
Definition: firfilter.hh:120
+
+ + + + diff --git a/form_0.png b/form_0.png new file mode 100644 index 0000000..c76e272 Binary files /dev/null and b/form_0.png differ diff --git a/form_1.png b/form_1.png new file mode 100644 index 0000000..ec17fdc Binary files /dev/null and b/form_1.png differ diff --git a/form_2.png b/form_2.png new file mode 100644 index 0000000..534fb6b Binary files /dev/null and b/form_2.png differ diff --git a/form_3.png b/form_3.png new file mode 100644 index 0000000..c02cecc Binary files /dev/null and b/form_3.png differ diff --git a/form_4.png b/form_4.png new file mode 100644 index 0000000..b16a58a Binary files /dev/null and b/form_4.png differ diff --git a/form_5.png b/form_5.png new file mode 100644 index 0000000..84faddc Binary files /dev/null and b/form_5.png differ diff --git a/form_6.png b/form_6.png new file mode 100644 index 0000000..cba286e Binary files /dev/null and b/form_6.png differ diff --git a/form_7.png b/form_7.png new file mode 100644 index 0000000..91ff3d6 Binary files /dev/null and b/form_7.png differ diff --git a/formula.repository b/formula.repository new file mode 100644 index 0000000..d1a6365 --- /dev/null +++ b/formula.repository @@ -0,0 +1,8 @@ +\form#0:$\exp(i\phi)$ +\form#1:$l^2$ +\form#2:$l^1$ +\form#3:$l^p$ +\form#4:$e^{i\omega t}$ +\form#5:$f$ +\form#6:$\omega=2\pi f$ +\form#7:$\exp(i\omega t)$ diff --git a/freqshift_8hh_source.html b/freqshift_8hh_source.html new file mode 100644 index 0000000..ad1f289 --- /dev/null +++ b/freqshift_8hh_source.html @@ -0,0 +1,208 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/freqshift.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
freqshift.hh
+
+
+
1 #ifndef __SDR_FREQSHIFT_HH__
+
2 #define __SDR_FREQSHIFT_HH__
+
3 
+
4 #include "config.hh"
+
5 #include "traits.hh"
+
6 #include "node.hh"
+
7 #include "operators.hh"
+
8 
+
9 namespace sdr {
+
10 
+
12 template <class Scalar>
+ +
14 {
+
15 public:
+
17  typedef std::complex<Scalar> CScalar;
+
19  typedef typename Traits<Scalar>::SScalar SScalar;
+
21  typedef std::complex<SScalar> CSScalar;
+
22 
+
23 public:
+
25  FreqShiftBase(double F, double Fs)
+
26  : _freq_shift(F), _Fs(Fs), _lut_inc(0), _lut_count(0), _lut(_lut_size)
+
27  {
+
28  // Allocate and assemble LUT
+
29  // Allocate LUT for (neg) frequency shift
+ +
31  for (size_t i=0; i<_lut_size; i++) {
+
32  _lut[i] = double(1 << Traits<Scalar>::shift) *
+
33  std::exp(std::complex<double>(0,-(2*M_PI*i)/_lut_size));
+
34  }
+
35  }
+
36 
+
38  virtual ~FreqShiftBase() {
+
39  _lut.unref();
+
40  }
+
41 
+
43  inline double sampleRate() const { return _Fs; }
+
45  virtual void setSampleRate(double Fs) {
+
46  _Fs = Fs; _update_lut_incr();
+
47  }
+
48 
+
50  inline double frequencyShift() const { return _freq_shift; }
+
52  virtual void setFrequencyShift(double F) {
+ +
54  }
+
55 
+ +
58  {
+
59  // If frequency shift is actually 0 -> return
+
60  if (0 == _lut_inc) { return value; }
+
61  // Get index, idx = (_lut_count/256)
+
62  size_t idx = (_lut_count>>8);
+
63  if (0 > _freq_shift) { idx = _lut_size - idx - 1; }
+
64  value = ((_lut[idx] * value) >> Traits<Scalar>::shift);
+
65  // Incement _lut_count
+ +
67  // _lut_count modulo (_lut_size*256)
+
68  while (_lut_count >= (_lut_size<<8)) { _lut_count -= (_lut_size<<8); }
+
69  return value;
+
70  }
+
71 
+
72 protected:
+ +
75  // Every sample increments the LUT index by lut_inc/256.
+
76  // The multiple is needed as ratio between the frequency shift _Fc and the sample rate _Fs
+
77  // may not result in an integer increment. By simply flooring _lut_size*_Fc/_Fs, the actual
+
78  // down conversion may be much smaller than actual reuqired. Hence, the counter in therefore
+
79  // incremented by the integer (256*_lut_size*_Fc/_Fs) and the index is then obtained by
+
80  // dividing _lut_count by 256 (right shift 8 bits).
+
81  _lut_inc = (_lut_size*(1<<8)*std::abs(_freq_shift))/_Fs;
+
82  _lut_count = 0;
+
83  }
+
84 
+
85 protected:
+
87  double _freq_shift;
+
89  double _Fs;
+
91  size_t _lut_inc;
+
93  size_t _lut_count;
+ +
96 
+
97 protected:
+
99  static const size_t _lut_size = 128;
+
100 };
+
101 
+
102 
+
103 }
+
104 
+
105 #endif // FREQSHIFT_HH
+
double frequencyShift() const
Returns the frequency shift.
Definition: freqshift.hh:50
+
Buffer< CSScalar > _lut
The LUT.
Definition: freqshift.hh:95
+
virtual void setSampleRate(double Fs)
Sets the sample rate and updates the LUT.
Definition: freqshift.hh:45
+
virtual void setFrequencyShift(double F)
Sets the frequency shift and updates the LUT.
Definition: freqshift.hh:52
+
size_t _lut_inc
The LUT increment.
Definition: freqshift.hh:91
+
virtual ~FreqShiftBase()
Destructor.
Definition: freqshift.hh:38
+
double sampleRate() const
Returns the sample rate.
Definition: freqshift.hh:43
+
std::complex< SScalar > CSScalar
The complex compute (super) scalar of the input type.
Definition: freqshift.hh:21
+
FreqShiftBase(double F, double Fs)
Constructor.
Definition: freqshift.hh:25
+
std::complex< Scalar > CScalar
The complex input signal.
Definition: freqshift.hh:17
+
Traits< Scalar >::SScalar SScalar
The compute (super) scalar of the input type.
Definition: freqshift.hh:19
+
A performant implementation of a frequency shift operation on integer signals.
Definition: freqshift.hh:13
+
void _update_lut_incr()
Updates the multiplier LUT.
Definition: freqshift.hh:74
+
CSScalar applyFrequencyShift(CSScalar value)
Performs the frequency shift on a single sample.
Definition: freqshift.hh:57
+
void unref()
Dereferences the buffer.
Definition: buffer.cc:61
+
Forward declaration of type tratis template.
Definition: traits.hh:20
+
size_t _lut_count
The LUT index counter.
Definition: freqshift.hh:93
+
double _freq_shift
The current frequency shift.
Definition: freqshift.hh:87
+
static const size_t _lut_size
The size of the LUT.
Definition: freqshift.hh:99
+ +
double _Fs
The current sample rate.
Definition: freqshift.hh:89
+
+ + + + diff --git a/ftv2blank.png b/ftv2blank.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/ftv2blank.png differ diff --git a/ftv2cl.png b/ftv2cl.png new file mode 100644 index 0000000..132f657 Binary files /dev/null and b/ftv2cl.png differ diff --git a/ftv2doc.png b/ftv2doc.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/ftv2doc.png differ diff --git a/ftv2folderclosed.png b/ftv2folderclosed.png new file mode 100644 index 0000000..bb8ab35 Binary files /dev/null and b/ftv2folderclosed.png differ diff --git a/ftv2folderopen.png b/ftv2folderopen.png new file mode 100644 index 0000000..d6c7f67 Binary files /dev/null and b/ftv2folderopen.png differ diff --git a/ftv2lastnode.png b/ftv2lastnode.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/ftv2lastnode.png differ diff --git a/ftv2link.png b/ftv2link.png new file mode 100644 index 0000000..17edabf Binary files /dev/null and b/ftv2link.png differ diff --git a/ftv2mlastnode.png b/ftv2mlastnode.png new file mode 100644 index 0000000..0b63f6d Binary files /dev/null and b/ftv2mlastnode.png differ diff --git a/ftv2mnode.png b/ftv2mnode.png new file mode 100644 index 0000000..0b63f6d Binary files /dev/null and b/ftv2mnode.png differ diff --git a/ftv2mo.png b/ftv2mo.png new file mode 100644 index 0000000..4bfb80f Binary files /dev/null and b/ftv2mo.png differ diff --git a/ftv2node.png b/ftv2node.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/ftv2node.png differ diff --git a/ftv2ns.png b/ftv2ns.png new file mode 100644 index 0000000..72e3d71 Binary files /dev/null and b/ftv2ns.png differ diff --git a/ftv2plastnode.png b/ftv2plastnode.png new file mode 100644 index 0000000..c6ee22f Binary files /dev/null and b/ftv2plastnode.png differ diff --git a/ftv2pnode.png b/ftv2pnode.png new file mode 100644 index 0000000..c6ee22f Binary files /dev/null and b/ftv2pnode.png differ diff --git a/ftv2splitbar.png b/ftv2splitbar.png new file mode 100644 index 0000000..fe895f2 Binary files /dev/null and b/ftv2splitbar.png differ diff --git a/ftv2vertline.png b/ftv2vertline.png new file mode 100644 index 0000000..63c605b Binary files /dev/null and b/ftv2vertline.png differ diff --git a/functions.html b/functions.html new file mode 100644 index 0000000..6666499 --- /dev/null +++ b/functions.html @@ -0,0 +1,841 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- _ -

+
+ + + + diff --git a/functions_a.html b/functions_a.html new file mode 100644 index 0000000..7418f03 --- /dev/null +++ b/functions_a.html @@ -0,0 +1,185 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- a -

+
+ + + + diff --git a/functions_b.html b/functions_b.html new file mode 100644 index 0000000..1e61242 --- /dev/null +++ b/functions_b.html @@ -0,0 +1,178 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- b -

+
+ + + + diff --git a/functions_c.html b/functions_c.html new file mode 100644 index 0000000..8f056d7 --- /dev/null +++ b/functions_c.html @@ -0,0 +1,220 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- c -

+
+ + + + diff --git a/functions_d.html b/functions_d.html new file mode 100644 index 0000000..53d5bcb --- /dev/null +++ b/functions_d.html @@ -0,0 +1,171 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- d -

+
+ + + + diff --git a/functions_e.html b/functions_e.html new file mode 100644 index 0000000..25faaed --- /dev/null +++ b/functions_e.html @@ -0,0 +1,151 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- e -

+
+ + + + diff --git a/functions_enum.html b/functions_enum.html new file mode 100644 index 0000000..1d434c7 --- /dev/null +++ b/functions_enum.html @@ -0,0 +1,117 @@ + + + + + + +libsdr: Class Members - Enumerations + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/functions_eval.html b/functions_eval.html new file mode 100644 index 0000000..58805fd --- /dev/null +++ b/functions_eval.html @@ -0,0 +1,163 @@ + + + + + + +libsdr: Class Members - Enumerator + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + +
+ + + + +
+ +
+ +
+
+ + + + diff --git a/functions_f.html b/functions_f.html new file mode 100644 index 0000000..ccad138 --- /dev/null +++ b/functions_f.html @@ -0,0 +1,212 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- f -

+
+ + + + diff --git a/functions_func.html b/functions_func.html new file mode 100644 index 0000000..da5b812 --- /dev/null +++ b/functions_func.html @@ -0,0 +1,265 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- _ -

+
+ + + + diff --git a/functions_func_a.html b/functions_func_a.html new file mode 100644 index 0000000..4e6ff8c --- /dev/null +++ b/functions_func_a.html @@ -0,0 +1,179 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- a -

+
+ + + + diff --git a/functions_func_b.html b/functions_func_b.html new file mode 100644 index 0000000..41b82be --- /dev/null +++ b/functions_func_b.html @@ -0,0 +1,178 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- b -

+
+ + + + diff --git a/functions_func_c.html b/functions_func_c.html new file mode 100644 index 0000000..1d9802c --- /dev/null +++ b/functions_func_c.html @@ -0,0 +1,209 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/functions_func_d.html b/functions_func_d.html new file mode 100644 index 0000000..5c188d3 --- /dev/null +++ b/functions_func_d.html @@ -0,0 +1,168 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- d -

+
+ + + + diff --git a/functions_func_e.html b/functions_func_e.html new file mode 100644 index 0000000..1dea8e7 --- /dev/null +++ b/functions_func_e.html @@ -0,0 +1,151 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/functions_func_f.html b/functions_func_f.html new file mode 100644 index 0000000..eb652df --- /dev/null +++ b/functions_func_f.html @@ -0,0 +1,205 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- f -

+
+ + + + diff --git a/functions_func_g.html b/functions_func_g.html new file mode 100644 index 0000000..4bbe54e --- /dev/null +++ b/functions_func_g.html @@ -0,0 +1,154 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- g -

+
+ + + + diff --git a/functions_func_h.html b/functions_func_h.html new file mode 100644 index 0000000..a73dc58 --- /dev/null +++ b/functions_func_h.html @@ -0,0 +1,177 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- h -

+
+ + + + diff --git a/functions_func_i.html b/functions_func_i.html new file mode 100644 index 0000000..4aea4de --- /dev/null +++ b/functions_func_i.html @@ -0,0 +1,197 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- i -

+
+ + + + diff --git a/functions_func_l.html b/functions_func_l.html new file mode 100644 index 0000000..a9d3281 --- /dev/null +++ b/functions_func_l.html @@ -0,0 +1,154 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- l -

+
+ + + + diff --git a/functions_func_m.html b/functions_func_m.html new file mode 100644 index 0000000..930c9ed --- /dev/null +++ b/functions_func_m.html @@ -0,0 +1,142 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- m -

+
+ + + + diff --git a/functions_func_n.html b/functions_func_n.html new file mode 100644 index 0000000..5dd1729 --- /dev/null +++ b/functions_func_n.html @@ -0,0 +1,164 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/functions_func_o.html b/functions_func_o.html new file mode 100644 index 0000000..83bb5f3 --- /dev/null +++ b/functions_func_o.html @@ -0,0 +1,179 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/functions_func_p.html b/functions_func_p.html new file mode 100644 index 0000000..b594fcf --- /dev/null +++ b/functions_func_p.html @@ -0,0 +1,192 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/functions_func_q.html b/functions_func_q.html new file mode 100644 index 0000000..36208dd --- /dev/null +++ b/functions_func_q.html @@ -0,0 +1,139 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- q -

+
+ + + + diff --git a/functions_func_r.html b/functions_func_r.html new file mode 100644 index 0000000..df40c6a --- /dev/null +++ b/functions_func_r.html @@ -0,0 +1,180 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- r -

+
+ + + + diff --git a/functions_func_s.html b/functions_func_s.html new file mode 100644 index 0000000..56d9492 --- /dev/null +++ b/functions_func_s.html @@ -0,0 +1,302 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- s -

+
+ + + + diff --git a/functions_func_t.html b/functions_func_t.html new file mode 100644 index 0000000..e68d9d6 --- /dev/null +++ b/functions_func_t.html @@ -0,0 +1,168 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- t -

+
+ + + + diff --git a/functions_func_u.html b/functions_func_u.html new file mode 100644 index 0000000..8e8bb47 --- /dev/null +++ b/functions_func_u.html @@ -0,0 +1,148 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- u -

+
+ + + + diff --git a/functions_func_v.html b/functions_func_v.html new file mode 100644 index 0000000..a31b8b7 --- /dev/null +++ b/functions_func_v.html @@ -0,0 +1,142 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- v -

+
+ + + + diff --git a/functions_func_w.html b/functions_func_w.html new file mode 100644 index 0000000..923e95f --- /dev/null +++ b/functions_func_w.html @@ -0,0 +1,148 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- w -

+
+ + + + diff --git a/functions_func_~.html b/functions_func_~.html new file mode 100644 index 0000000..d36cfc3 --- /dev/null +++ b/functions_func_~.html @@ -0,0 +1,306 @@ + + + + + + +libsdr: Class Members - Functions + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- ~ -

+
+ + + + diff --git a/functions_g.html b/functions_g.html new file mode 100644 index 0000000..fe62e0e --- /dev/null +++ b/functions_g.html @@ -0,0 +1,154 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- g -

+
+ + + + diff --git a/functions_h.html b/functions_h.html new file mode 100644 index 0000000..64fd264 --- /dev/null +++ b/functions_h.html @@ -0,0 +1,180 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- h -

+
+ + + + diff --git a/functions_i.html b/functions_i.html new file mode 100644 index 0000000..863e305 --- /dev/null +++ b/functions_i.html @@ -0,0 +1,204 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- i -

+
+ + + + diff --git a/functions_l.html b/functions_l.html new file mode 100644 index 0000000..9a29055 --- /dev/null +++ b/functions_l.html @@ -0,0 +1,154 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- l -

+
+ + + + diff --git a/functions_m.html b/functions_m.html new file mode 100644 index 0000000..846aba1 --- /dev/null +++ b/functions_m.html @@ -0,0 +1,142 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- m -

+
+ + + + diff --git a/functions_n.html b/functions_n.html new file mode 100644 index 0000000..3b2bec0 --- /dev/null +++ b/functions_n.html @@ -0,0 +1,170 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- n -

+
+ + + + diff --git a/functions_o.html b/functions_o.html new file mode 100644 index 0000000..8671422 --- /dev/null +++ b/functions_o.html @@ -0,0 +1,182 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- o -

+
+ + + + diff --git a/functions_p.html b/functions_p.html new file mode 100644 index 0000000..3e84010 --- /dev/null +++ b/functions_p.html @@ -0,0 +1,192 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/functions_q.html b/functions_q.html new file mode 100644 index 0000000..6cedfff --- /dev/null +++ b/functions_q.html @@ -0,0 +1,139 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- q -

+
+ + + + diff --git a/functions_r.html b/functions_r.html new file mode 100644 index 0000000..01d3cc0 --- /dev/null +++ b/functions_r.html @@ -0,0 +1,194 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- r -

+
+ + + + diff --git a/functions_s.html b/functions_s.html new file mode 100644 index 0000000..ec653f6 --- /dev/null +++ b/functions_s.html @@ -0,0 +1,385 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- s -

+
+ + + + diff --git a/functions_t.html b/functions_t.html new file mode 100644 index 0000000..4840d7d --- /dev/null +++ b/functions_t.html @@ -0,0 +1,213 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- t -

+
+ + + + diff --git a/functions_type.html b/functions_type.html new file mode 100644 index 0000000..aa62c5a --- /dev/null +++ b/functions_type.html @@ -0,0 +1,202 @@ + + + + + + +libsdr: Class Members - Typedefs + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- c -

+ + +

- i -

+ + +

- o -

+ + +

- r -

+ + +

- s -

+
+ + + + diff --git a/functions_u.html b/functions_u.html new file mode 100644 index 0000000..499c094 --- /dev/null +++ b/functions_u.html @@ -0,0 +1,148 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- u -

+
+ + + + diff --git a/functions_v.html b/functions_v.html new file mode 100644 index 0000000..290ecb7 --- /dev/null +++ b/functions_v.html @@ -0,0 +1,142 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- v -

+
+ + + + diff --git a/functions_vars.html b/functions_vars.html new file mode 100644 index 0000000..b8e6d88 --- /dev/null +++ b/functions_vars.html @@ -0,0 +1,696 @@ + + + + + + +libsdr: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- _ -

+
+ + + + diff --git a/functions_vars_h.html b/functions_vars_h.html new file mode 100644 index 0000000..dc57e08 --- /dev/null +++ b/functions_vars_h.html @@ -0,0 +1,121 @@ + + + + + + +libsdr: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- h -

+
+ + + + diff --git a/functions_vars_n.html b/functions_vars_n.html new file mode 100644 index 0000000..9034700 --- /dev/null +++ b/functions_vars_n.html @@ -0,0 +1,121 @@ + + + + + + +libsdr: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- n -

+
+ + + + diff --git a/functions_vars_s.html b/functions_vars_s.html new file mode 100644 index 0000000..14e5e84 --- /dev/null +++ b/functions_vars_s.html @@ -0,0 +1,163 @@ + + + + + + +libsdr: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ + + + + + diff --git a/functions_vars_t.html b/functions_vars_t.html new file mode 100644 index 0000000..0306ad1 --- /dev/null +++ b/functions_vars_t.html @@ -0,0 +1,121 @@ + + + + + + +libsdr: Class Members - Variables + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+  + +

- t -

+
+ + + + diff --git a/functions_w.html b/functions_w.html new file mode 100644 index 0000000..312325d --- /dev/null +++ b/functions_w.html @@ -0,0 +1,148 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- w -

+
+ + + + diff --git a/functions_~.html b/functions_~.html new file mode 100644 index 0000000..3cfa52b --- /dev/null +++ b/functions_~.html @@ -0,0 +1,306 @@ + + + + + + +libsdr: Class Members + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + +
+ + + + +
+ +
+ +
+
Here is a list of all documented class members with links to the class documentation for each member:
+ +

- ~ -

+
+ + + + diff --git a/hierarchy.html b/hierarchy.html new file mode 100644 index 0000000..143ce82 --- /dev/null +++ b/hierarchy.html @@ -0,0 +1,257 @@ + + + + + + +libsdr: Class Hierarchy + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + +
+ + + + +
+ +
+ +
+
+
Class Hierarchy
+
+
+
This inheritance list is sorted roughly, but not completely, alphabetically:
+
[detail level 1234]
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
oCsdr::BufferOwnerAbstract class (interface) of a buffer owner
oCsdr::Combine< Scalar >A combine node
oCsdr::ConfigA collection of configuration information that is send by a source to all connected sinks to propergate and check the configuration of the processing network
oCsdr::Options::DefinitionArgument definition
oCsdr::DelegateInterfaceInterface of a delegate
oCexception
oCsdr::FFTFFT module class, provides static methods to perfrom a FFT directly
oCsdr::FFTPlan< Scalar >Trivial FFT implementation for buffer sizes of N=2**K
oCsdr::FFTPlan< double >Template specialization for a FFT transform on std::complex<double> values
oCsdr::FFTPlan< float >Template specialization for a FFT transform on std::complex<float> values
oCsdr::FilterNode< Scalar >A FFT filter bank node wich consists of several filters
oCsdr::FIRBandPassCoeffsImplements the calculation of the filter coefficients for the use in the FIRFilter template class
oCsdr::FIRBandStopCoeffsImplements the calculation of the filter coefficients for the use in the FIRFilter template class
oCsdr::FIRHighPassCoeffsImplements the calculation of the filter coefficients for the use in the FIRFilter template class
oCsdr::FIRLowPassCoeffsImplements the calculation of the filter coefficients for the use in the FIRFilter template class
oCsdr::FracSubSampleBase< Scalar >Implements a fractional sub-sampler
oCsdr::FreqShiftBase< Scalar >A performant implementation of a frequency shift operation on integer signals
oCsdr::LoggerThe logger class (singleton)
oCsdr::LogHandlerBase class of all log message handlers
oCsdr::Queue::MessageThe internal used message type
oCsdr::OptionsConvenience functions for command line arguments
oCsdr::PortAudio"Namespace" to collect all static, PortAudio related functions
oCsdr::QueueCentral message queue (singleton)
oCsdr::RawBufferBase class of all buffers, represents an untyped array of bytes
oCsdr::SinkBaseBasic interface of all Sinks
oCsdr::SourceGeneric source class
oCstringstream
oCsdr::Traits< Scalar >Forward declaration of type tratis template
oCsdr::Traits< double >Template specialization of type traits for float scalar
oCsdr::Traits< float >Template specialization of type traits for float scalar
oCsdr::Traits< int16_t >Template specialization of type traits for int16_t scalar
oCsdr::Traits< int8_t >Template specialization of type tratis for int8_t scalar
oCsdr::Traits< std::complex< double > >Template specialization of type traits for complex float scalar
oCsdr::Traits< std::complex< float > >Template specialization of type traits for complex float scalar
oCsdr::Traits< std::complex< int16_t > >Template specialization of type traits for complex int16_t scalar
oCsdr::Traits< std::complex< int8_t > >Template specialization of type tratis for complex int8_t scalar
oCsdr::Traits< std::complex< uint16_t > >Template specialization of type traits for complex uint16_t scalar
oCsdr::Traits< std::complex< uint8_t > >Template specialization of type tratis for complex uint8_t scalar
oCsdr::Traits< uint16_t >Template specialization of type traits for uint16_t scalar
oCsdr::Traits< uint8_t >Template specialization of type tratis for uint8_t scalar
\Csdr::Options::ValueThe argument value
+
+
+ + + + diff --git a/index.html b/index.html new file mode 100644 index 0000000..2bb9463 --- /dev/null +++ b/index.html @@ -0,0 +1,277 @@ + + + + + + +libsdr: A C++ library for software defined radio (SDR). + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
A C++ library for software defined radio (SDR).
+
+
+

libsdr is a simple C++ library allowing to assemble software defined radio (SDR) applications easily. The library is a collection of (mostly) template classes implementing a wide varity of procssing nodes. By connecting these processing nodes, a stream-processing chain is constructed which turns raw input data into something meaningful.

+

Please note, I have written this library for my own amusement and to learn something about SDR. If you search for a more complete and efficient SDR library, consider GNU radio.

+

A processing node is either a sdr::Source, sdr::Sink, both or may provide one or more sources or sinks. A source is always connected to a sink. Another important object is the sdr::Queue. It is a singleton class that orchestrates the processing of the data. It may request further data from the sources once all present data has been processed. It also routes the date from the sources to the sinks.

+

+A practical introduction

+

The following examples shows a trivial application that recods some audio from the systems default audio source and play it back.

+
#include <libsdr/sdr.hh>
+
+
int main(int argc, char *argv[]) {
+
// Initialize PortAudio system
+ +
+
// Create an audio source using PortAudio
+
sdr::PortSource<int16_t> source(44.1e3);
+
// Create an audio sink using PortAudio
+ +
+
// Connect them
+
source.connect(&sink);
+
+
// Read new data from audio sink if queue is idle
+ +
+
// Get and start queue
+ +
// Wait for queue to stop
+ +
+
// Terminate PortAudio system
+ +
+
// done.
+
return 0;
+
}
+

First, the PortAudio system gets initialized.

+

Then, the audio source is constructed. The argument specifies the sample rate in Hz. Here a sample rate of 44100 Hz is used. The template argument of sdr::PortSource specifies the input type. Here a signed 16bit integer is used. The audio source will have only one channel (mono).

+

The second node is the audio (playback) sink, which takes no arguments. It gets configured once the source is connected to the sink with source.connect(&sink).

+

In a next step, the sources next method gets connected to the "idle" signal of the queue. This is necessary as the audio source does not send data by its own. Whenever the next method gets called, the source will send a certain amount of captured data to the connected sinks. Some nodes will send data to the connected sinks without the need to explicit triggering. The sdr::PortSource node, however, needs that explicit triggering. The "idle" event gets emitted once the queue gets empty, means whenever all data has been processes (here, played back).

+

As mentioned aboce, the queue is a singleton class. Means that for every process, there is exactly one instance of the queue. This singleton instance is accessed by calling the static method sdr::Queue::get. By calling sdr::Queue::start, the queue is started in a separate thread. This threads is responsible for all the processing of the data which allows to perform other tasks in the main thread, i.e. GUI stuff. A call to sdr::Queue::wait, will wait for the processing thread to exit, which will never happen in that particular example.

+

The queue can be stopped by calling the sdr::Queue::stop method. This can be implemented for this example by the means of process signals.

+
#include <signal.h>
+
...
+
+
static void __sigint_handler(int signo) {
+
// On SIGINT -> stop queue properly
+ +
}
+
+
int main(int argc, char *argv[]) {
+
// Register signal handler
+
signal(SIGINT, __sigint_handler);
+
...
+
}
+

Whenever a SIGINT is send to the process, i.e. by pressing CTRL+C, the sdr::Queue::stop method gets called. This will cause the processing thread of the queue to exit and the call to sdr::Queue::wait to return.

+

+Queue less operation

+

Sometimes, the queue is simply not needed. This is particularily the case if the data processing can happen in the main thread, i.e. if there is not GUI. The example above can be implemented without the Queue, as the main thread is just waiting for the processing thread to exit.

+
#include <libsdr/sdr.hh>
+
+
int main(int argc, char *argv[]) {
+
// Initialize PortAudio system
+ +
+
// Create an audio source using PortAudio
+
sdr::PortSource<int16_t> source(44.1e3);
+
// Create an audio sink using PortAudio
+ +
+
// Connect them directly
+
source.connect(&sink, true);
+
+
// Loop to infinity7
+
while(true) { source.next(); }
+
+
// Terminate PortAudio system
+ +
+
// done.
+
return 0;
+
}
+

The major difference between the first example and this one, is the way how the nodes are connected. The sdr::Source::connect method takes an optional argument specifying wheter the source is connected directly to the sink or not. If false (the default) is specified, the data of the source will be send to the Queue first. In a direct connection (passing true), the source will send the data directly to the sink, bypassing the queue.

+

Instead of starting the processing thread of the queue, here the main thread is doing all the work by calling the next mehtod of the audio source.

+

+Log messages

+

During configuration and operation, processing nodes will send log messages of different levels (DEBUG, INFO, WARNING, ERROR), which allow to debug the operation of the complete processing chain. These log messages are passed around using the build-in sdr::Logger class. To make them visible, a log handler must be installed.

+
int main(int argc, char *argv[]) {
+
...
+
// Install the log handler...
+ +
new sdr::StreamLogHandler(std::cerr, sdr::LOG_DEBUG));
+
...
+
}
+

Like the sdr::Queue, the logger is also a singleton object, which can be obtained by sdr::Logger::get. By calling sdr::Logger::addHandler, a new message handler is installed. In this example, a sdr::StreamLogHandler instance is installed, which serializes the log messages into std::cerr.

+

+In summary

+

In summary, the complete example above using the queue including a singal handler to properly terminate the application by SIGINT and a log handler will look like

+
#include <libsdr/sdr.hh>
+
#include <signal.h>
+
+
static void __sigint_handler(int signo) {
+
// On SIGINT -> stop queue properly
+ +
}
+
+
int main(int argc, char *argv[]) {
+
// Register signal handler
+
signal(SIGINT, __sigint_handler);
+
+
// Initialize PortAudio system
+ +
+
// Create an audio source using PortAudio
+
sdr::PortSource<int16_t> source(44.1e3);
+
// Create an audio sink using PortAudio
+ +
+
// Connect them
+
source.connect(&sink);
+
+
// Read new data from audio sink if queue is idle
+ +
+
// Get and start queue
+ +
// Wait for queue to stop
+ +
+
// Terminate PortAudio system
+ +
+
// done.
+
return 0;
+
}
+

This may appear quiet bloated for such a simple application. I designed the library to be rather explicit. No feature is implicit and hidden from the user. This turns simple examples like the one above quite bloated but it is imediately clear how the example works whithout any knowledge of "hidden features" and the complexity does not suddenly increases for non-trivial examples.

+

Finally, we may have a look at a more relaistic example implementing a FM broadcast receiver using a RTL2832 based USB dongle as the input source.

+
#include <libsdr/sdr.hh>
+
#include <signal.h>
+
+
static void __sigint_handler(int signo) {
+
// On SIGINT -> stop queue properly
+ +
}
+
+
int main(int argc, char *argv[]) {
+
// Register signal handler
+
signal(SIGINT, __sigint_handler);
+
+
// Initialize PortAudio system
+ +
+
// Frequency of the FM station (in Hz)
+
double freq = 100e6;
+
+
// Create a RTL2832 input node
+
sdr::RTLSource src(freq);
+
// Filter 100kHz around the center frequency (0) with an 16th order FIR filter and
+
// subsample the result to a sample rate of approx. 100kHz.
+
sdr::IQBaseBand<int8_t> baseband(0, 100e3, 16, 0, 100e3);
+
// FM demodulator, takes a complex int8_t stream and returns a real int16_t stream
+ +
// Deemphesize the result (actually part of the demodulation)
+ +
// Playback the final signal
+ +
+
// Connect signals
+
src.connect(&baseband, true);
+
baseband.connect(&demod);
+
demod.connect(&deemph);
+
deemph.connect(&sink);
+
+
// Connect start and stop signals of Queue to RTL2832 source
+ + +
+
// Start queue
+ +
// Wait for queue
+ +
+
// Terminate PortAudio system
+ +
+
// Done...
+
return 0;
+
}
+
+ + + + diff --git a/interpolate_8hh_source.html b/interpolate_8hh_source.html new file mode 100644 index 0000000..d71c0f2 --- /dev/null +++ b/interpolate_8hh_source.html @@ -0,0 +1,250 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/interpolate.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
interpolate.hh
+
+
+
1 #ifndef __SDR_INTERPOLATE_HH__
+
2 #define __SDR_INTERPOLATE_HH__
+
3 
+
4 #include "buffer.hh"
+
5 
+
6 namespace sdr {
+
7 
+
8 static const float interpolate_taps[129][8] = {
+
9  { 0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00, 1.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00 },
+
10  { -1.54700e-04, 8.53777e-04, -2.76968e-03, 7.89295e-03, 9.98534e-01, -5.41054e-03, 1.24642e-03, -1.98993e-04 },
+
11  { -3.09412e-04, 1.70888e-03, -5.55134e-03, 1.58840e-02, 9.96891e-01, -1.07209e-02, 2.47942e-03, -3.96391e-04 },
+
12  { -4.64053e-04, 2.56486e-03, -8.34364e-03, 2.39714e-02, 9.95074e-01, -1.59305e-02, 3.69852e-03, -5.92100e-04 },
+
13  { -6.18544e-04, 3.42130e-03, -1.11453e-02, 3.21531e-02, 9.93082e-01, -2.10389e-02, 4.90322e-03, -7.86031e-04 },
+
14  { -7.72802e-04, 4.27773e-03, -1.39548e-02, 4.04274e-02, 9.90917e-01, -2.60456e-02, 6.09305e-03, -9.78093e-04 },
+
15  { -9.26747e-04, 5.13372e-03, -1.67710e-02, 4.87921e-02, 9.88580e-01, -3.09503e-02, 7.26755e-03, -1.16820e-03 },
+
16  { -1.08030e-03, 5.98883e-03, -1.95925e-02, 5.72454e-02, 9.86071e-01, -3.57525e-02, 8.42626e-03, -1.35627e-03 },
+
17  { -1.23337e-03, 6.84261e-03, -2.24178e-02, 6.57852e-02, 9.83392e-01, -4.04519e-02, 9.56876e-03, -1.54221e-03 },
+
18  { -1.38589e-03, 7.69462e-03, -2.52457e-02, 7.44095e-02, 9.80543e-01, -4.50483e-02, 1.06946e-02, -1.72594e-03 },
+
19  { -1.53777e-03, 8.54441e-03, -2.80746e-02, 8.31162e-02, 9.77526e-01, -4.95412e-02, 1.18034e-02, -1.90738e-03 },
+
20  { -1.68894e-03, 9.39154e-03, -3.09033e-02, 9.19033e-02, 9.74342e-01, -5.39305e-02, 1.28947e-02, -2.08645e-03 },
+
21  { -1.83931e-03, 1.02356e-02, -3.37303e-02, 1.00769e-01, 9.70992e-01, -5.82159e-02, 1.39681e-02, -2.26307e-03 },
+
22  { -1.98880e-03, 1.10760e-02, -3.65541e-02, 1.09710e-01, 9.67477e-01, -6.23972e-02, 1.50233e-02, -2.43718e-03 },
+
23  { -2.13733e-03, 1.19125e-02, -3.93735e-02, 1.18725e-01, 9.63798e-01, -6.64743e-02, 1.60599e-02, -2.60868e-03 },
+
24  { -2.28483e-03, 1.27445e-02, -4.21869e-02, 1.27812e-01, 9.59958e-01, -7.04471e-02, 1.70776e-02, -2.77751e-03 },
+
25  { -2.43121e-03, 1.35716e-02, -4.49929e-02, 1.36968e-01, 9.55956e-01, -7.43154e-02, 1.80759e-02, -2.94361e-03 },
+
26  { -2.57640e-03, 1.43934e-02, -4.77900e-02, 1.46192e-01, 9.51795e-01, -7.80792e-02, 1.90545e-02, -3.10689e-03 },
+
27  { -2.72032e-03, 1.52095e-02, -5.05770e-02, 1.55480e-01, 9.47477e-01, -8.17385e-02, 2.00132e-02, -3.26730e-03 },
+
28  { -2.86289e-03, 1.60193e-02, -5.33522e-02, 1.64831e-01, 9.43001e-01, -8.52933e-02, 2.09516e-02, -3.42477e-03 },
+
29  { -3.00403e-03, 1.68225e-02, -5.61142e-02, 1.74242e-01, 9.38371e-01, -8.87435e-02, 2.18695e-02, -3.57923e-03 },
+
30  { -3.14367e-03, 1.76185e-02, -5.88617e-02, 1.83711e-01, 9.33586e-01, -9.20893e-02, 2.27664e-02, -3.73062e-03 },
+
31  { -3.28174e-03, 1.84071e-02, -6.15931e-02, 1.93236e-01, 9.28650e-01, -9.53307e-02, 2.36423e-02, -3.87888e-03 },
+
32  { -3.41815e-03, 1.91877e-02, -6.43069e-02, 2.02814e-01, 9.23564e-01, -9.84679e-02, 2.44967e-02, -4.02397e-03 },
+
33  { -3.55283e-03, 1.99599e-02, -6.70018e-02, 2.12443e-01, 9.18329e-01, -1.01501e-01, 2.53295e-02, -4.16581e-03 },
+
34  { -3.68570e-03, 2.07233e-02, -6.96762e-02, 2.22120e-01, 9.12947e-01, -1.04430e-01, 2.61404e-02, -4.30435e-03 },
+
35  { -3.81671e-03, 2.14774e-02, -7.23286e-02, 2.31843e-01, 9.07420e-01, -1.07256e-01, 2.69293e-02, -4.43955e-03 },
+
36  { -3.94576e-03, 2.22218e-02, -7.49577e-02, 2.41609e-01, 9.01749e-01, -1.09978e-01, 2.76957e-02, -4.57135e-03 },
+
37  { -4.07279e-03, 2.29562e-02, -7.75620e-02, 2.51417e-01, 8.95936e-01, -1.12597e-01, 2.84397e-02, -4.69970e-03 },
+
38  { -4.19774e-03, 2.36801e-02, -8.01399e-02, 2.61263e-01, 8.89984e-01, -1.15113e-01, 2.91609e-02, -4.82456e-03 },
+
39  { -4.32052e-03, 2.43930e-02, -8.26900e-02, 2.71144e-01, 8.83893e-01, -1.17526e-01, 2.98593e-02, -4.94589e-03 },
+
40  { -4.44107e-03, 2.50946e-02, -8.52109e-02, 2.81060e-01, 8.77666e-01, -1.19837e-01, 3.05345e-02, -5.06363e-03 },
+
41  { -4.55932e-03, 2.57844e-02, -8.77011e-02, 2.91006e-01, 8.71305e-01, -1.22047e-01, 3.11866e-02, -5.17776e-03 },
+
42  { -4.67520e-03, 2.64621e-02, -9.01591e-02, 3.00980e-01, 8.64812e-01, -1.24154e-01, 3.18153e-02, -5.28823e-03 },
+
43  { -4.78866e-03, 2.71272e-02, -9.25834e-02, 3.10980e-01, 8.58189e-01, -1.26161e-01, 3.24205e-02, -5.39500e-03 },
+
44  { -4.89961e-03, 2.77794e-02, -9.49727e-02, 3.21004e-01, 8.51437e-01, -1.28068e-01, 3.30021e-02, -5.49804e-03 },
+
45  { -5.00800e-03, 2.84182e-02, -9.73254e-02, 3.31048e-01, 8.44559e-01, -1.29874e-01, 3.35600e-02, -5.59731e-03 },
+
46  { -5.11376e-03, 2.90433e-02, -9.96402e-02, 3.41109e-01, 8.37557e-01, -1.31581e-01, 3.40940e-02, -5.69280e-03 },
+
47  { -5.21683e-03, 2.96543e-02, -1.01915e-01, 3.51186e-01, 8.30432e-01, -1.33189e-01, 3.46042e-02, -5.78446e-03 },
+
48  { -5.31716e-03, 3.02507e-02, -1.04150e-01, 3.61276e-01, 8.23188e-01, -1.34699e-01, 3.50903e-02, -5.87227e-03 },
+
49  { -5.41467e-03, 3.08323e-02, -1.06342e-01, 3.71376e-01, 8.15826e-01, -1.36111e-01, 3.55525e-02, -5.95620e-03 },
+
50  { -5.50931e-03, 3.13987e-02, -1.08490e-01, 3.81484e-01, 8.08348e-01, -1.37426e-01, 3.59905e-02, -6.03624e-03 },
+
51  { -5.60103e-03, 3.19495e-02, -1.10593e-01, 3.91596e-01, 8.00757e-01, -1.38644e-01, 3.64044e-02, -6.11236e-03 },
+
52  { -5.68976e-03, 3.24843e-02, -1.12650e-01, 4.01710e-01, 7.93055e-01, -1.39767e-01, 3.67941e-02, -6.18454e-03 },
+
53  { -5.77544e-03, 3.30027e-02, -1.14659e-01, 4.11823e-01, 7.85244e-01, -1.40794e-01, 3.71596e-02, -6.25277e-03 },
+
54  { -5.85804e-03, 3.35046e-02, -1.16618e-01, 4.21934e-01, 7.77327e-01, -1.41727e-01, 3.75010e-02, -6.31703e-03 },
+
55  { -5.93749e-03, 3.39894e-02, -1.18526e-01, 4.32038e-01, 7.69305e-01, -1.42566e-01, 3.78182e-02, -6.37730e-03 },
+
56  { -6.01374e-03, 3.44568e-02, -1.20382e-01, 4.42134e-01, 7.61181e-01, -1.43313e-01, 3.81111e-02, -6.43358e-03 },
+
57  { -6.08674e-03, 3.49066e-02, -1.22185e-01, 4.52218e-01, 7.52958e-01, -1.43968e-01, 3.83800e-02, -6.48585e-03 },
+
58  { -6.15644e-03, 3.53384e-02, -1.23933e-01, 4.62289e-01, 7.44637e-01, -1.44531e-01, 3.86247e-02, -6.53412e-03 },
+
59  { -6.22280e-03, 3.57519e-02, -1.25624e-01, 4.72342e-01, 7.36222e-01, -1.45004e-01, 3.88454e-02, -6.57836e-03 },
+
60  { -6.28577e-03, 3.61468e-02, -1.27258e-01, 4.82377e-01, 7.27714e-01, -1.45387e-01, 3.90420e-02, -6.61859e-03 },
+
61  { -6.34530e-03, 3.65227e-02, -1.28832e-01, 4.92389e-01, 7.19116e-01, -1.45682e-01, 3.92147e-02, -6.65479e-03 },
+
62  { -6.40135e-03, 3.68795e-02, -1.30347e-01, 5.02377e-01, 7.10431e-01, -1.45889e-01, 3.93636e-02, -6.68698e-03 },
+
63  { -6.45388e-03, 3.72167e-02, -1.31800e-01, 5.12337e-01, 7.01661e-01, -1.46009e-01, 3.94886e-02, -6.71514e-03 },
+
64  { -6.50285e-03, 3.75341e-02, -1.33190e-01, 5.22267e-01, 6.92808e-01, -1.46043e-01, 3.95900e-02, -6.73929e-03 },
+
65  { -6.54823e-03, 3.78315e-02, -1.34515e-01, 5.32164e-01, 6.83875e-01, -1.45993e-01, 3.96678e-02, -6.75943e-03 },
+
66  { -6.58996e-03, 3.81085e-02, -1.35775e-01, 5.42025e-01, 6.74865e-01, -1.45859e-01, 3.97222e-02, -6.77557e-03 },
+
67  { -6.62802e-03, 3.83650e-02, -1.36969e-01, 5.51849e-01, 6.65779e-01, -1.45641e-01, 3.97532e-02, -6.78771e-03 },
+
68  { -6.66238e-03, 3.86006e-02, -1.38094e-01, 5.61631e-01, 6.56621e-01, -1.45343e-01, 3.97610e-02, -6.79588e-03 },
+
69  { -6.69300e-03, 3.88151e-02, -1.39150e-01, 5.71370e-01, 6.47394e-01, -1.44963e-01, 3.97458e-02, -6.80007e-03 },
+
70  { -6.71985e-03, 3.90083e-02, -1.40136e-01, 5.81063e-01, 6.38099e-01, -1.44503e-01, 3.97077e-02, -6.80032e-03 },
+
71  { -6.74291e-03, 3.91800e-02, -1.41050e-01, 5.90706e-01, 6.28739e-01, -1.43965e-01, 3.96469e-02, -6.79662e-03 },
+
72  { -6.76214e-03, 3.93299e-02, -1.41891e-01, 6.00298e-01, 6.19318e-01, -1.43350e-01, 3.95635e-02, -6.78902e-03 },
+
73  { -6.77751e-03, 3.94578e-02, -1.42658e-01, 6.09836e-01, 6.09836e-01, -1.42658e-01, 3.94578e-02, -6.77751e-03 },
+
74  { -6.79662e-03, 3.96469e-02, -1.43965e-01, 6.28739e-01, 5.90706e-01, -1.41050e-01, 3.91800e-02, -6.74291e-03 },
+
75  { -6.80032e-03, 3.97077e-02, -1.44503e-01, 6.38099e-01, 5.81063e-01, -1.40136e-01, 3.90083e-02, -6.71985e-03 },
+
76  { -6.80007e-03, 3.97458e-02, -1.44963e-01, 6.47394e-01, 5.71370e-01, -1.39150e-01, 3.88151e-02, -6.69300e-03 },
+
77  { -6.79588e-03, 3.97610e-02, -1.45343e-01, 6.56621e-01, 5.61631e-01, -1.38094e-01, 3.86006e-02, -6.66238e-03 },
+
78  { -6.78771e-03, 3.97532e-02, -1.45641e-01, 6.65779e-01, 5.51849e-01, -1.36969e-01, 3.83650e-02, -6.62802e-03 },
+
79  { -6.77557e-03, 3.97222e-02, -1.45859e-01, 6.74865e-01, 5.42025e-01, -1.35775e-01, 3.81085e-02, -6.58996e-03 },
+
80  { -6.75943e-03, 3.96678e-02, -1.45993e-01, 6.83875e-01, 5.32164e-01, -1.34515e-01, 3.78315e-02, -6.54823e-03 },
+
81  { -6.73929e-03, 3.95900e-02, -1.46043e-01, 6.92808e-01, 5.22267e-01, -1.33190e-01, 3.75341e-02, -6.50285e-03 },
+
82  { -6.71514e-03, 3.94886e-02, -1.46009e-01, 7.01661e-01, 5.12337e-01, -1.31800e-01, 3.72167e-02, -6.45388e-03 },
+
83  { -6.68698e-03, 3.93636e-02, -1.45889e-01, 7.10431e-01, 5.02377e-01, -1.30347e-01, 3.68795e-02, -6.40135e-03 },
+
84  { -6.65479e-03, 3.92147e-02, -1.45682e-01, 7.19116e-01, 4.92389e-01, -1.28832e-01, 3.65227e-02, -6.34530e-03 },
+
85  { -6.61859e-03, 3.90420e-02, -1.45387e-01, 7.27714e-01, 4.82377e-01, -1.27258e-01, 3.61468e-02, -6.28577e-03 },
+
86  { -6.57836e-03, 3.88454e-02, -1.45004e-01, 7.36222e-01, 4.72342e-01, -1.25624e-01, 3.57519e-02, -6.22280e-03 },
+
87  { -6.53412e-03, 3.86247e-02, -1.44531e-01, 7.44637e-01, 4.62289e-01, -1.23933e-01, 3.53384e-02, -6.15644e-03 },
+
88  { -6.48585e-03, 3.83800e-02, -1.43968e-01, 7.52958e-01, 4.52218e-01, -1.22185e-01, 3.49066e-02, -6.08674e-03 },
+
89  { -6.43358e-03, 3.81111e-02, -1.43313e-01, 7.61181e-01, 4.42134e-01, -1.20382e-01, 3.44568e-02, -6.01374e-03 },
+
90  { -6.37730e-03, 3.78182e-02, -1.42566e-01, 7.69305e-01, 4.32038e-01, -1.18526e-01, 3.39894e-02, -5.93749e-03 },
+
91  { -6.31703e-03, 3.75010e-02, -1.41727e-01, 7.77327e-01, 4.21934e-01, -1.16618e-01, 3.35046e-02, -5.85804e-03 },
+
92  { -6.25277e-03, 3.71596e-02, -1.40794e-01, 7.85244e-01, 4.11823e-01, -1.14659e-01, 3.30027e-02, -5.77544e-03 },
+
93  { -6.18454e-03, 3.67941e-02, -1.39767e-01, 7.93055e-01, 4.01710e-01, -1.12650e-01, 3.24843e-02, -5.68976e-03 },
+
94  { -6.11236e-03, 3.64044e-02, -1.38644e-01, 8.00757e-01, 3.91596e-01, -1.10593e-01, 3.19495e-02, -5.60103e-03 },
+
95  { -6.03624e-03, 3.59905e-02, -1.37426e-01, 8.08348e-01, 3.81484e-01, -1.08490e-01, 3.13987e-02, -5.50931e-03 },
+
96  { -5.95620e-03, 3.55525e-02, -1.36111e-01, 8.15826e-01, 3.71376e-01, -1.06342e-01, 3.08323e-02, -5.41467e-03 },
+
97  { -5.87227e-03, 3.50903e-02, -1.34699e-01, 8.23188e-01, 3.61276e-01, -1.04150e-01, 3.02507e-02, -5.31716e-03 },
+
98  { -5.78446e-03, 3.46042e-02, -1.33189e-01, 8.30432e-01, 3.51186e-01, -1.01915e-01, 2.96543e-02, -5.21683e-03 },
+
99  { -5.69280e-03, 3.40940e-02, -1.31581e-01, 8.37557e-01, 3.41109e-01, -9.96402e-02, 2.90433e-02, -5.11376e-03 },
+
100  { -5.59731e-03, 3.35600e-02, -1.29874e-01, 8.44559e-01, 3.31048e-01, -9.73254e-02, 2.84182e-02, -5.00800e-03 },
+
101  { -5.49804e-03, 3.30021e-02, -1.28068e-01, 8.51437e-01, 3.21004e-01, -9.49727e-02, 2.77794e-02, -4.89961e-03 },
+
102  { -5.39500e-03, 3.24205e-02, -1.26161e-01, 8.58189e-01, 3.10980e-01, -9.25834e-02, 2.71272e-02, -4.78866e-03 },
+
103  { -5.28823e-03, 3.18153e-02, -1.24154e-01, 8.64812e-01, 3.00980e-01, -9.01591e-02, 2.64621e-02, -4.67520e-03 },
+
104  { -5.17776e-03, 3.11866e-02, -1.22047e-01, 8.71305e-01, 2.91006e-01, -8.77011e-02, 2.57844e-02, -4.55932e-03 },
+
105  { -5.06363e-03, 3.05345e-02, -1.19837e-01, 8.77666e-01, 2.81060e-01, -8.52109e-02, 2.50946e-02, -4.44107e-03 },
+
106  { -4.94589e-03, 2.98593e-02, -1.17526e-01, 8.83893e-01, 2.71144e-01, -8.26900e-02, 2.43930e-02, -4.32052e-03 },
+
107  { -4.82456e-03, 2.91609e-02, -1.15113e-01, 8.89984e-01, 2.61263e-01, -8.01399e-02, 2.36801e-02, -4.19774e-03 },
+
108  { -4.69970e-03, 2.84397e-02, -1.12597e-01, 8.95936e-01, 2.51417e-01, -7.75620e-02, 2.29562e-02, -4.07279e-03 },
+
109  { -4.57135e-03, 2.76957e-02, -1.09978e-01, 9.01749e-01, 2.41609e-01, -7.49577e-02, 2.22218e-02, -3.94576e-03 },
+
110  { -4.43955e-03, 2.69293e-02, -1.07256e-01, 9.07420e-01, 2.31843e-01, -7.23286e-02, 2.14774e-02, -3.81671e-03 },
+
111  { -4.30435e-03, 2.61404e-02, -1.04430e-01, 9.12947e-01, 2.22120e-01, -6.96762e-02, 2.07233e-02, -3.68570e-03 },
+
112  { -4.16581e-03, 2.53295e-02, -1.01501e-01, 9.18329e-01, 2.12443e-01, -6.70018e-02, 1.99599e-02, -3.55283e-03 },
+
113  { -4.02397e-03, 2.44967e-02, -9.84679e-02, 9.23564e-01, 2.02814e-01, -6.43069e-02, 1.91877e-02, -3.41815e-03 },
+
114  { -3.87888e-03, 2.36423e-02, -9.53307e-02, 9.28650e-01, 1.93236e-01, -6.15931e-02, 1.84071e-02, -3.28174e-03 },
+
115  { -3.73062e-03, 2.27664e-02, -9.20893e-02, 9.33586e-01, 1.83711e-01, -5.88617e-02, 1.76185e-02, -3.14367e-03 },
+
116  { -3.57923e-03, 2.18695e-02, -8.87435e-02, 9.38371e-01, 1.74242e-01, -5.61142e-02, 1.68225e-02, -3.00403e-03 },
+
117  { -3.42477e-03, 2.09516e-02, -8.52933e-02, 9.43001e-01, 1.64831e-01, -5.33522e-02, 1.60193e-02, -2.86289e-03 },
+
118  { -3.26730e-03, 2.00132e-02, -8.17385e-02, 9.47477e-01, 1.55480e-01, -5.05770e-02, 1.52095e-02, -2.72032e-03 },
+
119  { -3.10689e-03, 1.90545e-02, -7.80792e-02, 9.51795e-01, 1.46192e-01, -4.77900e-02, 1.43934e-02, -2.57640e-03 },
+
120  { -2.94361e-03, 1.80759e-02, -7.43154e-02, 9.55956e-01, 1.36968e-01, -4.49929e-02, 1.35716e-02, -2.43121e-03 },
+
121  { -2.77751e-03, 1.70776e-02, -7.04471e-02, 9.59958e-01, 1.27812e-01, -4.21869e-02, 1.27445e-02, -2.28483e-03 },
+
122  { -2.60868e-03, 1.60599e-02, -6.64743e-02, 9.63798e-01, 1.18725e-01, -3.93735e-02, 1.19125e-02, -2.13733e-03 },
+
123  { -2.43718e-03, 1.50233e-02, -6.23972e-02, 9.67477e-01, 1.09710e-01, -3.65541e-02, 1.10760e-02, -1.98880e-03 },
+
124  { -2.26307e-03, 1.39681e-02, -5.82159e-02, 9.70992e-01, 1.00769e-01, -3.37303e-02, 1.02356e-02, -1.83931e-03 },
+
125  { -2.08645e-03, 1.28947e-02, -5.39305e-02, 9.74342e-01, 9.19033e-02, -3.09033e-02, 9.39154e-03, -1.68894e-03 },
+
126  { -1.90738e-03, 1.18034e-02, -4.95412e-02, 9.77526e-01, 8.31162e-02, -2.80746e-02, 8.54441e-03, -1.53777e-03 },
+
127  { -1.72594e-03, 1.06946e-02, -4.50483e-02, 9.80543e-01, 7.44095e-02, -2.52457e-02, 7.69462e-03, -1.38589e-03 },
+
128  { -1.54221e-03, 9.56876e-03, -4.04519e-02, 9.83392e-01, 6.57852e-02, -2.24178e-02, 6.84261e-03, -1.23337e-03 },
+
129  { -1.35627e-03, 8.42626e-03, -3.57525e-02, 9.86071e-01, 5.72454e-02, -1.95925e-02, 5.98883e-03, -1.08030e-03 },
+
130  { -1.16820e-03, 7.26755e-03, -3.09503e-02, 9.88580e-01, 4.87921e-02, -1.67710e-02, 5.13372e-03, -9.26747e-04 },
+
131  { -9.78093e-04, 6.09305e-03, -2.60456e-02, 9.90917e-01, 4.04274e-02, -1.39548e-02, 4.27773e-03, -7.72802e-04 },
+
132  { -7.86031e-04, 4.90322e-03, -2.10389e-02, 9.93082e-01, 3.21531e-02, -1.11453e-02, 3.42130e-03, -6.18544e-04 },
+
133  { -5.92100e-04, 3.69852e-03, -1.59305e-02, 9.95074e-01, 2.39714e-02, -8.34364e-03, 2.56486e-03, -4.64053e-04 },
+
134  { -3.96391e-04, 2.47942e-03, -1.07209e-02, 9.96891e-01, 1.58840e-02, -5.55134e-03, 1.70888e-03, -3.09412e-04 },
+
135  { -1.98993e-04, 1.24642e-03, -5.41054e-03, 9.98534e-01, 7.89295e-03, -2.76968e-03, 8.53777e-04, -1.54700e-04 },
+
136  { 0.00000e+00, 0.00000e+00, 0.00000e+00, 1.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00 },
+
137 };
+
138 
+
139 
+
140 template <class Scalar>
+
141 static inline Scalar interpolate(const Buffer<Scalar> &in, float mu) {
+
142  Scalar out = 0;
+
143  const float *filter = interpolate_taps[int(roundf(mu*128))];
+
144  for (size_t i=0; i<8; i++) { out += in[i]*filter[i]; }
+
145  return Scalar(out);
+
146 }
+
147 
+
148 }
+
149 
+
150 #endif // __SDR_INTERPOLATE_HH__
+
+ + + + diff --git a/jquery.js b/jquery.js new file mode 100644 index 0000000..c197801 --- /dev/null +++ b/jquery.js @@ -0,0 +1,31 @@ +/*! + * jQuery JavaScript Library v1.7.1 + * http://jquery.com/ + * + * Copyright 2011, John Resig + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * Includes Sizzle.js + * http://sizzlejs.com/ + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * + * Date: Mon Nov 21 21:11:03 2011 -0500 + */ +(function(bb,L){var av=bb.document,bu=bb.navigator,bl=bb.location;var b=(function(){var bF=function(b0,b1){return new bF.fn.init(b0,b1,bD)},bU=bb.jQuery,bH=bb.$,bD,bY=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,bM=/\S/,bI=/^\s+/,bE=/\s+$/,bA=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,bN=/^[\],:{}\s]*$/,bW=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,bP=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,bJ=/(?:^|:|,)(?:\s*\[)+/g,by=/(webkit)[ \/]([\w.]+)/,bR=/(opera)(?:.*version)?[ \/]([\w.]+)/,bQ=/(msie) ([\w.]+)/,bS=/(mozilla)(?:.*? rv:([\w.]+))?/,bB=/-([a-z]|[0-9])/ig,bZ=/^-ms-/,bT=function(b0,b1){return(b1+"").toUpperCase()},bX=bu.userAgent,bV,bC,e,bL=Object.prototype.toString,bG=Object.prototype.hasOwnProperty,bz=Array.prototype.push,bK=Array.prototype.slice,bO=String.prototype.trim,bv=Array.prototype.indexOf,bx={};bF.fn=bF.prototype={constructor:bF,init:function(b0,b4,b3){var b2,b5,b1,b6;if(!b0){return this}if(b0.nodeType){this.context=this[0]=b0;this.length=1;return this}if(b0==="body"&&!b4&&av.body){this.context=av;this[0]=av.body;this.selector=b0;this.length=1;return this}if(typeof b0==="string"){if(b0.charAt(0)==="<"&&b0.charAt(b0.length-1)===">"&&b0.length>=3){b2=[null,b0,null]}else{b2=bY.exec(b0)}if(b2&&(b2[1]||!b4)){if(b2[1]){b4=b4 instanceof bF?b4[0]:b4;b6=(b4?b4.ownerDocument||b4:av);b1=bA.exec(b0);if(b1){if(bF.isPlainObject(b4)){b0=[av.createElement(b1[1])];bF.fn.attr.call(b0,b4,true)}else{b0=[b6.createElement(b1[1])]}}else{b1=bF.buildFragment([b2[1]],[b6]);b0=(b1.cacheable?bF.clone(b1.fragment):b1.fragment).childNodes}return bF.merge(this,b0)}else{b5=av.getElementById(b2[2]);if(b5&&b5.parentNode){if(b5.id!==b2[2]){return b3.find(b0)}this.length=1;this[0]=b5}this.context=av;this.selector=b0;return this}}else{if(!b4||b4.jquery){return(b4||b3).find(b0)}else{return this.constructor(b4).find(b0)}}}else{if(bF.isFunction(b0)){return b3.ready(b0)}}if(b0.selector!==L){this.selector=b0.selector;this.context=b0.context}return bF.makeArray(b0,this)},selector:"",jquery:"1.7.1",length:0,size:function(){return this.length},toArray:function(){return bK.call(this,0)},get:function(b0){return b0==null?this.toArray():(b0<0?this[this.length+b0]:this[b0])},pushStack:function(b1,b3,b0){var b2=this.constructor();if(bF.isArray(b1)){bz.apply(b2,b1)}else{bF.merge(b2,b1)}b2.prevObject=this;b2.context=this.context;if(b3==="find"){b2.selector=this.selector+(this.selector?" ":"")+b0}else{if(b3){b2.selector=this.selector+"."+b3+"("+b0+")"}}return b2},each:function(b1,b0){return bF.each(this,b1,b0)},ready:function(b0){bF.bindReady();bC.add(b0);return this},eq:function(b0){b0=+b0;return b0===-1?this.slice(b0):this.slice(b0,b0+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(bK.apply(this,arguments),"slice",bK.call(arguments).join(","))},map:function(b0){return this.pushStack(bF.map(this,function(b2,b1){return b0.call(b2,b1,b2)}))},end:function(){return this.prevObject||this.constructor(null)},push:bz,sort:[].sort,splice:[].splice};bF.fn.init.prototype=bF.fn;bF.extend=bF.fn.extend=function(){var b9,b2,b0,b1,b6,b7,b5=arguments[0]||{},b4=1,b3=arguments.length,b8=false;if(typeof b5==="boolean"){b8=b5;b5=arguments[1]||{};b4=2}if(typeof b5!=="object"&&!bF.isFunction(b5)){b5={}}if(b3===b4){b5=this;--b4}for(;b40){return}bC.fireWith(av,[bF]);if(bF.fn.trigger){bF(av).trigger("ready").off("ready")}}},bindReady:function(){if(bC){return}bC=bF.Callbacks("once memory");if(av.readyState==="complete"){return setTimeout(bF.ready,1)}if(av.addEventListener){av.addEventListener("DOMContentLoaded",e,false);bb.addEventListener("load",bF.ready,false)}else{if(av.attachEvent){av.attachEvent("onreadystatechange",e);bb.attachEvent("onload",bF.ready);var b0=false;try{b0=bb.frameElement==null}catch(b1){}if(av.documentElement.doScroll&&b0){bw()}}}},isFunction:function(b0){return bF.type(b0)==="function"},isArray:Array.isArray||function(b0){return bF.type(b0)==="array"},isWindow:function(b0){return b0&&typeof b0==="object"&&"setInterval" in b0},isNumeric:function(b0){return !isNaN(parseFloat(b0))&&isFinite(b0)},type:function(b0){return b0==null?String(b0):bx[bL.call(b0)]||"object"},isPlainObject:function(b2){if(!b2||bF.type(b2)!=="object"||b2.nodeType||bF.isWindow(b2)){return false}try{if(b2.constructor&&!bG.call(b2,"constructor")&&!bG.call(b2.constructor.prototype,"isPrototypeOf")){return false}}catch(b1){return false}var b0;for(b0 in b2){}return b0===L||bG.call(b2,b0)},isEmptyObject:function(b1){for(var b0 in b1){return false}return true},error:function(b0){throw new Error(b0)},parseJSON:function(b0){if(typeof b0!=="string"||!b0){return null}b0=bF.trim(b0);if(bb.JSON&&bb.JSON.parse){return bb.JSON.parse(b0)}if(bN.test(b0.replace(bW,"@").replace(bP,"]").replace(bJ,""))){return(new Function("return "+b0))()}bF.error("Invalid JSON: "+b0)},parseXML:function(b2){var b0,b1;try{if(bb.DOMParser){b1=new DOMParser();b0=b1.parseFromString(b2,"text/xml")}else{b0=new ActiveXObject("Microsoft.XMLDOM");b0.async="false";b0.loadXML(b2)}}catch(b3){b0=L}if(!b0||!b0.documentElement||b0.getElementsByTagName("parsererror").length){bF.error("Invalid XML: "+b2)}return b0},noop:function(){},globalEval:function(b0){if(b0&&bM.test(b0)){(bb.execScript||function(b1){bb["eval"].call(bb,b1)})(b0)}},camelCase:function(b0){return b0.replace(bZ,"ms-").replace(bB,bT)},nodeName:function(b1,b0){return b1.nodeName&&b1.nodeName.toUpperCase()===b0.toUpperCase()},each:function(b3,b6,b2){var b1,b4=0,b5=b3.length,b0=b5===L||bF.isFunction(b3);if(b2){if(b0){for(b1 in b3){if(b6.apply(b3[b1],b2)===false){break}}}else{for(;b40&&b0[0]&&b0[b1-1])||b1===0||bF.isArray(b0));if(b3){for(;b21?aJ.call(arguments,0):bG;if(!(--bw)){bC.resolveWith(bC,bx)}}}function bz(bF){return function(bG){bB[bF]=arguments.length>1?aJ.call(arguments,0):bG;bC.notifyWith(bE,bB)}}if(e>1){for(;bv
a";bI=bv.getElementsByTagName("*");bF=bv.getElementsByTagName("a")[0];if(!bI||!bI.length||!bF){return{}}bG=av.createElement("select");bx=bG.appendChild(av.createElement("option"));bE=bv.getElementsByTagName("input")[0];bJ={leadingWhitespace:(bv.firstChild.nodeType===3),tbody:!bv.getElementsByTagName("tbody").length,htmlSerialize:!!bv.getElementsByTagName("link").length,style:/top/.test(bF.getAttribute("style")),hrefNormalized:(bF.getAttribute("href")==="/a"),opacity:/^0.55/.test(bF.style.opacity),cssFloat:!!bF.style.cssFloat,checkOn:(bE.value==="on"),optSelected:bx.selected,getSetAttribute:bv.className!=="t",enctype:!!av.createElement("form").enctype,html5Clone:av.createElement("nav").cloneNode(true).outerHTML!=="<:nav>",submitBubbles:true,changeBubbles:true,focusinBubbles:false,deleteExpando:true,noCloneEvent:true,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableMarginRight:true};bE.checked=true;bJ.noCloneChecked=bE.cloneNode(true).checked;bG.disabled=true;bJ.optDisabled=!bx.disabled;try{delete bv.test}catch(bC){bJ.deleteExpando=false}if(!bv.addEventListener&&bv.attachEvent&&bv.fireEvent){bv.attachEvent("onclick",function(){bJ.noCloneEvent=false});bv.cloneNode(true).fireEvent("onclick")}bE=av.createElement("input");bE.value="t";bE.setAttribute("type","radio");bJ.radioValue=bE.value==="t";bE.setAttribute("checked","checked");bv.appendChild(bE);bD=av.createDocumentFragment();bD.appendChild(bv.lastChild);bJ.checkClone=bD.cloneNode(true).cloneNode(true).lastChild.checked;bJ.appendChecked=bE.checked;bD.removeChild(bE);bD.appendChild(bv);bv.innerHTML="";if(bb.getComputedStyle){bA=av.createElement("div");bA.style.width="0";bA.style.marginRight="0";bv.style.width="2px";bv.appendChild(bA);bJ.reliableMarginRight=(parseInt((bb.getComputedStyle(bA,null)||{marginRight:0}).marginRight,10)||0)===0}if(bv.attachEvent){for(by in {submit:1,change:1,focusin:1}){bB="on"+by;bw=(bB in bv);if(!bw){bv.setAttribute(bB,"return;");bw=(typeof bv[bB]==="function")}bJ[by+"Bubbles"]=bw}}bD.removeChild(bv);bD=bG=bx=bA=bv=bE=null;b(function(){var bM,bU,bV,bT,bN,bO,bL,bS,bR,e,bP,bQ=av.getElementsByTagName("body")[0];if(!bQ){return}bL=1;bS="position:absolute;top:0;left:0;width:1px;height:1px;margin:0;";bR="visibility:hidden;border:0;";e="style='"+bS+"border:5px solid #000;padding:0;'";bP="
";bM=av.createElement("div");bM.style.cssText=bR+"width:0;height:0;position:static;top:0;margin-top:"+bL+"px";bQ.insertBefore(bM,bQ.firstChild);bv=av.createElement("div");bM.appendChild(bv);bv.innerHTML="
t
";bz=bv.getElementsByTagName("td");bw=(bz[0].offsetHeight===0);bz[0].style.display="";bz[1].style.display="none";bJ.reliableHiddenOffsets=bw&&(bz[0].offsetHeight===0);bv.innerHTML="";bv.style.width=bv.style.paddingLeft="1px";b.boxModel=bJ.boxModel=bv.offsetWidth===2;if(typeof bv.style.zoom!=="undefined"){bv.style.display="inline";bv.style.zoom=1;bJ.inlineBlockNeedsLayout=(bv.offsetWidth===2);bv.style.display="";bv.innerHTML="
";bJ.shrinkWrapBlocks=(bv.offsetWidth!==2)}bv.style.cssText=bS+bR;bv.innerHTML=bP;bU=bv.firstChild;bV=bU.firstChild;bN=bU.nextSibling.firstChild.firstChild;bO={doesNotAddBorder:(bV.offsetTop!==5),doesAddBorderForTableAndCells:(bN.offsetTop===5)};bV.style.position="fixed";bV.style.top="20px";bO.fixedPosition=(bV.offsetTop===20||bV.offsetTop===15);bV.style.position=bV.style.top="";bU.style.overflow="hidden";bU.style.position="relative";bO.subtractsBorderForOverflowNotVisible=(bV.offsetTop===-5);bO.doesNotIncludeMarginInBodyOffset=(bQ.offsetTop!==bL);bQ.removeChild(bM);bv=bM=null;b.extend(bJ,bO)});return bJ})();var aS=/^(?:\{.*\}|\[.*\])$/,aA=/([A-Z])/g;b.extend({cache:{},uuid:0,expando:"jQuery"+(b.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},hasData:function(e){e=e.nodeType?b.cache[e[b.expando]]:e[b.expando];return !!e&&!S(e)},data:function(bx,bv,bz,by){if(!b.acceptData(bx)){return}var bG,bA,bD,bE=b.expando,bC=typeof bv==="string",bF=bx.nodeType,e=bF?b.cache:bx,bw=bF?bx[bE]:bx[bE]&&bE,bB=bv==="events";if((!bw||!e[bw]||(!bB&&!by&&!e[bw].data))&&bC&&bz===L){return}if(!bw){if(bF){bx[bE]=bw=++b.uuid}else{bw=bE}}if(!e[bw]){e[bw]={};if(!bF){e[bw].toJSON=b.noop}}if(typeof bv==="object"||typeof bv==="function"){if(by){e[bw]=b.extend(e[bw],bv)}else{e[bw].data=b.extend(e[bw].data,bv)}}bG=bA=e[bw];if(!by){if(!bA.data){bA.data={}}bA=bA.data}if(bz!==L){bA[b.camelCase(bv)]=bz}if(bB&&!bA[bv]){return bG.events}if(bC){bD=bA[bv];if(bD==null){bD=bA[b.camelCase(bv)]}}else{bD=bA}return bD},removeData:function(bx,bv,by){if(!b.acceptData(bx)){return}var bB,bA,bz,bC=b.expando,bD=bx.nodeType,e=bD?b.cache:bx,bw=bD?bx[bC]:bC;if(!e[bw]){return}if(bv){bB=by?e[bw]:e[bw].data;if(bB){if(!b.isArray(bv)){if(bv in bB){bv=[bv]}else{bv=b.camelCase(bv);if(bv in bB){bv=[bv]}else{bv=bv.split(" ")}}}for(bA=0,bz=bv.length;bA-1){return true}}return false},val:function(bx){var e,bv,by,bw=this[0];if(!arguments.length){if(bw){e=b.valHooks[bw.nodeName.toLowerCase()]||b.valHooks[bw.type];if(e&&"get" in e&&(bv=e.get(bw,"value"))!==L){return bv}bv=bw.value;return typeof bv==="string"?bv.replace(aU,""):bv==null?"":bv}return}by=b.isFunction(bx);return this.each(function(bA){var bz=b(this),bB;if(this.nodeType!==1){return}if(by){bB=bx.call(this,bA,bz.val())}else{bB=bx}if(bB==null){bB=""}else{if(typeof bB==="number"){bB+=""}else{if(b.isArray(bB)){bB=b.map(bB,function(bC){return bC==null?"":bC+""})}}}e=b.valHooks[this.nodeName.toLowerCase()]||b.valHooks[this.type];if(!e||!("set" in e)||e.set(this,bB,"value")===L){this.value=bB}})}});b.extend({valHooks:{option:{get:function(e){var bv=e.attributes.value;return !bv||bv.specified?e.value:e.text}},select:{get:function(e){var bA,bv,bz,bx,by=e.selectedIndex,bB=[],bC=e.options,bw=e.type==="select-one";if(by<0){return null}bv=bw?by:0;bz=bw?by+1:bC.length;for(;bv=0});if(!e.length){bv.selectedIndex=-1}return e}}},attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(bA,bx,bB,bz){var bw,e,by,bv=bA.nodeType; +if(!bA||bv===3||bv===8||bv===2){return}if(bz&&bx in b.attrFn){return b(bA)[bx](bB)}if(typeof bA.getAttribute==="undefined"){return b.prop(bA,bx,bB)}by=bv!==1||!b.isXMLDoc(bA);if(by){bx=bx.toLowerCase();e=b.attrHooks[bx]||(ao.test(bx)?aY:be)}if(bB!==L){if(bB===null){b.removeAttr(bA,bx);return}else{if(e&&"set" in e&&by&&(bw=e.set(bA,bB,bx))!==L){return bw}else{bA.setAttribute(bx,""+bB);return bB}}}else{if(e&&"get" in e&&by&&(bw=e.get(bA,bx))!==null){return bw}else{bw=bA.getAttribute(bx);return bw===null?L:bw}}},removeAttr:function(bx,bz){var by,bA,bv,e,bw=0;if(bz&&bx.nodeType===1){bA=bz.toLowerCase().split(af);e=bA.length;for(;bw=0)}}})});var bd=/^(?:textarea|input|select)$/i,n=/^([^\.]*)?(?:\.(.+))?$/,J=/\bhover(\.\S+)?\b/,aO=/^key/,bf=/^(?:mouse|contextmenu)|click/,T=/^(?:focusinfocus|focusoutblur)$/,U=/^(\w*)(?:#([\w\-]+))?(?:\.([\w\-]+))?$/,Y=function(e){var bv=U.exec(e);if(bv){bv[1]=(bv[1]||"").toLowerCase();bv[3]=bv[3]&&new RegExp("(?:^|\\s)"+bv[3]+"(?:\\s|$)")}return bv},j=function(bw,e){var bv=bw.attributes||{};return((!e[1]||bw.nodeName.toLowerCase()===e[1])&&(!e[2]||(bv.id||{}).value===e[2])&&(!e[3]||e[3].test((bv["class"]||{}).value)))},bt=function(e){return b.event.special.hover?e:e.replace(J,"mouseenter$1 mouseleave$1")};b.event={add:function(bx,bC,bJ,bA,by){var bD,bB,bK,bI,bH,bF,e,bG,bv,bz,bw,bE;if(bx.nodeType===3||bx.nodeType===8||!bC||!bJ||!(bD=b._data(bx))){return}if(bJ.handler){bv=bJ;bJ=bv.handler}if(!bJ.guid){bJ.guid=b.guid++}bK=bD.events;if(!bK){bD.events=bK={}}bB=bD.handle;if(!bB){bD.handle=bB=function(bL){return typeof b!=="undefined"&&(!bL||b.event.triggered!==bL.type)?b.event.dispatch.apply(bB.elem,arguments):L};bB.elem=bx}bC=b.trim(bt(bC)).split(" ");for(bI=0;bI=0){bG=bG.slice(0,-1);bw=true}if(bG.indexOf(".")>=0){bx=bG.split(".");bG=bx.shift();bx.sort()}if((!bA||b.event.customEvent[bG])&&!b.event.global[bG]){return}bv=typeof bv==="object"?bv[b.expando]?bv:new b.Event(bG,bv):new b.Event(bG);bv.type=bG;bv.isTrigger=true;bv.exclusive=bw;bv.namespace=bx.join(".");bv.namespace_re=bv.namespace?new RegExp("(^|\\.)"+bx.join("\\.(?:.*\\.)?")+"(\\.|$)"):null;by=bG.indexOf(":")<0?"on"+bG:"";if(!bA){e=b.cache;for(bC in e){if(e[bC].events&&e[bC].events[bG]){b.event.trigger(bv,bD,e[bC].handle.elem,true)}}return}bv.result=L;if(!bv.target){bv.target=bA}bD=bD!=null?b.makeArray(bD):[];bD.unshift(bv);bF=b.event.special[bG]||{};if(bF.trigger&&bF.trigger.apply(bA,bD)===false){return}bB=[[bA,bF.bindType||bG]];if(!bJ&&!bF.noBubble&&!b.isWindow(bA)){bI=bF.delegateType||bG;bH=T.test(bI+bG)?bA:bA.parentNode;bz=null;for(;bH;bH=bH.parentNode){bB.push([bH,bI]);bz=bH}if(bz&&bz===bA.ownerDocument){bB.push([bz.defaultView||bz.parentWindow||bb,bI])}}for(bC=0;bCbA){bH.push({elem:this,matches:bz.slice(bA)})}for(bC=0;bC0?this.on(e,null,bx,bw):this.trigger(e)};if(b.attrFn){b.attrFn[e]=true}if(aO.test(e)){b.event.fixHooks[e]=b.event.keyHooks}if(bf.test(e)){b.event.fixHooks[e]=b.event.mouseHooks}}); +/*! + * Sizzle CSS Selector Engine + * Copyright 2011, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var bH=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,bC="sizcache"+(Math.random()+"").replace(".",""),bI=0,bL=Object.prototype.toString,bB=false,bA=true,bK=/\\/g,bO=/\r\n/g,bQ=/\W/;[0,0].sort(function(){bA=false;return 0});var by=function(bV,e,bY,bZ){bY=bY||[];e=e||av;var b1=e;if(e.nodeType!==1&&e.nodeType!==9){return[]}if(!bV||typeof bV!=="string"){return bY}var bS,b3,b6,bR,b2,b5,b4,bX,bU=true,bT=by.isXML(e),bW=[],b0=bV;do{bH.exec("");bS=bH.exec(b0);if(bS){b0=bS[3];bW.push(bS[1]);if(bS[2]){bR=bS[3];break}}}while(bS);if(bW.length>1&&bD.exec(bV)){if(bW.length===2&&bE.relative[bW[0]]){b3=bM(bW[0]+bW[1],e,bZ)}else{b3=bE.relative[bW[0]]?[e]:by(bW.shift(),e);while(bW.length){bV=bW.shift();if(bE.relative[bV]){bV+=bW.shift()}b3=bM(bV,b3,bZ)}}}else{if(!bZ&&bW.length>1&&e.nodeType===9&&!bT&&bE.match.ID.test(bW[0])&&!bE.match.ID.test(bW[bW.length-1])){b2=by.find(bW.shift(),e,bT);e=b2.expr?by.filter(b2.expr,b2.set)[0]:b2.set[0]}if(e){b2=bZ?{expr:bW.pop(),set:bF(bZ)}:by.find(bW.pop(),bW.length===1&&(bW[0]==="~"||bW[0]==="+")&&e.parentNode?e.parentNode:e,bT);b3=b2.expr?by.filter(b2.expr,b2.set):b2.set;if(bW.length>0){b6=bF(b3)}else{bU=false}while(bW.length){b5=bW.pop();b4=b5;if(!bE.relative[b5]){b5=""}else{b4=bW.pop()}if(b4==null){b4=e}bE.relative[b5](b6,b4,bT)}}else{b6=bW=[]}}if(!b6){b6=b3}if(!b6){by.error(b5||bV)}if(bL.call(b6)==="[object Array]"){if(!bU){bY.push.apply(bY,b6)}else{if(e&&e.nodeType===1){for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&(b6[bX]===true||b6[bX].nodeType===1&&by.contains(e,b6[bX]))){bY.push(b3[bX])}}}else{for(bX=0;b6[bX]!=null;bX++){if(b6[bX]&&b6[bX].nodeType===1){bY.push(b3[bX])}}}}}else{bF(b6,bY)}if(bR){by(bR,b1,bY,bZ);by.uniqueSort(bY)}return bY};by.uniqueSort=function(bR){if(bJ){bB=bA;bR.sort(bJ);if(bB){for(var e=1;e0};by.find=function(bX,e,bY){var bW,bS,bU,bT,bV,bR;if(!bX){return[]}for(bS=0,bU=bE.order.length;bS":function(bW,bR){var bV,bU=typeof bR==="string",bS=0,e=bW.length;if(bU&&!bQ.test(bR)){bR=bR.toLowerCase();for(;bS=0)){if(!bS){e.push(bV)}}else{if(bS){bR[bU]=false}}}}return false},ID:function(e){return e[1].replace(bK,"")},TAG:function(bR,e){return bR[1].replace(bK,"").toLowerCase()},CHILD:function(e){if(e[1]==="nth"){if(!e[2]){by.error(e[0])}e[2]=e[2].replace(/^\+|\s*/g,"");var bR=/(-?)(\d*)(?:n([+\-]?\d*))?/.exec(e[2]==="even"&&"2n"||e[2]==="odd"&&"2n+1"||!/\D/.test(e[2])&&"0n+"+e[2]||e[2]);e[2]=(bR[1]+(bR[2]||1))-0;e[3]=bR[3]-0}else{if(e[2]){by.error(e[0])}}e[0]=bI++;return e},ATTR:function(bU,bR,bS,e,bV,bW){var bT=bU[1]=bU[1].replace(bK,"");if(!bW&&bE.attrMap[bT]){bU[1]=bE.attrMap[bT]}bU[4]=(bU[4]||bU[5]||"").replace(bK,"");if(bU[2]==="~="){bU[4]=" "+bU[4]+" "}return bU},PSEUDO:function(bU,bR,bS,e,bV){if(bU[1]==="not"){if((bH.exec(bU[3])||"").length>1||/^\w/.test(bU[3])){bU[3]=by(bU[3],null,null,bR)}else{var bT=by.filter(bU[3],bR,bS,true^bV);if(!bS){e.push.apply(e,bT)}return false}}else{if(bE.match.POS.test(bU[0])||bE.match.CHILD.test(bU[0])){return true}}return bU},POS:function(e){e.unshift(true);return e}},filters:{enabled:function(e){return e.disabled===false&&e.type!=="hidden"},disabled:function(e){return e.disabled===true},checked:function(e){return e.checked===true},selected:function(e){if(e.parentNode){e.parentNode.selectedIndex}return e.selected===true},parent:function(e){return !!e.firstChild},empty:function(e){return !e.firstChild},has:function(bS,bR,e){return !!by(e[3],bS).length},header:function(e){return(/h\d/i).test(e.nodeName)},text:function(bS){var e=bS.getAttribute("type"),bR=bS.type;return bS.nodeName.toLowerCase()==="input"&&"text"===bR&&(e===bR||e===null)},radio:function(e){return e.nodeName.toLowerCase()==="input"&&"radio"===e.type},checkbox:function(e){return e.nodeName.toLowerCase()==="input"&&"checkbox"===e.type},file:function(e){return e.nodeName.toLowerCase()==="input"&&"file"===e.type},password:function(e){return e.nodeName.toLowerCase()==="input"&&"password"===e.type},submit:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"submit"===bR.type},image:function(e){return e.nodeName.toLowerCase()==="input"&&"image"===e.type},reset:function(bR){var e=bR.nodeName.toLowerCase();return(e==="input"||e==="button")&&"reset"===bR.type},button:function(bR){var e=bR.nodeName.toLowerCase();return e==="input"&&"button"===bR.type||e==="button"},input:function(e){return(/input|select|textarea|button/i).test(e.nodeName)},focus:function(e){return e===e.ownerDocument.activeElement}},setFilters:{first:function(bR,e){return e===0},last:function(bS,bR,e,bT){return bR===bT.length-1},even:function(bR,e){return e%2===0},odd:function(bR,e){return e%2===1 +},lt:function(bS,bR,e){return bRe[3]-0},nth:function(bS,bR,e){return e[3]-0===bR},eq:function(bS,bR,e){return e[3]-0===bR}},filter:{PSEUDO:function(bS,bX,bW,bY){var e=bX[1],bR=bE.filters[e];if(bR){return bR(bS,bW,bX,bY)}else{if(e==="contains"){return(bS.textContent||bS.innerText||bw([bS])||"").indexOf(bX[3])>=0}else{if(e==="not"){var bT=bX[3];for(var bV=0,bU=bT.length;bV=0)}}},ID:function(bR,e){return bR.nodeType===1&&bR.getAttribute("id")===e},TAG:function(bR,e){return(e==="*"&&bR.nodeType===1)||!!bR.nodeName&&bR.nodeName.toLowerCase()===e},CLASS:function(bR,e){return(" "+(bR.className||bR.getAttribute("class"))+" ").indexOf(e)>-1},ATTR:function(bV,bT){var bS=bT[1],e=by.attr?by.attr(bV,bS):bE.attrHandle[bS]?bE.attrHandle[bS](bV):bV[bS]!=null?bV[bS]:bV.getAttribute(bS),bW=e+"",bU=bT[2],bR=bT[4];return e==null?bU==="!=":!bU&&by.attr?e!=null:bU==="="?bW===bR:bU==="*="?bW.indexOf(bR)>=0:bU==="~="?(" "+bW+" ").indexOf(bR)>=0:!bR?bW&&e!==false:bU==="!="?bW!==bR:bU==="^="?bW.indexOf(bR)===0:bU==="$="?bW.substr(bW.length-bR.length)===bR:bU==="|="?bW===bR||bW.substr(0,bR.length+1)===bR+"-":false},POS:function(bU,bR,bS,bV){var e=bR[2],bT=bE.setFilters[e];if(bT){return bT(bU,bS,bR,bV)}}}};var bD=bE.match.POS,bx=function(bR,e){return"\\"+(e-0+1)};for(var bz in bE.match){bE.match[bz]=new RegExp(bE.match[bz].source+(/(?![^\[]*\])(?![^\(]*\))/.source));bE.leftMatch[bz]=new RegExp(/(^(?:.|\r|\n)*?)/.source+bE.match[bz].source.replace(/\\(\d+)/g,bx))}var bF=function(bR,e){bR=Array.prototype.slice.call(bR,0);if(e){e.push.apply(e,bR);return e}return bR};try{Array.prototype.slice.call(av.documentElement.childNodes,0)[0].nodeType}catch(bP){bF=function(bU,bT){var bS=0,bR=bT||[];if(bL.call(bU)==="[object Array]"){Array.prototype.push.apply(bR,bU)}else{if(typeof bU.length==="number"){for(var e=bU.length;bS";e.insertBefore(bR,e.firstChild);if(av.getElementById(bS)){bE.find.ID=function(bU,bV,bW){if(typeof bV.getElementById!=="undefined"&&!bW){var bT=bV.getElementById(bU[1]);return bT?bT.id===bU[1]||typeof bT.getAttributeNode!=="undefined"&&bT.getAttributeNode("id").nodeValue===bU[1]?[bT]:L:[]}};bE.filter.ID=function(bV,bT){var bU=typeof bV.getAttributeNode!=="undefined"&&bV.getAttributeNode("id");return bV.nodeType===1&&bU&&bU.nodeValue===bT}}e.removeChild(bR);e=bR=null})();(function(){var e=av.createElement("div");e.appendChild(av.createComment(""));if(e.getElementsByTagName("*").length>0){bE.find.TAG=function(bR,bV){var bU=bV.getElementsByTagName(bR[1]);if(bR[1]==="*"){var bT=[];for(var bS=0;bU[bS];bS++){if(bU[bS].nodeType===1){bT.push(bU[bS])}}bU=bT}return bU}}e.innerHTML="";if(e.firstChild&&typeof e.firstChild.getAttribute!=="undefined"&&e.firstChild.getAttribute("href")!=="#"){bE.attrHandle.href=function(bR){return bR.getAttribute("href",2)}}e=null})();if(av.querySelectorAll){(function(){var e=by,bT=av.createElement("div"),bS="__sizzle__";bT.innerHTML="

";if(bT.querySelectorAll&&bT.querySelectorAll(".TEST").length===0){return}by=function(b4,bV,bZ,b3){bV=bV||av;if(!b3&&!by.isXML(bV)){var b2=/^(\w+$)|^\.([\w\-]+$)|^#([\w\-]+$)/.exec(b4);if(b2&&(bV.nodeType===1||bV.nodeType===9)){if(b2[1]){return bF(bV.getElementsByTagName(b4),bZ)}else{if(b2[2]&&bE.find.CLASS&&bV.getElementsByClassName){return bF(bV.getElementsByClassName(b2[2]),bZ)}}}if(bV.nodeType===9){if(b4==="body"&&bV.body){return bF([bV.body],bZ)}else{if(b2&&b2[3]){var bY=bV.getElementById(b2[3]);if(bY&&bY.parentNode){if(bY.id===b2[3]){return bF([bY],bZ)}}else{return bF([],bZ)}}}try{return bF(bV.querySelectorAll(b4),bZ)}catch(b0){}}else{if(bV.nodeType===1&&bV.nodeName.toLowerCase()!=="object"){var bW=bV,bX=bV.getAttribute("id"),bU=bX||bS,b6=bV.parentNode,b5=/^\s*[+~]/.test(b4);if(!bX){bV.setAttribute("id",bU)}else{bU=bU.replace(/'/g,"\\$&")}if(b5&&b6){bV=bV.parentNode}try{if(!b5||b6){return bF(bV.querySelectorAll("[id='"+bU+"'] "+b4),bZ)}}catch(b1){}finally{if(!bX){bW.removeAttribute("id")}}}}}return e(b4,bV,bZ,b3)};for(var bR in e){by[bR]=e[bR]}bT=null})()}(function(){var e=av.documentElement,bS=e.matchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.msMatchesSelector;if(bS){var bU=!bS.call(av.createElement("div"),"div"),bR=false;try{bS.call(av.documentElement,"[test!='']:sizzle")}catch(bT){bR=true}by.matchesSelector=function(bW,bY){bY=bY.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!by.isXML(bW)){try{if(bR||!bE.match.PSEUDO.test(bY)&&!/!=/.test(bY)){var bV=bS.call(bW,bY);if(bV||!bU||bW.document&&bW.document.nodeType!==11){return bV}}}catch(bX){}}return by(bY,null,null,[bW]).length>0}}})();(function(){var e=av.createElement("div");e.innerHTML="
";if(!e.getElementsByClassName||e.getElementsByClassName("e").length===0){return}e.lastChild.className="e";if(e.getElementsByClassName("e").length===1){return}bE.order.splice(1,0,"CLASS");bE.find.CLASS=function(bR,bS,bT){if(typeof bS.getElementsByClassName!=="undefined"&&!bT){return bS.getElementsByClassName(bR[1])}};e=null})();function bv(bR,bW,bV,bZ,bX,bY){for(var bT=0,bS=bZ.length;bT0){bU=e;break}}}e=e[bR]}bZ[bT]=bU}}}if(av.documentElement.contains){by.contains=function(bR,e){return bR!==e&&(bR.contains?bR.contains(e):true)}}else{if(av.documentElement.compareDocumentPosition){by.contains=function(bR,e){return !!(bR.compareDocumentPosition(e)&16)}}else{by.contains=function(){return false}}}by.isXML=function(e){var bR=(e?e.ownerDocument||e:0).documentElement;return bR?bR.nodeName!=="HTML":false};var bM=function(bS,e,bW){var bV,bX=[],bU="",bY=e.nodeType?[e]:e;while((bV=bE.match.PSEUDO.exec(bS))){bU+=bV[0];bS=bS.replace(bE.match.PSEUDO,"")}bS=bE.relative[bS]?bS+"*":bS;for(var bT=0,bR=bY.length;bT0){for(bB=bA;bB=0:b.filter(e,this).length>0:this.filter(e).length>0)},closest:function(by,bx){var bv=[],bw,e,bz=this[0];if(b.isArray(by)){var bB=1;while(bz&&bz.ownerDocument&&bz!==bx){for(bw=0;bw-1:b.find.matchesSelector(bz,by)){bv.push(bz);break}else{bz=bz.parentNode;if(!bz||!bz.ownerDocument||bz===bx||bz.nodeType===11){break}}}}bv=bv.length>1?b.unique(bv):bv;return this.pushStack(bv,"closest",by)},index:function(e){if(!e){return(this[0]&&this[0].parentNode)?this.prevAll().length:-1}if(typeof e==="string"){return b.inArray(this[0],b(e))}return b.inArray(e.jquery?e[0]:e,this)},add:function(e,bv){var bx=typeof e==="string"?b(e,bv):b.makeArray(e&&e.nodeType?[e]:e),bw=b.merge(this.get(),bx);return this.pushStack(C(bx[0])||C(bw[0])?bw:b.unique(bw))},andSelf:function(){return this.add(this.prevObject)}});function C(e){return !e||!e.parentNode||e.parentNode.nodeType===11}b.each({parent:function(bv){var e=bv.parentNode;return e&&e.nodeType!==11?e:null},parents:function(e){return b.dir(e,"parentNode")},parentsUntil:function(bv,e,bw){return b.dir(bv,"parentNode",bw)},next:function(e){return b.nth(e,2,"nextSibling")},prev:function(e){return b.nth(e,2,"previousSibling")},nextAll:function(e){return b.dir(e,"nextSibling")},prevAll:function(e){return b.dir(e,"previousSibling")},nextUntil:function(bv,e,bw){return b.dir(bv,"nextSibling",bw)},prevUntil:function(bv,e,bw){return b.dir(bv,"previousSibling",bw)},siblings:function(e){return b.sibling(e.parentNode.firstChild,e)},children:function(e){return b.sibling(e.firstChild)},contents:function(e){return b.nodeName(e,"iframe")?e.contentDocument||e.contentWindow.document:b.makeArray(e.childNodes)}},function(e,bv){b.fn[e]=function(by,bw){var bx=b.map(this,bv,by);if(!ab.test(e)){bw=by}if(bw&&typeof bw==="string"){bx=b.filter(bw,bx)}bx=this.length>1&&!ay[e]?b.unique(bx):bx;if((this.length>1||a9.test(bw))&&aq.test(e)){bx=bx.reverse()}return this.pushStack(bx,e,P.call(arguments).join(","))}});b.extend({filter:function(bw,e,bv){if(bv){bw=":not("+bw+")"}return e.length===1?b.find.matchesSelector(e[0],bw)?[e[0]]:[]:b.find.matches(bw,e)},dir:function(bw,bv,by){var e=[],bx=bw[bv];while(bx&&bx.nodeType!==9&&(by===L||bx.nodeType!==1||!b(bx).is(by))){if(bx.nodeType===1){e.push(bx)}bx=bx[bv]}return e},nth:function(by,e,bw,bx){e=e||1;var bv=0;for(;by;by=by[bw]){if(by.nodeType===1&&++bv===e){break}}return by},sibling:function(bw,bv){var e=[];for(;bw;bw=bw.nextSibling){if(bw.nodeType===1&&bw!==bv){e.push(bw)}}return e}});function aG(bx,bw,e){bw=bw||0;if(b.isFunction(bw)){return b.grep(bx,function(bz,by){var bA=!!bw.call(bz,by,bz);return bA===e})}else{if(bw.nodeType){return b.grep(bx,function(bz,by){return(bz===bw)===e})}else{if(typeof bw==="string"){var bv=b.grep(bx,function(by){return by.nodeType===1});if(bp.test(bw)){return b.filter(bw,bv,!e)}else{bw=b.filter(bw,bv)}}}}return b.grep(bx,function(bz,by){return(b.inArray(bz,bw)>=0)===e})}function a(e){var bw=aR.split("|"),bv=e.createDocumentFragment();if(bv.createElement){while(bw.length){bv.createElement(bw.pop())}}return bv}var aR="abbr|article|aside|audio|canvas|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",ag=/ jQuery\d+="(?:\d+|null)"/g,ar=/^\s+/,R=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,d=/<([\w:]+)/,w=/",""],legend:[1,"
","
"],thead:[1,"","
"],tr:[2,"","
"],td:[3,"","
"],col:[2,"","
"],area:[1,"",""],_default:[0,"",""]},ac=a(av); +ax.optgroup=ax.option;ax.tbody=ax.tfoot=ax.colgroup=ax.caption=ax.thead;ax.th=ax.td;if(!b.support.htmlSerialize){ax._default=[1,"div
","
"]}b.fn.extend({text:function(e){if(b.isFunction(e)){return this.each(function(bw){var bv=b(this);bv.text(e.call(this,bw,bv.text()))})}if(typeof e!=="object"&&e!==L){return this.empty().append((this[0]&&this[0].ownerDocument||av).createTextNode(e))}return b.text(this)},wrapAll:function(e){if(b.isFunction(e)){return this.each(function(bw){b(this).wrapAll(e.call(this,bw))})}if(this[0]){var bv=b(e,this[0].ownerDocument).eq(0).clone(true);if(this[0].parentNode){bv.insertBefore(this[0])}bv.map(function(){var bw=this;while(bw.firstChild&&bw.firstChild.nodeType===1){bw=bw.firstChild}return bw}).append(this)}return this},wrapInner:function(e){if(b.isFunction(e)){return this.each(function(bv){b(this).wrapInner(e.call(this,bv))})}return this.each(function(){var bv=b(this),bw=bv.contents();if(bw.length){bw.wrapAll(e)}else{bv.append(e)}})},wrap:function(e){var bv=b.isFunction(e);return this.each(function(bw){b(this).wrapAll(bv?e.call(this,bw):e)})},unwrap:function(){return this.parent().each(function(){if(!b.nodeName(this,"body")){b(this).replaceWith(this.childNodes)}}).end()},append:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.appendChild(e)}})},prepend:function(){return this.domManip(arguments,true,function(e){if(this.nodeType===1){this.insertBefore(e,this.firstChild)}})},before:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this)})}else{if(arguments.length){var e=b.clean(arguments);e.push.apply(e,this.toArray());return this.pushStack(e,"before",arguments)}}},after:function(){if(this[0]&&this[0].parentNode){return this.domManip(arguments,false,function(bv){this.parentNode.insertBefore(bv,this.nextSibling)})}else{if(arguments.length){var e=this.pushStack(this,"after",arguments);e.push.apply(e,b.clean(arguments));return e}}},remove:function(e,bx){for(var bv=0,bw;(bw=this[bv])!=null;bv++){if(!e||b.filter(e,[bw]).length){if(!bx&&bw.nodeType===1){b.cleanData(bw.getElementsByTagName("*"));b.cleanData([bw])}if(bw.parentNode){bw.parentNode.removeChild(bw)}}}return this},empty:function(){for(var e=0,bv;(bv=this[e])!=null;e++){if(bv.nodeType===1){b.cleanData(bv.getElementsByTagName("*"))}while(bv.firstChild){bv.removeChild(bv.firstChild)}}return this},clone:function(bv,e){bv=bv==null?false:bv;e=e==null?bv:e;return this.map(function(){return b.clone(this,bv,e)})},html:function(bx){if(bx===L){return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(ag,""):null}else{if(typeof bx==="string"&&!ae.test(bx)&&(b.support.leadingWhitespace||!ar.test(bx))&&!ax[(d.exec(bx)||["",""])[1].toLowerCase()]){bx=bx.replace(R,"<$1>");try{for(var bw=0,bv=this.length;bw1&&bw0?this.clone(true):this).get();b(bC[bA])[bv](by);bz=bz.concat(by)}return this.pushStack(bz,e,bC.selector)}}});function bg(e){if(typeof e.getElementsByTagName!=="undefined"){return e.getElementsByTagName("*")}else{if(typeof e.querySelectorAll!=="undefined"){return e.querySelectorAll("*")}else{return[]}}}function az(e){if(e.type==="checkbox"||e.type==="radio"){e.defaultChecked=e.checked}}function E(e){var bv=(e.nodeName||"").toLowerCase();if(bv==="input"){az(e)}else{if(bv!=="script"&&typeof e.getElementsByTagName!=="undefined"){b.grep(e.getElementsByTagName("input"),az)}}}function al(e){var bv=av.createElement("div");ac.appendChild(bv);bv.innerHTML=e.outerHTML;return bv.firstChild}b.extend({clone:function(by,bA,bw){var e,bv,bx,bz=b.support.html5Clone||!ah.test("<"+by.nodeName)?by.cloneNode(true):al(by);if((!b.support.noCloneEvent||!b.support.noCloneChecked)&&(by.nodeType===1||by.nodeType===11)&&!b.isXMLDoc(by)){ai(by,bz);e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){if(bv[bx]){ai(e[bx],bv[bx])}}}if(bA){t(by,bz);if(bw){e=bg(by);bv=bg(bz);for(bx=0;e[bx];++bx){t(e[bx],bv[bx])}}}e=bv=null;return bz},clean:function(bw,by,bH,bA){var bF;by=by||av;if(typeof by.createElement==="undefined"){by=by.ownerDocument||by[0]&&by[0].ownerDocument||av}var bI=[],bB;for(var bE=0,bz;(bz=bw[bE])!=null;bE++){if(typeof bz==="number"){bz+=""}if(!bz){continue}if(typeof bz==="string"){if(!W.test(bz)){bz=by.createTextNode(bz)}else{bz=bz.replace(R,"<$1>");var bK=(d.exec(bz)||["",""])[1].toLowerCase(),bx=ax[bK]||ax._default,bD=bx[0],bv=by.createElement("div");if(by===av){ac.appendChild(bv)}else{a(by).appendChild(bv)}bv.innerHTML=bx[1]+bz+bx[2];while(bD--){bv=bv.lastChild}if(!b.support.tbody){var e=w.test(bz),bC=bK==="table"&&!e?bv.firstChild&&bv.firstChild.childNodes:bx[1]===""&&!e?bv.childNodes:[];for(bB=bC.length-1;bB>=0;--bB){if(b.nodeName(bC[bB],"tbody")&&!bC[bB].childNodes.length){bC[bB].parentNode.removeChild(bC[bB])}}}if(!b.support.leadingWhitespace&&ar.test(bz)){bv.insertBefore(by.createTextNode(ar.exec(bz)[0]),bv.firstChild)}bz=bv.childNodes}}var bG;if(!b.support.appendChecked){if(bz[0]&&typeof(bG=bz.length)==="number"){for(bB=0;bB=0){return bx+"px"}}else{return bx}}}});if(!b.support.opacity){b.cssHooks.opacity={get:function(bv,e){return au.test((e&&bv.currentStyle?bv.currentStyle.filter:bv.style.filter)||"")?(parseFloat(RegExp.$1)/100)+"":e?"1":""},set:function(by,bz){var bx=by.style,bv=by.currentStyle,e=b.isNumeric(bz)?"alpha(opacity="+bz*100+")":"",bw=bv&&bv.filter||bx.filter||"";bx.zoom=1;if(bz>=1&&b.trim(bw.replace(ak,""))===""){bx.removeAttribute("filter");if(bv&&!bv.filter){return}}bx.filter=ak.test(bw)?bw.replace(ak,e):bw+" "+e}}}b(function(){if(!b.support.reliableMarginRight){b.cssHooks.marginRight={get:function(bw,bv){var e;b.swap(bw,{display:"inline-block"},function(){if(bv){e=Z(bw,"margin-right","marginRight")}else{e=bw.style.marginRight}});return e}}}});if(av.defaultView&&av.defaultView.getComputedStyle){aI=function(by,bw){var bv,bx,e;bw=bw.replace(z,"-$1").toLowerCase();if((bx=by.ownerDocument.defaultView)&&(e=bx.getComputedStyle(by,null))){bv=e.getPropertyValue(bw);if(bv===""&&!b.contains(by.ownerDocument.documentElement,by)){bv=b.style(by,bw)}}return bv}}if(av.documentElement.currentStyle){aX=function(bz,bw){var bA,e,by,bv=bz.currentStyle&&bz.currentStyle[bw],bx=bz.style;if(bv===null&&bx&&(by=bx[bw])){bv=by}if(!bc.test(bv)&&bn.test(bv)){bA=bx.left;e=bz.runtimeStyle&&bz.runtimeStyle.left;if(e){bz.runtimeStyle.left=bz.currentStyle.left}bx.left=bw==="fontSize"?"1em":(bv||0);bv=bx.pixelLeft+"px";bx.left=bA;if(e){bz.runtimeStyle.left=e}}return bv===""?"auto":bv}}Z=aI||aX;function p(by,bw,bv){var bA=bw==="width"?by.offsetWidth:by.offsetHeight,bz=bw==="width"?an:a1,bx=0,e=bz.length; +if(bA>0){if(bv!=="border"){for(;bx)<[^<]*)*<\/script>/gi,q=/^(?:select|textarea)/i,h=/\s+/,br=/([?&])_=[^&]*/,K=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+))?)?/,A=b.fn.load,aa={},r={},aE,s,aV=["*/"]+["*"];try{aE=bl.href}catch(aw){aE=av.createElement("a");aE.href="";aE=aE.href}s=K.exec(aE.toLowerCase())||[];function f(e){return function(by,bA){if(typeof by!=="string"){bA=by;by="*"}if(b.isFunction(bA)){var bx=by.toLowerCase().split(h),bw=0,bz=bx.length,bv,bB,bC;for(;bw=0){var e=bw.slice(by,bw.length);bw=bw.slice(0,by)}var bx="GET";if(bz){if(b.isFunction(bz)){bA=bz;bz=L}else{if(typeof bz==="object"){bz=b.param(bz,b.ajaxSettings.traditional);bx="POST"}}}var bv=this;b.ajax({url:bw,type:bx,dataType:"html",data:bz,complete:function(bC,bB,bD){bD=bC.responseText;if(bC.isResolved()){bC.done(function(bE){bD=bE});bv.html(e?b("
").append(bD.replace(a6,"")).find(e):bD)}if(bA){bv.each(bA,[bD,bB,bC])}}});return this},serialize:function(){return b.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?b.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||q.test(this.nodeName)||aZ.test(this.type))}).map(function(e,bv){var bw=b(this).val();return bw==null?null:b.isArray(bw)?b.map(bw,function(by,bx){return{name:bv.name,value:by.replace(bs,"\r\n")}}):{name:bv.name,value:bw.replace(bs,"\r\n")}}).get()}});b.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(e,bv){b.fn[bv]=function(bw){return this.on(bv,bw)}});b.each(["get","post"],function(e,bv){b[bv]=function(bw,by,bz,bx){if(b.isFunction(by)){bx=bx||bz;bz=by;by=L}return b.ajax({type:bv,url:bw,data:by,success:bz,dataType:bx})}});b.extend({getScript:function(e,bv){return b.get(e,L,bv,"script")},getJSON:function(e,bv,bw){return b.get(e,bv,bw,"json")},ajaxSetup:function(bv,e){if(e){am(bv,b.ajaxSettings)}else{e=bv;bv=b.ajaxSettings}am(bv,e);return bv},ajaxSettings:{url:aE,isLocal:aM.test(s[1]),global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":aV},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":bb.String,"text html":true,"text json":b.parseJSON,"text xml":b.parseXML},flatOptions:{context:true,url:true}},ajaxPrefilter:f(aa),ajaxTransport:f(r),ajax:function(bz,bx){if(typeof bz==="object"){bx=bz;bz=L}bx=bx||{};var bD=b.ajaxSetup({},bx),bS=bD.context||bD,bG=bS!==bD&&(bS.nodeType||bS instanceof b)?b(bS):b.event,bR=b.Deferred(),bN=b.Callbacks("once memory"),bB=bD.statusCode||{},bC,bH={},bO={},bQ,by,bL,bE,bI,bA=0,bw,bK,bJ={readyState:0,setRequestHeader:function(bT,bU){if(!bA){var e=bT.toLowerCase();bT=bO[e]=bO[e]||bT;bH[bT]=bU}return this},getAllResponseHeaders:function(){return bA===2?bQ:null},getResponseHeader:function(bT){var e;if(bA===2){if(!by){by={};while((e=aD.exec(bQ))){by[e[1].toLowerCase()]=e[2]}}e=by[bT.toLowerCase()]}return e===L?null:e},overrideMimeType:function(e){if(!bA){bD.mimeType=e}return this},abort:function(e){e=e||"abort";if(bL){bL.abort(e)}bF(0,e);return this}};function bF(bZ,bU,b0,bW){if(bA===2){return}bA=2;if(bE){clearTimeout(bE)}bL=L;bQ=bW||"";bJ.readyState=bZ>0?4:0;var bT,b4,b3,bX=bU,bY=b0?bj(bD,bJ,b0):L,bV,b2;if(bZ>=200&&bZ<300||bZ===304){if(bD.ifModified){if((bV=bJ.getResponseHeader("Last-Modified"))){b.lastModified[bC]=bV}if((b2=bJ.getResponseHeader("Etag"))){b.etag[bC]=b2}}if(bZ===304){bX="notmodified";bT=true}else{try{b4=G(bD,bY);bX="success";bT=true}catch(b1){bX="parsererror";b3=b1}}}else{b3=bX;if(!bX||bZ){bX="error";if(bZ<0){bZ=0}}}bJ.status=bZ;bJ.statusText=""+(bU||bX);if(bT){bR.resolveWith(bS,[b4,bX,bJ])}else{bR.rejectWith(bS,[bJ,bX,b3])}bJ.statusCode(bB);bB=L;if(bw){bG.trigger("ajax"+(bT?"Success":"Error"),[bJ,bD,bT?b4:b3])}bN.fireWith(bS,[bJ,bX]);if(bw){bG.trigger("ajaxComplete",[bJ,bD]);if(!(--b.active)){b.event.trigger("ajaxStop")}}}bR.promise(bJ);bJ.success=bJ.done;bJ.error=bJ.fail;bJ.complete=bN.add;bJ.statusCode=function(bT){if(bT){var e;if(bA<2){for(e in bT){bB[e]=[bB[e],bT[e]]}}else{e=bT[bJ.status];bJ.then(e,e)}}return this};bD.url=((bz||bD.url)+"").replace(bq,"").replace(c,s[1]+"//");bD.dataTypes=b.trim(bD.dataType||"*").toLowerCase().split(h);if(bD.crossDomain==null){bI=K.exec(bD.url.toLowerCase());bD.crossDomain=!!(bI&&(bI[1]!=s[1]||bI[2]!=s[2]||(bI[3]||(bI[1]==="http:"?80:443))!=(s[3]||(s[1]==="http:"?80:443))))}if(bD.data&&bD.processData&&typeof bD.data!=="string"){bD.data=b.param(bD.data,bD.traditional)}aW(aa,bD,bx,bJ);if(bA===2){return false}bw=bD.global;bD.type=bD.type.toUpperCase();bD.hasContent=!aQ.test(bD.type);if(bw&&b.active++===0){b.event.trigger("ajaxStart")}if(!bD.hasContent){if(bD.data){bD.url+=(M.test(bD.url)?"&":"?")+bD.data;delete bD.data}bC=bD.url;if(bD.cache===false){var bv=b.now(),bP=bD.url.replace(br,"$1_="+bv);bD.url=bP+((bP===bD.url)?(M.test(bD.url)?"&":"?")+"_="+bv:"")}}if(bD.data&&bD.hasContent&&bD.contentType!==false||bx.contentType){bJ.setRequestHeader("Content-Type",bD.contentType)}if(bD.ifModified){bC=bC||bD.url;if(b.lastModified[bC]){bJ.setRequestHeader("If-Modified-Since",b.lastModified[bC])}if(b.etag[bC]){bJ.setRequestHeader("If-None-Match",b.etag[bC])}}bJ.setRequestHeader("Accept",bD.dataTypes[0]&&bD.accepts[bD.dataTypes[0]]?bD.accepts[bD.dataTypes[0]]+(bD.dataTypes[0]!=="*"?", "+aV+"; q=0.01":""):bD.accepts["*"]);for(bK in bD.headers){bJ.setRequestHeader(bK,bD.headers[bK])}if(bD.beforeSend&&(bD.beforeSend.call(bS,bJ,bD)===false||bA===2)){bJ.abort();return false}for(bK in {success:1,error:1,complete:1}){bJ[bK](bD[bK])}bL=aW(r,bD,bx,bJ);if(!bL){bF(-1,"No Transport")}else{bJ.readyState=1;if(bw){bG.trigger("ajaxSend",[bJ,bD])}if(bD.async&&bD.timeout>0){bE=setTimeout(function(){bJ.abort("timeout")},bD.timeout)}try{bA=1;bL.send(bH,bF)}catch(bM){if(bA<2){bF(-1,bM)}else{throw bM}}}return bJ},param:function(e,bw){var bv=[],by=function(bz,bA){bA=b.isFunction(bA)?bA():bA;bv[bv.length]=encodeURIComponent(bz)+"="+encodeURIComponent(bA)};if(bw===L){bw=b.ajaxSettings.traditional}if(b.isArray(e)||(e.jquery&&!b.isPlainObject(e))){b.each(e,function(){by(this.name,this.value)})}else{for(var bx in e){v(bx,e[bx],bw,by)}}return bv.join("&").replace(k,"+")}});function v(bw,by,bv,bx){if(b.isArray(by)){b.each(by,function(bA,bz){if(bv||ap.test(bw)){bx(bw,bz)}else{v(bw+"["+(typeof bz==="object"||b.isArray(bz)?bA:"")+"]",bz,bv,bx)}})}else{if(!bv&&by!=null&&typeof by==="object"){for(var e in by){v(bw+"["+e+"]",by[e],bv,bx)}}else{bx(bw,by)}}}b.extend({active:0,lastModified:{},etag:{}});function bj(bD,bC,bz){var bv=bD.contents,bB=bD.dataTypes,bw=bD.responseFields,by,bA,bx,e;for(bA in bw){if(bA in bz){bC[bw[bA]]=bz[bA]}}while(bB[0]==="*"){bB.shift();if(by===L){by=bD.mimeType||bC.getResponseHeader("content-type")}}if(by){for(bA in bv){if(bv[bA]&&bv[bA].test(by)){bB.unshift(bA);break}}}if(bB[0] in bz){bx=bB[0]}else{for(bA in bz){if(!bB[0]||bD.converters[bA+" "+bB[0]]){bx=bA;break}if(!e){e=bA}}bx=bx||e}if(bx){if(bx!==bB[0]){bB.unshift(bx)}return bz[bx]}}function G(bH,bz){if(bH.dataFilter){bz=bH.dataFilter(bz,bH.dataType)}var bD=bH.dataTypes,bG={},bA,bE,bw=bD.length,bB,bC=bD[0],bx,by,bF,bv,e;for(bA=1;bA=bw.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();bw.animatedProperties[this.prop]=true;for(bA in bw.animatedProperties){if(bw.animatedProperties[bA]!==true){e=false}}if(e){if(bw.overflow!=null&&!b.support.shrinkWrapBlocks){b.each(["","X","Y"],function(bC,bD){bz.style["overflow"+bD]=bw.overflow[bC]})}if(bw.hide){b(bz).hide()}if(bw.hide||bw.show){for(bA in bw.animatedProperties){b.style(bz,bA,bw.orig[bA]);b.removeData(bz,"fxshow"+bA,true);b.removeData(bz,"toggle"+bA,true)}}bv=bw.complete;if(bv){bw.complete=false;bv.call(bz)}}return false}else{if(bw.duration==Infinity){this.now=bx}else{bB=bx-this.startTime;this.state=bB/bw.duration;this.pos=b.easing[bw.animatedProperties[this.prop]](this.state,bB,0,1,bw.duration);this.now=this.start+((this.end-this.start)*this.pos)}this.update()}return true}};b.extend(b.fx,{tick:function(){var bw,bv=b.timers,e=0;for(;e").appendTo(e),bw=bv.css("display");bv.remove();if(bw==="none"||bw===""){if(!a8){a8=av.createElement("iframe");a8.frameBorder=a8.width=a8.height=0}e.appendChild(a8);if(!m||!a8.createElement){m=(a8.contentWindow||a8.contentDocument).document;m.write((av.compatMode==="CSS1Compat"?"":"")+"");m.close()}bv=m.createElement(bx);m.body.appendChild(bv);bw=b.css(bv,"display");e.removeChild(a8)}Q[bx]=bw}return Q[bx]}var V=/^t(?:able|d|h)$/i,ad=/^(?:body|html)$/i;if("getBoundingClientRect" in av.documentElement){b.fn.offset=function(bI){var by=this[0],bB;if(bI){return this.each(function(e){b.offset.setOffset(this,bI,e)})}if(!by||!by.ownerDocument){return null}if(by===by.ownerDocument.body){return b.offset.bodyOffset(by)}try{bB=by.getBoundingClientRect()}catch(bF){}var bH=by.ownerDocument,bw=bH.documentElement;if(!bB||!b.contains(bw,by)){return bB?{top:bB.top,left:bB.left}:{top:0,left:0}}var bC=bH.body,bD=aK(bH),bA=bw.clientTop||bC.clientTop||0,bE=bw.clientLeft||bC.clientLeft||0,bv=bD.pageYOffset||b.support.boxModel&&bw.scrollTop||bC.scrollTop,bz=bD.pageXOffset||b.support.boxModel&&bw.scrollLeft||bC.scrollLeft,bG=bB.top+bv-bA,bx=bB.left+bz-bE;return{top:bG,left:bx}}}else{b.fn.offset=function(bF){var bz=this[0];if(bF){return this.each(function(bG){b.offset.setOffset(this,bF,bG)})}if(!bz||!bz.ownerDocument){return null}if(bz===bz.ownerDocument.body){return b.offset.bodyOffset(bz)}var bC,bw=bz.offsetParent,bv=bz,bE=bz.ownerDocument,bx=bE.documentElement,bA=bE.body,bB=bE.defaultView,e=bB?bB.getComputedStyle(bz,null):bz.currentStyle,bD=bz.offsetTop,by=bz.offsetLeft;while((bz=bz.parentNode)&&bz!==bA&&bz!==bx){if(b.support.fixedPosition&&e.position==="fixed"){break}bC=bB?bB.getComputedStyle(bz,null):bz.currentStyle;bD-=bz.scrollTop;by-=bz.scrollLeft;if(bz===bw){bD+=bz.offsetTop;by+=bz.offsetLeft;if(b.support.doesNotAddBorder&&!(b.support.doesAddBorderForTableAndCells&&V.test(bz.nodeName))){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}bv=bw;bw=bz.offsetParent}if(b.support.subtractsBorderForOverflowNotVisible&&bC.overflow!=="visible"){bD+=parseFloat(bC.borderTopWidth)||0;by+=parseFloat(bC.borderLeftWidth)||0}e=bC}if(e.position==="relative"||e.position==="static"){bD+=bA.offsetTop;by+=bA.offsetLeft}if(b.support.fixedPosition&&e.position==="fixed"){bD+=Math.max(bx.scrollTop,bA.scrollTop);by+=Math.max(bx.scrollLeft,bA.scrollLeft)}return{top:bD,left:by}}}b.offset={bodyOffset:function(e){var bw=e.offsetTop,bv=e.offsetLeft;if(b.support.doesNotIncludeMarginInBodyOffset){bw+=parseFloat(b.css(e,"marginTop"))||0;bv+=parseFloat(b.css(e,"marginLeft"))||0}return{top:bw,left:bv}},setOffset:function(bx,bG,bA){var bB=b.css(bx,"position");if(bB==="static"){bx.style.position="relative"}var bz=b(bx),bv=bz.offset(),e=b.css(bx,"top"),bE=b.css(bx,"left"),bF=(bB==="absolute"||bB==="fixed")&&b.inArray("auto",[e,bE])>-1,bD={},bC={},bw,by;if(bF){bC=bz.position();bw=bC.top;by=bC.left}else{bw=parseFloat(e)||0;by=parseFloat(bE)||0}if(b.isFunction(bG)){bG=bG.call(bx,bA,bv)}if(bG.top!=null){bD.top=(bG.top-bv.top)+bw}if(bG.left!=null){bD.left=(bG.left-bv.left)+by}if("using" in bG){bG.using.call(bx,bD)}else{bz.css(bD)}}};b.fn.extend({position:function(){if(!this[0]){return null}var bw=this[0],bv=this.offsetParent(),bx=this.offset(),e=ad.test(bv[0].nodeName)?{top:0,left:0}:bv.offset();bx.top-=parseFloat(b.css(bw,"marginTop"))||0;bx.left-=parseFloat(b.css(bw,"marginLeft"))||0;e.top+=parseFloat(b.css(bv[0],"borderTopWidth"))||0;e.left+=parseFloat(b.css(bv[0],"borderLeftWidth"))||0;return{top:bx.top-e.top,left:bx.left-e.left}},offsetParent:function(){return this.map(function(){var e=this.offsetParent||av.body;while(e&&(!ad.test(e.nodeName)&&b.css(e,"position")==="static")){e=e.offsetParent}return e})}});b.each(["Left","Top"],function(bv,e){var bw="scroll"+e;b.fn[bw]=function(bz){var bx,by;if(bz===L){bx=this[0];if(!bx){return null}by=aK(bx);return by?("pageXOffset" in by)?by[bv?"pageYOffset":"pageXOffset"]:b.support.boxModel&&by.document.documentElement[bw]||by.document.body[bw]:bx[bw]}return this.each(function(){by=aK(this);if(by){by.scrollTo(!bv?bz:b(by).scrollLeft(),bv?bz:b(by).scrollTop())}else{this[bw]=bz}})}});function aK(e){return b.isWindow(e)?e:e.nodeType===9?e.defaultView||e.parentWindow:false}b.each(["Height","Width"],function(bv,e){var bw=e.toLowerCase();b.fn["inner"+e]=function(){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,"padding")):this[bw]():null};b.fn["outer"+e]=function(by){var bx=this[0];return bx?bx.style?parseFloat(b.css(bx,bw,by?"margin":"border")):this[bw]():null};b.fn[bw]=function(bz){var bA=this[0];if(!bA){return bz==null?null:this}if(b.isFunction(bz)){return this.each(function(bE){var bD=b(this);bD[bw](bz.call(this,bE,bD[bw]()))})}if(b.isWindow(bA)){var bB=bA.document.documentElement["client"+e],bx=bA.document.body;return bA.document.compatMode==="CSS1Compat"&&bB||bx&&bx["client"+e]||bB}else{if(bA.nodeType===9){return Math.max(bA.documentElement["client"+e],bA.body["scroll"+e],bA.documentElement["scroll"+e],bA.body["offset"+e],bA.documentElement["offset"+e])}else{if(bz===L){var bC=b.css(bA,bw),by=parseFloat(bC);return b.isNumeric(by)?by:bC}else{return this.css(bw,typeof bz==="string"?bz:bz+"px")}}}}});bb.jQuery=bb.$=b;if(typeof define==="function"&&define.amd&&define.amd.jQuery){define("jquery",[],function(){return b +})}})(window); diff --git a/logger_8hh_source.html b/logger_8hh_source.html new file mode 100644 index 0000000..e6d7510 --- /dev/null +++ b/logger_8hh_source.html @@ -0,0 +1,203 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/logger.hh Source File + + + + + + + + + +
+
+
+ + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+ + + + + + + + + + +
+ +
+ + + +
+
+
logger.hh
+
+
+
1 #ifndef __SDR_LOGGER_HH__
+
2 #define __SDR_LOGGER_HH__
+
3 
+
4 #include <string>
+
5 #include <sstream>
+
6 #include <list>
+
7 
+
8 
+
9 namespace sdr {
+
10 
+
12 typedef enum {
+
13  LOG_DEBUG,
+
14  LOG_INFO,
+
15  LOG_WARNING,
+
16  LOG_ERROR
+
17 } LogLevel;
+
18 
+
19 
+
21 class LogMessage: public std::stringstream
+
22 {
+
23 public:
+
27  LogMessage(LogLevel level, const std::string &msg="");
+
29  LogMessage(const LogMessage &other);
+
31  virtual ~LogMessage();
+
32 
+
34  LogLevel level() const;
+
36  inline std::string message() const { return this->str(); }
+
37 
+
38 protected:
+
40  LogLevel _level;
+
41 };
+
42 
+
43 
+ +
46 {
+
47 protected:
+
49  LogHandler();
+
50 
+
51 public:
+
53  virtual ~LogHandler();
+
55  virtual void handle(const LogMessage &msg) = 0;
+
56 };
+
57 
+
58 
+
59 
+ +
62 {
+
63 public:
+
68  StreamLogHandler(std::ostream &stream, LogLevel level);
+
70  virtual ~StreamLogHandler();
+
72  virtual void handle(const LogMessage &msg);
+
73 
+
74 protected:
+
76  std::ostream &_stream;
+
78  LogLevel _level;
+
79 };
+
80 
+
81 
+
82 
+
84 class Logger
+
85 {
+
86 protected:
+
88  Logger();
+
89 
+
90 public:
+
92  virtual ~Logger();
+
93 
+
95  static Logger &get();
+
96 
+
98  void log(const LogMessage &message);
+
101  void addHandler(LogHandler *handler);
+
102 
+
103 protected:
+
105  static Logger *_instance;
+
107  std::list<LogHandler *> _handler;
+
108 };
+
109 
+
110 }
+
111 
+
112 #endif // __SDR_LOGGER_HH__
+
Base class of all log message handlers.
Definition: logger.hh:45
+
void addHandler(LogHandler *handler)
Adds a message handler.
Definition: logger.cc:95
+
LogLevel level() const
Returns the level of the message.
Definition: logger.cc:26
+
virtual ~LogHandler()
Destructor.
Definition: logger.cc:38
+
virtual ~Logger()
Destructor.
Definition: logger.cc:80
+
std::list< LogHandler * > _handler
All registered handlers.
Definition: logger.hh:107
+
StreamLogHandler(std::ostream &stream, LogLevel level)
Constructor.
Definition: logger.cc:46
+
virtual void handle(const LogMessage &msg)
Handles the message.
Definition: logger.cc:57
+
LogMessage(LogLevel level, const std::string &msg="")
Constructor.
Definition: logger.cc:9
+
virtual void handle(const LogMessage &msg)=0
Needs to be implemented by sub-classes to handle log messages.
+
std::ostream & _stream
The output stream.
Definition: logger.hh:76
+
void log(const LogMessage &message)
Logs a message.
Definition: logger.cc:100
+
LogHandler()
Hidden constructor.
Definition: logger.cc:34
+
virtual ~StreamLogHandler()
Destructor.
Definition: logger.cc:52
+
virtual ~LogMessage()
Destructor.
Definition: logger.cc:21
+
A log message.
Definition: logger.hh:21
+
Serializes log message into the specified stream.
Definition: logger.hh:61
+
LogLevel _level
The minimum log-level.
Definition: logger.hh:78
+
Logger()
Hidden constructor.
Definition: logger.cc:74
+
std::string message() const
Returns the message.
Definition: logger.hh:36
+
The logger class (singleton).
Definition: logger.hh:84
+
LogLevel _level
The level of the message.
Definition: logger.hh:40
+
static Logger * _instance
The singleton instance.
Definition: logger.hh:105
+
+ + + + diff --git a/math_8hh_source.html b/math_8hh_source.html new file mode 100644 index 0000000..51b8739 --- /dev/null +++ b/math_8hh_source.html @@ -0,0 +1,141 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/math.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
math.hh
+
+
+
1 #ifndef __SDR_MATH_HH__
+
2 #define __SDR_MATH_HH__
+
3 
+
4 #include <inttypes.h>
+
5 
+
6 namespace sdr {
+
7 
+
9 template <class iScalar, class oScalar> oScalar fast_atan2(iScalar a, iScalar b);
+
10 
+
12 template <> inline int16_t fast_atan2<int8_t, int16_t>(int8_t a, int8_t b) {
+
13  const int32_t pi4 = (1<<12);
+
14  const int32_t pi34 = 3*(1<<12);
+
15  int32_t aabs, angle;
+
16  if ((0 == a) && (0 == b)) { return 0; }
+
17  aabs = (a >= 0) ? a : -a;
+
18  if (b >= 0) { angle = pi4 - pi4*(b-aabs) / (b+aabs); }
+
19  else { angle = pi34 - pi4*(b+aabs) / (aabs-b); }
+
20  return (a >= 0) ? angle : -angle;
+
21 }
+
22 
+
23 template <> inline int16_t fast_atan2<uint8_t, int16_t>(uint8_t ua, uint8_t ub) {
+
24  int8_t a = (int16_t(ua)-(1<<7));
+
25  int8_t b = (int16_t(ub)-(1<<7));
+
26  return fast_atan2<int8_t, int16_t>(a,b);
+
27 }
+
28 
+
30 template <> inline int16_t fast_atan2<int16_t, int16_t>(int16_t a, int16_t b) {
+
31  //return (1<<15)*(std::atan2(float(a), float(b))/M_PI);
+
32  const int32_t pi4 = (1<<12);
+
33  const int32_t pi34 = 3*(1<<12);
+
34  int32_t aabs, angle;
+
35  if ((0 == a) && (0 == b)) { return 0; }
+
36  aabs = (a >= 0) ? a : -a;
+
37  if (b >= 0) { angle = pi4 - pi4*(b-aabs) / (b+aabs); }
+
38  else { angle = pi34 - pi4*(b+aabs) / (aabs-b); }
+
39  return (a >= 0) ? angle : -angle;
+
40 }
+
41 
+
42 
+
43 }
+
44 #endif // MATH_HH
+
+ + + + diff --git a/nav_f.png b/nav_f.png new file mode 100644 index 0000000..72a58a5 Binary files /dev/null and b/nav_f.png differ diff --git a/nav_g.png b/nav_g.png new file mode 100644 index 0000000..2093a23 Binary files /dev/null and b/nav_g.png differ diff --git a/nav_h.png b/nav_h.png new file mode 100644 index 0000000..33389b1 Binary files /dev/null and b/nav_h.png differ diff --git a/node_8hh_source.html b/node_8hh_source.html new file mode 100644 index 0000000..739c434 --- /dev/null +++ b/node_8hh_source.html @@ -0,0 +1,397 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/node.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
node.hh
+
+
+
1 #ifndef __SDR_NODE_HH__
+
2 #define __SDR_NODE_HH__
+
3 
+
4 #include <set>
+
5 #include <list>
+
6 #include <iostream>
+
7 #include <complex>
+
8 #include <stdint.h>
+
9 #include <pthread.h>
+
10 
+
11 #include "buffer.hh"
+
12 #include "queue.hh"
+
13 #include "exception.hh"
+
14 
+
15 namespace sdr {
+
16 
+
19 class Config
+
20 {
+
21 public:
+
23  typedef enum {
+
24  Type_UNDEFINED = 0,
+ + + + + + + + + + + + +
37  } Type;
+
38 
+
39 public:
+
41  Config();
+
43  Config(Type type, double sampleRate, size_t bufferSize, size_t numBuffers);
+
45  Config(const Config &other);
+
46 
+
48  const Config &operator= (const Config &other);
+
50  bool operator== (const Config &other) const;
+
51 
+
53  inline bool hasType() const { return Type_UNDEFINED != _type; }
+
55  inline Type type() const { return _type; }
+
57  inline void setType(Type type) { _type = type; }
+
59  inline bool hasSampleRate() const { return 0 != _sampleRate; }
+
61  inline double sampleRate() const { return _sampleRate; }
+
63  inline void setSampleRate(double rate) { _sampleRate = rate; }
+
65  inline bool hasBufferSize() const { return 0 != _bufferSize; }
+
67  inline size_t bufferSize() const { return _bufferSize; }
+
69  inline void setBufferSize(size_t size) { _bufferSize = size; }
+
71  inline bool hasNumBuffers() const { return 0 != _numBuffers; }
+
73  inline size_t numBuffers() const { return _numBuffers; }
+
75  inline void setNumBuffers(size_t N) { _numBuffers = N; }
+
76 
+
78  template <typename T> static inline Type typeId();
+
79 
+
80 protected:
+ +
84  double _sampleRate;
+
86  size_t _bufferSize;
+
88  size_t _numBuffers;
+
89 };
+
90 
+
92 template <>
+
93 inline Config::Type Config::typeId<uint8_t>() { return Type_u8; }
+
95 template <>
+
96 inline Config::Type Config::typeId<int8_t>() { return Type_s8; }
+
98 template <>
+
99 inline Config::Type Config::typeId<uint16_t>() { return Type_u16; }
+
101 template <>
+
102 inline Config::Type Config::typeId<int16_t>() { return Type_s16; }
+
104 template <>
+
105 inline Config::Type Config::typeId<float>() { return Type_f32; }
+
107 template <>
+
108 inline Config::Type Config::typeId<double>() { return Type_f64; }
+
110 template <>
+
111 inline Config::Type Config::typeId< std::complex<uint8_t> >() { return Type_cu8; }
+
113 template <>
+
114 inline Config::Type Config::typeId< std::complex<int8_t> >() { return Type_cs8; }
+
116 template <>
+
117 inline Config::Type Config::typeId< std::complex<uint16_t> >() { return Type_cu16; }
+
119 template <>
+
120 inline Config::Type Config::typeId< std::complex<int16_t> >() { return Type_cs16; }
+
122 template <>
+
123 inline Config::Type Config::typeId< std::complex<float> >() { return Type_cf32; }
+
125 template <>
+
126 inline Config::Type Config::typeId< std::complex<double> >() { return Type_cf64; }
+
127 
+
128 
+
130 inline const char *typeName(Config::Type type) {
+
131  switch (type) {
+
132  case Config::Type_UNDEFINED: return "UNDEFINED";
+
133  case Config::Type_u8: return "uint8";
+
134  case Config::Type_s8: return "int8";
+
135  case Config::Type_u16: return "uint16";
+
136  case Config::Type_s16: return "int16";
+
137  case Config::Type_f32: return "float";
+
138  case Config::Type_f64: return "double";
+
139  case Config::Type_cu8: return "complex uint8";
+
140  case Config::Type_cs8: return "complex int8";
+
141  case Config::Type_cu16: return "complex uint16";
+
142  case Config::Type_cs16: return "complex int16";
+
143  case Config::Type_cf32: return "complex float";
+
144  case Config::Type_cf64: return "complex double";
+
145  }
+
146  return "unknown";
+
147 }
+
148 
+
150 inline std::ostream &operator<<(std::ostream &stream, Config::Type type) {
+
151  stream << typeName(type) << " (" << (int)type << ")";
+
152  return stream;
+
153 }
+
154 
+
155 
+
158 class SinkBase
+
159 {
+
160 public:
+
162  SinkBase();
+
164  virtual ~SinkBase();
+
165 
+
167  virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite) = 0;
+
169  virtual void config(const Config &src_cfg) = 0;
+
170 };
+
171 
+
172 
+
173 
+
175 template <class Scalar>
+
176 class Sink: public SinkBase
+
177 {
+
178 public:
+
180  Sink() : SinkBase() { }
+
182  virtual ~Sink() { }
+
183 
+
185  virtual void process(const Buffer<Scalar> &buffer, bool allow_overwrite) = 0;
+
186 
+
189  virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite) {
+
190  this->process(Buffer<Scalar>(buffer), allow_overwrite);
+
191  }
+
192 };
+
193 
+
194 
+
195 
+
197 class Source
+
198 {
+
199 public:
+
201  Source();
+
203  virtual ~Source();
+
204 
+
206  virtual void send(const RawBuffer &buffer, bool allow_overwrite=false);
+
207 
+
209  void connect(SinkBase *sink, bool direct=false);
+
211  void disconnect(SinkBase *sink);
+
212 
+
215  virtual void setConfig(const Config &config);
+
216 
+
218  virtual double sampleRate() const;
+
220  virtual Config::Type type() const;
+
221 
+
223  template <class T>
+
224  void addEOS(T* instance, void (T::*function)()) {
+
225  _eos.push_back(new Delegate<T>(instance, function));
+
226  }
+
227 
+
228 protected:
+
230  void signalEOS();
+
231 
+
233  void propagateConfig(const Config &config);
+
234 
+
235 protected:
+ +
239  std::map<SinkBase *, bool> _sinks;
+
241  std::list<DelegateInterface *> _eos;
+
242 };
+
243 
+
244 
+
245 
+
251 class BlockingSource: public Source {
+
252 public:
+
260  BlockingSource(bool parallel=false, bool connect_idle=true, bool stop_queue_on_eos=false);
+
262  virtual ~BlockingSource();
+
263 
+
267  virtual void next() = 0;
+
268 
+
270  inline bool isActive() const { return _is_active; }
+
271 
+
273  virtual void start();
+
275  virtual void stop();
+
276 
+
277 protected:
+
279  void _parallel_main();
+
281  void _nonvirt_idle_cb();
+
282 
+
283 protected:
+ + +
289  pthread_t _thread;
+
290 
+
291 private:
+
293  static void *_pthread_main_wrapper(void *);
+
294 };
+
295 
+
296 
+
298 class Proxy: public SinkBase, public Source
+
299 {
+
300 public:
+
302  Proxy();
+
304  virtual ~Proxy();
+
305 
+
307  virtual void config(const Config &src_cfg);
+
309  virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite);
+
310 };
+
311 
+
312 
+
313 }
+
314 
+
315 #endif // __SDR_NODE_HH__
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
Complex (aka I/Q) type of 32bit floats aka. std::complex<float>.
Definition: node.hh:35
+
virtual void process(const Buffer< Scalar > &buffer, bool allow_overwrite)=0
Needs to be implemented by any sub-type to process the received data.
+
Base class of all buffers, represents an untyped array of bytes.
Definition: buffer.hh:32
+
virtual ~BlockingSource()
Destructor.
Definition: node.cc:149
+
Config _config
Holds the source configuration, this can be updated by calling setConfig.
Definition: node.hh:237
+
double _sampleRate
Holds the sample rate of the source.
Definition: node.hh:84
+
Specific delegate to a method of an object .
Definition: queue.hh:27
+
void propagateConfig(const Config &config)
Propagates the given configuration to all connected sinks.
Definition: node.cc:108
+
Config()
Empty constructor, will result into an invalid configuration.
Definition: node.cc:9
+
Source()
Constructor.
Definition: node.cc:56
+
const Config & operator=(const Config &other)
Assignment operator.
Definition: node.cc:29
+
Real signed 16b ints.
Definition: node.hh:28
+
virtual void send(const RawBuffer &buffer, bool allow_overwrite=false)
Sends the given buffer to all connected sinks.
Definition: node.cc:67
+
std::list< DelegateInterface * > _eos
The connected EOS singal handlers.
Definition: node.hh:241
+
Iterface of a blocking source.
Definition: node.hh:251
+
Typed sink.
Definition: node.hh:176
+
Complex (aka I/Q) type of unsigned 16b ints.
Definition: node.hh:33
+
bool _is_parallel
If true, the surce is processed in parallel.
Definition: node.hh:287
+
size_t numBuffers() const
Returns the max.
Definition: node.hh:73
+
Type _type
Holds the type of the source.
Definition: node.hh:82
+
Real signed 8b ints.
Definition: node.hh:26
+
bool hasSampleRate() const
If true, the configuration has a sample rate.
Definition: node.hh:59
+
Generic source class.
Definition: node.hh:197
+
Real unsigned 8b ints.
Definition: node.hh:25
+
void _parallel_main()
The parallel main loop.
Definition: node.cc:172
+
void signalEOS()
Signals the EOS.
Definition: node.cc:127
+
virtual ~Proxy()
Destructor.
Definition: node.cc:203
+
bool hasType() const
If true, the configuration has a type.
Definition: node.hh:53
+
std::map< SinkBase *, bool > _sinks
The connected sinks.
Definition: node.hh:239
+
Real 64b floats aka. "double".
Definition: node.hh:30
+
virtual double sampleRate() const
Returns the configured sample rate or 0 otherwise.
Definition: node.cc:122
+
virtual ~Sink()
Drestructor.
Definition: node.hh:182
+
bool isActive() const
Returns true if the source is active.
Definition: node.hh:270
+
Real unsigned 16b ints.
Definition: node.hh:27
+
virtual void setConfig(const Config &config)
Stores the configuration and propergates it if the configuration has been changed.
Definition: node.cc:98
+
bool _is_active
If true, the source is active.
Definition: node.hh:285
+
virtual void config(const Config &src_cfg)
Configures the node.
Definition: node.cc:208
+
virtual void next()=0
This method gets called either by the Queue on idle events or by a thread to read more data from the ...
+
virtual void config(const Config &src_cfg)=0
Needs to be implemented by any sub-type to check and perform the configuration of the node...
+
void connect(SinkBase *sink, bool direct=false)
Connect this source to a sink.
Definition: node.cc:87
+
virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite)=0
Needs to be implemented by any sub-type to process the received data.
+
void setNumBuffers(size_t N)
Sets the max.
Definition: node.hh:75
+
size_t _bufferSize
Holds the max.
Definition: node.hh:86
+
Type type() const
Returns the type.
Definition: node.hh:55
+
Proxy()
Constructor.
Definition: node.cc:197
+
virtual void start()
This function starts the input stream.
Definition: node.cc:154
+
pthread_t _thread
The thread of the source.
Definition: node.hh:289
+
void setType(Type type)
Sets the type.
Definition: node.hh:57
+
Sink()
Constructor.
Definition: node.hh:180
+
static Type typeId()
Returns the type-id of the template type.
+
SinkBase()
Constructor.
Definition: node.cc:45
+
Real 32b floats aka. "float".
Definition: node.hh:29
+
bool hasNumBuffers() const
If true, the configuration has a number of buffers.
Definition: node.hh:71
+
size_t bufferSize() const
Returns the max.
Definition: node.hh:67
+
virtual void stop()
This function stops the input stream.
Definition: node.cc:162
+
Type
The type IDs.
Definition: node.hh:23
+
Basic interface of all Sinks.
Definition: node.hh:158
+
virtual ~Source()
Destructor.
Definition: node.cc:62
+
void setSampleRate(double rate)
Sets the sample rate.
Definition: node.hh:63
+
Complex (aka I/Q) type of signed 8b ints.
Definition: node.hh:32
+
virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite)
Forwards the buffer.
Definition: node.cc:213
+
bool operator==(const Config &other) const
Coparison operator.
Definition: node.cc:36
+
Complex (aka I/Q) type of signed 16b ints.
Definition: node.hh:34
+
Complex (aka I/Q) type of unsigned 8b ints.
Definition: node.hh:31
+
virtual Config::Type type() const
Returns the configured source type or Config::Type_UNDEFINED otherwise.
Definition: node.cc:117
+
A NOP node.
Definition: node.hh:298
+
BlockingSource(bool parallel=false, bool connect_idle=true, bool stop_queue_on_eos=false)
Constructor.
Definition: node.cc:137
+
void disconnect(SinkBase *sink)
Disconnect a sink again.
Definition: node.cc:93
+
void addEOS(T *instance, void(T::*function)())
Adds a callback to the end-of-stream signal of the source.
Definition: node.hh:224
+
void _nonvirt_idle_cb()
The non-virtual idle callback.
Definition: node.cc:179
+
virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite)
Re-implemented from SinkBase.
Definition: node.hh:189
+
virtual ~SinkBase()
Destructor.
Definition: node.cc:49
+ +
void setBufferSize(size_t size)
Sets the max.
Definition: node.hh:69
+
bool hasBufferSize() const
If true, the configuration has a buffer size.
Definition: node.hh:65
+
Complex (aka I/Q) type of 64bit floats aka. std::complex<double>.
Definition: node.hh:36
+
size_t _numBuffers
Holds the max.
Definition: node.hh:88
+
double sampleRate() const
Returns the sample rate.
Definition: node.hh:61
+
+ + + + diff --git a/open.png b/open.png new file mode 100644 index 0000000..30f75c7 Binary files /dev/null and b/open.png differ diff --git a/operators_8hh_source.html b/operators_8hh_source.html new file mode 100644 index 0000000..a953d22 --- /dev/null +++ b/operators_8hh_source.html @@ -0,0 +1,261 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/operators.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
operators.hh
+
+
+
1 #ifndef __SDR_OPERATORS_HH__
+
2 #define __SDR_OPERATORS_HH__
+
3 
+
4 #include <stdint.h>
+
5 #include <complex>
+
6 
+
7 
+
8 // Tiny helper functions to handle std::real & std::conj on real integers
+
9 namespace std {
+
10 inline int16_t conj(int16_t value) { return value; }
+
11 inline int16_t real(int16_t value) { return value; }
+
12 inline int16_t imag(int16_t value) { return 0; }
+
13 }
+
14 
+
15 
+
16 inline std::complex<double> operator*(const double &a, const std::complex<float> &b) {
+
17  return std::complex<double>(a*b.real(), a*b.imag());
+
18 }
+
19 
+
20 inline std::complex<double> operator*(const double &a, const std::complex<uint16_t> &b) {
+
21  return std::complex<double>(a*b.real(), a*b.imag());
+
22 }
+
23 
+
24 inline std::complex<double> operator*(const double &a, const std::complex<int16_t> &b) {
+
25  return std::complex<double>(a*b.real(), a*b.imag());
+
26 }
+
27 
+
28 inline std::complex<double> operator*(const double &a, const std::complex<uint8_t> &b) {
+
29  return std::complex<double>(a*b.real(), a*b.imag());
+
30 }
+
31 
+
32 inline std::complex<double> operator*(const double &a, const std::complex<int8_t> &b) {
+
33  return std::complex<double>(a*b.real(), a*b.imag());
+
34 }
+
35 
+
36 inline std::complex<float> operator* (const std::complex<float> &a, const std::complex<int16_t> &b) {
+
37  return a*std::complex<float>(std::real(b), std::imag(b));
+
38 }
+
39 
+
40 inline std::complex<double> operator* (const std::complex<double> &a, const std::complex<int16_t> &b) {
+
41  return a*std::complex<double>(std::real(b), std::imag(b));
+
42 }
+
43 
+
44 inline std::complex<int32_t> operator<< (const std::complex<int32_t> &a, int b) {
+
45  return std::complex<int32_t>(std::real(a)<<b, std::imag(a)<<b);
+
46 }
+
47 
+
48 inline std::complex<int32_t> operator>> (const std::complex<int32_t> &a, int b) {
+
49  return std::complex<int32_t>(std::real(a)>>b, std::imag(a)>>b);
+
50 }
+
51 
+
52 
+
53 namespace sdr {
+
54 
+
55 template <class iScalar, class oScalar>
+
56 inline oScalar cast(const iScalar &a) { return oScalar(a); }
+
57 
+
58 template<>
+
59 inline std::complex<double> cast<int8_t, std::complex<double> >(const int8_t &a) {
+
60  return std::complex<double>(std::real(a), std::imag(a));
+
61 }
+
62 
+
63 template<>
+
64 inline std::complex<double> cast<std::complex<int8_t>, std::complex<double> >(const std::complex<int8_t> &a) {
+
65  return std::complex<double>(std::real(a), std::imag(a));
+
66 }
+
67 
+
68 template<>
+
69 inline std::complex<double> cast<int16_t, std::complex<double> >(const int16_t &a) {
+
70  return std::complex<double>(std::real(a), std::imag(a));
+
71 }
+
72 
+
73 template<>
+
74 inline std::complex<double> cast<std::complex<int16_t>, std::complex<double> >(const std::complex<int16_t> &a) {
+
75  return std::complex<double>(std::real(a), std::imag(a));
+
76 }
+
77 
+
78 
+
80 inline uint8_t mul2(uint8_t a, int n) {
+
81  if (n < 0) { return a >> -n; }
+
82  else { return a << n; }
+
83 }
+
84 
+
86 inline uint8_t div2(uint8_t a, int n) {
+
87  if (n < 0) { return a << -n; }
+
88  else { return a >> n; }
+
89 }
+
90 
+
92 inline std::complex<uint8_t> mul2(const std::complex<uint8_t> &a, int n) {
+
93  if (n < 0) {
+
94  return std::complex<uint8_t>(std::real(a)>>(-n), std::imag(a)>>(-n));
+
95  } else {
+
96  return std::complex<uint8_t>(std::real(a)<<(n), std::imag(a)<<(n));
+
97  }
+
98 }
+
99 
+
101 inline std::complex<uint8_t> div2(const std::complex<uint8_t> &a, int n) {
+
102  if (n < 0) {
+
103  return std::complex<uint8_t>(std::real(a)<<(-n), std::imag(a)<<(-n));
+
104  } else {
+
105  return std::complex<uint8_t>(std::real(a)>>(n), std::imag(a)>>(n));
+
106  }
+
107 }
+
108 
+
110 inline int8_t mul2(int8_t a, int n) {
+
111  if (n < 0) { return a >> -n; }
+
112  else { return a << n; }
+
113 }
+
114 
+
116 inline std::complex<int8_t> mul2(const std::complex<int8_t> &a, int n) {
+
117  if (n < 0) {
+
118  return std::complex<int8_t>(std::real(a)>>(-n), std::imag(a)>>(-n));
+
119  } else {
+
120  return std::complex<int8_t>(std::real(a)>>(-n), std::imag(a)>>(-n));
+
121  }
+
122 }
+
123 
+
125 inline uint16_t mul2(uint16_t a, int n) {
+
126  if (n < 0) { return a >> -n; }
+
127  else { return a << n; }
+
128 }
+
129 
+
131 inline std::complex<uint16_t> mul2(const std::complex<uint16_t> &a, int n) {
+
132  if (n < 0) {
+
133  return std::complex<uint16_t>(std::real(a)>>(-n), std::imag(a)>>(-n));
+
134  } else {
+
135  return std::complex<uint16_t>(std::real(a)>>(-n), std::imag(a)>>(-n));
+
136  }
+
137 }
+
138 
+
140 inline int16_t mul2(int16_t a, int n) {
+
141  if (n < 0) { return a >> -n; }
+
142  else { return a << n; }
+
143 }
+
144 
+
146 inline std::complex<int16_t> mul2(const std::complex<int16_t> &a, int n) {
+
147  if (n < 0) {
+
148  return std::complex<int16_t>(std::real(a)>>(-n), std::imag(a)>>(-n));
+
149  } else {
+
150  return std::complex<int16_t>(std::real(a)>>(-n), std::imag(a)>>(-n));
+
151  }
+
152 }
+
153 
+
155 inline float mul2(float a, int n) {
+
156  if (n < 0) { return a/(1<<(-n)); }
+
157  else { return a*(1<<n); }
+
158 }
+
159 
+
161 inline std::complex<float> mul2(const std::complex<float> &a, int n) {
+
162  if (n < 0) { return a/float(1<<(-n)); }
+
163  else { return a*float(1<<n); }
+
164 }
+
165 
+
167 inline std::complex<double> mul2(const std::complex<double> &a, int n) {
+
168  if (n < 0) { return a/double(1<<(-n)); }
+
169  else { return a*double(1<<n); }
+
170 }
+
171 
+
172 }
+
173 
+
174 #endif // OPERATORS_HH
+
+ + + + diff --git a/options_8hh_source.html b/options_8hh_source.html new file mode 100644 index 0000000..5950750 --- /dev/null +++ b/options_8hh_source.html @@ -0,0 +1,208 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/options.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
options.hh
+
+
+
1 #ifndef __SDR_OPTIONS_HH__
+
2 #define __SDR_OPTIONS_HH__
+
3 
+
4 #include <string>
+
5 #include <map>
+
6 
+
7 namespace sdr {
+
8 
+
10 class Options
+
11 {
+
12 public:
+
14  class Value {
+
15  protected:
+
17  typedef enum {
+
18  NONE,
+ + + +
22  } Type;
+
23 
+
24  public:
+
26  Value();
+
28  Value(long value);
+
30  Value(double value);
+
32  Value(const std::string &value);
+
34  Value(const Value &other);
+
36  ~Value();
+
38  const Value &operator=(const Value &other);
+
40  bool isNone() const;
+
42  bool isInteger() const;
+
44  bool isFloat() const;
+
46  bool isString() const;
+
48  long toInteger() const;
+
50  double toFloat() const;
+
52  std::string toString() const;
+
53 
+
54  protected:
+ +
58  union {
+
59  long as_int;
+
60  double as_float;
+
61  char *as_string;
+
62  } _value;
+
63  };
+
64 
+
66  typedef enum {
+
67  FLAG,
+ + +
70  ANY
+
71  } ArgType;
+
72 
+
74  typedef struct {
+
75  const char *name;
+
76  char short_name;
+ +
78  const char *help;
+
79  } Definition;
+
80 
+
83  static bool parse(const Definition defs[], int argc, char *argv[], Options &options);
+
85  static void print_help(std::ostream &stream, const Definition defs[]);
+
86 
+
87 public:
+
89  Options();
+
91  bool has(const char *name);
+
93  const Value &get(const char *name);
+
94 
+
95 protected:
+
97  std::map<std::string, Value> _options;
+
98 };
+
99 
+
100 }
+
101 
+
102 #endif // __SDR_OPTIONS_HH__
+
std::map< std::string, Value > _options
The table of option names and argument values.
Definition: options.hh:97
+
bool isInteger() const
Returns true if the value is an integer.
Definition: options.cc:181
+
Value()
Empty constructor.
Definition: options.cc:130
+
~Value()
Destructor.
Definition: options.cc:154
+
Argument definition.
Definition: options.hh:74
+
union sdr::Options::Value::@0 _value
Values.
+
bool isNone() const
Returns true if the value is empty.
Definition: options.cc:176
+
bool has(const char *name)
Returns true if the specified option was found (long name).
Definition: options.cc:22
+
static void print_help(std::ostream &stream, const Definition defs[])
Serializes a help text derived from given the definitions into stream.
Definition: options.cc:99
+
Empty or invalid value.
Definition: options.hh:18
+
long toInteger() const
Turns the value into an integer.
Definition: options.cc:196
+
A floating point number (double).
Definition: options.hh:20
+
bool isFloat() const
Returns true if the value is a floating point number.
Definition: options.cc:186
+
Any argument (string).
Definition: options.hh:70
+
std::string toString() const
Turns the value into a string.
Definition: options.cc:206
+
double toFloat() const
Turns the value into a floating point number.
Definition: options.cc:201
+
ArgType
Possible argument types.
Definition: options.hh:66
+
Floating point argument.
Definition: options.hh:69
+
An integer (long int).
Definition: options.hh:19
+
const Value & operator=(const Value &other)
Assignment.
Definition: options.cc:165
+
No argument (flag).
Definition: options.hh:67
+
char short_name
Argument name (short).
Definition: options.hh:76
+
Integer argument.
Definition: options.hh:68
+
An ASCII string.
Definition: options.hh:21
+
const char * name
Argument name (long).
Definition: options.hh:75
+
static bool parse(const Definition defs[], int argc, char *argv[], Options &options)
Parse the given arguments (argc, argv) using the definitions defs and stores the results into options...
Definition: options.cc:32
+
const char * help
Help string.
Definition: options.hh:78
+
The argument value.
Definition: options.hh:14
+
Convenience functions for command line arguments.
Definition: options.hh:10
+
Options()
Empty constructor.
Definition: options.cc:15
+
bool isString() const
Returns true if the value is a string.
Definition: options.cc:191
+
ArgType type
Argument type.
Definition: options.hh:77
+
Type
Value type.
Definition: options.hh:17
+
Type _type
The type of the value.
Definition: options.hh:56
+
+ + + + diff --git a/pages.html b/pages.html new file mode 100644 index 0000000..375766d --- /dev/null +++ b/pages.html @@ -0,0 +1,98 @@ + + + + + + +libsdr: Related Pages + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + +
+ + + + +
+ +
+ +
+
+
Related Pages
+
+
+
Here is a list of all related documentation pages:
+
+ + + + diff --git a/portaudio_8hh_source.html b/portaudio_8hh_source.html new file mode 100644 index 0000000..0cf06e2 --- /dev/null +++ b/portaudio_8hh_source.html @@ -0,0 +1,317 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/portaudio.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
portaudio.hh
+
+
+
1 #ifndef __SDR_PORTAUDIO_HH__
+
2 #define __SDR_PORTAUDIO_HH__
+
3 
+
4 #include <portaudio.h>
+
5 
+
6 #include "buffer.hh"
+
7 #include "node.hh"
+
8 #include "config.hh"
+
9 #include "logger.hh"
+
10 
+
11 namespace sdr {
+
12 
+
14 class PortAudio {
+
15 public:
+
17  static void init();
+
19  static void terminate();
+
20 
+
22  static int numDevices();
+
24  static int defaultInputDevice();
+
26  static int defaultOutputDevice();
+
28  static bool hasInputStream(int idx);
+
30  static bool hasOutputStream(int idx);
+
32  static std::string deviceName(int idx);
+
33 };
+
34 
+
35 
+
37 class PortSink: public SinkBase
+
38 {
+
39 public:
+
41  PortSink();
+
43  virtual ~PortSink();
+
44 
+
46  virtual void config(const Config &src_cfg);
+
48  virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite);
+
49 
+
50 protected:
+
52  PaStream *_stream;
+
54  size_t _frame_size;
+
55 };
+
56 
+
57 
+
59 template <class Scalar>
+
60 class PortSource: public Source
+
61 {
+
62 public:
+
64  PortSource(double sampleRate, size_t bufferSize, int dev=-1):
+
65  Source(), _streamIsOpen(false), _stream(0), _sampleRate(sampleRate), _is_real(true)
+
66  {
+
67  // Allocate buffer
+
68  _buffer = Buffer<Scalar>(bufferSize);
+
69  _initializeStream(dev);
+
70  }
+
71 
+
73  virtual ~PortSource() { if (0 != _stream) { Pa_CloseStream(_stream); } }
+
74 
+
77  void next() {
+
80  Pa_ReadStream(_stream, _buffer.ptr(), _buffer.size());
+
81  this->send(_buffer);
+
82  }
+
83 
+
85  int deviceIndex() const { return _deviceIndex; }
+
86 
+
89  void setDeviceIndex(int idx=-1) {
+
90  _initializeStream(idx);
+
91  }
+
92 
+
94  bool hasSampleRate(double sampleRate) {
+
95  PaStreamParameters params;
+
96  params.device = _deviceIndex;
+
97  params.channelCount = _is_real ? 1 : 2;
+
98  params.sampleFormat = _fmt;
+
99  params.hostApiSpecificStreamInfo = 0;
+
100  return paFormatIsSupported == Pa_IsFormatSupported(&params, 0, sampleRate);
+
101  }
+
102 
+
105  void setSampleRate(double sampleRate) {
+ + +
108  }
+
109 
+
110 protected:
+
112  void _initializeStream(int idx=-1) {
+
113  // Stop and close stream if running
+
114  if (_streamIsOpen) {
+
115  Pa_StopStream(_stream); Pa_CloseStream(_stream); _streamIsOpen = false;
+
116  }
+
117 
+
118  // Determine input stream format by scalar type
+
119  switch (Config::typeId<Scalar>()) {
+
120  case Config::Type_f32:
+
121  _fmt = paFloat32;
+
122  _is_real = true;
+
123  break;
+
124  case Config::Type_u16:
+
125  case Config::Type_s16:
+
126  _fmt = paInt16;
+
127  _is_real = true;
+
128  break;
+
129  case Config::Type_cf32:
+
130  _fmt = paFloat32;
+
131  _is_real = false;
+
132  break;
+
133  case Config::Type_cu16:
+
134  case Config::Type_cs16:
+
135  _fmt = paInt16;
+
136  _is_real = false;
+
137  break;
+
138  default:
+
139  ConfigError err;
+
140  err << "Can not configure PortAudio sink: Unsupported format " << Config::typeId<Scalar>()
+
141  << " must be one of " << Config::Type_u16 << ", " << Config::Type_s16
+
142  << ", " << Config::Type_f32 << ", " << Config::Type_cu16 << ", " << Config::Type_cs16
+
143  << " or " << Config::Type_cf32 << ".";
+
144  throw err;
+
145  }
+
146 
+
147  // Assemble config:
+
148  int numCh = _is_real ? 1 : 2;
+
149  _deviceIndex = idx < 0 ? Pa_GetDefaultInputDevice() : idx;
+
150  PaStreamParameters params;
+
151  params.device = _deviceIndex;
+
152  params.channelCount = numCh;
+
153  params.sampleFormat = _fmt;
+
154  params.suggestedLatency = Pa_GetDeviceInfo(_deviceIndex)->defaultHighInputLatency;
+
155  params.hostApiSpecificStreamInfo = 0;
+
156 
+
157  // open stream
+
158  PaError err = Pa_OpenStream(&_stream, &params, 0, _sampleRate, _buffer.size(), 0, 0, 0);
+
159 
+
160  // Check for errors
+
161  if (0 > err) {
+
162  ConfigError err;
+
163  err << "Can not open PortAudio input stream!"; throw err;
+
164  }
+
165  // Mark stream as open
+
166  _streamIsOpen = true;
+
167  // Start stream
+
168  Pa_StartStream(_stream);
+
169 
+
170  LogMessage msg(LOG_DEBUG);
+
171  msg << "Configure PortAudio source: " << std::endl
+
172  << " sample rate " << _sampleRate << std::endl
+
173  << " buffer size " << _buffer.size() << std::endl
+
174  << " format " << Config::typeId<Scalar>() << std::endl
+
175  << " num chanels " << numCh;
+
176  Logger::get().log(msg);
+
177 
+
178  // Set config
+
179  this->setConfig(Config(Config::typeId<Scalar>(), _sampleRate, _buffer.size(), 1));
+
180  }
+
181 
+
182 
+
183 protected:
+ +
187  PaStream *_stream;
+
189  PaSampleFormat _fmt;
+
191  double _sampleRate;
+ +
195  bool _is_real;
+ +
198 };
+
199 
+
200 }
+
201 
+
202 #endif // __SDR_PORTAUDIO_HH__
+
void _initializeStream(int idx=-1)
Device setup.
Definition: portaudio.hh:112
+
static bool hasInputStream(int idx)
Returns true of the given device provides an input chanel.
Definition: portaudio.cc:35
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
Complex (aka I/Q) type of 32bit floats aka. std::complex<float>.
Definition: node.hh:35
+
PortAudio playback node.
Definition: portaudio.hh:37
+
Base class of all buffers, represents an untyped array of bytes.
Definition: buffer.hh:32
+
bool _streamIsOpen
If true, the PortAudio stream, _stream is open.
Definition: portaudio.hh:185
+
static int defaultOutputDevice()
Returns the index of the default output device.
Definition: portaudio.cc:30
+
bool _is_real
If true, the input stream is real (1 chanel), otherwise complex (2 chanels).
Definition: portaudio.hh:195
+
Real signed 16b ints.
Definition: node.hh:28
+
virtual void send(const RawBuffer &buffer, bool allow_overwrite=false)
Sends the given buffer to all connected sinks.
Definition: node.cc:67
+
static void init()
Initializes the PortAudio system, must be called first.
Definition: portaudio.cc:10
+
Complex (aka I/Q) type of unsigned 16b ints.
Definition: node.hh:33
+
static int numDevices()
Returns the number of devices available.
Definition: portaudio.cc:20
+
Generic source class.
Definition: node.hh:197
+
PaStream * _stream
The PortAudio input stream.
Definition: portaudio.hh:187
+
static std::string deviceName(int idx)
Returns the device name.
Definition: portaudio.cc:47
+
void next()
Reads (blocking) the next buffer from the PortAudio stream.
Definition: portaudio.hh:77
+
Buffer< Scalar > _buffer
The output buffer.
Definition: portaudio.hh:197
+
virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite)
Playback.
Definition: portaudio.cc:152
+
size_t size() const
Returns the number of elements of type T in this buffer.
Definition: buffer.hh:166
+
virtual double sampleRate() const
Returns the configured sample rate or 0 otherwise.
Definition: node.cc:122
+
Real unsigned 16b ints.
Definition: node.hh:27
+
double _sampleRate
The current sample rate.
Definition: portaudio.hh:191
+
virtual void setConfig(const Config &config)
Stores the configuration and propergates it if the configuration has been changed.
Definition: node.cc:98
+
static bool hasOutputStream(int idx)
Returns true of the given device provides an output chanel.
Definition: portaudio.cc:41
+
virtual void config(const Config &src_cfg)
Configures the PortAudio output.
Definition: portaudio.cc:70
+
size_t _frame_size
The frame-size.
Definition: portaudio.hh:54
+
void setDeviceIndex(int idx=-1)
Selects the input device, throws a ConfigError exception if the device can not be setup as an input d...
Definition: portaudio.hh:89
+
int _deviceIndex
The current input device index.
Definition: portaudio.hh:193
+
PaStream * _stream
The PortAudio stream.
Definition: portaudio.hh:52
+
static void terminate()
Shutdown.
Definition: portaudio.cc:15
+
void setSampleRate(double sampleRate)
Resets the sample rate of the input device.
Definition: portaudio.hh:105
+
void log(const LogMessage &message)
Logs a message.
Definition: logger.cc:100
+
PortAudio input stream as a Source.
Definition: portaudio.hh:60
+
"Namespace" to collect all static, PortAudio related functions.
Definition: portaudio.hh:14
+
bool hasSampleRate(double sampleRate)
Checks if the given sample rate is supported by the device.
Definition: portaudio.hh:94
+
PaSampleFormat _fmt
The current format of the PortAudio stream.
Definition: portaudio.hh:189
+
static Logger & get()
Returns the singleton instance of the logger.
Definition: logger.cc:89
+
Real 32b floats aka. "float".
Definition: node.hh:29
+
The configuration error class.
Definition: exception.hh:24
+
A log message.
Definition: logger.hh:21
+
static int defaultInputDevice()
Returns the index of the default input device.
Definition: portaudio.cc:25
+
Basic interface of all Sinks.
Definition: node.hh:158
+
virtual ~PortSource()
Destructor.
Definition: portaudio.hh:73
+
char * ptr() const
Returns the pointer to the data (w/o view).
Definition: buffer.hh:67
+
Complex (aka I/Q) type of signed 16b ints.
Definition: node.hh:34
+
PortSource(double sampleRate, size_t bufferSize, int dev=-1)
Constructor.
Definition: portaudio.hh:64
+
PortSink()
Constructor.
Definition: portaudio.cc:57
+
virtual ~PortSink()
Destructor.
Definition: portaudio.cc:63
+ +
int deviceIndex() const
Returns the currently selected input device.
Definition: portaudio.hh:85
+
+ + + + diff --git a/psk31_8hh_source.html b/psk31_8hh_source.html new file mode 100644 index 0000000..ec0b2cb --- /dev/null +++ b/psk31_8hh_source.html @@ -0,0 +1,419 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/psk31.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
psk31.hh
+
+
+
1 #ifndef __SDR_PSK31_HH__
+
2 #define __SDR_PSK31_HH__
+
3 
+
4 #include "node.hh"
+
5 #include "traits.hh"
+
6 #include "interpolate.hh"
+
7 
+
8 
+
9 namespace sdr {
+
10 
+
15 template <class Scalar>
+
16 class BPSK31: public Sink< std::complex<Scalar> >, public Source
+
17 {
+
18 public:
+
34  BPSK31(double dF=0.1)
+
35  : Sink< std::complex<Scalar> >(), Source(),
+
36  _P(0), _F(0), _Fmin(-dF), _Fmax(dF)
+
37  {
+
38  // Assemble carrier PLL gains:
+
39  double damping = std::sqrt(2)/2;
+
40  double bw = M_PI/100;
+
41  double tmp = 1. + 2*damping*bw + bw*bw;
+
42  _alpha = 4*damping*bw/tmp;
+
43  _beta = 4*bw*bw/tmp;
+
44 
+
45  // Init delay line for the interpolating sub-sampler
+ +
47  for (size_t i=0; i<16; i++) { _dl[i] = 0; }
+
48  _mu = 0.25; _gain_mu = 0.01;
+
49 
+
50  // constant phase shift of the signal
+
51  _theta = 0;
+
52 
+
53  // Phase detection:
+ +
55  _omega_rel = 0.001; _gain_omega = 0.001;
+
56  _p_0T = _p_1T = _p_2T = 0;
+
57  _c_0T = _c_1T = _c_2T = 0;
+
58 
+
59  // Super-sample (64 phase samples per symbol)
+
60  _superSample = 64;
+
61  }
+
62 
+
64  virtual ~BPSK31() {
+
65  // pass...
+
66  }
+
67 
+
68  virtual void config(const Config &src_cfg)
+
69  {
+
70  // Requires type, sample rate & buffer size
+
71  if (!src_cfg.hasType() || !src_cfg.hasSampleRate() || !src_cfg.hasBufferSize()) { return; }
+
72 
+
73  // Check buffer type
+
74  if (Config::typeId< std::complex<Scalar> >() != src_cfg.type()) {
+
75  ConfigError err;
+
76  err << "Can not configure BPSK31: Invalid type " << src_cfg.type()
+
77  << ", expected " << Config::typeId< std::complex<Scalar> >();
+
78  throw err;
+
79  }
+
80 
+
81  // Check input sample rate
+
82  double Fs = src_cfg.sampleRate();
+
83  if (2000 > Fs) {
+
84  ConfigError err;
+
85  err << "Can not configure BPSK31: Input sample rate too low! The BPSK31 node requires at "
+
86  << "least a sample rate of 2000Hz, got " << Fs << "Hz";
+
87  throw err;
+
88  }
+
89 
+
90  // Compute samples per symbol
+
91  _omega = Fs/(_superSample*31.25);
+
92  // Obtain limits for the sub-sample rate
+
93  _min_omega = _omega*(1.0 - _omega_rel);
+
94  _max_omega = _omega*(1.0 + _omega_rel);
+
95 
+
96  // Decoding history, contains up to 64 phases (if in sync)
+ +
98  _hist_idx = 0;
+ +
100 
+
101  // Output buffer
+
102  size_t bsize = 1 + int(Fs/31.25);
+
103  _buffer = Buffer<uint8_t>(bsize);
+
104 
+
105  // This node sends a bit-stream with 31.25 baud.
+
106  this->setConfig(Config(Traits<uint8_t>::scalarId, 31.25, src_cfg.bufferSize(), 1));
+
107  }
+
108 
+
109 
+
110  virtual void process(const Buffer< std::complex<Scalar> > &buffer, bool allow_overwrite) {
+
111  size_t i=0, o=0;
+
112  while (i<buffer.size()) {
+
113  // First, fill sampler...
+
114  while ( (_mu > 1) && (i<buffer.size()) ) {
+
115  _updateSampler(buffer[i]); i++;
+
116  }
+
117  // Then, ...
+
118  if (i<buffer.size()) {
+
119  // Subsample
+
120  std::complex<float> sample = interpolate(_dl.sub(_dl_idx, 8), _mu);
+
121  // Update error tracking
+
122  _errorTracking(sample);
+
123  // Update carrier PLL
+
124  _updatePLL(sample);
+
125  // done. real(sample) constains phase of symbol
+
126 
+
127  // Now fill history with phase constellation and try to decode a bit
+
128  _hist[_hist_idx] = std::real(sample);
+
129  // Check if there is a constellation transition at the current time
+
130  if ((_hist_idx>1) && (_hasTransition())) {
+
131  if (_hist_idx<(_superSample/2)) {
+
132  // If less than superSample values in hist -> drop
+
133  _hist_idx = 0;
+
134  } else {
+
135  // Otherwise decode
+
136  int cconst = _currentContellation();
+
137  _buffer[o++] = (_last_constellation == cconst);
+
138  _last_constellation = cconst;
+
139  _hist_idx = 0;
+
140  }
+
141  } else if (_hist_idx == (_superSample-1)) {
+
142  // If the symbol is complete:
+
143  int cconst = _currentContellation();
+
144  _buffer[o++] = (_last_constellation == cconst);
+
145  _last_constellation = cconst;
+
146  _hist_idx = 0;
+
147  } else {
+
148  // Next sample
+
149  _hist_idx++;
+
150  }
+
151  }
+
152  }
+
153  // If at least 1 bit was decoded -> send result
+
154  if (o>0) { this->send(_buffer.head(o)); }
+
155  }
+
156 
+
157 
+
158 protected:
+
160  inline bool _hasTransition() const {
+
161  return ((_hist[_hist_idx-1]>=0) && (_hist[_hist_idx]<=0)) ||
+
162  ((_hist[_hist_idx-1]<=0) && (_hist[_hist_idx]>=0));
+
163  }
+
164 
+
166  inline int _currentContellation() const {
+
167  float value = 0;
+
168  for (size_t i=0; i<=_hist_idx; i++) { value += _hist[i]; }
+
169  return (value > 0) ? 1 : -1;
+
170  }
+
171 
+
173  inline float _phaseError(const std::complex<float> &value) const {
+
174  float r2 = value.real()*value.real();
+
175  float i2 = value.imag()*value.imag();
+
176  float nrm2 = r2+i2;
+
177  if (0 == nrm2) { return 0; }
+
178  return -value.real()*value.imag()/nrm2;
+
179  }
+
180 
+
182  inline void _updatePLL(const std::complex<float> &sample) {
+
183  float phi = _phaseError(sample);
+
184  _F += _beta*phi;
+
185  _P += _F + _alpha*phi;
+
186  while (_P>( 2*M_PI)) { _P -= 2*M_PI; }
+
187  while (_P<(-2*M_PI)) { _P += 2*M_PI; }
+
188  _F = std::min(_Fmax, std::max(_Fmin, _F));
+
189  //std::cerr << "Update PLL: P=" << _P << "; F=" << _F << ", err= " << phi << std::endl;
+
190  }
+
191 
+
193  inline void _updateSampler(const std::complex<Scalar> &value) {
+
194  // decrease fractional sub-sample counter
+
195  _mu-=1;
+
196  // Update phase
+
197  _P += _F;
+
198  // Limit phase
+
199  while (_P>( 2*M_PI)) { _P -= 2*M_PI; }
+
200  while (_P<(-2*M_PI)) { _P += 2*M_PI; }
+
201  // Calc down-conversion factor (consider look-up table)
+
202  std::complex<float> fac = std::exp(std::complex<float>(0, _P+_theta));
+
203  // Down-convert singal
+
204  std::complex<float> sample = fac * std::complex<float>(value.real(), value.imag());
+
205  // store sample into delay line
+
206  _dl[_dl_idx] = sample;
+
207  _dl[_dl_idx+8] = sample;
+
208  _dl_idx = (_dl_idx + 1) % 8;
+
209  }
+
210 
+
212  inline void _errorTracking(const std::complex<float> &sample) {
+
213  // Update last 2 constellation and phases
+
214  _p_2T = _p_1T; _p_1T = _p_0T; _p_0T = sample;
+
215  _c_2T = _c_1T; _c_1T = _c_0T; _c_0T = (sample.real() > 0) ? -1 : 1;
+
216  // Compute difference between phase and constellation
+
217  std::complex<float> x = (_c_0T - _c_2T) * std::conj(_p_1T);
+
218  std::complex<float> y = (_p_0T - _p_2T) * std::conj(_c_1T);
+
219  // Get phase error
+
220  float err = std::real(y-x);
+
221  if (err > 1.0) { err = 1.0; }
+
222  if (err < -1.0) { err = -1.0; }
+
223  // Update symbol rate (approx 31.25*64)
+
224  _omega += _gain_omega * err;
+
225  // Limit omega on _omega_mid +/- _omega*_omega_rel
+
226  _omega = std::max(_min_omega, std::min(_max_omega, _omega));
+
227  // Update mu as +_omega (samples per symbol) and a small correction term
+
228  _mu += _omega + _gain_mu * err;
+
229  }
+
230 
+
231 
+
232 protected:
+
234  size_t _superSample;
+
236  float _P;
+
238  float _F;
+
240  float _Fmin;
+
242  float _Fmax;
+
244  float _alpha;
+
246  float _beta;
+ +
250  size_t _dl_idx;
+
252  float _mu;
+
254  float _gain_mu;
+
256  float _theta;
+
258  float _omega;
+
260  float _omega_rel;
+
262  float _min_omega;
+
264  float _max_omega;
+
266  float _gain_omega;
+
268  std::complex<float> _p_0T;
+
270  std::complex<float> _p_1T;
+
272  std::complex<float> _p_2T;
+
274  std::complex<float> _c_0T;
+
276  std::complex<float> _c_1T;
+
278  std::complex<float> _c_2T;
+ +
282  size_t _hist_idx;
+ + +
287 };
+
288 
+
289 
+
290 
+
294 class Varicode: public Sink<uint8_t>, public Source
+
295 {
+
296 public:
+
298  Varicode();
+
300  virtual ~Varicode();
+
302  virtual void config(const Config &src_cfg);
+
304  virtual void process(const Buffer<uint8_t> &buffer, bool allow_overwrite);
+
305 
+
306 protected:
+
308  uint16_t _value;
+ +
312  std::map<uint16_t, char> _code_table;
+
313 };
+
314 
+
315 
+
316 }
+
317 
+
318 
+
319 #endif // __SDR_PSK31_HH__
+
float _theta
Constant phase shift between real axis and first constellation.
Definition: psk31.hh:256
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
Buffer< float > _hist
The last _superSample phases.
Definition: psk31.hh:280
+
size_t _superSample
Holds the number of phase constellations per bit.
Definition: psk31.hh:234
+
std::complex< float > _c_2T
Constellation at T=-2 (samples).
Definition: psk31.hh:278
+
std::complex< float > _p_0T
Phase at T = 0 (samples).
Definition: psk31.hh:268
+
float _phaseError(const std::complex< float > &value) const
Computes the phase error.
Definition: psk31.hh:173
+
float _gain_mu
Gain factor of the sub-sampler.
Definition: psk31.hh:254
+
std::map< uint16_t, char > _code_table
The conversion table.
Definition: psk31.hh:312
+
std::complex< float > _c_0T
Constellation at T=0 (samples).
Definition: psk31.hh:274
+
int _currentContellation() const
Returns the current constellation.
Definition: psk31.hh:166
+
virtual void config(const Config &src_cfg)
Needs to be implemented by any sub-type to check and perform the configuration of the node...
Definition: psk31.hh:68
+
virtual void send(const RawBuffer &buffer, bool allow_overwrite=false)
Sends the given buffer to all connected sinks.
Definition: node.cc:67
+
Typed sink.
Definition: node.hh:176
+
std::complex< float > _p_1T
Phase at T=-1 (samples).
Definition: psk31.hh:270
+
bool hasSampleRate() const
If true, the configuration has a sample rate.
Definition: node.hh:59
+
Generic source class.
Definition: node.hh:197
+
float _omega_rel
Relative error of the subsample rate.
Definition: psk31.hh:260
+
A simple BPSK31 "demodulator".
Definition: psk31.hh:16
+
float _omega
Current sub-sample rate.
Definition: psk31.hh:258
+
float _Fmax
Upper frequency limit of the carrier PLL.
Definition: psk31.hh:242
+
Buffer< uint8_t > _buffer
The output buffer.
Definition: psk31.hh:310
+
Buffer< std::complex< float > > _dl
The delay line for the interpolating sub-sampler.
Definition: psk31.hh:248
+
int _last_constellation
The last output constellation.
Definition: psk31.hh:284
+
void _updatePLL(const std::complex< float > &sample)
Updates the PLL (_F and _P).
Definition: psk31.hh:182
+
bool hasType() const
If true, the configuration has a type.
Definition: node.hh:53
+
float _Fmin
Lower frequency limit of the carrier PLL.
Definition: psk31.hh:240
+
float _max_omega
Maximum of the sub-sample rate.
Definition: psk31.hh:264
+
std::complex< float > _c_1T
Constellation at T=-1 (samples).
Definition: psk31.hh:276
+
virtual void setConfig(const Config &config)
Stores the configuration and propergates it if the configuration has been changed.
Definition: node.cc:98
+
virtual ~Varicode()
Destructor.
Definition: psk31.cc:47
+
virtual void config(const Config &src_cfg)
Configures the node.
Definition: psk31.cc:52
+
Buffer< uint8_t > _buffer
Output buffer.
Definition: psk31.hh:286
+
Buffer< T > head(size_t n) const
Returns a new view on this buffer.
Definition: buffer.hh:237
+
float _mu
Holds the fractional sub-sampling counter.
Definition: psk31.hh:252
+
virtual ~BPSK31()
Destructor.
Definition: psk31.hh:64
+
float _F
Frequency of the carrier PLL.
Definition: psk31.hh:238
+
float _min_omega
Minimum of the sub-sample rate.
Definition: psk31.hh:262
+
void _errorTracking(const std::complex< float > &sample)
Updates the PPL state (_mu and _omega).
Definition: psk31.hh:212
+
Type type() const
Returns the type.
Definition: node.hh:55
+
float _beta
Gain factor of the carrier PLL.
Definition: psk31.hh:246
+
uint16_t _value
The shift register of the last received bits.
Definition: psk31.hh:308
+
static Type typeId()
Returns the type-id of the template type.
+
void _updateSampler(const std::complex< Scalar > &value)
Updates the sub-sampler.
Definition: psk31.hh:193
+
float _alpha
Gain factor of the carrier PLL.
Definition: psk31.hh:244
+
Buffer< T > sub(size_t offset, size_t len) const
Returns a new view on this buffer.
Definition: buffer.hh:231
+
virtual void process(const Buffer< uint8_t > &buffer, bool allow_overwrite)
Converts the input bit stream to ASCII chars.
Definition: psk31.cc:69
+
The configuration error class.
Definition: exception.hh:24
+
size_t bufferSize() const
Returns the max.
Definition: node.hh:67
+
Simple varicode (Huffman code) decoder node.
Definition: psk31.hh:294
+
size_t _hist_idx
Current phase history index.
Definition: psk31.hh:282
+
bool _hasTransition() const
Returns true if there is a phase transition at the current sample.
Definition: psk31.hh:160
+
float _gain_omega
Gain of the sub-sample rate correction.
Definition: psk31.hh:266
+
float _P
Phase of the carrier PLL.
Definition: psk31.hh:236
+
std::complex< float > _p_2T
Phase at T=-2 (samples).
Definition: psk31.hh:272
+
Forward declaration of type tratis template.
Definition: traits.hh:20
+
BPSK31(double dF=0.1)
Constructs a new BPSK31 demodulator.
Definition: psk31.hh:34
+
virtual void process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
Needs to be implemented by any sub-type to process the received data.
Definition: psk31.hh:110
+
Varicode()
Constructor.
Definition: psk31.cc:7
+
A typed buffer.
Definition: buffer.hh:111
+
bool hasBufferSize() const
If true, the configuration has a buffer size.
Definition: node.hh:65
+
double sampleRate() const
Returns the sample rate.
Definition: node.hh:61
+
size_t _dl_idx
The current index of the delay line.
Definition: psk31.hh:250
+
+ + + + diff --git a/queue_8hh_source.html b/queue_8hh_source.html new file mode 100644 index 0000000..9a98a1f --- /dev/null +++ b/queue_8hh_source.html @@ -0,0 +1,306 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/queue.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
queue.hh
+
+
+
1 #ifndef __SDR_QUEUE_HH__
+
2 #define __SDR_QUEUE_HH__
+
3 
+
4 #include <list>
+
5 #include <map>
+
6 #include "buffer.hh"
+
7 #include <pthread.h>
+
8 #include <iostream>
+
9 
+
10 
+
11 namespace sdr {
+
12 
+
13 // Forward decl.
+
14 class SinkBase;
+
15 
+ +
18 public:
+
20  virtual void operator() () = 0;
+
22  virtual void *instance() = 0;
+
23 };
+
24 
+
26 template <class T>
+ +
28 {
+
29 public:
+
31  Delegate(T *instance, void (T::*func)(void)) : _instance(instance), _function(func) { }
+
33  virtual ~Delegate() {}
+
35  virtual void operator() () { (_instance->*_function)(); }
+
37  virtual void *instance() { return _instance; }
+
38 
+
39 protected:
+ +
43  void (T::*_function)(void);
+
44 };
+
45 
+
46 
+
53 class Queue
+
54 {
+
55 public:
+
57  class Message {
+
58  public:
+
60  Message(const RawBuffer &buffer, SinkBase *sink, bool allow_overwrite)
+
61  : _buffer(buffer), _sink(sink), _allow_overwrite(allow_overwrite) { }
+
63  Message(const Message &other)
+
64  : _buffer(other._buffer), _sink(other._sink), _allow_overwrite(other._allow_overwrite) { }
+
66  const Message &operator= (const Message &other) {
+
67  _buffer = other._buffer;
+
68  _sink = other._sink;
+ +
70  return *this;
+
71  }
+
73  inline const RawBuffer &buffer() const { return _buffer; }
+
75  inline RawBuffer &buffer() { return _buffer; }
+
77  inline SinkBase *sink() const { return _sink; }
+
79  inline bool allowOverwrite() const { return _allow_overwrite; }
+
80 
+
81  protected:
+ + + +
88  };
+
89 
+
90 protected:
+
92  Queue();
+
93 
+
94 public:
+
96  virtual ~Queue();
+
97 
+
102  static Queue &get();
+
103 
+
106  void send(const RawBuffer &buffer, SinkBase *sink, bool allow_overwrite=false);
+
107 
+
111  void start();
+
112 
+
114  void stop();
+
116  void wait();
+
117 
+
119  bool isStopped() const;
+
121  bool isRunning() const;
+
122 
+
126  template <class T>
+
127  void addIdle(T *instance, void (T::*function)(void)) {
+
128  _idle.push_back(new Delegate<T>(instance, function));
+
129  }
+
130 
+
132  template <class T>
+
133  void remIdle(T *instance) {
+
134  std::list<DelegateInterface *>::iterator item = _idle.begin();
+
135  while (item != _idle.end()) {
+
136  if ( (*item)->instance() == ((void *)instance)) {
+
137  item = _idle.erase(item);
+
138  } else {
+
139  item++;
+
140  }
+
141  }
+
142  }
+
143 
+
145  template <class T>
+
146  void addStart(T *instance, void (T::*function)(void)) {
+
147  _onStart.push_back(new Delegate<T>(instance, function));
+
148  }
+
149 
+
151  template <class T>
+
152  void remStart(T *instance) {
+
153  std::list<DelegateInterface *>::iterator item = _onStart.begin();
+
154  while (item != _onStart.end()) {
+
155  if ( (*item)->instance() == ((void *)instance)) {
+
156  item = _onStart.erase(item);
+
157  } else {
+
158  item++;
+
159  }
+
160  }
+
161  }
+
162 
+
164  template <class T>
+
165  void addStop(T *instance, void (T::*function)(void)) {
+
166  _onStop.push_back(new Delegate<T>(instance, function));
+
167  }
+
168 
+
170  template <class T>
+
171  void remStop(T *instance) {
+
172  std::list<DelegateInterface *>::iterator item = _onStop.begin();
+
173  while (item != _onStop.end()) {
+
174  if ( (*item)->instance() == ((void *)instance)) {
+
175  item = _onStop.erase(item);
+
176  } else {
+
177  item++;
+
178  }
+
179  }
+
180  }
+
181 
+
182 protected:
+
184  void _main();
+
186  void _signalIdle();
+
188  void _signalStart();
+
190  void _signalStop();
+
191 
+
192 protected:
+
194  bool _running;
+
196  pthread_t _thread;
+
198  pthread_mutex_t _queue_lock;
+
200  pthread_cond_t _queue_cond;
+
201 
+
203  std::list<Message> _queue;
+
205  std::list<DelegateInterface *> _idle;
+
207  std::list<DelegateInterface *> _onStart;
+
209  std::list<DelegateInterface *> _onStop;
+
210 
+
211 private:
+
213  static Queue *_instance;
+
215  static void *__thread_start(void *ptr);
+
216 };
+
217 
+
218 
+
219 }
+
220 #endif // __SDR_QUEUE_HH__
+
std::list< DelegateInterface * > _onStop
Stop event callbacks.
Definition: queue.hh:209
+
SinkBase * _sink
The destination.
Definition: queue.hh:85
+
std::list< Message > _queue
The message queue.
Definition: queue.hh:203
+
Base class of all buffers, represents an untyped array of bytes.
Definition: buffer.hh:32
+
void send(const RawBuffer &buffer, SinkBase *sink, bool allow_overwrite=false)
Adds a buffer and its receiver to the queue.
Definition: queue.cc:36
+
The internal used message type.
Definition: queue.hh:57
+
void wait()
Wait for the queue to exit the queue loop.
Definition: queue.cc:70
+
void(T::* _function)(void)
The method.
Definition: queue.hh:43
+
virtual void * instance()=0
Returns the instance of the delegate.
+
pthread_mutex_t _queue_lock
The queue mutex.
Definition: queue.hh:198
+
Specific delegate to a method of an object .
Definition: queue.hh:27
+
bool isStopped() const
Returns true if the queue loop is stopped.
Definition: queue.cc:46
+
bool isRunning() const
Returns true if the queue loop is running.
Definition: queue.cc:51
+
Delegate(T *instance, void(T::*func)(void))
Constructs a delegate to the method func of the instance instance.
Definition: queue.hh:31
+
void _signalStop()
Emits the stop signal.
Definition: queue.cc:144
+
std::list< DelegateInterface * > _idle
Idle event callbacks.
Definition: queue.hh:205
+
Central message queue (singleton).
Definition: queue.hh:53
+
T * _instance
The instance.
Definition: queue.hh:41
+
void stop()
Signals the queue to stop processing.
Definition: queue.cc:64
+
virtual void * instance()
Returns the instance of the delegate.
Definition: queue.hh:37
+
Message(const Message &other)
Copy constructor.
Definition: queue.hh:63
+
void addIdle(T *instance, void(T::*function)(void))
Adds a callback to the idle event.
Definition: queue.hh:127
+
const RawBuffer & buffer() const
Returns the buffer of the message.
Definition: queue.hh:73
+
bool allowOverwrite() const
If true, the sender allows to overwrite the content of the buffer.
Definition: queue.hh:79
+
pthread_t _thread
If _parallel is true, the thread of the queue loop.
Definition: queue.hh:196
+
void addStop(T *instance, void(T::*function)(void))
Adds a callback to the stop event.
Definition: queue.hh:165
+
const Message & operator=(const Message &other)
Assignment operator.
Definition: queue.hh:66
+
virtual ~Queue()
Destructor.
Definition: queue.cc:30
+
Interface of a delegate.
Definition: queue.hh:17
+
SinkBase * sink() const
Returns the destination of the message.
Definition: queue.hh:77
+
void start()
Enters the queue loop, if parallel=true was passed to get, exec will execute the queue loop in a sepa...
Definition: queue.cc:57
+
void remStop(T *instance)
Removes all callbacks of the given instance from the stop signal.
Definition: queue.hh:171
+
virtual ~Delegate()
Destructor.
Definition: queue.hh:33
+
RawBuffer & buffer()
Returns the buffer of the message.
Definition: queue.hh:75
+
Basic interface of all Sinks.
Definition: node.hh:158
+
void remIdle(T *instance)
Removes all callbacks of the given instance from the idle signal.
Definition: queue.hh:133
+
std::list< DelegateInterface * > _onStart
Start event callbacks.
Definition: queue.hh:207
+
virtual void operator()()=0
Call back interface.
+
void _main()
The actual queue loop.
Definition: queue.cc:84
+
Message(const RawBuffer &buffer, SinkBase *sink, bool allow_overwrite)
Constructor.
Definition: queue.hh:60
+
bool _running
While this is true, the queue loop is executed.
Definition: queue.hh:194
+
bool _allow_overwrite
If true, the sender allows to overwrite the buffer.
Definition: queue.hh:87
+
virtual void operator()()
Callback, simply calls the method of the instance given to the constructor.
Definition: queue.hh:35
+
void _signalIdle()
Emits the idle signal.
Definition: queue.cc:128
+
pthread_cond_t _queue_cond
The queue condition.
Definition: queue.hh:200
+
void _signalStart()
Emits the start signal.
Definition: queue.cc:136
+
void remStart(T *instance)
Removes all callbacks of the given instance from the start signal.
Definition: queue.hh:152
+
Queue()
Hidden constructor, use get to get the singleton instance.
Definition: queue.cc:22
+
void addStart(T *instance, void(T::*function)(void))
Adds a callback to the start event.
Definition: queue.hh:146
+
RawBuffer _buffer
The buffer being send.
Definition: queue.hh:83
+
+ + + + diff --git a/rtlsource_8hh_source.html b/rtlsource_8hh_source.html new file mode 100644 index 0000000..aaa29c9 --- /dev/null +++ b/rtlsource_8hh_source.html @@ -0,0 +1,185 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/rtlsource.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
rtlsource.hh
+
+
+
1 #ifndef __SDR_RTLSOURCE_HH__
+
2 #define __SDR_RTLSOURCE_HH__
+
3 
+
4 #include <rtl-sdr.h>
+
5 #include <pthread.h>
+
6 #include "node.hh"
+
7 
+
8 
+
9 namespace sdr {
+
10 
+
12 class RTLSource: public Source
+
13 {
+
14 public:
+
23  RTLSource(double frequency, double sample_rate=1e6, size_t device_idx=0);
+
24 
+
26  virtual ~RTLSource();
+
27 
+
29  inline double frequency() const { return _frequency; }
+
31  void setFrequency(double frequency);
+
32 
+
34  inline double freqCorrection() const { return rtlsdr_get_freq_correction(_device); }
+
36  void setFreqCorrection(double ppm);
+
37 
+
39  inline double sampleRate() const { return _sample_rate; }
+
42  void setSampleRate(double sample_rate);
+
43 
+
45  inline bool agcEnabled() const { return _agc_enabled; }
+
47  void enableAGC(bool enable);
+
48 
+
50  inline double gain() const { return rtlsdr_get_tuner_gain(_device); }
+
52  void setGain(double gain);
+
54  inline const std::vector<double> & gainFactors() const { return _gains; }
+
55 
+
57  void start();
+
59  void stop();
+
60 
+
62  static size_t numDevices();
+
64  static std::string deviceName(size_t idx);
+
65 
+
66 protected:
+
68  static void *__rtl_srd_parallel_main(void *ctx);
+
70  static void __rtl_sdr_callback(unsigned char *buffer, uint32_t len, void *ctx);
+
71 
+
72 protected:
+
74  double _frequency;
+
76  double _sample_rate;
+ +
80  std::vector<double> _gains;
+
82  size_t _buffer_size;
+
84  rtlsdr_dev_t *_device;
+
86  pthread_t _thread;
+
87 };
+
88 
+
89 
+
90 }
+
91 
+
92 #endif // __SDR_RTLSOURCE_HH__
+
double frequency() const
Returns the freuency of the tuner.
Definition: rtlsource.hh:29
+
std::vector< double > _gains
A vector of gain factors supported by the device.
Definition: rtlsource.hh:80
+
static size_t numDevices()
Returns the number of compatible devices found.
Definition: rtlsource.cc:123
+
double _sample_rate
The current sample rate.
Definition: rtlsource.hh:76
+
double gain() const
Returns the tuner gain.
Definition: rtlsource.hh:50
+
void enableAGC(bool enable)
Enable/Disable AGC.
Definition: rtlsource.cc:92
+
double _frequency
The current tuner frequency.
Definition: rtlsource.hh:74
+
void start()
Starts the reception.
Definition: rtlsource.cc:107
+
Implements a uint_8 I/Q source for RTL2832 based TV dongles.
Definition: rtlsource.hh:12
+
Generic source class.
Definition: node.hh:197
+
void stop()
Stops the reception.
Definition: rtlsource.cc:112
+
void setFrequency(double frequency)
(Re-) Sets the tuner frequency.
Definition: rtlsource.cc:66
+
void setGain(double gain)
(Re-) Sets the tuner gain.
Definition: rtlsource.cc:99
+
pthread_t _thread
The thread object.
Definition: rtlsource.hh:86
+
static std::string deviceName(size_t idx)
Returns the name of the specified device.
Definition: rtlsource.cc:128
+
double freqCorrection() const
Returns the frequency correction in parts per million (ppm).
Definition: rtlsource.hh:34
+
static void __rtl_sdr_callback(unsigned char *buffer, uint32_t len, void *ctx)
Callback to process received data.
Definition: rtlsource.cc:142
+
void setFreqCorrection(double ppm)
(Re-) Sets the frequency correction in ppm.
Definition: rtlsource.cc:73
+
static void * __rtl_srd_parallel_main(void *ctx)
Prallel routine to receive some data from the device.
Definition: rtlsource.cc:134
+
const std::vector< double > & gainFactors() const
Retunrs a vector of supported gain factors.
Definition: rtlsource.hh:54
+
void setSampleRate(double sample_rate)
(Re-) sets the sample rate.
Definition: rtlsource.cc:78
+
rtlsdr_dev_t * _device
The RTL2832 device object.
Definition: rtlsource.hh:84
+
double sampleRate() const
Returns the sample rate.
Definition: rtlsource.hh:39
+
RTLSource(double frequency, double sample_rate=1e6, size_t device_idx=0)
Constructor.
Definition: rtlsource.cc:7
+
virtual ~RTLSource()
Destructor.
Definition: rtlsource.cc:60
+
bool agcEnabled() const
Returns true if AGC is enabled.
Definition: rtlsource.hh:45
+
size_t _buffer_size
The buffer size.
Definition: rtlsource.hh:82
+
bool _agc_enabled
If true, the AGC is enabled.
Definition: rtlsource.hh:78
+
+ + + + diff --git a/sdr_8hh_source.html b/sdr_8hh_source.html new file mode 100644 index 0000000..034c587 --- /dev/null +++ b/sdr_8hh_source.html @@ -0,0 +1,145 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/sdr.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr.hh
+
+
+
1 
+
265 #ifndef __SDR_HH__
+
266 #define __SDR_HH__
+
267 
+
268 #include "config.hh"
+
269 #include "operators.hh"
+
270 #include "math.hh"
+
271 #include "traits.hh"
+
272 #include "exception.hh"
+
273 #include "buffer.hh"
+
274 #include "node.hh"
+
275 #include "queue.hh"
+
276 #include "combine.hh"
+
277 #include "logger.hh"
+
278 #include "options.hh"
+
279 
+
280 #include "utils.hh"
+
281 #include "siggen.hh"
+
282 #include "buffernode.hh"
+
283 #include "wavfile.hh"
+
284 #include "firfilter.hh"
+
285 #include "autocast.hh"
+
286 #include "freqshift.hh"
+
287 #include "interpolate.hh"
+
288 #include "subsample.hh"
+
289 #include "baseband.hh"
+
290 
+
291 #include "demod.hh"
+
292 #include "psk31.hh"
+
293 
+
294 #include "fftplan.hh"
+
295 
+
296 #ifdef SDR_WITH_FFTW
+
297 #include "filternode.hh"
+
298 #endif
+
299 
+
300 #ifdef SDR_WITH_PORTAUDIO
+
301 #include "portaudio.hh"
+
302 #endif
+
303 
+
304 #ifdef SDR_WITH_RTLSDR
+
305 #include "rtlsource.hh"
+
306 #endif
+
307 
+
308 #endif // __SDR_HH__
+
+ + + + diff --git a/search/all_0.html b/search/all_0.html new file mode 100644 index 0000000..17b6da8 --- /dev/null +++ b/search/all_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_0.js b/search/all_0.js new file mode 100644 index 0000000..488f3eb --- /dev/null +++ b/search/all_0.js @@ -0,0 +1,190 @@ +var searchData= +[ + ['_5f_5frtl_5fsdr_5fcallback',['__rtl_sdr_callback',['../classsdr_1_1_r_t_l_source.html#a7725d46b49a347f1dbe76088645bc350',1,'sdr::RTLSource']]], + ['_5f_5frtl_5fsrd_5fparallel_5fmain',['__rtl_srd_parallel_main',['../classsdr_1_1_r_t_l_source.html#a62620f764df61e44fd145c2653df27b2',1,'sdr::RTLSource']]], + ['_5fagc_5fenabled',['_agc_enabled',['../classsdr_1_1_r_t_l_source.html#aacba577d0db6a112a1599ce97c507ac6',1,'sdr::RTLSource']]], + ['_5fallow_5foverwrite',['_allow_overwrite',['../classsdr_1_1_queue_1_1_message.html#ace94bf2702c9a1590b4c1257cbec0dee',1,'sdr::Queue::Message']]], + ['_5falpha',['_alpha',['../classsdr_1_1_f_m_deemph.html#af36a535927f6395e4540ae956574e223',1,'sdr::FMDeemph::_alpha()'],['../classsdr_1_1_f_i_r_filter.html#ab9642beb28d53e0da14e78c903a16c88',1,'sdr::FIRFilter::_alpha()'],['../classsdr_1_1_b_p_s_k31.html#a5840fa06ad5ab371d8cb720ebef3d283',1,'sdr::BPSK31::_alpha()']]], + ['_5favg',['_avg',['../classsdr_1_1_f_m_deemph.html#afd042cc162b75603454ea8c943d38900',1,'sdr::FMDeemph::_avg()'],['../classsdr_1_1_frac_sub_sample_base.html#a115e6e3fd14cabc4669fa63d0f47c4d5',1,'sdr::FracSubSampleBase::_avg()']]], + ['_5fb_5flength',['_b_length',['../classsdr_1_1_raw_buffer.html#aa14cbd626cb63e4fffc080ddbe14120d',1,'sdr::RawBuffer']]], + ['_5fb_5foffset',['_b_offset',['../classsdr_1_1_raw_buffer.html#a4ff93265c612917548b5b9e27e729c83',1,'sdr::RawBuffer']]], + ['_5fb_5fstored',['_b_stored',['../classsdr_1_1_raw_ring_buffer.html#aa83b365b78b6a2e4a4f05169685b80c2',1,'sdr::RawRingBuffer']]], + ['_5fbeta',['_beta',['../classsdr_1_1_b_p_s_k31.html#a0688ca26994611e997248184f585ac70',1,'sdr::BPSK31']]], + ['_5fbitspersample',['_bitsPerSample',['../classsdr_1_1_wav_sink.html#ac61fd2be2b4320ab0d1639c1ca7d151f',1,'sdr::WavSink']]], + ['_5fblock_5fsize',['_block_size',['../classsdr_1_1_filter_sink.html#aa5cc8d6c36634fef76a79440d52260ad',1,'sdr::FilterSink::_block_size()'],['../classsdr_1_1_filter_source.html#ab0b14caa4e639acb94d0312f4635059e',1,'sdr::FilterSource::_block_size()'],['../classsdr_1_1_filter_node.html#ac8394452dd15c25bd497310777c2d8b5',1,'sdr::FilterNode::_block_size()']]], + ['_5fbuffer',['_buffer',['../classsdr_1_1_auto_cast.html#a20df99da53913cc217c65023fb7bc247',1,'sdr::AutoCast::_buffer()'],['../classsdr_1_1_i_q_base_band.html#ac5b28b7664a51c300ded740850f5e8a6',1,'sdr::IQBaseBand::_buffer()'],['../classsdr_1_1_base_band.html#a4d421c04c1b8f61361522eddd5e401e7',1,'sdr::BaseBand::_buffer()'],['../classsdr_1_1_combine_sink.html#a0cd59909ace71173d1c0d2df2049b473',1,'sdr::CombineSink::_buffer()'],['../classsdr_1_1_interleave.html#a18974fc85ea24f83dbb18610a6070564',1,'sdr::Interleave::_buffer()'],['../classsdr_1_1_a_m_demod.html#a6ee7ca724827bbcb1df39f94e04ffa4e',1,'sdr::AMDemod::_buffer()'],['../classsdr_1_1_u_s_b_demod.html#a02f4e2b68146d92357e21b8a6bd9eb80',1,'sdr::USBDemod::_buffer()'],['../classsdr_1_1_f_m_demod.html#a0ce0a86d6f854a551fa0b5015c7a54c9',1,'sdr::FMDemod::_buffer()'],['../classsdr_1_1_f_m_deemph.html#acf6fbe76f109f5a892c9f4eb0bdd5159',1,'sdr::FMDeemph::_buffer()'],['../classsdr_1_1_filter_node.html#af6632c647ccb2726713df21603e662d9',1,'sdr::FilterNode::_buffer()'],['../classsdr_1_1_f_i_r_filter.html#a6f8f3db14310d350b5bffb6499513b1b',1,'sdr::FIRFilter::_buffer()'],['../classsdr_1_1_port_source.html#af4875056f3b373dd947453156fd944b6',1,'sdr::PortSource::_buffer()'],['../classsdr_1_1_b_p_s_k31.html#a612d180c1f6d289dd2f5a21fb15566d1',1,'sdr::BPSK31::_buffer()'],['../classsdr_1_1_varicode.html#aa0477054e352fe806e1b6f80a27a2549',1,'sdr::Varicode::_buffer()'],['../classsdr_1_1_queue_1_1_message.html#a920ee574314cfa09d49b423c90e45674',1,'sdr::Queue::Message::_buffer()'],['../classsdr_1_1_sig_gen.html#aa546f62fa4a6d6e27d3a5ce65d7fef5f',1,'sdr::SigGen::_buffer()'],['../classsdr_1_1_i_q_sig_gen.html#abb68fab0ced366cc8a7f4e9fc2ad28ad',1,'sdr::IQSigGen::_buffer()'],['../classsdr_1_1_sub_sample.html#a4f62f6f07ef3f2199c41b79081d8011b',1,'sdr::SubSample::_buffer()'],['../classsdr_1_1_inpol_sub_sampler.html#a899e34cc809b40fe64361d3e22fbd67e',1,'sdr::InpolSubSampler::_buffer()'],['../classsdr_1_1_real_imag_part.html#acd2bc9b8566fcddc0bf80a877bcebdfc',1,'sdr::RealImagPart::_buffer()'],['../classsdr_1_1_i_q_balance.html#aefff792d62de2b41b22fbc9ae86ea0c3',1,'sdr::IQBalance::_buffer()'],['../classsdr_1_1_to_complex.html#accdf35c4a20d7b22c9db4a43c6f1b2ba',1,'sdr::ToComplex::_buffer()'],['../classsdr_1_1_cast.html#a0c462ab540ab0df43a62c16717298fd7',1,'sdr::Cast::_buffer()'],['../classsdr_1_1_unsigned_to_signed.html#a3cc3c87952251d8fa523e226d4f99d0b',1,'sdr::UnsignedToSigned::_buffer()'],['../classsdr_1_1_signed_to_unsigned.html#a4d88721f8a5dd40c39621b4bf3a574bd',1,'sdr::SignedToUnsigned::_buffer()'],['../classsdr_1_1_freq_shift.html#a3ba4c6fd7e064c599a393b1d6dc0e2cc',1,'sdr::FreqShift::_buffer()'],['../classsdr_1_1_stream_source.html#a73ba741b0802a7ddbcdb351166238415',1,'sdr::StreamSource::_buffer()'],['../classsdr_1_1_scale.html#af753a012e62924527c29e3d15fc8e2b3',1,'sdr::Scale::_buffer()'],['../classsdr_1_1_a_g_c.html#af8e3c300e5a264a568ed9b18a0c1b02e',1,'sdr::AGC::_buffer()'],['../classsdr_1_1_debug_store.html#adb09b528eaa679d15bb695b100e5fd2a',1,'sdr::DebugStore::_buffer()'],['../classsdr_1_1_g_w_n_source.html#ad1dc4b69edc21b6f95d35de9e21cd275',1,'sdr::GWNSource::_buffer()'],['../classsdr_1_1_wav_source.html#a8ff2d8552444854f58818ee8c3abc88b',1,'sdr::WavSource::_buffer()']]], + ['_5fbuffer_5fsize',['_buffer_size',['../classsdr_1_1_r_t_l_source.html#aa483814f66474e4e988f38a0f1673520',1,'sdr::RTLSource::_buffer_size()'],['../classsdr_1_1_g_w_n_source.html#a3aec2ae939e55cf83a35fe85e3502f18',1,'sdr::GWNSource::_buffer_size()'],['../classsdr_1_1_wav_source.html#a2396f50de268fe1a126555f5e9144a1d',1,'sdr::WavSource::_buffer_size()']]], + ['_5fbuffers',['_buffers',['../classsdr_1_1_buffer_set.html#aa1f0fa97d1b819c03fbc5cb1ec2bd56b',1,'sdr::BufferSet::_buffers()'],['../classsdr_1_1_combine.html#a46442ff7ace056d83ed22fcabe3b9caa',1,'sdr::Combine::_buffers()'],['../classsdr_1_1_filter_source.html#affa0031e5136becba16e7c87ea7b3f3a',1,'sdr::FilterSource::_buffers()']]], + ['_5fbufferset',['_bufferSet',['../classsdr_1_1_buffer_node.html#a50fe21ba7349e28eb8c05b6bf65b9968',1,'sdr::BufferNode']]], + ['_5fbuffersize',['_bufferSize',['../classsdr_1_1_buffer_set.html#a4e40fee0411c0cce0d6706e7d606ac5e',1,'sdr::BufferSet::_bufferSize()'],['../classsdr_1_1_buffer_node.html#a1b8c539b97c3180c6e6155a63248443b',1,'sdr::BufferNode::_bufferSize()'],['../classsdr_1_1_config.html#a6985335c5c05e0a947e1d658321d2a49',1,'sdr::Config::_bufferSize()'],['../classsdr_1_1_sig_gen.html#aed3d1542ccb10ed878ba5000415334f3',1,'sdr::SigGen::_bufferSize()'],['../classsdr_1_1_i_q_sig_gen.html#a44e7c74ce49f90f55054c0856659e8f1',1,'sdr::IQSigGen::_bufferSize()']]], + ['_5fc_5f0t',['_c_0T',['../classsdr_1_1_b_p_s_k31.html#a4071742bae6cc43656d05dc375e309fc',1,'sdr::BPSK31']]], + ['_5fc_5f1t',['_c_1T',['../classsdr_1_1_b_p_s_k31.html#a16efac49cb378741c6c9162012029355',1,'sdr::BPSK31']]], + ['_5fc_5f2t',['_c_2T',['../classsdr_1_1_b_p_s_k31.html#a0b548185b5057602c3dbe975fbf7dc89',1,'sdr::BPSK31']]], + ['_5fcalc',['_calc',['../classsdr_1_1_f_f_t_plan.html#ab5162f0172e3ea20bf2aed4cbacf9be8',1,'sdr::FFTPlan']]], + ['_5fcan_5foverwrite',['_can_overwrite',['../classsdr_1_1_f_m_demod.html#abba89674656a69fb3e68725ede2f7f29',1,'sdr::FMDemod::_can_overwrite()'],['../classsdr_1_1_cast.html#a76cdb3ac362446ec8a351f4621cd47dd',1,'sdr::Cast::_can_overwrite()']]], + ['_5fcast',['_cast',['../classsdr_1_1_auto_cast.html#a4677ef8e89a3258772edf36a91c76f3c',1,'sdr::AutoCast']]], + ['_5fcint16_5fcint8',['_cint16_cint8',['../classsdr_1_1_auto_cast.html#a0fe4b72f59b2aac768a91113efdafb57',1,'sdr::AutoCast']]], + ['_5fcint8_5fcint16',['_cint8_cint16',['../classsdr_1_1_auto_cast.html#accbb7fcb82482e288565c5015f2804de',1,'sdr::AutoCast']]], + ['_5fcode_5ftable',['_code_table',['../classsdr_1_1_varicode.html#ab5116289591398976643bb79baadfcf6',1,'sdr::Varicode']]], + ['_5fconfig',['_config',['../classsdr_1_1_combine.html#a6b25fb98f4cfc8956b00ecb6f48ce5ff',1,'sdr::Combine::_config()'],['../classsdr_1_1_source.html#ac7ea547c33d45cf5b5654ce21957ab27',1,'sdr::Source::_config()']]], + ['_5fcuint8_5fcint16',['_cuint8_cint16',['../classsdr_1_1_auto_cast.html#a1248f283c2cb50d6ca3dd87fb4bdb6aa',1,'sdr::AutoCast']]], + ['_5fcuint8_5fcint8',['_cuint8_cint8',['../classsdr_1_1_auto_cast.html#a78c7ad6c794efb35c847b788235cf34f',1,'sdr::AutoCast']]], + ['_5fcurrentcontellation',['_currentContellation',['../classsdr_1_1_b_p_s_k31.html#af151da88f45eb7c637a6e28006c88247',1,'sdr::BPSK31']]], + ['_5fdelta',['_delta',['../classsdr_1_1_freq_shift.html#a3a7dcad74e53d7c193221e069abe090c',1,'sdr::FreqShift']]], + ['_5fdevice',['_device',['../classsdr_1_1_r_t_l_source.html#a993dab73333abe82ca3460a7691f6a36',1,'sdr::RTLSource']]], + ['_5fdeviceindex',['_deviceIndex',['../classsdr_1_1_port_source.html#a580cb416af502286a00414f1d8f5c40e',1,'sdr::PortSource']]], + ['_5fdl',['_dl',['../classsdr_1_1_b_p_s_k31.html#a99f0eb17cf4fedd7be540c213e3867aa',1,'sdr::BPSK31::_dl()'],['../classsdr_1_1_inpol_sub_sampler.html#ac08c976f927fc2719e193231c80d5577',1,'sdr::InpolSubSampler::_dl()']]], + ['_5fdl_5fidx',['_dl_idx',['../classsdr_1_1_b_p_s_k31.html#ac66bb680fd30fd4f135702605ae89757',1,'sdr::BPSK31::_dl_idx()'],['../classsdr_1_1_inpol_sub_sampler.html#aff4ebce508c557dcaf12684f06406773',1,'sdr::InpolSubSampler::_dl_idx()']]], + ['_5fdo_5fscale',['_do_scale',['../classsdr_1_1_cast.html#abf6ebc0370f338cdf861efd30cc354ec',1,'sdr::Cast']]], + ['_5fdt',['_dt',['../classsdr_1_1_sig_gen.html#a56921f73161095d549a6b92a7afef11d',1,'sdr::SigGen::_dt()'],['../classsdr_1_1_i_q_sig_gen.html#ac5c559287e23478dcde72a3b13e96f7e',1,'sdr::IQSigGen::_dt()']]], + ['_5fenabled',['_enabled',['../classsdr_1_1_f_m_deemph.html#a7be9defbf55abcd863db899e8afea501',1,'sdr::FMDeemph::_enabled()'],['../classsdr_1_1_f_i_r_filter.html#a72d1e0297c601f479ed46a46519fb502',1,'sdr::FIRFilter::_enabled()'],['../classsdr_1_1_a_g_c.html#a8554d5134e0f0160289db46ebe66314d',1,'sdr::AGC::_enabled()']]], + ['_5feos',['_eos',['../classsdr_1_1_source.html#aee600dc30d6f91466acec5ffcde0f3ac',1,'sdr::Source']]], + ['_5ferrortracking',['_errorTracking',['../classsdr_1_1_b_p_s_k31.html#a89cddd31ec12ed1a731af8016ca2a54e',1,'sdr::BPSK31']]], + ['_5ff',['_F',['../classsdr_1_1_b_p_s_k31.html#a4e13fe56c1136046637e1ece07f35f89',1,'sdr::BPSK31']]], + ['_5ffactor',['_factor',['../classsdr_1_1_freq_shift.html#a43aa0216b57d389293956bbc737cb415',1,'sdr::FreqShift']]], + ['_5ffc',['_Fc',['../classsdr_1_1_i_q_base_band.html#a43381aa4a16574e5b054cf73bfd492e7',1,'sdr::IQBaseBand']]], + ['_5fff',['_Ff',['../classsdr_1_1_i_q_base_band.html#a45a6cf70c24d876f6ba49f3ff6c33346',1,'sdr::IQBaseBand::_Ff()'],['../classsdr_1_1_base_band.html#ad82f571c95904676f3e41aad3894d0f4',1,'sdr::BaseBand::_Ff()']]], + ['_5ffft_5ffwd',['_fft_fwd',['../classsdr_1_1_filter_node.html#a5fa231d790ab7f72e5f8dd13b1e92897',1,'sdr::FilterNode']]], + ['_5ffile',['_file',['../classsdr_1_1_wav_sink.html#a833f921f2220b876f678ed5978bbe962',1,'sdr::WavSink::_file()'],['../classsdr_1_1_wav_source.html#a42f0fff8f62da96bc6703c3fe03ec2ad',1,'sdr::WavSource::_file()']]], + ['_5ffilter_5fring',['_filter_ring',['../classsdr_1_1_i_q_base_band.html#ab7b35251cce6051a56dbb24c78e8e4cd',1,'sdr::IQBaseBand::_filter_ring()'],['../classsdr_1_1_base_band.html#a3b868d96f64b282bc131094efb1a5a64',1,'sdr::BaseBand::_filter_ring()']]], + ['_5ffilters',['_filters',['../classsdr_1_1_filter_node.html#ab0888f91626b189cf00f9ba01b8e3a3d',1,'sdr::FilterNode']]], + ['_5ffl',['_Fl',['../classsdr_1_1_f_i_r_filter.html#a3e661ccb9bcdabd926f5e529f6d4dc2d',1,'sdr::FIRFilter']]], + ['_5ffmax',['_fmax',['../classsdr_1_1_filter_source.html#a918cb8387d026ae922582d3f105cff76',1,'sdr::FilterSource::_fmax()'],['../classsdr_1_1_b_p_s_k31.html#a106fd36dcef5ebb97c70b2e7145a2f73',1,'sdr::BPSK31::_Fmax()']]], + ['_5ffmin',['_fmin',['../classsdr_1_1_filter_source.html#afb6a987c3726d7559893e141afd342bc',1,'sdr::FilterSource::_fmin()'],['../classsdr_1_1_b_p_s_k31.html#a3cbb35d4aee991bf3be8137f2218f0dd',1,'sdr::BPSK31::_Fmin()']]], + ['_5ffmt',['_fmt',['../classsdr_1_1_port_source.html#a6b117cef08484042585e32f7ecc1acb7',1,'sdr::PortSource']]], + ['_5ffrac',['_frac',['../classsdr_1_1_inpol_sub_sampler.html#aadf9f91f6296bbe71d48e6f9673e0105',1,'sdr::InpolSubSampler']]], + ['_5fframe_5fcount',['_frame_count',['../classsdr_1_1_wav_source.html#a6cddd3386d7aa0bb2fda9c61596d1adf',1,'sdr::WavSource']]], + ['_5fframe_5fsize',['_frame_size',['../classsdr_1_1_port_sink.html#a110e4fb11c1637fc7ff94389d684cda3',1,'sdr::PortSink']]], + ['_5fframecount',['_frameCount',['../classsdr_1_1_wav_sink.html#a436d25284e3d73f71844c5bc6d587a83',1,'sdr::WavSink']]], + ['_5fframes_5fleft',['_frames_left',['../classsdr_1_1_wav_source.html#a42f770909d7a1324039957d3b2be5027',1,'sdr::WavSource']]], + ['_5ffree_5fbuffers',['_free_buffers',['../classsdr_1_1_buffer_set.html#afcc2d267bac67e0de7450d7a520e4439',1,'sdr::BufferSet']]], + ['_5ffreq_5fshift',['_freq_shift',['../classsdr_1_1_freq_shift_base.html#ac8e562910ad6622842b2a3f56fe1c32c',1,'sdr::FreqShiftBase']]], + ['_5ffrequency',['_frequency',['../classsdr_1_1_r_t_l_source.html#aaecce2d8124feada4ae22ec5e99c8e34',1,'sdr::RTLSource']]], + ['_5ffs',['_Fs',['../classsdr_1_1_i_q_base_band.html#acc93c5f88ac3bf10614c6aab09727edd',1,'sdr::IQBaseBand::_Fs()'],['../classsdr_1_1_f_i_r_filter.html#ad7caee7b3f07e5e38956ffc014d5baa6',1,'sdr::FIRFilter::_Fs()'],['../classsdr_1_1_freq_shift_base.html#a3ae11faa2285a87e4de1e4d1d3211d03',1,'sdr::FreqShiftBase::_Fs()']]], + ['_5ffu',['_Fu',['../classsdr_1_1_f_i_r_filter.html#a8246c325efe878771231ee1e10e03ed8',1,'sdr::FIRFilter']]], + ['_5ffunction',['_function',['../classsdr_1_1_delegate.html#a5ffa9250f1da96b4a555d4b519112880',1,'sdr::Delegate']]], + ['_5fgain',['_gain',['../classsdr_1_1_a_g_c.html#afb650299c4ce14a6452eaa51963a78e2',1,'sdr::AGC']]], + ['_5fgain_5fmu',['_gain_mu',['../classsdr_1_1_b_p_s_k31.html#a40a278099c4100e6d04053f97fe310d8',1,'sdr::BPSK31']]], + ['_5fgain_5fomega',['_gain_omega',['../classsdr_1_1_b_p_s_k31.html#a7365c27f5eb587af4a9a97731d2fdff8',1,'sdr::BPSK31']]], + ['_5fgains',['_gains',['../classsdr_1_1_r_t_l_source.html#a43d46e099e14c740cd72b25eb3cddbb1',1,'sdr::RTLSource']]], + ['_5fgetnormal',['_getNormal',['../classsdr_1_1_g_w_n_source.html#a90bc06a4667521b8254a830a3cf4dd26',1,'sdr::GWNSource']]], + ['_5fhandler',['_handler',['../classsdr_1_1_logger.html#a41eae9cb41b7808da70728b0817c2076',1,'sdr::Logger']]], + ['_5fhastransition',['_hasTransition',['../classsdr_1_1_b_p_s_k31.html#a19a7364e76d267ff1e6868f41ee3bbf2',1,'sdr::BPSK31']]], + ['_5fhist',['_hist',['../classsdr_1_1_b_p_s_k31.html#aab684b2c77f69551f81e6134ee4ca7da',1,'sdr::BPSK31']]], + ['_5fhist_5fidx',['_hist_idx',['../classsdr_1_1_b_p_s_k31.html#abc76ab3fa3638e4d0b1f29eadd2b1e10',1,'sdr::BPSK31']]], + ['_5fidentity',['_identity',['../classsdr_1_1_auto_cast.html#a33a884aa9a57400004368773b1088382',1,'sdr::AutoCast']]], + ['_5fidle',['_idle',['../classsdr_1_1_queue.html#a31f323fab261acd8456b68dc6ed188bf',1,'sdr::Queue']]], + ['_5fimagfact',['_imagFact',['../classsdr_1_1_i_q_balance.html#aa0624e0e246cc184f69273e5b034675a',1,'sdr::IQBalance']]], + ['_5fin',['_in',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#a7e0a792771ed0ecffead52c82d617107',1,'sdr::FFTPlan< double >::_in()'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#acd1ef620ab77c9a1be3c61eb45eb7d44',1,'sdr::FFTPlan< float >::_in()'],['../classsdr_1_1_f_f_t_plan.html#a52e13675a3b936b977df3edc5c132c87',1,'sdr::FFTPlan::_in()']]], + ['_5fin_5fbuffer',['_in_buffer',['../classsdr_1_1_filter_sink.html#a4b0a1b1eb672a3c7994feeb2c135dfb3',1,'sdr::FilterSink::_in_buffer()'],['../classsdr_1_1_filter_source.html#addfd0c3ab6775a252059e7aa1e7b61f7',1,'sdr::FilterSource::_in_buffer()']]], + ['_5findex',['_index',['../classsdr_1_1_combine_sink.html#a89e22e19450bfc3b8625d74fdc90dc92',1,'sdr::CombineSink']]], + ['_5finitializestream',['_initializeStream',['../classsdr_1_1_port_source.html#a5e62bd780d01d8e5c53335c5e7955c96',1,'sdr::PortSource']]], + ['_5finstance',['_instance',['../classsdr_1_1_logger.html#a3477ad7e31f05db92807692445a2670d',1,'sdr::Logger::_instance()'],['../classsdr_1_1_delegate.html#ad8db0139eda95e8256df178ad151b8aa',1,'sdr::Delegate::_instance()']]], + ['_5fint16_5fcint16',['_int16_cint16',['../classsdr_1_1_auto_cast.html#a4a16f561087f6c65e0ad626377275e14',1,'sdr::AutoCast']]], + ['_5fint16_5fcint8',['_int16_cint8',['../classsdr_1_1_auto_cast.html#a7004366d04d148b7664d0ffc5e5563a8',1,'sdr::AutoCast']]], + ['_5fint16_5fint8',['_int16_int8',['../classsdr_1_1_auto_cast.html#a68806db8e41e4a46bc8b29d0739c70a2',1,'sdr::AutoCast']]], + ['_5fint8_5fcint16',['_int8_cint16',['../classsdr_1_1_auto_cast.html#a2e3149b176c38a1bc3c499f344caaa6a',1,'sdr::AutoCast']]], + ['_5fint8_5fcint8',['_int8_cint8',['../classsdr_1_1_auto_cast.html#a58fcc039a393ea7facfa053869144a02',1,'sdr::AutoCast']]], + ['_5fint8_5fint16',['_int8_int16',['../classsdr_1_1_auto_cast.html#aae019388b9064ec9de9f5fad271de8cc',1,'sdr::AutoCast']]], + ['_5fis_5factive',['_is_active',['../classsdr_1_1_blocking_source.html#a47c22cd9fc949b7745279970d26c9008',1,'sdr::BlockingSource']]], + ['_5fis_5fparallel',['_is_parallel',['../classsdr_1_1_blocking_source.html#a0dba272393a870e9cfd2934a9737fb0a',1,'sdr::BlockingSource']]], + ['_5fis_5freal',['_is_real',['../classsdr_1_1_port_source.html#acf00e7c85d2e1d56409b7ff26d65b4c5',1,'sdr::PortSource']]], + ['_5fkern',['_kern',['../classsdr_1_1_filter_source.html#ac4f73d688fdd6c2cf787c050d09b1d74',1,'sdr::FilterSource']]], + ['_5fkernel',['_kernel',['../classsdr_1_1_i_q_base_band.html#acc734a115e0fb90882efe4f9037e2933',1,'sdr::IQBaseBand::_kernel()'],['../classsdr_1_1_base_band.html#a615a720afff59af2135d4d6fb926fbf5',1,'sdr::BaseBand::_kernel()']]], + ['_5flambda',['_lambda',['../classsdr_1_1_a_g_c.html#a1242cabb99a9c5ce1565aac5b0d49c58',1,'sdr::AGC']]], + ['_5flast',['_last',['../classsdr_1_1_i_q_base_band.html#aa6a60f7aa8cd3a67cc7170198f11a14c',1,'sdr::IQBaseBand::_last()'],['../classsdr_1_1_base_band.html#ad2574c8b23dc9b60944f0253825f0af8',1,'sdr::BaseBand::_last()'],['../classsdr_1_1_sub_sample.html#a103f68ddb3f7d6ff00ad00769508e6ef',1,'sdr::SubSample::_last()']]], + ['_5flast_5fconstellation',['_last_constellation',['../classsdr_1_1_b_p_s_k31.html#adaba010c7d0c74e28c719054d0c0f44f',1,'sdr::BPSK31']]], + ['_5flast_5ftrafo',['_last_trafo',['../classsdr_1_1_filter_source.html#a3f6a037eef3366aaeb887fafd08cb6d8',1,'sdr::FilterSource']]], + ['_5flast_5fvalue',['_last_value',['../classsdr_1_1_f_m_demod.html#a8678f4589d7c1d02e9690162b4227b65',1,'sdr::FMDemod']]], + ['_5fleft',['_left',['../classsdr_1_1_sub_sample.html#a9624a4aa7a367b12262069abea312f36',1,'sdr::SubSample']]], + ['_5flevel',['_level',['../classsdr_1_1_log_message.html#af6a4f1af32cf1fca7a4c7af1b0397226',1,'sdr::LogMessage::_level()'],['../classsdr_1_1_stream_log_handler.html#a72d772134ed966c6debb6e64ec157bd7',1,'sdr::StreamLogHandler::_level()']]], + ['_5flut',['_lut',['../classsdr_1_1_base_band.html#aab790a4c39ab63becd65ba1970b48ebe',1,'sdr::BaseBand::_lut()'],['../classsdr_1_1_f_f_t_plan.html#ae9a3563521774be6b902dd67005c26d2',1,'sdr::FFTPlan::_lut()'],['../classsdr_1_1_freq_shift_base.html#ade47bb8ec78af5fca20385fb4f37d5df',1,'sdr::FreqShiftBase::_lut()']]], + ['_5flut_5fcount',['_lut_count',['../classsdr_1_1_base_band.html#afffcd2c96c4e2917d4dd60f2049fab64',1,'sdr::BaseBand::_lut_count()'],['../classsdr_1_1_freq_shift_base.html#aea542686459b7a93ade63a14d09a839e',1,'sdr::FreqShiftBase::_lut_count()']]], + ['_5flut_5finc',['_lut_inc',['../classsdr_1_1_base_band.html#af0533d9636f4acf0863693ce2eb7e08e',1,'sdr::BaseBand::_lut_inc()'],['../classsdr_1_1_freq_shift_base.html#a5e660571870e06094d3c14137d2a2028',1,'sdr::FreqShiftBase::_lut_inc()']]], + ['_5flut_5fsize',['_lut_size',['../classsdr_1_1_base_band.html#ab9673003415f11a53470e39dba82e099',1,'sdr::BaseBand::_lut_size()'],['../classsdr_1_1_freq_shift_base.html#a9d83444915779715665337c03697b517',1,'sdr::FreqShiftBase::_lut_size()']]], + ['_5fmain',['_main',['../classsdr_1_1_queue.html#a40e974a7b7f2dfdc22a13eb88390bab1',1,'sdr::Queue']]], + ['_5fmax_5fomega',['_max_omega',['../classsdr_1_1_b_p_s_k31.html#aca8de3ffeaec1ef562d26b55447cc37c',1,'sdr::BPSK31']]], + ['_5fmean',['_mean',['../classsdr_1_1_g_w_n_source.html#a376a552d03b41d7062c4101ece4ddeb7',1,'sdr::GWNSource']]], + ['_5fmin_5fomega',['_min_omega',['../classsdr_1_1_b_p_s_k31.html#aae86fc72e6e69cd5f3ec383c1c58dd36',1,'sdr::BPSK31']]], + ['_5fmu',['_mu',['../classsdr_1_1_b_p_s_k31.html#a4c54a851adee3e49f8d1bf377f78c220',1,'sdr::BPSK31::_mu()'],['../classsdr_1_1_inpol_sub_sampler.html#a0b282aab60784e2d3d81528db07d7c8e',1,'sdr::InpolSubSampler::_mu()']]], + ['_5fn',['_n',['../classsdr_1_1_sub_sample.html#ad3127d84e3a0d1e64f02d5eeba31526d',1,'sdr::SubSample::_n()'],['../classsdr_1_1_interleave.html#a41d7277b1f858e7e26ed2aaebcc2a9c8',1,'sdr::Interleave::_N()'],['../classsdr_1_1_f_f_t_plan.html#a89e50030f9bec2fc66ef18564b3fa49e',1,'sdr::FFTPlan::_N()']]], + ['_5fnonvirt_5fidle_5fcb',['_nonvirt_idle_cb',['../classsdr_1_1_blocking_source.html#af8effc9fd6b088738e95719e5e242caf',1,'sdr::BlockingSource']]], + ['_5fnumbuffers',['_numBuffers',['../classsdr_1_1_config.html#a272eaf73bc71aefa8137fadddf547db6',1,'sdr::Config']]], + ['_5fnumchanels',['_numChanels',['../classsdr_1_1_wav_sink.html#aaa77d25b30620ca3cba6a2e795d1e855',1,'sdr::WavSink']]], + ['_5fofs',['_oFs',['../classsdr_1_1_i_q_base_band.html#a0e5a1ce6011ddb1de0c661d1e2354b7c',1,'sdr::IQBaseBand::_oFs()'],['../classsdr_1_1_sub_sample.html#a477e48ecf9300c57df07557925af0aae',1,'sdr::SubSample::_oFs()']]], + ['_5fomega',['_omega',['../classsdr_1_1_b_p_s_k31.html#a5470329484c6ffb1b3d2a084d7a7fc64',1,'sdr::BPSK31']]], + ['_5fomega_5frel',['_omega_rel',['../classsdr_1_1_b_p_s_k31.html#a694edbdce37208b475d545c5be610161',1,'sdr::BPSK31']]], + ['_5fonstart',['_onStart',['../classsdr_1_1_queue.html#a778063ea21baba61c0e2ede519fb0da8',1,'sdr::Queue']]], + ['_5fonstop',['_onStop',['../classsdr_1_1_queue.html#a88450462f8ca5c2a68bdee5e88ae6768',1,'sdr::Queue']]], + ['_5foptions',['_options',['../classsdr_1_1_options.html#ae59c6b922121a19ff9ad59200b51f48c',1,'sdr::Options']]], + ['_5forder',['_order',['../classsdr_1_1_i_q_base_band.html#a37078c6a2799c118c0892fbdd6968e0c',1,'sdr::IQBaseBand::_order()'],['../classsdr_1_1_base_band.html#adc54207b20067fd43fb61f89e5a720e1',1,'sdr::BaseBand::_order()'],['../classsdr_1_1_f_i_r_filter.html#af3fa19a8ce102614bf261b4e58134b01',1,'sdr::FIRFilter::_order()']]], + ['_5fout',['_out',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#a4f006a3ff002e57646b47a47e15177bf',1,'sdr::FFTPlan< double >::_out()'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#a10c55ea7cf4286140ea66d529ad56c2a',1,'sdr::FFTPlan< float >::_out()'],['../classsdr_1_1_f_f_t_plan.html#a58b32e87e4b7bf0f7e6a1ec270c748a3',1,'sdr::FFTPlan::_out()']]], + ['_5fout_5fbuffer',['_out_buffer',['../classsdr_1_1_filter_sink.html#ae48100343288c6f7eff25cd1462215ed',1,'sdr::FilterSink']]], + ['_5fowner',['_owner',['../classsdr_1_1_raw_buffer.html#a3127de65087a2e2260d53c28616089bc',1,'sdr::RawBuffer']]], + ['_5fp',['_P',['../classsdr_1_1_b_p_s_k31.html#ade59846cb15dbe988a7238ed598df9a3',1,'sdr::BPSK31']]], + ['_5fp_5f0t',['_p_0T',['../classsdr_1_1_b_p_s_k31.html#a36a15215bd1ca9ff77ed24007026897c',1,'sdr::BPSK31']]], + ['_5fp_5f1t',['_p_1T',['../classsdr_1_1_b_p_s_k31.html#a9176a05d6e8f1cd3f566df0e8710d0a3',1,'sdr::BPSK31']]], + ['_5fp_5f2t',['_p_2T',['../classsdr_1_1_b_p_s_k31.html#aaff3323641cbe2ec6f6c821fc688df4d',1,'sdr::BPSK31']]], + ['_5fparallel_5fmain',['_parallel_main',['../classsdr_1_1_blocking_source.html#a9846623aa13f2743fe5de6eb7d6024c6',1,'sdr::BlockingSource']]], + ['_5fparent',['_parent',['../classsdr_1_1_combine_sink.html#a3237dac67dfc266e3dee4a6da9ce86ce',1,'sdr::CombineSink']]], + ['_5fperiod',['_period',['../classsdr_1_1_frac_sub_sample_base.html#a3ed0ad8fe1fbbb652cb11975aa1f9220',1,'sdr::FracSubSampleBase']]], + ['_5fphaseerror',['_phaseError',['../classsdr_1_1_b_p_s_k31.html#ac630b11ea9bced1aa085bbb5523d064f',1,'sdr::BPSK31']]], + ['_5fplan',['_plan',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#a7da6ed898ae917a9d249b9ab026fe754',1,'sdr::FFTPlan< double >::_plan()'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#a5932b9331a8977462bc77e2eb20fbede',1,'sdr::FFTPlan< float >::_plan()'],['../classsdr_1_1_filter_sink.html#a84f020c44d3affe66382e16df0db3ef8',1,'sdr::FilterSink::_plan()'],['../classsdr_1_1_filter_source.html#a07e4f06f35b5406f7862d6a8b4bef533',1,'sdr::FilterSource::_plan()']]], + ['_5fprocess',['_process',['../classsdr_1_1_unsigned_to_signed.html#acb1a98e5c458a8512f093e6f94ef4153',1,'sdr::UnsignedToSigned::_process()'],['../classsdr_1_1_signed_to_unsigned.html#a565b29d0368fba94c752b1c761fca3f3',1,'sdr::SignedToUnsigned::_process()'],['../classsdr_1_1_i_q_base_band.html#ae79b3b824eb5610a1b44732f8ef3842a',1,'sdr::IQBaseBand::_process()'],['../classsdr_1_1_base_band.html#a603c4b949058d0e65870c841e4f4de48',1,'sdr::BaseBand::_process()'],['../classsdr_1_1_u_s_b_demod.html#aa12358f20001ef1691670e5802bc829c',1,'sdr::USBDemod::_process()'],['../classsdr_1_1_f_m_demod.html#a58b7f2935014a069665905662e7d15e3',1,'sdr::FMDemod::_process()'],['../classsdr_1_1_f_m_deemph.html#a44acc50b9eaa05d912923c96ac0b1874',1,'sdr::FMDeemph::_process()'],['../classsdr_1_1_f_i_r_filter.html#aef359a18aadcc324ae912c67d4bb352b',1,'sdr::FIRFilter::_process()'],['../classsdr_1_1_sub_sample.html#a1577ab661aeb7930d43de7dca9f2e732',1,'sdr::SubSample::_process()'],['../classsdr_1_1_i_q_balance.html#a422c8725e158071e147f372759fad99a',1,'sdr::IQBalance::_process()'],['../classsdr_1_1_cast.html#aa4258da6083056686376b32aa0ae15cd',1,'sdr::Cast::_process()']]], + ['_5fprocess_5fint16',['_process_int16',['../classsdr_1_1_unsigned_to_signed.html#ab3736d949dac9e30b98d81b31df182a6',1,'sdr::UnsignedToSigned::_process_int16()'],['../classsdr_1_1_signed_to_unsigned.html#a36a2394ea34ca02868708d7d94ac12bd',1,'sdr::SignedToUnsigned::_process_int16()']]], + ['_5fprocess_5fint8',['_process_int8',['../classsdr_1_1_unsigned_to_signed.html#a39a09d9fb122713b6b8fa187e4d33c07',1,'sdr::UnsignedToSigned::_process_int8()'],['../classsdr_1_1_signed_to_unsigned.html#a42276f4e439813dc8eaa87ce798cbac2',1,'sdr::SignedToUnsigned::_process_int8()']]], + ['_5fptr',['_ptr',['../classsdr_1_1_raw_buffer.html#add2d96bdd2f1d7229c980a20b388e4dd',1,'sdr::RawBuffer']]], + ['_5fqueue',['_queue',['../classsdr_1_1_queue.html#ae686ad5be0afd27a38a1b8d3d15e08c3',1,'sdr::Queue']]], + ['_5fqueue_5fcond',['_queue_cond',['../classsdr_1_1_queue.html#afd7a65823156e0d1a4512542674883a4',1,'sdr::Queue']]], + ['_5fqueue_5flock',['_queue_lock',['../classsdr_1_1_queue.html#a258a5d1adc7edb81cebf19470a55d646',1,'sdr::Queue']]], + ['_5frealfact',['_realFact',['../classsdr_1_1_i_q_balance.html#aab10690f6088fdcd79ab8b11b71d3fb1',1,'sdr::IQBalance']]], + ['_5freconfigure',['_reconfigure',['../classsdr_1_1_i_q_base_band.html#a542fe7d54c62d2ac7c8357fb5d35f7f9',1,'sdr::IQBaseBand']]], + ['_5frefcount',['_refcount',['../classsdr_1_1_raw_buffer.html#abb345679b48051ba741887b194e93c1c',1,'sdr::RawBuffer']]], + ['_5fring',['_ring',['../classsdr_1_1_i_q_base_band.html#a51e65ca8d52b7f933b1fcb92f679a1e0',1,'sdr::IQBaseBand::_ring()'],['../classsdr_1_1_base_band.html#aa2f45ff7e2ef122c59874cedaa4aaf5f',1,'sdr::BaseBand::_ring()'],['../classsdr_1_1_f_i_r_filter.html#a74c56d78d4e7fbb6fa20eaf9d284494b',1,'sdr::FIRFilter::_ring()']]], + ['_5fring_5foffset',['_ring_offset',['../classsdr_1_1_i_q_base_band.html#a1bbc86d2b25e284ec2e3c4ad9cf658e7',1,'sdr::IQBaseBand::_ring_offset()'],['../classsdr_1_1_base_band.html#af2cabe70849fbf9da652c5ae3e5585a6',1,'sdr::BaseBand::_ring_offset()'],['../classsdr_1_1_f_i_r_filter.html#aaad38be5e520d03c50877f94dfe19725',1,'sdr::FIRFilter::_ring_offset()']]], + ['_5frunning',['_running',['../classsdr_1_1_queue.html#a737a26f99e37b820256f1116f58c5f12',1,'sdr::Queue']]], + ['_5fsample_5fcount',['_sample_count',['../classsdr_1_1_i_q_base_band.html#a27657f14e40d2d7fbb9b8d965083e7cf',1,'sdr::IQBaseBand::_sample_count()'],['../classsdr_1_1_base_band.html#a7fbe83bf8cd4ba081296116e16b9f698',1,'sdr::BaseBand::_sample_count()'],['../classsdr_1_1_frac_sub_sample_base.html#a3908cb97d6b862c99a10b34ef84ae817',1,'sdr::FracSubSampleBase::_sample_count()']]], + ['_5fsample_5frate',['_sample_rate',['../classsdr_1_1_filter_source.html#a171e2c01f2259b02be63170e0ea28033',1,'sdr::FilterSource::_sample_rate()'],['../classsdr_1_1_filter_node.html#ad2b27f79cb8472e5a1a4f2993d4c1d9e',1,'sdr::FilterNode::_sample_rate()'],['../classsdr_1_1_r_t_l_source.html#aff177370aee15feb02b7962774e306b6',1,'sdr::RTLSource::_sample_rate()'],['../classsdr_1_1_freq_shift.html#ae8b6f7658eeed069a77d4ed998a85bde',1,'sdr::FreqShift::_sample_rate()'],['../classsdr_1_1_a_g_c.html#aec81c9b69ebb847516e27f8fed0c92ae',1,'sdr::AGC::_sample_rate()'],['../classsdr_1_1_g_w_n_source.html#a4ce174e09f78cd1f6b27dcb0a832dc44',1,'sdr::GWNSource::_sample_rate()'],['../classsdr_1_1_wav_source.html#a803c46ff54124dfeae2dcf5f345d7b09',1,'sdr::WavSource::_sample_rate()']]], + ['_5fsamplerate',['_sampleRate',['../classsdr_1_1_config.html#a9547c7c2cd25efde4c2f64b367d287cb',1,'sdr::Config::_sampleRate()'],['../classsdr_1_1_port_source.html#aa710e7498cf6fe7423aa382e610cdfe7',1,'sdr::PortSource::_sampleRate()'],['../classsdr_1_1_sig_gen.html#ab5e7158fea455f2bc39ef8eb3cbb5f73',1,'sdr::SigGen::_sampleRate()'],['../classsdr_1_1_i_q_sig_gen.html#a4e612b880736efe6840ce639293803a7',1,'sdr::IQSigGen::_sampleRate()'],['../classsdr_1_1_wav_sink.html#a39c4470a68702b523acb3529fffea96e',1,'sdr::WavSink::_sampleRate()']]], + ['_5fsamplesleft',['_samplesLeft',['../classsdr_1_1_buffer_node.html#ace6451c9fe46e682742911b9dc3aa6e9',1,'sdr::BufferNode']]], + ['_5fscale',['_scale',['../classsdr_1_1_sig_gen.html#aa93ae70c7407f7a21db6bc1558b1e524',1,'sdr::SigGen::_scale()'],['../classsdr_1_1_i_q_sig_gen.html#a9de3f71a911474ecaa219387fe686916',1,'sdr::IQSigGen::_scale()'],['../classsdr_1_1_real_imag_part.html#ab0c78ce9e462059be02dfd38aefdc52f',1,'sdr::RealImagPart::_scale()'],['../classsdr_1_1_to_complex.html#a40dbe4df970113fab71aaf4150d6c648',1,'sdr::ToComplex::_scale()'],['../classsdr_1_1_cast.html#a23bee3cb921304367906cfacba00914b',1,'sdr::Cast::_scale()'],['../classsdr_1_1_unsigned_to_signed.html#af1580673231b72102b11e3defee63bee',1,'sdr::UnsignedToSigned::_scale()'],['../classsdr_1_1_freq_shift.html#a8e4ce9a7cb2b81b88cfc4f75f5ebc6a9',1,'sdr::FreqShift::_scale()'],['../classsdr_1_1_scale.html#aa5e3017fda68332c67ac0cf84bfdd260',1,'sdr::Scale::_scale()']]], + ['_5fsd',['_sd',['../classsdr_1_1_a_g_c.html#a1723d92b909754ad0ce7636cabd65076',1,'sdr::AGC']]], + ['_5fselect_5freal',['_select_real',['../classsdr_1_1_real_imag_part.html#adb9159445d2a383cd72c94d405c6debb',1,'sdr::RealImagPart']]], + ['_5fshift',['_shift',['../classsdr_1_1_f_m_demod.html#a82781f8d9631106089841545c9796f8c',1,'sdr::FMDemod::_shift()'],['../classsdr_1_1_cast.html#aab41bbc2d49266be3a42ac2f6c5685a8',1,'sdr::Cast::_shift()'],['../classsdr_1_1_freq_shift.html#a806ffc298da46fad3a1a057e19a61db1',1,'sdr::FreqShift::_shift()'],['../classsdr_1_1_scale.html#a6040d1d6f88868a90ea39ab05aafd6ee',1,'sdr::Scale::_shift()']]], + ['_5fshift_5ffreq',['_shift_freq',['../classsdr_1_1_base_band.html#a3190f860e84dbe6eb8a4fa55e5a19b42',1,'sdr::BaseBand']]], + ['_5fsignalidle',['_signalIdle',['../classsdr_1_1_queue.html#a3f0e1694388e1bc6091b2f69c9f47093',1,'sdr::Queue']]], + ['_5fsignals',['_signals',['../classsdr_1_1_sig_gen.html#a22453551d22b2db778dff5edb47856ab',1,'sdr::SigGen::_signals()'],['../classsdr_1_1_i_q_sig_gen.html#a6b3ad712c7f874ae85a903671d0e16ac',1,'sdr::IQSigGen::_signals()']]], + ['_5fsignalstart',['_signalStart',['../classsdr_1_1_queue.html#a676426643d21b8f4070353dd732c0327',1,'sdr::Queue']]], + ['_5fsignalstop',['_signalStop',['../classsdr_1_1_queue.html#abdd5b0e151e635a0c7b17522f51fd7bd',1,'sdr::Queue']]], + ['_5fsink',['_sink',['../classsdr_1_1_queue_1_1_message.html#a0dac26785e72edd9cb7154ca1f265353',1,'sdr::Queue::Message']]], + ['_5fsinks',['_sinks',['../classsdr_1_1_combine.html#a2bbe7c33dac4827b42eae989b9b0d505',1,'sdr::Combine::_sinks()'],['../classsdr_1_1_source.html#a2d030b840c4a1ad45d7a6598f9f582b9',1,'sdr::Source::_sinks()']]], + ['_5fsize',['_size',['../classsdr_1_1_buffer.html#aa6c46a40790972e318be202f9c9e3f63',1,'sdr::Buffer::_size()'],['../classsdr_1_1_ring_buffer.html#a5b0e525f4c6191d8c8d24da46eb5384d',1,'sdr::RingBuffer::_size()']]], + ['_5fsourcebs',['_sourceBs',['../classsdr_1_1_i_q_base_band.html#a777b755a8230ea494f7bac5ff98c4e20',1,'sdr::IQBaseBand']]], + ['_5fstorage_5fsize',['_storage_size',['../classsdr_1_1_raw_buffer.html#a101a2f2a11976504d8782b8e952f289d',1,'sdr::RawBuffer']]], + ['_5fstored',['_stored',['../classsdr_1_1_ring_buffer.html#ad4a1a9131befb84f2288dd0f45e89dc8',1,'sdr::RingBuffer']]], + ['_5fstream',['_stream',['../classsdr_1_1_stream_log_handler.html#a2cb2c121e94b12e098e9b9a751967def',1,'sdr::StreamLogHandler::_stream()'],['../classsdr_1_1_port_sink.html#a13ef6bcf81b5d490bf33241efcb7d157',1,'sdr::PortSink::_stream()'],['../classsdr_1_1_port_source.html#ad09e69cd96993d8963e46e4d2a87a967',1,'sdr::PortSource::_stream()'],['../classsdr_1_1_stream_source.html#a7108de045b76348e4df87eb9500c1cf2',1,'sdr::StreamSource::_stream()'],['../classsdr_1_1_stream_sink.html#af206a47a032f79ba38923c7f1e511450',1,'sdr::StreamSink::_stream()'],['../classsdr_1_1_debug_dump.html#a5bc2bcd87d1188ec321b51c27c78e0ea',1,'sdr::DebugDump::_stream()']]], + ['_5fstreamisopen',['_streamIsOpen',['../classsdr_1_1_port_source.html#a29c6c91a2f98159a58a9535c8c6dfeb5',1,'sdr::PortSource']]], + ['_5fsub_5fsample',['_sub_sample',['../classsdr_1_1_i_q_base_band.html#a2ddc881b31b6142d53486d1d2110841c',1,'sdr::IQBaseBand::_sub_sample()'],['../classsdr_1_1_base_band.html#a8f612b4bacf93e8fa290bb2752a35735',1,'sdr::BaseBand::_sub_sample()']]], + ['_5fsupersample',['_superSample',['../classsdr_1_1_b_p_s_k31.html#a271efce529e564fe4255862f41137662',1,'sdr::BPSK31']]], + ['_5ft',['_t',['../classsdr_1_1_sig_gen.html#acc6e02b40efd978aa75841ca80e169f0',1,'sdr::SigGen::_t()'],['../classsdr_1_1_i_q_sig_gen.html#a6604987b78ee11f911768cbc6cfe0f64',1,'sdr::IQSigGen::_t()']]], + ['_5ftake_5fidx',['_take_idx',['../classsdr_1_1_raw_ring_buffer.html#a62b8711073973314e044e52607eeed6a',1,'sdr::RawRingBuffer']]], + ['_5ftarget',['_target',['../classsdr_1_1_a_g_c.html#a8155580ed50faab0c458b4461430ee5c',1,'sdr::AGC']]], + ['_5ftau',['_tau',['../classsdr_1_1_a_g_c.html#ab569653f091eda6bf11174d3e8cfa9ae',1,'sdr::AGC']]], + ['_5ftemp',['_temp',['../classsdr_1_1_buffer_node.html#ad3b1f7333d120b68ef817ab040915c68',1,'sdr::BufferNode']]], + ['_5ftheta',['_theta',['../classsdr_1_1_b_p_s_k31.html#abba53fd1265a1e8d1286ea0fb45d2e94',1,'sdr::BPSK31']]], + ['_5fthread',['_thread',['../classsdr_1_1_blocking_source.html#a6395ea6ce34f3db1dadba775af35fd5f',1,'sdr::BlockingSource::_thread()'],['../classsdr_1_1_queue.html#ac9e0bc546b7bd19be55140d2bcec535a',1,'sdr::Queue::_thread()'],['../classsdr_1_1_r_t_l_source.html#a6f4e7644090786d6d83d91fbb7a430a2',1,'sdr::RTLSource::_thread()']]], + ['_5ftmax',['_tMax',['../classsdr_1_1_sig_gen.html#adf316314416047feb32c6b0582250c20',1,'sdr::SigGen::_tMax()'],['../classsdr_1_1_i_q_sig_gen.html#a988e5b23f1dc32fbd00128a4d8a366be',1,'sdr::IQSigGen::_tMax()']]], + ['_5ftrafo_5fbuffer',['_trafo_buffer',['../classsdr_1_1_filter_source.html#a967b9c6420c17c4a4c216ba7814c8230',1,'sdr::FilterSource']]], + ['_5ftype',['_type',['../classsdr_1_1_config.html#aca928dd7fdd6e83f882aa57d16e923f3',1,'sdr::Config::_type()'],['../classsdr_1_1_options_1_1_value.html#aa92742ca1a84741e1565c68249abf041',1,'sdr::Options::Value::_type()'],['../classsdr_1_1_wav_source.html#a6b27bd80779e95de3ca034f368964cdf',1,'sdr::WavSource::_type()']]], + ['_5fuint16_5fcint16',['_uint16_cint16',['../classsdr_1_1_auto_cast.html#ac8f4d2aa4d1b8c3e939d641375024a67',1,'sdr::AutoCast']]], + ['_5fuint8_5fcint16',['_uint8_cint16',['../classsdr_1_1_auto_cast.html#a36280c6f1d20a620ed546d7ab98db63a',1,'sdr::AutoCast']]], + ['_5fuint8_5fcint8',['_uint8_cint8',['../classsdr_1_1_auto_cast.html#a8d6383d01f90a8c4caf63a1253eadc44',1,'sdr::AutoCast']]], + ['_5fupdate_5ffilter_5fkernel',['_update_filter_kernel',['../classsdr_1_1_i_q_base_band.html#a1a803c4e7f54c1f281b4c400d28802f7',1,'sdr::IQBaseBand::_update_filter_kernel()'],['../classsdr_1_1_base_band.html#ab82da1c27859bf64c044bc7f9bb0c568',1,'sdr::BaseBand::_update_filter_kernel()']]], + ['_5fupdate_5flut_5fincr',['_update_lut_incr',['../classsdr_1_1_freq_shift_base.html#a0bcf83cb75130997a19a5954cad2a016',1,'sdr::FreqShiftBase']]], + ['_5fupdatefilter',['_updateFilter',['../classsdr_1_1_filter_source.html#a76f7c56b5170b54d691d867197bcd0ca',1,'sdr::FilterSource']]], + ['_5fupdatepll',['_updatePLL',['../classsdr_1_1_b_p_s_k31.html#a778802b1b78667db77a5b95f934d4cd2',1,'sdr::BPSK31']]], + ['_5fupdatesampler',['_updateSampler',['../classsdr_1_1_b_p_s_k31.html#af7ecee919d13d75c65be3541244aa124',1,'sdr::BPSK31']]], + ['_5fvalue',['_value',['../classsdr_1_1_options_1_1_value.html#acda594feba20f8a625cc4fe6964b88d0',1,'sdr::Options::Value::_value()'],['../classsdr_1_1_varicode.html#a162dfe8dd1ae552e64ca87ac3dee6edc',1,'sdr::Varicode::_value()']]], + ['_5fview',['_view',['../classsdr_1_1_debug_store.html#ae50fa8b237a4f4db86829bad5b862a17',1,'sdr::DebugStore']]], + ['_5fwidth',['_width',['../classsdr_1_1_i_q_base_band.html#abd62f27924fe4bd0dff0ad75f312584b',1,'sdr::IQBaseBand::_width()'],['../classsdr_1_1_base_band.html#a586aef87dd64f94f9c377b45575681eb',1,'sdr::BaseBand::_width()']]] +]; diff --git a/search/all_1.html b/search/all_1.html new file mode 100644 index 0000000..e290644 --- /dev/null +++ b/search/all_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_1.js b/search/all_1.js new file mode 100644 index 0000000..ff42c28 --- /dev/null +++ b/search/all_1.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['addeos',['addEOS',['../classsdr_1_1_source.html#a7cf977be7a508097532991155e90ae45',1,'sdr::Source']]], + ['addfilter',['addFilter',['../classsdr_1_1_filter_node.html#af1ff1fbbbb23610f260fa19c2014f4c0',1,'sdr::FilterNode']]], + ['addhandler',['addHandler',['../classsdr_1_1_logger.html#a6c2ed5cb8cc27f85fc9fbf45602604e0',1,'sdr::Logger']]], + ['addidle',['addIdle',['../classsdr_1_1_queue.html#aedd07c29585deedd286266001c0e0356',1,'sdr::Queue']]], + ['addsine',['addSine',['../classsdr_1_1_sig_gen.html#a3c720193f3d4f144ed8e0111de0696d0',1,'sdr::SigGen::addSine()'],['../classsdr_1_1_i_q_sig_gen.html#ab70c8bbf0358a5ac48d120042a8b92a1',1,'sdr::IQSigGen::addSine()']]], + ['addstart',['addStart',['../classsdr_1_1_queue.html#ab17a48f85010dbb8ed25bd5aed143f19',1,'sdr::Queue']]], + ['addstop',['addStop',['../classsdr_1_1_queue.html#aa90eba90f16ed710d4a5214fa9b70354',1,'sdr::Queue']]], + ['agc',['AGC',['../classsdr_1_1_a_g_c.html',1,'sdr']]], + ['agc',['AGC',['../classsdr_1_1_a_g_c.html#a3760a8692f5d81b753b8887396b3866c',1,'sdr::AGC']]], + ['agcenabled',['agcEnabled',['../classsdr_1_1_r_t_l_source.html#a2de19f82c951290711e9a3fa59e33fe6',1,'sdr::RTLSource']]], + ['allowoverwrite',['allowOverwrite',['../classsdr_1_1_queue_1_1_message.html#acd22d9aa751e2bd05f22b00df91d1668',1,'sdr::Queue::Message']]], + ['amdemod',['AMDemod',['../classsdr_1_1_a_m_demod.html',1,'sdr']]], + ['amdemod',['AMDemod',['../classsdr_1_1_a_m_demod.html#ab09fa003c654b85df3373d1a8c85036a',1,'sdr::AMDemod']]], + ['any',['ANY',['../classsdr_1_1_options.html#a9ac110e66c7d6065c7035577bcf51923a34398a6bf19ef577442e10d24879b953',1,'sdr::Options']]], + ['applyfrequencyshift',['applyFrequencyShift',['../classsdr_1_1_freq_shift_base.html#a871a9aa29165fa8ff1aff21355cdda8b',1,'sdr::FreqShiftBase']]], + ['argtype',['ArgType',['../classsdr_1_1_options.html#a9ac110e66c7d6065c7035577bcf51923',1,'sdr::Options']]], + ['as',['as',['../classsdr_1_1_buffer.html#a693db0b8995cb1c1cc8d8d424a6699f5',1,'sdr::Buffer']]], + ['autocast',['AutoCast',['../classsdr_1_1_auto_cast.html',1,'sdr']]], + ['autocast',['AutoCast',['../classsdr_1_1_auto_cast.html#ad62daff1b7f3cd069a52306d0050ee0f',1,'sdr::AutoCast']]], + ['a_20c_2b_2b_20library_20for_20software_20defined_20radio_20_28sdr_29_2e',['A C++ library for software defined radio (SDR).',['../index.html',1,'']]] +]; diff --git a/search/all_10.html b/search/all_10.html new file mode 100644 index 0000000..c55c836 --- /dev/null +++ b/search/all_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_10.js b/search/all_10.js new file mode 100644 index 0000000..d94e8ae --- /dev/null +++ b/search/all_10.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['rawbuffer',['RawBuffer',['../classsdr_1_1_raw_buffer.html',1,'sdr']]], + ['rawbuffer',['RawBuffer',['../classsdr_1_1_raw_buffer.html#a781495d421a8cb4fcf27b0e422a3b432',1,'sdr::RawBuffer::RawBuffer()'],['../classsdr_1_1_raw_buffer.html#ad55ada4bd5b86ea232000360e4e7da38',1,'sdr::RawBuffer::RawBuffer(char *data, size_t offset, size_t len)'],['../classsdr_1_1_raw_buffer.html#a17f8bfebc44cfff6e77af7d6fefdbbe5',1,'sdr::RawBuffer::RawBuffer(size_t N, BufferOwner *owner=0)'],['../classsdr_1_1_raw_buffer.html#a534d87f7eac95b2f9d912e3f7c509d47',1,'sdr::RawBuffer::RawBuffer(const RawBuffer &other)'],['../classsdr_1_1_raw_buffer.html#a274ca58a73c0b27bc23b440e8cc693bf',1,'sdr::RawBuffer::RawBuffer(const RawBuffer &other, size_t offset, size_t len)']]], + ['rawringbuffer',['RawRingBuffer',['../classsdr_1_1_raw_ring_buffer.html',1,'sdr']]], + ['rawringbuffer',['RawRingBuffer',['../classsdr_1_1_raw_ring_buffer.html#a079ead1956aece8f0d4d50b852362f1e',1,'sdr::RawRingBuffer::RawRingBuffer()'],['../classsdr_1_1_raw_ring_buffer.html#a55bb852e46dbb192651048e8ca1426e4',1,'sdr::RawRingBuffer::RawRingBuffer(size_t size)'],['../classsdr_1_1_raw_ring_buffer.html#aae49387c3f41d2f8674ab8664f9adb52',1,'sdr::RawRingBuffer::RawRingBuffer(const RawRingBuffer &other)']]], + ['realimagpart',['RealImagPart',['../classsdr_1_1_real_imag_part.html#a660f45e4f9967162d1031769fec7d6b8',1,'sdr::RealImagPart']]], + ['realimagpart',['RealImagPart',['../classsdr_1_1_real_imag_part.html',1,'sdr']]], + ['realpart',['RealPart',['../classsdr_1_1_real_part.html',1,'sdr']]], + ['realpart',['RealPart',['../classsdr_1_1_real_part.html#a3a7f5dab0a46d0900f1f0f3a249fac38',1,'sdr::RealPart']]], + ['ref',['ref',['../classsdr_1_1_raw_buffer.html#a45139d21c4bb6df7c664720223ea3540',1,'sdr::RawBuffer']]], + ['refcount',['refCount',['../classsdr_1_1_raw_buffer.html#ab6079ff8999d3878071d6308312e063a',1,'sdr::RawBuffer']]], + ['remidle',['remIdle',['../classsdr_1_1_queue.html#a390125515b339ae54ee586cb4e162131',1,'sdr::Queue']]], + ['remstart',['remStart',['../classsdr_1_1_queue.html#a9a3ea601975c9890958759914ce19f88',1,'sdr::Queue']]], + ['remstop',['remStop',['../classsdr_1_1_queue.html#a6d9e3d5fc2007a77d37f4a070159ba5b',1,'sdr::Queue']]], + ['reset',['reset',['../classsdr_1_1_frac_sub_sample_base.html#a8c642f90899d44706f6d1ded63ecf1d8',1,'sdr::FracSubSampleBase']]], + ['resize',['resize',['../classsdr_1_1_buffer_set.html#a2b492dc68f98a3b554790b04578a73b1',1,'sdr::BufferSet::resize()'],['../classsdr_1_1_raw_ring_buffer.html#a9afdf7bcc99f4f4f0ef76ae7e6e5ae40',1,'sdr::RawRingBuffer::resize()'],['../classsdr_1_1_ring_buffer.html#a17f2ffa9f6fd3aec82b3e178bdbc4ce3',1,'sdr::RingBuffer::resize()']]], + ['ringbuffer',['RingBuffer',['../classsdr_1_1_ring_buffer.html',1,'sdr']]], + ['ringbuffer',['RingBuffer',['../classsdr_1_1_ring_buffer.html#af8b4ecb97ce0d0e922798c7dd12191bd',1,'sdr::RingBuffer::RingBuffer()'],['../classsdr_1_1_ring_buffer.html#ab0eb6596e68ab4550aeae42861d1b7d4',1,'sdr::RingBuffer::RingBuffer(size_t N)'],['../classsdr_1_1_ring_buffer.html#aa67a8759724fb0eda8337dac0a4d9f68',1,'sdr::RingBuffer::RingBuffer(const RingBuffer< Scalar > &other)']]], + ['rscalar',['RScalar',['../classsdr_1_1_traits_3_01uint8__t_01_4.html#a1de8e7c8d4f74504efa30dbf8583feea',1,'sdr::Traits< uint8_t >::RScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html#a32ff9e28255471e6bec69f7da45761bf',1,'sdr::Traits< std::complex< uint8_t > >::RScalar()'],['../classsdr_1_1_traits_3_01int8__t_01_4.html#a0f9fd3ed2f9d0007ad2f161fd33c8cb6',1,'sdr::Traits< int8_t >::RScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html#a83abf696ec4760daf07524e22bb3070d',1,'sdr::Traits< std::complex< int8_t > >::RScalar()'],['../classsdr_1_1_traits_3_01uint16__t_01_4.html#a143aa2faff12897677877d0a305924f4',1,'sdr::Traits< uint16_t >::RScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html#a21a48f2328238e11bc735f8d1c199145',1,'sdr::Traits< std::complex< uint16_t > >::RScalar()'],['../classsdr_1_1_traits_3_01int16__t_01_4.html#a0b13ba8f410005b27f657ec59478282a',1,'sdr::Traits< int16_t >::RScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html#ae474db53d39cd48eef8e70c5163a1d37',1,'sdr::Traits< std::complex< int16_t > >::RScalar()'],['../classsdr_1_1_traits_3_01float_01_4.html#a2fe3ac0732b73b35c0c99a2a8c367b40',1,'sdr::Traits< float >::RScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html#aab96c69e8f9c02fcfe49855e056eb89d',1,'sdr::Traits< std::complex< float > >::RScalar()'],['../classsdr_1_1_traits_3_01double_01_4.html#a91bb965aeb1aae9d2b8e3504ea8fbae1',1,'sdr::Traits< double >::RScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html#a02524eae226e91daa624f64ba0360588',1,'sdr::Traits< std::complex< double > >::RScalar()']]], + ['rtlsource',['RTLSource',['../classsdr_1_1_r_t_l_source.html#a38dcd5242488c599469d0bc4c78547bb',1,'sdr::RTLSource']]], + ['rtlsource',['RTLSource',['../classsdr_1_1_r_t_l_source.html',1,'sdr']]], + ['runtimeerror',['RuntimeError',['../classsdr_1_1_runtime_error.html',1,'sdr']]], + ['runtimeerror',['RuntimeError',['../classsdr_1_1_runtime_error.html#a36c5739ef1be548638418b2191fbbcf0',1,'sdr::RuntimeError::RuntimeError()'],['../classsdr_1_1_runtime_error.html#ab9b241b1f32d8d7738e70ae4764b70fa',1,'sdr::RuntimeError::RuntimeError(const RuntimeError &other)']]] +]; diff --git a/search/all_11.html b/search/all_11.html new file mode 100644 index 0000000..6f3943a --- /dev/null +++ b/search/all_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_11.js b/search/all_11.js new file mode 100644 index 0000000..21e5a5f --- /dev/null +++ b/search/all_11.js @@ -0,0 +1,68 @@ +var searchData= +[ + ['samplerate',['sampleRate',['../classsdr_1_1_freq_shift_base.html#a813683842a2ca15589e84cb89dccfc9a',1,'sdr::FreqShiftBase::sampleRate()'],['../classsdr_1_1_config.html#a42cfb658302fd7de7729ce2c740e9275',1,'sdr::Config::sampleRate()'],['../classsdr_1_1_source.html#aca6c3a89bb5787de5657c4d221bb1ed4',1,'sdr::Source::sampleRate()'],['../classsdr_1_1_r_t_l_source.html#ad04242d3c53001a17a50d4e372316366',1,'sdr::RTLSource::sampleRate()']]], + ['scalar',['Scalar',['../classsdr_1_1_traits_3_01uint8__t_01_4.html#a99103e507dfadcc72399be2d4704ea3b',1,'sdr::Traits< uint8_t >::Scalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html#a717e05e65c30028a566e630b1abb06ff',1,'sdr::Traits< std::complex< uint8_t > >::Scalar()'],['../classsdr_1_1_traits_3_01int8__t_01_4.html#a4754153fd42feeffe2b0799b36b6f769',1,'sdr::Traits< int8_t >::Scalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html#aaca99ca5fa20911b04da96449afe28c8',1,'sdr::Traits< std::complex< int8_t > >::Scalar()'],['../classsdr_1_1_traits_3_01uint16__t_01_4.html#a88d8fddbc034af2c6ff550fe22aa3697',1,'sdr::Traits< uint16_t >::Scalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html#a8a7100b15f3424692dd4507148d86725',1,'sdr::Traits< std::complex< uint16_t > >::Scalar()'],['../classsdr_1_1_traits_3_01int16__t_01_4.html#ae9099d40f118f875b033884e6e3ad3d5',1,'sdr::Traits< int16_t >::Scalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html#a1176d48404f60df5db4ecb77d1646f07',1,'sdr::Traits< std::complex< int16_t > >::Scalar()'],['../classsdr_1_1_traits_3_01float_01_4.html#a5a89f919fea9d771f6320a7c938fd922',1,'sdr::Traits< float >::Scalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html#aaf4716088eec8f5d9b91ff7fd68e6660',1,'sdr::Traits< std::complex< float > >::Scalar()'],['../classsdr_1_1_traits_3_01double_01_4.html#aff7a0a7ffa15c25b4455f83dcf836715',1,'sdr::Traits< double >::Scalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html#a987f55798d4d12e7b495033eeda23934',1,'sdr::Traits< std::complex< double > >::Scalar()']]], + ['scalarid',['scalarId',['../classsdr_1_1_traits_3_01uint8__t_01_4.html#a89e2ef0e1fab866d401487041ee84330',1,'sdr::Traits< uint8_t >::scalarId()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html#a869d8b912392b79e2ac01a7083af1b67',1,'sdr::Traits< std::complex< uint8_t > >::scalarId()'],['../classsdr_1_1_traits_3_01int8__t_01_4.html#acebb260f88b477e1be6c440c70425ba5',1,'sdr::Traits< int8_t >::scalarId()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html#a1f6552335b6ffc24c656ac2d0dba59ba',1,'sdr::Traits< std::complex< int8_t > >::scalarId()'],['../classsdr_1_1_traits_3_01uint16__t_01_4.html#a41d9a7869a8c332eecd601e5635a5a7b',1,'sdr::Traits< uint16_t >::scalarId()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html#a0b4d91ce868bcc7fe07b2d4af0220c07',1,'sdr::Traits< std::complex< uint16_t > >::scalarId()'],['../classsdr_1_1_traits_3_01int16__t_01_4.html#a5d8358ee74417e7f9315166b46612a25',1,'sdr::Traits< int16_t >::scalarId()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html#ab72033b20413f21ef9bb662d2d1473ab',1,'sdr::Traits< std::complex< int16_t > >::scalarId()'],['../classsdr_1_1_traits_3_01float_01_4.html#aad204365b6177029346d806c1dfeaa11',1,'sdr::Traits< float >::scalarId()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html#a5a88c67053d0059fbaf3119cdea53e81',1,'sdr::Traits< std::complex< float > >::scalarId()'],['../classsdr_1_1_traits_3_01double_01_4.html#a76e091b4d439be325326b3d68366116d',1,'sdr::Traits< double >::scalarId()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html#a3539553e4fad45367be10aa81dfda487',1,'sdr::Traits< std::complex< double > >::scalarId()']]], + ['scale',['Scale',['../classsdr_1_1_scale.html',1,'sdr']]], + ['scale',['Scale',['../classsdr_1_1_scale.html#a3e58d1725b33ae78d3047bef28026823',1,'sdr::Scale::Scale()'],['../classsdr_1_1_traits_3_01uint8__t_01_4.html#a0e1a7a08571e6ba453f46eacf6404fd8',1,'sdr::Traits< uint8_t >::scale()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html#ada8db008e1e84ccfb12f5228b38eaf11',1,'sdr::Traits< std::complex< uint8_t > >::scale()'],['../classsdr_1_1_traits_3_01int8__t_01_4.html#a61d9eb303aa7eea6f26f7dbe3b885313',1,'sdr::Traits< int8_t >::scale()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html#a5c485671457a4f6b3101403efe4aaac7',1,'sdr::Traits< std::complex< int8_t > >::scale()'],['../classsdr_1_1_traits_3_01uint16__t_01_4.html#abfcdf445b6ba1e1d775328a2d7a89669',1,'sdr::Traits< uint16_t >::scale()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html#aabe0027c715f4263aa47d5c8246701d2',1,'sdr::Traits< std::complex< uint16_t > >::scale()'],['../classsdr_1_1_traits_3_01int16__t_01_4.html#aaffacbbd5e63ae796c60064f36bf7722',1,'sdr::Traits< int16_t >::scale()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html#a7bf925c7d7f3f93676f285aa1e5e6914',1,'sdr::Traits< std::complex< int16_t > >::scale()'],['../classsdr_1_1_traits_3_01float_01_4.html#a76598a7171a72a0670cbe5060ff7f6c1',1,'sdr::Traits< float >::scale()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html#af413ae74c509876e6d4c0d24c595e121',1,'sdr::Traits< std::complex< float > >::scale()'],['../classsdr_1_1_traits_3_01double_01_4.html#a1156d4a9663d7eeb389d3a848f24e180',1,'sdr::Traits< double >::scale()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html#aa035f66183e74546d3844f754a844576',1,'sdr::Traits< std::complex< double > >::scale()'],['../classsdr_1_1_cast.html#ac04217fae39c2f7fe42de56d28856f2e',1,'sdr::Cast::scale()']]], + ['sdrerror',['SDRError',['../classsdr_1_1_s_d_r_error.html',1,'sdr']]], + ['sdrerror',['SDRError',['../classsdr_1_1_s_d_r_error.html#a718114b7e48ced9def0ce81be8360fb0',1,'sdr::SDRError::SDRError()'],['../classsdr_1_1_s_d_r_error.html#acaa88f0c824621122e5c074d86e349f3',1,'sdr::SDRError::SDRError(const SDRError &other)']]], + ['send',['send',['../classsdr_1_1_source.html#a13921d5daa00574e2057c1ae1fc28054',1,'sdr::Source::send()'],['../classsdr_1_1_queue.html#af5081696c758e00520bf670fffad6918',1,'sdr::Queue::send()']]], + ['setbalance',['setBalance',['../classsdr_1_1_i_q_balance.html#a5e933c51ede575faec047d2e2cc1e384',1,'sdr::IQBalance']]], + ['setbuffersize',['setBufferSize',['../classsdr_1_1_config.html#abca3d2152fd7379b12814c1518f9fa6f',1,'sdr::Config']]], + ['setcenterfrequency',['setCenterFrequency',['../classsdr_1_1_i_q_base_band.html#a9dcc80e8ff21e9753f4bb09a20e28cbc',1,'sdr::IQBaseBand']]], + ['setconfig',['setConfig',['../classsdr_1_1_source.html#afd4c7e3fb94a057ac40e9877167791ec',1,'sdr::Source']]], + ['setdeviceindex',['setDeviceIndex',['../classsdr_1_1_port_source.html#abc0ea18b8794b09ca7dea28fcae26269',1,'sdr::PortSource']]], + ['setfilterfrequency',['setFilterFrequency',['../classsdr_1_1_i_q_base_band.html#af72e51030e9a72fcffce7f75c82bb6fd',1,'sdr::IQBaseBand']]], + ['setfilterwidth',['setFilterWidth',['../classsdr_1_1_i_q_base_band.html#a918174afe3f6ae0e6373368d99320552',1,'sdr::IQBaseBand']]], + ['setfrac',['setFrac',['../classsdr_1_1_frac_sub_sample_base.html#a36217a949cfea7fe5b096cc98aa2e113',1,'sdr::FracSubSampleBase']]], + ['setfreq',['setFreq',['../classsdr_1_1_filter_source.html#aedfc4ad353708e6a096fad3c1fac318c',1,'sdr::FilterSource::setFreq()'],['../classsdr_1_1_f_i_r_low_pass.html#a3c1e5b446425ab0d925d412aeda8348d',1,'sdr::FIRLowPass::setFreq()'],['../classsdr_1_1_f_i_r_high_pass.html#a6a56f692b2cd9e91a962313db04cf51e',1,'sdr::FIRHighPass::setFreq()']]], + ['setfreqcorrection',['setFreqCorrection',['../classsdr_1_1_r_t_l_source.html#afe87804924d1ac5687ea618626a58cb5',1,'sdr::RTLSource']]], + ['setfrequency',['setFrequency',['../classsdr_1_1_r_t_l_source.html#ae48b61d55bae9c016f2120d907348505',1,'sdr::RTLSource']]], + ['setfrequencyshift',['setFrequencyShift',['../classsdr_1_1_freq_shift_base.html#a58abc2c8dd6a21fc5654db3068bc7a23',1,'sdr::FreqShiftBase']]], + ['setgain',['setGain',['../classsdr_1_1_r_t_l_source.html#a1385e656f8d31ab31212ef7b33b2673b',1,'sdr::RTLSource::setGain()'],['../classsdr_1_1_a_g_c.html#aafd22e6eff64cd6f615f025d2d2cdde0',1,'sdr::AGC::setGain()']]], + ['setlowerfreq',['setLowerFreq',['../classsdr_1_1_f_i_r_filter.html#a59adcf3e38e0af2a06fde7f1a68c76ca',1,'sdr::FIRFilter']]], + ['setnumbuffers',['setNumBuffers',['../classsdr_1_1_config.html#a08e8333462c6802a2927d18b0763f946',1,'sdr::Config']]], + ['setorder',['setOrder',['../classsdr_1_1_i_q_base_band.html#ad2959e3dcaf6026fca273b3dca33c66b',1,'sdr::IQBaseBand::setOrder()'],['../classsdr_1_1_f_i_r_filter.html#a3da50552081d57104580336ed0f1d80d',1,'sdr::FIRFilter::setOrder()']]], + ['setoutputsamplerate',['setOutputSampleRate',['../classsdr_1_1_i_q_base_band.html#ac426a960e5fcb82475cd2fbb57b5d9df',1,'sdr::IQBaseBand']]], + ['setsamplerate',['setSampleRate',['../classsdr_1_1_base_band.html#a9b5180e296c0b0d83f04cf9b070d202e',1,'sdr::BaseBand::setSampleRate()'],['../classsdr_1_1_freq_shift_base.html#ac78f1ac2da7e6cf2cd0a6f6bfc15a02c',1,'sdr::FreqShiftBase::setSampleRate()'],['../classsdr_1_1_config.html#a275d514abfc9bda1d72573b73c5c9077',1,'sdr::Config::setSampleRate()'],['../classsdr_1_1_port_source.html#ade30a6651fefb5348fe32793b220f1ff',1,'sdr::PortSource::setSampleRate()'],['../classsdr_1_1_r_t_l_source.html#a4420b0bc023b2bc076936089f958653c',1,'sdr::RTLSource::setSampleRate()']]], + ['setscale',['setScale',['../classsdr_1_1_cast.html#a0b89fdaaac6bc4e52509870fa8740cbe',1,'sdr::Cast']]], + ['setshift',['setShift',['../classsdr_1_1_freq_shift.html#af7af79f187aa77b98abb4643307bd2f7',1,'sdr::FreqShift']]], + ['setsubsample',['setSubsample',['../classsdr_1_1_i_q_base_band.html#a2b7a0ca1c5f35e94a6b3031be2f43778',1,'sdr::IQBaseBand']]], + ['settau',['setTau',['../classsdr_1_1_a_g_c.html#ad5a8b658529798bc5cd93d9a56de6d4f',1,'sdr::AGC']]], + ['settype',['setType',['../classsdr_1_1_config.html#aa38eed09b83bd607c9e3169222c9330f',1,'sdr::Config']]], + ['setupperfreq',['setUpperFreq',['../classsdr_1_1_f_i_r_filter.html#a6c9f663cd552debe0ff032843d65f07d',1,'sdr::FIRFilter']]], + ['shift',['shift',['../classsdr_1_1_traits_3_01uint8__t_01_4.html#aa5867a8623638b22972ba4775eb51cf4',1,'sdr::Traits< uint8_t >::shift()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html#a901b7cdbf96c155ea13bca0c22a641e1',1,'sdr::Traits< std::complex< uint8_t > >::shift()'],['../classsdr_1_1_traits_3_01int8__t_01_4.html#ad1cafedc05c1afc4582d53edf28a7a72',1,'sdr::Traits< int8_t >::shift()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html#a8f6f0f5bb2aed6f83b35872c90d97edd',1,'sdr::Traits< std::complex< int8_t > >::shift()'],['../classsdr_1_1_traits_3_01uint16__t_01_4.html#a6839e4ca579c3afb9fce7d5d4c5614a8',1,'sdr::Traits< uint16_t >::shift()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html#a436e3d6ad2d6995b318b5faeca891603',1,'sdr::Traits< std::complex< uint16_t > >::shift()'],['../classsdr_1_1_traits_3_01int16__t_01_4.html#ad3f1c47a8ece9abcd014aee08ec7e252',1,'sdr::Traits< int16_t >::shift()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html#a34ca51cf94258133330fc7352d6d5043',1,'sdr::Traits< std::complex< int16_t > >::shift()'],['../classsdr_1_1_traits_3_01float_01_4.html#aa38461035c5cb3692202cdd452d1e9e9',1,'sdr::Traits< float >::shift()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html#a4d4feacccab426d657ab5c6dd39b9fb8',1,'sdr::Traits< std::complex< float > >::shift()'],['../classsdr_1_1_traits_3_01double_01_4.html#aef6959ade5ad02c7795f1a5c10e11645',1,'sdr::Traits< double >::shift()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html#afe7850e019a4de7af5baa386f35d682b',1,'sdr::Traits< std::complex< double > >::shift()'],['../classsdr_1_1_freq_shift.html#a50f5b09085e30e1839a29d74f60c4b1d',1,'sdr::FreqShift::shift()']]], + ['short_5fname',['short_name',['../structsdr_1_1_options_1_1_definition.html#ad52d5923eeeea250e1e563b875b15fa7',1,'sdr::Options::Definition']]], + ['siggen',['SigGen',['../classsdr_1_1_sig_gen.html',1,'sdr']]], + ['siggen',['SigGen',['../classsdr_1_1_sig_gen.html#ab71ee17d047e2b6a1691fd30191ed3e7',1,'sdr::SigGen']]], + ['signaleos',['signalEOS',['../classsdr_1_1_source.html#a30eeb1d98d9759ef01a36e938a1172bc',1,'sdr::Source']]], + ['signedtounsigned',['SignedToUnsigned',['../classsdr_1_1_signed_to_unsigned.html',1,'sdr']]], + ['signedtounsigned',['SignedToUnsigned',['../classsdr_1_1_signed_to_unsigned.html#a85e4ac10bb184cf3a22459efedb32523',1,'sdr::SignedToUnsigned']]], + ['sink',['Sink',['../classsdr_1_1_sink.html',1,'sdr']]], + ['sink',['Sink',['../classsdr_1_1_sink.html#a1a5279c1507276612797734eed890ecb',1,'sdr::Sink::Sink()'],['../classsdr_1_1_interleave.html#aae727d1aa24e6d92571125b47eae5ebe',1,'sdr::Interleave::sink()'],['../classsdr_1_1_filter_node.html#ae5b285b5375ef97eb6a7a3e02943d242',1,'sdr::FilterNode::sink()'],['../classsdr_1_1_queue_1_1_message.html#a8df22de4fd6608016d5b20716138c5f7',1,'sdr::Queue::Message::sink()']]], + ['sink_3c_20iscalar_20_3e',['Sink< iScalar >',['../classsdr_1_1_sink.html',1,'sdr']]], + ['sink_3c_20std_3a_3acomplex_3c_20iscalar_20_3e_20_3e',['Sink< std::complex< iScalar > >',['../classsdr_1_1_sink.html',1,'sdr']]], + ['sink_3c_20std_3a_3acomplex_3c_20scalar_20_3e_20_3e',['Sink< std::complex< Scalar > >',['../classsdr_1_1_sink.html',1,'sdr']]], + ['sink_3c_20uint8_5ft_20_3e',['Sink< uint8_t >',['../classsdr_1_1_sink.html',1,'sdr']]], + ['sinkbase',['SinkBase',['../classsdr_1_1_sink_base.html',1,'sdr']]], + ['sinkbase',['SinkBase',['../classsdr_1_1_sink_base.html#aaa9fb7219aa47e809ff1d62a819a2d57',1,'sdr::SinkBase']]], + ['size',['size',['../classsdr_1_1_buffer.html#ad2232275b51b1189daea15c6cd9b3a20',1,'sdr::Buffer::size()'],['../classsdr_1_1_ring_buffer.html#a86ddc1ef24e3308671fe3e6163983865',1,'sdr::RingBuffer::size()']]], + ['source',['Source',['../classsdr_1_1_source.html#a660c0a4b8b8f8402568bef86f2cb2fbb',1,'sdr::Source']]], + ['source',['Source',['../classsdr_1_1_source.html',1,'sdr']]], + ['sscalar',['SScalar',['../classsdr_1_1_i_q_base_band.html#ae916b696954ddf0f93fdd9d98398b01d',1,'sdr::IQBaseBand::SScalar()'],['../classsdr_1_1_base_band.html#a6e17045e3d019be6518d9f4be7de5b66',1,'sdr::BaseBand::SScalar()'],['../classsdr_1_1_u_s_b_demod.html#a2674638bcd3acfbda9d64a45fa6ba0cf',1,'sdr::USBDemod::SScalar()'],['../classsdr_1_1_f_m_demod.html#a0481ffd7d460540b4832546bfc3c8126',1,'sdr::FMDemod::SScalar()'],['../classsdr_1_1_f_f_t_plan.html#a3640c788bea68b27772771b9d73653b9',1,'sdr::FFTPlan::SScalar()'],['../classsdr_1_1_freq_shift_base.html#af613bd56b0ccf4532fb729aaaca959e7',1,'sdr::FreqShiftBase::SScalar()'],['../classsdr_1_1_sub_sample.html#ac87d15135a8ec7be826b3371aa6ce016',1,'sdr::SubSample::SScalar()'],['../classsdr_1_1_frac_sub_sample_base.html#ac10da92570b7c169095388951a90282b',1,'sdr::FracSubSampleBase::SScalar()'],['../classsdr_1_1_traits_3_01uint8__t_01_4.html#adda52d55c735633d87bdcaf97ee87d20',1,'sdr::Traits< uint8_t >::SScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html#a2e47757cf0de4866c358c2d93c3acba6',1,'sdr::Traits< std::complex< uint8_t > >::SScalar()'],['../classsdr_1_1_traits_3_01int8__t_01_4.html#a6f15f99ae9e8bc3f4aee73d837e53275',1,'sdr::Traits< int8_t >::SScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html#a9a1db5ee3605f5fdc28d198d8d8c45cf',1,'sdr::Traits< std::complex< int8_t > >::SScalar()'],['../classsdr_1_1_traits_3_01uint16__t_01_4.html#afc00377467d267fd814fb4f7bae1b3e5',1,'sdr::Traits< uint16_t >::SScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html#ad78bbb1f762e3f2eb122b8b75afafcd3',1,'sdr::Traits< std::complex< uint16_t > >::SScalar()'],['../classsdr_1_1_traits_3_01int16__t_01_4.html#a2baeeac5d7f984b86e3de564f4724160',1,'sdr::Traits< int16_t >::SScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html#a22f8c74d48349465555c6d6c983a4192',1,'sdr::Traits< std::complex< int16_t > >::SScalar()'],['../classsdr_1_1_traits_3_01float_01_4.html#ae1ac6f8551b36aedf5c66c1b3b6b58ea',1,'sdr::Traits< float >::SScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html#a8fbe8a5520ad9dacf2cff93c8855408a',1,'sdr::Traits< std::complex< float > >::SScalar()'],['../classsdr_1_1_traits_3_01double_01_4.html#a34e6dc159ed80b15fd2ff95aadf6d891',1,'sdr::Traits< double >::SScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html#a95f5fffbf6b2111b00c17cc28f57513b',1,'sdr::Traits< std::complex< double > >::SScalar()'],['../classsdr_1_1_i_q_balance.html#a547a6def95efec1987ca5ed8f5a79326',1,'sdr::IQBalance::SScalar()']]], + ['start',['start',['../classsdr_1_1_blocking_source.html#a60ad748162edddcb2d2c21e7f81ba021',1,'sdr::BlockingSource::start()'],['../classsdr_1_1_queue.html#a8e3298dff8edfc75648477ceb0426ffb',1,'sdr::Queue::start()'],['../classsdr_1_1_r_t_l_source.html#a59aa8343fca4ff80948d28359d0a8b0a',1,'sdr::RTLSource::start()']]], + ['stop',['stop',['../classsdr_1_1_blocking_source.html#aabf983bae519915df7e76f429cfce872',1,'sdr::BlockingSource::stop()'],['../classsdr_1_1_queue.html#aaf3a0e226ba622d762de9b32b3cbbb09',1,'sdr::Queue::stop()'],['../classsdr_1_1_r_t_l_source.html#a298ece19ede8427f9968a31108728d17',1,'sdr::RTLSource::stop()']]], + ['storagesize',['storageSize',['../classsdr_1_1_raw_buffer.html#a51e97f8beeacd8734fdb347af02ee215',1,'sdr::RawBuffer']]], + ['stored',['stored',['../classsdr_1_1_ring_buffer.html#a6664867e32e02f79d2c9f4ac5e9288f7',1,'sdr::RingBuffer']]], + ['streamloghandler',['StreamLogHandler',['../classsdr_1_1_stream_log_handler.html',1,'sdr']]], + ['streamloghandler',['StreamLogHandler',['../classsdr_1_1_stream_log_handler.html#a9c3b48fb4fd550fbc87bb7c79012caa0',1,'sdr::StreamLogHandler']]], + ['streamsink',['StreamSink',['../classsdr_1_1_stream_sink.html#a7543d34895cb13ec98ab25ba94664ac6',1,'sdr::StreamSink']]], + ['streamsink',['StreamSink',['../classsdr_1_1_stream_sink.html',1,'sdr']]], + ['streamsource',['StreamSource',['../classsdr_1_1_stream_source.html',1,'sdr']]], + ['streamsource',['StreamSource',['../classsdr_1_1_stream_source.html#a7a0302e45ef26e8af6846f29b40d7d80',1,'sdr::StreamSource']]], + ['string',['STRING',['../classsdr_1_1_options_1_1_value.html#a0c9f78ee322f128c50d74b76d51ad33eaad06a22705299673cb3d48ef0c1dbcd6',1,'sdr::Options::Value']]], + ['sub',['sub',['../classsdr_1_1_buffer.html#a8d8e0ca5402163ed7b9cd486c5236336',1,'sdr::Buffer']]], + ['subsample',['subSample',['../classsdr_1_1_i_q_base_band.html#a04c5dd06532c40bd54a456cdfb064716',1,'sdr::IQBaseBand::subSample()'],['../classsdr_1_1_sub_sample.html#a7097f77c46ba54641ddedbe89721bb1a',1,'sdr::SubSample::SubSample(size_t n)'],['../classsdr_1_1_sub_sample.html#a3a9d5ec57e9b687206145db2d57c5b11',1,'sdr::SubSample::SubSample(double Fs)'],['../classsdr_1_1_frac_sub_sample_base.html#a9570de3fda6677931072581264d33db1',1,'sdr::FracSubSampleBase::subsample()']]], + ['subsample',['SubSample',['../classsdr_1_1_sub_sample.html',1,'sdr']]] +]; diff --git a/search/all_12.html b/search/all_12.html new file mode 100644 index 0000000..3c7c89e --- /dev/null +++ b/search/all_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_12.js b/search/all_12.js new file mode 100644 index 0000000..d69d4f3 --- /dev/null +++ b/search/all_12.js @@ -0,0 +1,40 @@ +var searchData= +[ + ['tail',['tail',['../classsdr_1_1_buffer.html#ab55a7151f37e6c112bbadfbb9b0af4dd',1,'sdr::Buffer']]], + ['take',['take',['../classsdr_1_1_raw_ring_buffer.html#a8847c1cbdf39ab61a1f8d0f752d7e5b1',1,'sdr::RawRingBuffer::take()'],['../classsdr_1_1_ring_buffer.html#adf3db84956a43e69516079ac0af1f0b5',1,'sdr::RingBuffer::take()']]], + ['tau',['tau',['../classsdr_1_1_a_g_c.html#adc9c78e2a9dcc5a55d81c421a8e534ef',1,'sdr::AGC']]], + ['terminate',['terminate',['../classsdr_1_1_port_audio.html#a1b2c9c26f19d788e436806675f268ec3',1,'sdr::PortAudio']]], + ['tocomplex',['ToComplex',['../classsdr_1_1_to_complex.html#a65f7b684ffbc1f8b8b02760d693f21ea',1,'sdr::ToComplex']]], + ['tocomplex',['ToComplex',['../classsdr_1_1_to_complex.html',1,'sdr']]], + ['todo_20list',['Todo List',['../todo.html',1,'']]], + ['tofloat',['toFloat',['../classsdr_1_1_options_1_1_value.html#a836761846a7e042efe6346d7bc066cd7',1,'sdr::Options::Value']]], + ['tointeger',['toInteger',['../classsdr_1_1_options_1_1_value.html#a3e18b295561eca4cdae714d6ae303200',1,'sdr::Options::Value']]], + ['tostring',['toString',['../classsdr_1_1_options_1_1_value.html#afbc961d3d5234fad84335b009473a3ef',1,'sdr::Options::Value']]], + ['traits',['Traits',['../classsdr_1_1_traits.html',1,'sdr']]], + ['traits_3c_20double_20_3e',['Traits< double >',['../classsdr_1_1_traits_3_01double_01_4.html',1,'sdr']]], + ['traits_3c_20float_20_3e',['Traits< float >',['../classsdr_1_1_traits_3_01float_01_4.html',1,'sdr']]], + ['traits_3c_20int16_5ft_20_3e',['Traits< int16_t >',['../classsdr_1_1_traits_3_01int16__t_01_4.html',1,'sdr']]], + ['traits_3c_20int8_5ft_20_3e',['Traits< int8_t >',['../classsdr_1_1_traits_3_01int8__t_01_4.html',1,'sdr']]], + ['traits_3c_20std_3a_3acomplex_3c_20double_20_3e_20_3e',['Traits< std::complex< double > >',['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html',1,'sdr']]], + ['traits_3c_20std_3a_3acomplex_3c_20float_20_3e_20_3e',['Traits< std::complex< float > >',['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html',1,'sdr']]], + ['traits_3c_20std_3a_3acomplex_3c_20int16_5ft_20_3e_20_3e',['Traits< std::complex< int16_t > >',['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html',1,'sdr']]], + ['traits_3c_20std_3a_3acomplex_3c_20int8_5ft_20_3e_20_3e',['Traits< std::complex< int8_t > >',['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html',1,'sdr']]], + ['traits_3c_20std_3a_3acomplex_3c_20uint16_5ft_20_3e_20_3e',['Traits< std::complex< uint16_t > >',['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html',1,'sdr']]], + ['traits_3c_20std_3a_3acomplex_3c_20uint8_5ft_20_3e_20_3e',['Traits< std::complex< uint8_t > >',['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html',1,'sdr']]], + ['traits_3c_20uint16_5ft_20_3e',['Traits< uint16_t >',['../classsdr_1_1_traits_3_01uint16__t_01_4.html',1,'sdr']]], + ['traits_3c_20uint8_5ft_20_3e',['Traits< uint8_t >',['../classsdr_1_1_traits_3_01uint8__t_01_4.html',1,'sdr']]], + ['type',['Type',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8',1,'sdr::Config::Type()'],['../classsdr_1_1_options_1_1_value.html#a0c9f78ee322f128c50d74b76d51ad33e',1,'sdr::Options::Value::Type()'],['../structsdr_1_1_options_1_1_definition.html#aa78a55af6815b3cf3a3254d010e4dbd2',1,'sdr::Options::Definition::type()'],['../classsdr_1_1_config.html#afebc90c2a5f54a8a3ab5b896cfe37724',1,'sdr::Config::type()'],['../classsdr_1_1_source.html#ab9362057c06f35e0a23901cc0556b976',1,'sdr::Source::type()']]], + ['type_5fcf32',['Type_cf32',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a3517b22ed2f8ebce25b6ce140e0fc4ae',1,'sdr::Config']]], + ['type_5fcf64',['Type_cf64',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a0533d0f0f70fad0f430cdfa6c86b4e7c',1,'sdr::Config']]], + ['type_5fcs16',['Type_cs16',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a63b4a03813b5e6224170be42b6275fe7',1,'sdr::Config']]], + ['type_5fcs8',['Type_cs8',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a3db588fd468cb4a78e1efabef4b57b76',1,'sdr::Config']]], + ['type_5fcu16',['Type_cu16',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a6a87fdcbcf659811d60fee74fbea7f07',1,'sdr::Config']]], + ['type_5fcu8',['Type_cu8',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a2d44478e68580bf01d17f6e33eb5d856',1,'sdr::Config']]], + ['type_5ff32',['Type_f32',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a16fb6708c6744a2892bc1badb01953b5',1,'sdr::Config']]], + ['type_5ff64',['Type_f64',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a25a618000b12c978963aa6d19ab92f97',1,'sdr::Config']]], + ['type_5fs16',['Type_s16',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a4f222757d46f6b85c63657e1560bf9eb',1,'sdr::Config']]], + ['type_5fs8',['Type_s8',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8adcae9ece1014b07b0546a2b7a80e18c4',1,'sdr::Config']]], + ['type_5fu16',['Type_u16',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a9fd5000bcdeaf5872cfa097b8df26a74',1,'sdr::Config']]], + ['type_5fu8',['Type_u8',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8aff58284f9bbd7e3c690a9e4f1d74aefd',1,'sdr::Config']]], + ['typeid',['typeId',['../classsdr_1_1_config.html#a71df9feb586e1d33241dec5d6a5beae4',1,'sdr::Config::typeId()'],['../classsdr_1_1_config.html#a84cf0959571c6aa5b74f85761dccdc5e',1,'sdr::Config::typeId()'],['../classsdr_1_1_config.html#a84cf0959571c6aa5b74f85761dccdc5e',1,'sdr::Config::typeId()'],['../classsdr_1_1_config.html#a84cf0959571c6aa5b74f85761dccdc5e',1,'sdr::Config::typeId()'],['../classsdr_1_1_config.html#a84cf0959571c6aa5b74f85761dccdc5e',1,'sdr::Config::typeId()'],['../classsdr_1_1_config.html#a84cf0959571c6aa5b74f85761dccdc5e',1,'sdr::Config::typeId()'],['../classsdr_1_1_config.html#a84cf0959571c6aa5b74f85761dccdc5e',1,'sdr::Config::typeId()']]] +]; diff --git a/search/all_13.html b/search/all_13.html new file mode 100644 index 0000000..0bd629b --- /dev/null +++ b/search/all_13.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_13.js b/search/all_13.js new file mode 100644 index 0000000..813796b --- /dev/null +++ b/search/all_13.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['unref',['unref',['../classsdr_1_1_raw_buffer.html#a8ffd3cbf476c9036bfada9ae8c7c5e05',1,'sdr::RawBuffer']]], + ['unsignedtosigned',['UnsignedToSigned',['../classsdr_1_1_unsigned_to_signed.html#a125b90d791bf8e77137ef45f4c71a0c2',1,'sdr::UnsignedToSigned']]], + ['unsignedtosigned',['UnsignedToSigned',['../classsdr_1_1_unsigned_to_signed.html',1,'sdr']]], + ['uppertfreq',['uppertFreq',['../classsdr_1_1_f_i_r_filter.html#a9aead6f43054bcfea0db9eee695b53e6',1,'sdr::FIRFilter']]], + ['usbdemod',['USBDemod',['../classsdr_1_1_u_s_b_demod.html#a96e98fa8436abbbd48aa146177ccd173',1,'sdr::USBDemod']]], + ['usbdemod',['USBDemod',['../classsdr_1_1_u_s_b_demod.html',1,'sdr']]] +]; diff --git a/search/all_14.html b/search/all_14.html new file mode 100644 index 0000000..2ad638b --- /dev/null +++ b/search/all_14.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_14.js b/search/all_14.js new file mode 100644 index 0000000..fa5ded5 --- /dev/null +++ b/search/all_14.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['value',['Value',['../classsdr_1_1_options_1_1_value.html',1,'sdr::Options']]], + ['value',['Value',['../classsdr_1_1_options_1_1_value.html#a1dac3eecc4b100594155ab55f82e08a6',1,'sdr::Options::Value::Value()'],['../classsdr_1_1_options_1_1_value.html#a376836180378fbb775c3f1142c9ffd44',1,'sdr::Options::Value::Value(long value)'],['../classsdr_1_1_options_1_1_value.html#ac6565d5f35e470187b2274fe95fc6605',1,'sdr::Options::Value::Value(double value)'],['../classsdr_1_1_options_1_1_value.html#aff0d58485913e6edeb379b6353173711',1,'sdr::Options::Value::Value(const std::string &value)'],['../classsdr_1_1_options_1_1_value.html#aa160414af84cb73130e7d29b7de6c2dd',1,'sdr::Options::Value::Value(const Value &other)']]], + ['varicode',['Varicode',['../classsdr_1_1_varicode.html#a62e59e14876da3cda7f241ba49a51a0e',1,'sdr::Varicode']]], + ['varicode',['Varicode',['../classsdr_1_1_varicode.html',1,'sdr']]] +]; diff --git a/search/all_15.html b/search/all_15.html new file mode 100644 index 0000000..d3b5274 --- /dev/null +++ b/search/all_15.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_15.js b/search/all_15.js new file mode 100644 index 0000000..ce50763 --- /dev/null +++ b/search/all_15.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['wait',['wait',['../classsdr_1_1_queue.html#a5017fc308c3be9793a4cc3e96c2eba12',1,'sdr::Queue']]], + ['wavsink',['WavSink',['../classsdr_1_1_wav_sink.html#ab5fee6bdb124ab118db5180d6535d999',1,'sdr::WavSink']]], + ['wavsink',['WavSink',['../classsdr_1_1_wav_sink.html',1,'sdr']]], + ['wavsource',['WavSource',['../classsdr_1_1_wav_source.html',1,'sdr']]], + ['wavsource',['WavSource',['../classsdr_1_1_wav_source.html#aae456791a7b76d1c6bf5019c10d4e77f',1,'sdr::WavSource::WavSource(size_t buffer_size=1024)'],['../classsdr_1_1_wav_source.html#ab135a01ec10704c4ba767e2ade3eb018',1,'sdr::WavSource::WavSource(const std::string &filename, size_t buffer_size=1024)']]], + ['what',['what',['../classsdr_1_1_s_d_r_error.html#af562fc760a156ea182407cb169ee8d3e',1,'sdr::SDRError']]] +]; diff --git a/search/all_16.html b/search/all_16.html new file mode 100644 index 0000000..b4e3666 --- /dev/null +++ b/search/all_16.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_16.js b/search/all_16.js new file mode 100644 index 0000000..8daa056 --- /dev/null +++ b/search/all_16.js @@ -0,0 +1,59 @@ +var searchData= +[ + ['_7eamdemod',['~AMDemod',['../classsdr_1_1_a_m_demod.html#af982f1d938899435e391b41d994242d9',1,'sdr::AMDemod']]], + ['_7ebaseband',['~BaseBand',['../classsdr_1_1_base_band.html#a82d75bf057d6d0b60ce39c8721eac386',1,'sdr::BaseBand']]], + ['_7eblockingsource',['~BlockingSource',['../classsdr_1_1_blocking_source.html#a4c5ff3213be1919ccf24fd2568806cb3',1,'sdr::BlockingSource']]], + ['_7ebpsk31',['~BPSK31',['../classsdr_1_1_b_p_s_k31.html#a5f194008dae3fb4b4f004f77e03786dc',1,'sdr::BPSK31']]], + ['_7ebuffer',['~Buffer',['../classsdr_1_1_buffer.html#a5dd718c181201e65f07da21e7fdf532b',1,'sdr::Buffer']]], + ['_7ebufferset',['~BufferSet',['../classsdr_1_1_buffer_set.html#a84d2eb1c4d7f6f351c7db30154e2122b',1,'sdr::BufferSet']]], + ['_7ecombine',['~Combine',['../classsdr_1_1_combine.html#a22d4833e0ee07e58ee84313820c929fa',1,'sdr::Combine']]], + ['_7ecombinesink',['~CombineSink',['../classsdr_1_1_combine_sink.html#a48d36e6d13b66a7d43c70d31583d8d51',1,'sdr::CombineSink']]], + ['_7econfigerror',['~ConfigError',['../classsdr_1_1_config_error.html#a64f66575b0e3cf83e77658b9592cbf2c',1,'sdr::ConfigError']]], + ['_7edebugdump',['~DebugDump',['../classsdr_1_1_debug_dump.html#ad2b8dbf77ca9fd1b29b3521e4661c52f',1,'sdr::DebugDump']]], + ['_7edelegate',['~Delegate',['../classsdr_1_1_delegate.html#aa06533bb0da4bcfbcbcc6e29d4713ecc',1,'sdr::Delegate']]], + ['_7efftplan',['~FFTPlan',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#a7380566a47378ea76194074b70c5cec2',1,'sdr::FFTPlan< double >::~FFTPlan()'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#a8f9aead4349af17fe5ac96ca42a3f689',1,'sdr::FFTPlan< float >::~FFTPlan()'],['../classsdr_1_1_f_f_t_plan.html#a9e9efb0511e20fe5a2aa1ef5da4e1aa7',1,'sdr::FFTPlan::~FFTPlan()']]], + ['_7efilternode',['~FilterNode',['../classsdr_1_1_filter_node.html#a64dc3146d73aceb94bedac25e781b811',1,'sdr::FilterNode']]], + ['_7efiltersink',['~FilterSink',['../classsdr_1_1_filter_sink.html#ac10eeb6b3184cc29bf99c73521bc1398',1,'sdr::FilterSink']]], + ['_7efiltersource',['~FilterSource',['../classsdr_1_1_filter_source.html#ae3e6822f0fa2be09a3361d8eebabacff',1,'sdr::FilterSource']]], + ['_7efirbandpass',['~FIRBandPass',['../classsdr_1_1_f_i_r_band_pass.html#af7d2ee90f2f981f048fb46e4b23fc691',1,'sdr::FIRBandPass']]], + ['_7efirbandstop',['~FIRBandStop',['../classsdr_1_1_f_i_r_band_stop.html#a3f1592d1526c9fdee0604fd734480aa7',1,'sdr::FIRBandStop']]], + ['_7efirfilter',['~FIRFilter',['../classsdr_1_1_f_i_r_filter.html#abd1d8a40766465d012eba2ea7c1fa539',1,'sdr::FIRFilter']]], + ['_7efirhighpass',['~FIRHighPass',['../classsdr_1_1_f_i_r_high_pass.html#aba45d7cad94acf73371d45b0194b8152',1,'sdr::FIRHighPass']]], + ['_7efirlowpass',['~FIRLowPass',['../classsdr_1_1_f_i_r_low_pass.html#a8bf39b3d0a1910339b995aedcc1ff9ae',1,'sdr::FIRLowPass']]], + ['_7efmdeemph',['~FMDeemph',['../classsdr_1_1_f_m_deemph.html#ad66286f2e7e7ab20135444cdb0fa0d18',1,'sdr::FMDeemph']]], + ['_7efmdemod',['~FMDemod',['../classsdr_1_1_f_m_demod.html#ad30001feb9c7e161d486e2481274319d',1,'sdr::FMDemod']]], + ['_7efracsubsamplebase',['~FracSubSampleBase',['../classsdr_1_1_frac_sub_sample_base.html#ad5bd940285973e73db71859509fcf223',1,'sdr::FracSubSampleBase']]], + ['_7efreqshift',['~FreqShift',['../classsdr_1_1_freq_shift.html#a0d9c1e662d530ecfa97ed35b0c7a50cd',1,'sdr::FreqShift']]], + ['_7efreqshiftbase',['~FreqShiftBase',['../classsdr_1_1_freq_shift_base.html#a49fe9f9c91b9ed1d47b66a53ccb4ff59',1,'sdr::FreqShiftBase']]], + ['_7egwnsource',['~GWNSource',['../classsdr_1_1_g_w_n_source.html#a5b9c6d8396b7bd5cfc357d750913314c',1,'sdr::GWNSource']]], + ['_7einpolsubsampler',['~InpolSubSampler',['../classsdr_1_1_inpol_sub_sampler.html#ac0d0836eede79f7bb1e05072ada537ff',1,'sdr::InpolSubSampler']]], + ['_7eiqbalance',['~IQBalance',['../classsdr_1_1_i_q_balance.html#a32b7df4e96d0ad06fdab2e6cb8dbcea6',1,'sdr::IQBalance']]], + ['_7eiqbaseband',['~IQBaseBand',['../classsdr_1_1_i_q_base_band.html#a95b54fb78d0a24154375f2c04df12079',1,'sdr::IQBaseBand']]], + ['_7eiqsiggen',['~IQSigGen',['../classsdr_1_1_i_q_sig_gen.html#ad444946309bab1ad2da15ec74d4928e1',1,'sdr::IQSigGen']]], + ['_7elogger',['~Logger',['../classsdr_1_1_logger.html#acb668a9e186a25fbaad2e4af6d1ed00a',1,'sdr::Logger']]], + ['_7eloghandler',['~LogHandler',['../classsdr_1_1_log_handler.html#ae8728f5dc62eacf6c9499014c9c2aaa5',1,'sdr::LogHandler']]], + ['_7elogmessage',['~LogMessage',['../classsdr_1_1_log_message.html#a6b6ffe80b4859c0907c3b653d4d11485',1,'sdr::LogMessage']]], + ['_7eportsink',['~PortSink',['../classsdr_1_1_port_sink.html#a4bad3616a1b9d4fc661a0d05f82195b5',1,'sdr::PortSink']]], + ['_7eportsource',['~PortSource',['../classsdr_1_1_port_source.html#acdbbc6cf479f7463c8f323970e2f6acb',1,'sdr::PortSource']]], + ['_7eproxy',['~Proxy',['../classsdr_1_1_proxy.html#a2f9c8445a2a1db22422185ffd92a795e',1,'sdr::Proxy']]], + ['_7equeue',['~Queue',['../classsdr_1_1_queue.html#a00d119db8fa3050da37746e82cbcf94f',1,'sdr::Queue']]], + ['_7erawbuffer',['~RawBuffer',['../classsdr_1_1_raw_buffer.html#aa665641793e5fd0f036f0ec66d943c08',1,'sdr::RawBuffer']]], + ['_7erawringbuffer',['~RawRingBuffer',['../classsdr_1_1_raw_ring_buffer.html#a1fe52e281ce0c4ec90c04ae16b37dd75',1,'sdr::RawRingBuffer']]], + ['_7eringbuffer',['~RingBuffer',['../classsdr_1_1_ring_buffer.html#ac7b42639b4c3e11b4d37bcac633cab7b',1,'sdr::RingBuffer']]], + ['_7ertlsource',['~RTLSource',['../classsdr_1_1_r_t_l_source.html#a547b424f343efc32dfd07699142b4e1a',1,'sdr::RTLSource']]], + ['_7eruntimeerror',['~RuntimeError',['../classsdr_1_1_runtime_error.html#a1952beacda0c7fb4b625ee5570305fc6',1,'sdr::RuntimeError']]], + ['_7escale',['~Scale',['../classsdr_1_1_scale.html#a1101a27382e4a4b1e93a0e8cb5caa446',1,'sdr::Scale']]], + ['_7esdrerror',['~SDRError',['../classsdr_1_1_s_d_r_error.html#a76b194238e92d2e745b6fd4a1e1b4555',1,'sdr::SDRError']]], + ['_7esiggen',['~SigGen',['../classsdr_1_1_sig_gen.html#aa7e0d8187e55729276800d4f62f8c465',1,'sdr::SigGen']]], + ['_7esignedtounsigned',['~SignedToUnsigned',['../classsdr_1_1_signed_to_unsigned.html#a3c05ecc93f25194ceea462781d6e22a9',1,'sdr::SignedToUnsigned']]], + ['_7esink',['~Sink',['../classsdr_1_1_sink.html#ad17413f3a75305f326b7c3885be9279a',1,'sdr::Sink']]], + ['_7esinkbase',['~SinkBase',['../classsdr_1_1_sink_base.html#a522205396205d6d3601da6a65bdaf75a',1,'sdr::SinkBase']]], + ['_7esource',['~Source',['../classsdr_1_1_source.html#ac5104a4d66641ae529419b47da4a1473',1,'sdr::Source']]], + ['_7estreamloghandler',['~StreamLogHandler',['../classsdr_1_1_stream_log_handler.html#a904248ee770e350c938e4fe6b70c054e',1,'sdr::StreamLogHandler']]], + ['_7eunsignedtosigned',['~UnsignedToSigned',['../classsdr_1_1_unsigned_to_signed.html#a6a77c851737999a0340ccecea78f7b2d',1,'sdr::UnsignedToSigned']]], + ['_7eusbdemod',['~USBDemod',['../classsdr_1_1_u_s_b_demod.html#a3c8909c8c2072120a98f1c7e5799c4e1',1,'sdr::USBDemod']]], + ['_7evalue',['~Value',['../classsdr_1_1_options_1_1_value.html#a0f0d425e4478a34c26df40036ce6aa3f',1,'sdr::Options::Value']]], + ['_7evaricode',['~Varicode',['../classsdr_1_1_varicode.html#a68fecb7c98722029c8ee4e634101f43e',1,'sdr::Varicode']]], + ['_7ewavsink',['~WavSink',['../classsdr_1_1_wav_sink.html#a61e3e446a40890b420563a87c33abaef',1,'sdr::WavSink']]], + ['_7ewavsource',['~WavSource',['../classsdr_1_1_wav_source.html#a970e12ca4cc30818057a8f42ca316a32',1,'sdr::WavSource']]] +]; diff --git a/search/all_2.html b/search/all_2.html new file mode 100644 index 0000000..95ded12 --- /dev/null +++ b/search/all_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_2.js b/search/all_2.js new file mode 100644 index 0000000..c9efb38 --- /dev/null +++ b/search/all_2.js @@ -0,0 +1,37 @@ +var searchData= +[ + ['balance',['balance',['../classsdr_1_1_i_q_balance.html#a5c01ce755a3a4c09a50767413a8ae94e',1,'sdr::IQBalance']]], + ['baseband',['BaseBand',['../classsdr_1_1_base_band.html',1,'sdr']]], + ['baseband',['BaseBand',['../classsdr_1_1_base_band.html#afcf0692c99496dec1419050a03e177b5',1,'sdr::BaseBand::BaseBand(double Fc, double width, size_t order, size_t sub_sample)'],['../classsdr_1_1_base_band.html#a8e1abce4d8e46d419ccc47ac522268f3',1,'sdr::BaseBand::BaseBand(double Fc, double Ff, double width, size_t order, size_t sub_sample)']]], + ['blockingsource',['BlockingSource',['../classsdr_1_1_blocking_source.html',1,'sdr']]], + ['blockingsource',['BlockingSource',['../classsdr_1_1_blocking_source.html#a4590feb79e59560b713af72107c8882b',1,'sdr::BlockingSource']]], + ['bpsk31',['BPSK31',['../classsdr_1_1_b_p_s_k31.html',1,'sdr']]], + ['bpsk31',['BPSK31',['../classsdr_1_1_b_p_s_k31.html#a7862edf6d977ae6943047bd5c46036ec',1,'sdr::BPSK31']]], + ['buffer',['Buffer',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer',['buffer',['../classsdr_1_1_queue_1_1_message.html#aa023b90e3e9c9f66639f24924f9a94e7',1,'sdr::Queue::Message::buffer() const '],['../classsdr_1_1_queue_1_1_message.html#abc914df82e28a4dd8093b6b6e294640d',1,'sdr::Queue::Message::buffer()'],['../classsdr_1_1_debug_store.html#acc0294ae47ad796ccbb81e90c8cbbdfb',1,'sdr::DebugStore::buffer()'],['../classsdr_1_1_buffer.html#a470ae1acfcaaf1fe42fffdc79bcb970b',1,'sdr::Buffer::Buffer()'],['../classsdr_1_1_buffer.html#ae907c642e4d08230e389a04517ea9659',1,'sdr::Buffer::Buffer(T *data, size_t size)'],['../classsdr_1_1_buffer.html#a825a22b01c374aa198fc2fba5f3b5eea',1,'sdr::Buffer::Buffer(size_t N, BufferOwner *owner=0)'],['../classsdr_1_1_buffer.html#adfabb6f5067b89625a0592c7f819d2ed',1,'sdr::Buffer::Buffer(const Buffer< T > &other)'],['../classsdr_1_1_buffer.html#a481fce90227862e3169aeb74f785b19a',1,'sdr::Buffer::Buffer(const RawBuffer &other)']]], + ['buffer_3c_20cscalar_20_3e',['Buffer< CScalar >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20csscalar_20_3e',['Buffer< CSScalar >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20float_20_3e',['Buffer< float >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20oscalar_20_3e',['Buffer< oScalar >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20scalar_20_3e',['Buffer< Scalar >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20sscalar_20_3e',['Buffer< SScalar >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20std_3a_3acomplex_3c_20double_20_3e_20_3e',['Buffer< std::complex< double > >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20std_3a_3acomplex_3c_20float_20_3e_20_3e',['Buffer< std::complex< float > >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20std_3a_3acomplex_3c_20oscalar_20_3e_20_3e',['Buffer< std::complex< oScalar > >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20std_3a_3acomplex_3c_20scalar_20_3e_20_3e',['Buffer< std::complex< Scalar > >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20std_3a_3acomplex_3c_20sscalar_20_3e_20_3e',['Buffer< std::complex< SScalar > >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20uint8_5ft_20_3e',['Buffer< uint8_t >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffernode',['BufferNode',['../classsdr_1_1_buffer_node.html',1,'sdr']]], + ['buffernode',['BufferNode',['../classsdr_1_1_buffer_node.html#a231ac24b83844174b6f611a709e50ec7',1,'sdr::BufferNode']]], + ['buffernode_3c_20std_3a_3acomplex_3c_20scalar_20_3e_20_3e',['BufferNode< std::complex< Scalar > >',['../classsdr_1_1_buffer_node.html',1,'sdr']]], + ['bufferowner',['BufferOwner',['../classsdr_1_1_buffer_owner.html',1,'sdr']]], + ['bufferset',['BufferSet',['../classsdr_1_1_buffer_set.html#ab9925df548ac6382801dcd1a8fd0c280',1,'sdr::BufferSet']]], + ['bufferset',['BufferSet',['../classsdr_1_1_buffer_set.html',1,'sdr']]], + ['bufferset_3c_20std_3a_3acomplex_3c_20scalar_20_3e_20_3e',['BufferSet< std::complex< Scalar > >',['../classsdr_1_1_buffer_set.html',1,'sdr']]], + ['buffersize',['bufferSize',['../classsdr_1_1_config.html#a940f217ca5157e1a43c55fec08a22362',1,'sdr::Config']]], + ['bufferunused',['bufferUnused',['../classsdr_1_1_buffer_owner.html#ac00340809e90b9719bb44ebd61cb0cec',1,'sdr::BufferOwner::bufferUnused()'],['../classsdr_1_1_buffer_set.html#a431c64dd75ca0e00337073428a8ddbbb',1,'sdr::BufferSet::bufferUnused()']]], + ['bug_20list',['Bug List',['../bug.html',1,'']]], + ['bytesfree',['bytesFree',['../classsdr_1_1_raw_ring_buffer.html#a5f9a5fc51e9dd149230cac3310bf9671',1,'sdr::RawRingBuffer']]], + ['byteslen',['bytesLen',['../classsdr_1_1_raw_buffer.html#a822092fbdd5957035d89b7a958fd1f67',1,'sdr::RawBuffer::bytesLen()'],['../classsdr_1_1_raw_ring_buffer.html#a27378a9c8969562b6eac2bcf20e3adb0',1,'sdr::RawRingBuffer::bytesLen()']]], + ['bytesoffset',['bytesOffset',['../classsdr_1_1_raw_buffer.html#a71f6b914f5919bc4403f93bab28798a8',1,'sdr::RawBuffer']]] +]; diff --git a/search/all_3.html b/search/all_3.html new file mode 100644 index 0000000..4d312d0 --- /dev/null +++ b/search/all_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_3.js b/search/all_3.js new file mode 100644 index 0000000..1bc5ae3 --- /dev/null +++ b/search/all_3.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['cast',['Cast',['../classsdr_1_1_cast.html',1,'sdr']]], + ['cast',['Cast',['../classsdr_1_1_cast.html#a0ad652944e908118d862c4d806b91954',1,'sdr::Cast']]], + ['centerfrequency',['centerFrequency',['../classsdr_1_1_i_q_base_band.html#ac075931ee502f636478b395d0556294b',1,'sdr::IQBaseBand']]], + ['clear',['clear',['../classsdr_1_1_raw_ring_buffer.html#a8afcb27e77eb4ea0ffe7f615e610e9b9',1,'sdr::RawRingBuffer::clear()'],['../classsdr_1_1_debug_store.html#a01c2f43a30b8642a663addcf7fd5b897',1,'sdr::DebugStore::clear()']]], + ['close',['close',['../classsdr_1_1_wav_sink.html#a06123515727831cfc98007d26867f700',1,'sdr::WavSink::close()'],['../classsdr_1_1_wav_source.html#a302aadec4b4616280490b7f3794bad6d',1,'sdr::WavSource::close()']]], + ['coeffs',['coeffs',['../classsdr_1_1_f_i_r_low_pass_coeffs.html#ad10f9ddc869c9c33885dbf788a26deda',1,'sdr::FIRLowPassCoeffs::coeffs()'],['../classsdr_1_1_f_i_r_high_pass_coeffs.html#a64e44c1efb3e46aa54e66dbe5c593ba3',1,'sdr::FIRHighPassCoeffs::coeffs()'],['../classsdr_1_1_f_i_r_band_pass_coeffs.html#abd6f0bbcbb0c20eb828bd5f80934fc66',1,'sdr::FIRBandPassCoeffs::coeffs()'],['../classsdr_1_1_f_i_r_band_stop_coeffs.html#ab16669fb8531dfbb1dea863efcb4ac78',1,'sdr::FIRBandStopCoeffs::coeffs()']]], + ['combine',['Combine',['../classsdr_1_1_combine.html',1,'sdr']]], + ['combine',['Combine',['../classsdr_1_1_combine.html#a9a4a802d6a0fd840cb909e0f8e0805ed',1,'sdr::Combine']]], + ['combinesink',['CombineSink',['../classsdr_1_1_combine_sink.html',1,'sdr']]], + ['combinesink',['CombineSink',['../classsdr_1_1_combine_sink.html#a6fda9a4e65f9139c6099539b91fd2381',1,'sdr::CombineSink']]], + ['config',['Config',['../classsdr_1_1_config.html#abd0c571c116924871e30444b192b792a',1,'sdr::Config::Config()'],['../classsdr_1_1_config.html#abc4fa71a28fcc6f6b2854c226662287b',1,'sdr::Config::Config(Type type, double sampleRate, size_t bufferSize, size_t numBuffers)'],['../classsdr_1_1_config.html#a5e7857923b67cb5208e4b43d6a652c34',1,'sdr::Config::Config(const Config &other)'],['../classsdr_1_1_auto_cast.html#ad8f0b826c405a26bdb0884690b1dc1e6',1,'sdr::AutoCast::config()'],['../classsdr_1_1_i_q_base_band.html#a737f6c7d26595934f3d5a577304d4e97',1,'sdr::IQBaseBand::config()'],['../classsdr_1_1_base_band.html#adcaeff6352ee34550c04c9d42f669dbe',1,'sdr::BaseBand::config()'],['../classsdr_1_1_buffer_node.html#a827c44de5d3c5a24d548ca498ee8fea6',1,'sdr::BufferNode::config()'],['../classsdr_1_1_combine_sink.html#a0ff7d730bc75a6e7b36d12c42a8ebbf1',1,'sdr::CombineSink::config()'],['../classsdr_1_1_combine.html#a125ddc97065e6ae85bc8a1fce8d8cc6b',1,'sdr::Combine::config()'],['../classsdr_1_1_interleave.html#a565f44f9a680816ab9267bfb96cfe4c1',1,'sdr::Interleave::config()'],['../classsdr_1_1_a_m_demod.html#ae7a8db03a6982ae33c4786ab3b82a6cc',1,'sdr::AMDemod::config()'],['../classsdr_1_1_u_s_b_demod.html#af337424855632186cbfe8d241845e7e1',1,'sdr::USBDemod::config()'],['../classsdr_1_1_f_m_demod.html#a8f3008f786982883d9a1b2284a8b0a57',1,'sdr::FMDemod::config()'],['../classsdr_1_1_f_m_deemph.html#a01f7e78791d641c3498344e712f86bea',1,'sdr::FMDeemph::config()'],['../classsdr_1_1_filter_sink.html#a1331f69c193bfbbf7309347295c5661c',1,'sdr::FilterSink::config()'],['../classsdr_1_1_filter_source.html#aedb6195cdaeadd83f18bd5c699aeb31a',1,'sdr::FilterSource::config()'],['../classsdr_1_1_f_i_r_filter.html#add82f22f403ae4aaa004788a78bf6fb3',1,'sdr::FIRFilter::config()'],['../classsdr_1_1_sink_base.html#aacebf73840f06c82c438e352bf1eb75e',1,'sdr::SinkBase::config()'],['../classsdr_1_1_proxy.html#adb2f2d95d1fd6921b2143116bb0de448',1,'sdr::Proxy::config()'],['../classsdr_1_1_port_sink.html#a864372dbd08d8f5cc0fd8731f093fea0',1,'sdr::PortSink::config()'],['../classsdr_1_1_b_p_s_k31.html#a36da3163abca21c2dcd042139de0a36e',1,'sdr::BPSK31::config()'],['../classsdr_1_1_varicode.html#adf7cb0e1e1603a8c3ab6432932e4d21f',1,'sdr::Varicode::config()'],['../classsdr_1_1_sub_sample.html#a0191ff1b7142c17ed24a05ba502ebbc8',1,'sdr::SubSample::config()'],['../classsdr_1_1_inpol_sub_sampler.html#ad2bdbee4da505eb76b4b89694aef9e2f',1,'sdr::InpolSubSampler::config()'],['../classsdr_1_1_real_imag_part.html#ad1a035bdf7d65807bc00f02e76b14cfa',1,'sdr::RealImagPart::config()'],['../classsdr_1_1_i_q_balance.html#ad87c15d962ab16363ab0b463a9e9724b',1,'sdr::IQBalance::config()'],['../classsdr_1_1_to_complex.html#a318dbc6cdaf30baf9ee2de67ac57bc5a',1,'sdr::ToComplex::config()'],['../classsdr_1_1_cast.html#a7abe34a154f45e89f1b8df475cb8109d',1,'sdr::Cast::config()'],['../classsdr_1_1_unsigned_to_signed.html#a96623592a4d99c2305896d47bd7ccf03',1,'sdr::UnsignedToSigned::config()'],['../classsdr_1_1_signed_to_unsigned.html#a3c95c11ec3424ab0188f4cfacb175a0c',1,'sdr::SignedToUnsigned::config()'],['../classsdr_1_1_freq_shift.html#a2aeaf444562a0b054ae65442992caefc',1,'sdr::FreqShift::config()'],['../classsdr_1_1_stream_sink.html#ace62c79416acaa9680fc48da13bd583e',1,'sdr::StreamSink::config()'],['../classsdr_1_1_scale.html#a2b70619a04f2f50aaea59828f0d333e5',1,'sdr::Scale::config()'],['../classsdr_1_1_a_g_c.html#a76db615ca776e62d16c7ab8b9f348afa',1,'sdr::AGC::config()'],['../classsdr_1_1_debug_store.html#a49a16b42f72c91fadf494ab7e3fa88de',1,'sdr::DebugStore::config()'],['../classsdr_1_1_debug_dump.html#af496d34703693264a457c4f9cb8b6b44',1,'sdr::DebugDump::config()'],['../classsdr_1_1_wav_sink.html#a8fe7a9c850f1d7ab49a258f204e389b5',1,'sdr::WavSink::config()']]], + ['config',['Config',['../classsdr_1_1_config.html',1,'sdr']]], + ['configerror',['ConfigError',['../classsdr_1_1_config_error.html',1,'sdr']]], + ['configerror',['ConfigError',['../classsdr_1_1_config_error.html#abf8dde757baedc3691bef55f0a330656',1,'sdr::ConfigError::ConfigError()'],['../classsdr_1_1_config_error.html#a8be2177cd93e28543a87423439ff6394',1,'sdr::ConfigError::ConfigError(const ConfigError &other)']]], + ['connect',['connect',['../classsdr_1_1_source.html#ac7df1faefb31e72e135eec3ecf539132',1,'sdr::Source']]], + ['cscalar',['CScalar',['../classsdr_1_1_i_q_base_band.html#ac8422d94925fc86974bf613f9584d9e7',1,'sdr::IQBaseBand::CScalar()'],['../classsdr_1_1_base_band.html#af431512cfeefa7687a381f2f4a89d48f',1,'sdr::BaseBand::CScalar()'],['../classsdr_1_1_u_s_b_demod.html#a57224082b72708511815a025a1f602b8',1,'sdr::USBDemod::CScalar()'],['../classsdr_1_1_freq_shift_base.html#aaabd2094734ce7479591569d6bd3ea7e',1,'sdr::FreqShiftBase::CScalar()']]], + ['csscalar',['CSScalar',['../classsdr_1_1_i_q_base_band.html#a562034e757c3c934c0d43d5e00cb85ce',1,'sdr::IQBaseBand::CSScalar()'],['../classsdr_1_1_base_band.html#a24238931b88dad7c83900efee6efd3d6',1,'sdr::BaseBand::CSScalar()'],['../classsdr_1_1_freq_shift_base.html#ae9142edde557f4987cfb035ab5d85e06',1,'sdr::FreqShiftBase::CSScalar()']]] +]; diff --git a/search/all_4.html b/search/all_4.html new file mode 100644 index 0000000..d72a910 --- /dev/null +++ b/search/all_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_4.js b/search/all_4.js new file mode 100644 index 0000000..672b603 --- /dev/null +++ b/search/all_4.js @@ -0,0 +1,20 @@ +var searchData= +[ + ['data',['data',['../classsdr_1_1_raw_buffer.html#a41429fafa5acac7eb6ab22001fedc3d7',1,'sdr::RawBuffer']]], + ['debugdump',['DebugDump',['../classsdr_1_1_debug_dump.html',1,'sdr']]], + ['debugdump',['DebugDump',['../classsdr_1_1_debug_dump.html#ac2d812e6ce797f273b1c24c89914f1a1',1,'sdr::DebugDump']]], + ['debugstore',['DebugStore',['../classsdr_1_1_debug_store.html',1,'sdr']]], + ['debugstore',['DebugStore',['../classsdr_1_1_debug_store.html#ae0069303062df5385e61654744f42dcb',1,'sdr::DebugStore']]], + ['defaultinputdevice',['defaultInputDevice',['../classsdr_1_1_port_audio.html#a1990e85770c15c10fb29ddaea82fc447',1,'sdr::PortAudio']]], + ['defaultoutputdevice',['defaultOutputDevice',['../classsdr_1_1_port_audio.html#a05af7d9c2963d085e342f12a719c33f1',1,'sdr::PortAudio']]], + ['definition',['Definition',['../structsdr_1_1_options_1_1_definition.html',1,'sdr::Options']]], + ['delegate',['Delegate',['../classsdr_1_1_delegate.html',1,'sdr']]], + ['delegate',['Delegate',['../classsdr_1_1_delegate.html#a4693fde26e5ef52bcdf45e0911053414',1,'sdr::Delegate']]], + ['delegateinterface',['DelegateInterface',['../classsdr_1_1_delegate_interface.html',1,'sdr']]], + ['deprecated_20list',['Deprecated List',['../deprecated.html',1,'']]], + ['deviceindex',['deviceIndex',['../classsdr_1_1_port_source.html#adabd60fbc242b04e7e9a2ffc1d55a240',1,'sdr::PortSource']]], + ['devicename',['deviceName',['../classsdr_1_1_port_audio.html#a179ad1349b899080303ddd535e6d23d9',1,'sdr::PortAudio::deviceName()'],['../classsdr_1_1_r_t_l_source.html#a4730e233f63b93afcf0d3a01d8c5ce6e',1,'sdr::RTLSource::deviceName()']]], + ['direction',['Direction',['../classsdr_1_1_f_f_t.html#a02a2b7ef1f2494d542b133a4995e5344',1,'sdr::FFT']]], + ['disconnect',['disconnect',['../classsdr_1_1_source.html#a9b1d1ccef6cee5f4668ee67bc28eed7a',1,'sdr::Source']]], + ['drop',['drop',['../classsdr_1_1_raw_ring_buffer.html#a5fbec40ea5cced229b49103b0ef73001',1,'sdr::RawRingBuffer::drop()'],['../classsdr_1_1_ring_buffer.html#ac96ae51c17f2afbce7b97e873562441f',1,'sdr::RingBuffer::drop()']]] +]; diff --git a/search/all_5.html b/search/all_5.html new file mode 100644 index 0000000..99ef726 --- /dev/null +++ b/search/all_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_5.js b/search/all_5.js new file mode 100644 index 0000000..ef9f667 --- /dev/null +++ b/search/all_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['enable',['enable',['../classsdr_1_1_f_m_deemph.html#ae2f205ad6e0cf6fde1652c6629900b6a',1,'sdr::FMDeemph::enable()'],['../classsdr_1_1_f_i_r_filter.html#ae8a63941ff482b039cf1cfdb79c0dc03',1,'sdr::FIRFilter::enable()'],['../classsdr_1_1_a_g_c.html#a1266dd894d568627ea9ab7859eb2366e',1,'sdr::AGC::enable()']]], + ['enableagc',['enableAGC',['../classsdr_1_1_r_t_l_source.html#aebe2870cf1be2ba807c7129b506433bb',1,'sdr::RTLSource']]], + ['enabled',['enabled',['../classsdr_1_1_f_i_r_filter.html#a86bb334d886cebe30844cdf4e12c68a9',1,'sdr::FIRFilter::enabled()'],['../classsdr_1_1_a_g_c.html#ac94a06d5fa2ec089ac5a86c5853274ef',1,'sdr::AGC::enabled()']]], + ['exec',['exec',['../classsdr_1_1_f_f_t.html#a8aaadbbb8ce1c61fd90c5b9842753d1c',1,'sdr::FFT::exec(const Buffer< std::complex< Scalar > > &in, const Buffer< std::complex< Scalar > > &out, FFT::Direction dir)'],['../classsdr_1_1_f_f_t.html#a9eede624e80fd59823522653156c0dc4',1,'sdr::FFT::exec(const Buffer< std::complex< Scalar > > &inplace, FFT::Direction dir)']]] +]; diff --git a/search/all_6.html b/search/all_6.html new file mode 100644 index 0000000..6133ab3 --- /dev/null +++ b/search/all_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_6.js b/search/all_6.js new file mode 100644 index 0000000..62d21f8 --- /dev/null +++ b/search/all_6.js @@ -0,0 +1,52 @@ +var searchData= +[ + ['fft',['FFT',['../classsdr_1_1_f_f_t.html',1,'sdr']]], + ['fftplan',['FFTPlan',['../classsdr_1_1_f_f_t_plan.html',1,'sdr']]], + ['fftplan',['FFTPlan',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#aae8346981308f02996a9b027a375ba5b',1,'sdr::FFTPlan< double >::FFTPlan(const Buffer< std::complex< double > > &in, const Buffer< std::complex< double > > &out, FFT::Direction dir)'],['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#aff0129b582964231d58f9a0a0c8230f7',1,'sdr::FFTPlan< double >::FFTPlan(const Buffer< std::complex< double > > &inplace, FFT::Direction dir)'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#a09ecf852c31bbcad0491600ce10f2fee',1,'sdr::FFTPlan< float >::FFTPlan(const Buffer< std::complex< float > > &in, const Buffer< std::complex< float > > &out, FFT::Direction dir)'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#a6723ab098b813ce4f24cae1224a828e7',1,'sdr::FFTPlan< float >::FFTPlan(const Buffer< std::complex< float > > &inplace, FFT::Direction dir)'],['../classsdr_1_1_f_f_t_plan.html#a0797a5d126c311b031f6377b786e328d',1,'sdr::FFTPlan::FFTPlan()']]], + ['fftplan_3c_20double_20_3e',['FFTPlan< double >',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html',1,'sdr']]], + ['fftplan_3c_20float_20_3e',['FFTPlan< float >',['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html',1,'sdr']]], + ['filterfrequency',['filterFrequency',['../classsdr_1_1_i_q_base_band.html#a47ec654ceec6c5210b470bb7ff1a651e',1,'sdr::IQBaseBand']]], + ['filternode',['FilterNode',['../classsdr_1_1_filter_node.html',1,'sdr']]], + ['filternode',['FilterNode',['../classsdr_1_1_filter_node.html#a9ef6fadf38e94d3dac8ed61c170eca78',1,'sdr::FilterNode']]], + ['filtersink',['FilterSink',['../classsdr_1_1_filter_sink.html',1,'sdr']]], + ['filtersink',['FilterSink',['../classsdr_1_1_filter_sink.html#a272a1da79e3dd1d9faad8ab278b7176d',1,'sdr::FilterSink']]], + ['filtersource',['FilterSource',['../classsdr_1_1_filter_source.html',1,'sdr']]], + ['filtersource',['FilterSource',['../classsdr_1_1_filter_source.html#a2221451fde11f6c5cd115f4edefeba51',1,'sdr::FilterSource']]], + ['filterwidth',['filterWidth',['../classsdr_1_1_i_q_base_band.html#a60ee9b251a29ca25236d5c725b086516',1,'sdr::IQBaseBand']]], + ['firbandpass',['FIRBandPass',['../classsdr_1_1_f_i_r_band_pass.html',1,'sdr']]], + ['firbandpass',['FIRBandPass',['../classsdr_1_1_f_i_r_band_pass.html#a8140caf5dd9255d52b9c8bb30f81cbff',1,'sdr::FIRBandPass']]], + ['firbandpasscoeffs',['FIRBandPassCoeffs',['../classsdr_1_1_f_i_r_band_pass_coeffs.html',1,'sdr']]], + ['firbandstop',['FIRBandStop',['../classsdr_1_1_f_i_r_band_stop.html#ae5b8813bc44edb38be704b44d1637946',1,'sdr::FIRBandStop']]], + ['firbandstop',['FIRBandStop',['../classsdr_1_1_f_i_r_band_stop.html',1,'sdr']]], + ['firbandstopcoeffs',['FIRBandStopCoeffs',['../classsdr_1_1_f_i_r_band_stop_coeffs.html',1,'sdr']]], + ['firfilter',['FIRFilter',['../classsdr_1_1_f_i_r_filter.html#a94d565503488689e65a75199117146e1',1,'sdr::FIRFilter']]], + ['firfilter',['FIRFilter',['../classsdr_1_1_f_i_r_filter.html',1,'sdr']]], + ['firfilter_3c_20scalar_2c_20firbandpasscoeffs_20_3e',['FIRFilter< Scalar, FIRBandPassCoeffs >',['../classsdr_1_1_f_i_r_filter.html',1,'sdr']]], + ['firfilter_3c_20scalar_2c_20firbandstopcoeffs_20_3e',['FIRFilter< Scalar, FIRBandStopCoeffs >',['../classsdr_1_1_f_i_r_filter.html',1,'sdr']]], + ['firfilter_3c_20scalar_2c_20firhighpasscoeffs_20_3e',['FIRFilter< Scalar, FIRHighPassCoeffs >',['../classsdr_1_1_f_i_r_filter.html',1,'sdr']]], + ['firfilter_3c_20scalar_2c_20firlowpasscoeffs_20_3e',['FIRFilter< Scalar, FIRLowPassCoeffs >',['../classsdr_1_1_f_i_r_filter.html',1,'sdr']]], + ['firhighpass',['FIRHighPass',['../classsdr_1_1_f_i_r_high_pass.html#a7a44da7f400f30bbbb763f7bd00d5660',1,'sdr::FIRHighPass']]], + ['firhighpass',['FIRHighPass',['../classsdr_1_1_f_i_r_high_pass.html',1,'sdr']]], + ['firhighpasscoeffs',['FIRHighPassCoeffs',['../classsdr_1_1_f_i_r_high_pass_coeffs.html',1,'sdr']]], + ['firlowpass',['FIRLowPass',['../classsdr_1_1_f_i_r_low_pass.html#acc816ce385aa609f1e4d747855de87ca',1,'sdr::FIRLowPass']]], + ['firlowpass',['FIRLowPass',['../classsdr_1_1_f_i_r_low_pass.html',1,'sdr']]], + ['firlowpasscoeffs',['FIRLowPassCoeffs',['../classsdr_1_1_f_i_r_low_pass_coeffs.html',1,'sdr']]], + ['flag',['FLAG',['../classsdr_1_1_options.html#a9ac110e66c7d6065c7035577bcf51923af5db5e6e229f1e46459310e3464bd1a1',1,'sdr::Options']]], + ['float',['FLOAT',['../classsdr_1_1_options_1_1_value.html#a0c9f78ee322f128c50d74b76d51ad33ea41efda03ed5c01cd43053fea11bcd776',1,'sdr::Options::Value::FLOAT()'],['../classsdr_1_1_options.html#a9ac110e66c7d6065c7035577bcf51923a9a98f630dcfbc1649e4e4446a4c91917',1,'sdr::Options::FLOAT()']]], + ['fmdeemph',['FMDeemph',['../classsdr_1_1_f_m_deemph.html',1,'sdr']]], + ['fmdeemph',['FMDeemph',['../classsdr_1_1_f_m_deemph.html#a3785af576bab59e8e21fddd5eff4d9b8',1,'sdr::FMDeemph']]], + ['fmdemod',['FMDemod',['../classsdr_1_1_f_m_demod.html',1,'sdr']]], + ['fmdemod',['FMDemod',['../classsdr_1_1_f_m_demod.html#a1d05cb544f56c4b4925c5d9dc6ab4d27',1,'sdr::FMDemod']]], + ['frac',['frac',['../classsdr_1_1_frac_sub_sample_base.html#a7b7b81715160de41b57aaa2b082d4419',1,'sdr::FracSubSampleBase']]], + ['fracsubsamplebase',['FracSubSampleBase',['../classsdr_1_1_frac_sub_sample_base.html',1,'sdr']]], + ['fracsubsamplebase',['FracSubSampleBase',['../classsdr_1_1_frac_sub_sample_base.html#a9541f45940779515077e41542939bdca',1,'sdr::FracSubSampleBase']]], + ['free',['free',['../classsdr_1_1_ring_buffer.html#a17f827a85fbbaed4568a0d59adb1dc1c',1,'sdr::RingBuffer']]], + ['freq',['freq',['../classsdr_1_1_f_i_r_low_pass.html#a2b208c92826e76738fa9a0bf31818736',1,'sdr::FIRLowPass::freq()'],['../classsdr_1_1_f_i_r_high_pass.html#a58b576726bab60c3a47268a5c5740a95',1,'sdr::FIRHighPass::freq()']]], + ['freqcorrection',['freqCorrection',['../classsdr_1_1_r_t_l_source.html#a26243c7c26f8bd9e136a3aeb513f0513',1,'sdr::RTLSource']]], + ['freqshift',['FreqShift',['../classsdr_1_1_freq_shift.html',1,'sdr']]], + ['freqshift',['FreqShift',['../classsdr_1_1_freq_shift.html#a277a98f4b337726d07b3245a920b6456',1,'sdr::FreqShift']]], + ['freqshiftbase',['FreqShiftBase',['../classsdr_1_1_freq_shift_base.html#a0fda649f8939151e931c89dc6e6dcc15',1,'sdr::FreqShiftBase']]], + ['freqshiftbase',['FreqShiftBase',['../classsdr_1_1_freq_shift_base.html',1,'sdr']]], + ['frequency',['frequency',['../classsdr_1_1_r_t_l_source.html#a0b0c2bfa386cf42f623cfee094553268',1,'sdr::RTLSource']]], + ['frequencyshift',['frequencyShift',['../classsdr_1_1_freq_shift_base.html#ae35765fc1fd75d595a77551fa1670606',1,'sdr::FreqShiftBase']]] +]; diff --git a/search/all_7.html b/search/all_7.html new file mode 100644 index 0000000..5748125 --- /dev/null +++ b/search/all_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_7.js b/search/all_7.js new file mode 100644 index 0000000..3db54f4 --- /dev/null +++ b/search/all_7.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['gain',['gain',['../classsdr_1_1_r_t_l_source.html#a158edee2c383a22159760fb755d82b6c',1,'sdr::RTLSource::gain()'],['../classsdr_1_1_a_g_c.html#a021a3a3366f3ae5d400fa8475f6c45d6',1,'sdr::AGC::gain()']]], + ['gainfactors',['gainFactors',['../classsdr_1_1_r_t_l_source.html#abbf08017ff4660e9313b90b5eaa60668',1,'sdr::RTLSource']]], + ['get',['get',['../classsdr_1_1_logger.html#a9b12ce53593be134b7d7dea62607d22d',1,'sdr::Logger::get()'],['../classsdr_1_1_options.html#abf0c8e6106bcca067b0f11dba15fb050',1,'sdr::Options::get()'],['../classsdr_1_1_queue.html#ab4c57ac84eaa535fd412b3b7b7cfc816',1,'sdr::Queue::get()']]], + ['getbuffer',['getBuffer',['../classsdr_1_1_buffer_set.html#aee221d7b71f5f0a5b0b30991c34a362f',1,'sdr::BufferSet']]], + ['gwnsource',['GWNSource',['../classsdr_1_1_g_w_n_source.html#a252d6072247808f11340274fda976500',1,'sdr::GWNSource']]], + ['gwnsource',['GWNSource',['../classsdr_1_1_g_w_n_source.html',1,'sdr']]] +]; diff --git a/search/all_8.html b/search/all_8.html new file mode 100644 index 0000000..0179bdd --- /dev/null +++ b/search/all_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_8.js b/search/all_8.js new file mode 100644 index 0000000..7b47232 --- /dev/null +++ b/search/all_8.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['handle',['handle',['../classsdr_1_1_log_handler.html#a09ce2fab756cba41a3fcd94a48b11e8a',1,'sdr::LogHandler::handle()'],['../classsdr_1_1_stream_log_handler.html#a7131db89e93154b4c9d6e434eddc20d7',1,'sdr::StreamLogHandler::handle()']]], + ['handlebuffer',['handleBuffer',['../classsdr_1_1_auto_cast.html#a8acf3f265d8da760d0b75c9281da8c28',1,'sdr::AutoCast::handleBuffer()'],['../classsdr_1_1_sink_base.html#ae64ff25bdf0b31ec5366dab55e219088',1,'sdr::SinkBase::handleBuffer()'],['../classsdr_1_1_sink.html#a25b0849e40053f87496ca72f8b8cd9e2',1,'sdr::Sink::handleBuffer()'],['../classsdr_1_1_proxy.html#a2fff7c978c2cf3e7e80a3eca7ea8a4f6',1,'sdr::Proxy::handleBuffer()'],['../classsdr_1_1_port_sink.html#a080e01c07a812fa597487a88bc99b196',1,'sdr::PortSink::handleBuffer()'],['../classsdr_1_1_unsigned_to_signed.html#a0d33c6c5e8cbfee5b549daa11263f471',1,'sdr::UnsignedToSigned::handleBuffer()'],['../classsdr_1_1_signed_to_unsigned.html#a45b29ca444478cb29c6faf119024efe6',1,'sdr::SignedToUnsigned::handleBuffer()']]], + ['has',['has',['../classsdr_1_1_options.html#a42f37b349c199d9a412e97cb0effea01',1,'sdr::Options']]], + ['hasbuffer',['hasBuffer',['../classsdr_1_1_buffer_set.html#a15907b5ea81bb34ed07a021b6b3de68b',1,'sdr::BufferSet']]], + ['hasbuffersize',['hasBufferSize',['../classsdr_1_1_config.html#a485e488e1411e52c722b22d1807be406',1,'sdr::Config']]], + ['hasinputstream',['hasInputStream',['../classsdr_1_1_port_audio.html#a3e2e0df7ad08bf37b0e436ffb68c36e2',1,'sdr::PortAudio']]], + ['hasnumbuffers',['hasNumBuffers',['../classsdr_1_1_config.html#af4b76131fb34e45cd417a242dc122dd4',1,'sdr::Config']]], + ['hasoutputstream',['hasOutputStream',['../classsdr_1_1_port_audio.html#a9c5fe4bf24d4876fe6a9a4c9c0a3f77e',1,'sdr::PortAudio']]], + ['hassamplerate',['hasSampleRate',['../classsdr_1_1_config.html#a5df3f75dcd6e678bd5f029a7400b404e',1,'sdr::Config::hasSampleRate()'],['../classsdr_1_1_port_source.html#a9e574984db12845def10240fb409a476',1,'sdr::PortSource::hasSampleRate()']]], + ['hastype',['hasType',['../classsdr_1_1_config.html#a7cdfc69aa8e3ab975db7251747343a20',1,'sdr::Config']]], + ['head',['head',['../classsdr_1_1_buffer.html#a3eca322ed118a7b5c4cc62b25ce5d119',1,'sdr::Buffer']]], + ['help',['help',['../structsdr_1_1_options_1_1_definition.html#a155078c7926934c3ae49100aa88ee1ee',1,'sdr::Options::Definition']]] +]; diff --git a/search/all_9.html b/search/all_9.html new file mode 100644 index 0000000..cd46d44 --- /dev/null +++ b/search/all_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_9.js b/search/all_9.js new file mode 100644 index 0000000..5cbf77e --- /dev/null +++ b/search/all_9.js @@ -0,0 +1,31 @@ +var searchData= +[ + ['imagpart',['ImagPart',['../classsdr_1_1_imag_part.html',1,'sdr']]], + ['imagpart',['ImagPart',['../classsdr_1_1_imag_part.html#ac72d38fd751b2dcfd999285e7ff84104',1,'sdr::ImagPart']]], + ['init',['init',['../classsdr_1_1_port_audio.html#aaec93bedb614d249c5d8f74138b55c3a',1,'sdr::PortAudio']]], + ['inpolsubsampler',['InpolSubSampler',['../classsdr_1_1_inpol_sub_sampler.html',1,'sdr']]], + ['inpolsubsampler',['InpolSubSampler',['../classsdr_1_1_inpol_sub_sampler.html#a590caa51890f21695f0e2ab3baa72f4d',1,'sdr::InpolSubSampler']]], + ['instance',['instance',['../classsdr_1_1_delegate_interface.html#a0b1007766581eedcbf202ff76cee2cb4',1,'sdr::DelegateInterface::instance()'],['../classsdr_1_1_delegate.html#a99111db1a5bc61ec46456d132151f9c2',1,'sdr::Delegate::instance()']]], + ['integer',['INTEGER',['../classsdr_1_1_options_1_1_value.html#a0c9f78ee322f128c50d74b76d51ad33eac078a5863bc0c2ec219569dec05af0a3',1,'sdr::Options::Value::INTEGER()'],['../classsdr_1_1_options.html#a9ac110e66c7d6065c7035577bcf51923a2c66965e290f6a5b1edea96154e0fb9e',1,'sdr::Options::INTEGER()']]], + ['interleave',['Interleave',['../classsdr_1_1_interleave.html#a63ac877ca74af78bfa15838bd6054d99',1,'sdr::Interleave']]], + ['interleave',['Interleave',['../classsdr_1_1_interleave.html',1,'sdr']]], + ['iqbalance',['IQBalance',['../classsdr_1_1_i_q_balance.html',1,'sdr']]], + ['iqbalance',['IQBalance',['../classsdr_1_1_i_q_balance.html#a0ed23d78d6d5cdd9130fb7fb08eefb02',1,'sdr::IQBalance']]], + ['iqbaseband',['IQBaseBand',['../classsdr_1_1_i_q_base_band.html',1,'sdr']]], + ['iqbaseband',['IQBaseBand',['../classsdr_1_1_i_q_base_band.html#ac2ee96b0eac170f1a32d21f6a50ea799',1,'sdr::IQBaseBand::IQBaseBand(double Fc, double width, size_t order, size_t sub_sample, double oFs=0.0)'],['../classsdr_1_1_i_q_base_band.html#a797b04b4d9a44a10134408bcfb117228',1,'sdr::IQBaseBand::IQBaseBand(double Fc, double Ff, double width, size_t order, size_t sub_sample, double oFs=0.0)']]], + ['iqsiggen',['IQSigGen',['../classsdr_1_1_i_q_sig_gen.html',1,'sdr']]], + ['iqsiggen',['IQSigGen',['../classsdr_1_1_i_q_sig_gen.html#acedf832e6e71da70836b98bf8ec3fe38',1,'sdr::IQSigGen']]], + ['isactive',['isActive',['../classsdr_1_1_blocking_source.html#a982d9e5c670e2a738dd5ae3cc783c9ea',1,'sdr::BlockingSource']]], + ['isempty',['isEmpty',['../classsdr_1_1_raw_buffer.html#a944346de6bb972f687716bee921a3bad',1,'sdr::RawBuffer']]], + ['isenabled',['isEnabled',['../classsdr_1_1_f_m_deemph.html#a09465c706c213ac9d3c95617b8fde001',1,'sdr::FMDeemph']]], + ['isfloat',['isFloat',['../classsdr_1_1_options_1_1_value.html#a1b598a10284f1d79558b2681ad85e23d',1,'sdr::Options::Value']]], + ['isinteger',['isInteger',['../classsdr_1_1_options_1_1_value.html#a59b02e020546531e410d5f3f9b53b3e6',1,'sdr::Options::Value']]], + ['isnone',['isNone',['../classsdr_1_1_options_1_1_value.html#a645670bb3c4a4acad49195bb76a492e6',1,'sdr::Options::Value']]], + ['isopen',['isOpen',['../classsdr_1_1_wav_source.html#acc0a433ae943f3cba0aacecedca6290d',1,'sdr::WavSource']]], + ['isreal',['isReal',['../classsdr_1_1_wav_source.html#a5bf72cc575741d70749c25c017852e1d',1,'sdr::WavSource']]], + ['isrunning',['isRunning',['../classsdr_1_1_queue.html#a29564db70cb6f3a0cfd04a3cb95476e4',1,'sdr::Queue']]], + ['isscalar',['iSScalar',['../classsdr_1_1_cast.html#a6d0afd25d2d0d2e0dd89dc1759a3f7b4',1,'sdr::Cast']]], + ['isstopped',['isStopped',['../classsdr_1_1_queue.html#ae6682efa4e7917e642e28f538310b65d',1,'sdr::Queue']]], + ['isstring',['isString',['../classsdr_1_1_options_1_1_value.html#a80c92fb288efdb2adaa85658f3644c0c',1,'sdr::Options::Value']]], + ['isunused',['isUnused',['../classsdr_1_1_raw_buffer.html#ab2f4ac2dc396108141ec8473bfb7f99a',1,'sdr::RawBuffer']]] +]; diff --git a/search/all_a.html b/search/all_a.html new file mode 100644 index 0000000..eab6553 --- /dev/null +++ b/search/all_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_a.js b/search/all_a.js new file mode 100644 index 0000000..8a5c925 --- /dev/null +++ b/search/all_a.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['level',['level',['../classsdr_1_1_log_message.html#a83883fa8abbe500be6be276204475d22',1,'sdr::LogMessage']]], + ['log',['log',['../classsdr_1_1_logger.html#ab887e598a2c4dc1a3a3f1027d91e0e58',1,'sdr::Logger']]], + ['logger',['Logger',['../classsdr_1_1_logger.html',1,'sdr']]], + ['logger',['Logger',['../classsdr_1_1_logger.html#abc41bfb031d896170c7675fa96a6b30c',1,'sdr::Logger']]], + ['loghandler',['LogHandler',['../classsdr_1_1_log_handler.html',1,'sdr']]], + ['loghandler',['LogHandler',['../classsdr_1_1_log_handler.html#a59bd3b769913f4e599f0d7a46d9c7d9b',1,'sdr::LogHandler']]], + ['logmessage',['LogMessage',['../classsdr_1_1_log_message.html#af012dfe0e3585a4bf5af9bfa78d193fd',1,'sdr::LogMessage::LogMessage(LogLevel level, const std::string &msg="")'],['../classsdr_1_1_log_message.html#a389d0e1749674ff86dd22aedcfc2cdf2',1,'sdr::LogMessage::LogMessage(const LogMessage &other)']]], + ['logmessage',['LogMessage',['../classsdr_1_1_log_message.html',1,'sdr']]], + ['lowerfreq',['lowerFreq',['../classsdr_1_1_f_i_r_filter.html#a9681c7d0e584a03c914897cb2fd1604f',1,'sdr::FIRFilter']]] +]; diff --git a/search/all_b.html b/search/all_b.html new file mode 100644 index 0000000..a2c161e --- /dev/null +++ b/search/all_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_b.js b/search/all_b.js new file mode 100644 index 0000000..1a94e7d --- /dev/null +++ b/search/all_b.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['message',['Message',['../classsdr_1_1_queue_1_1_message.html',1,'sdr::Queue']]], + ['message',['message',['../classsdr_1_1_log_message.html#ab20d3bd794761d68f9449239b856fd53',1,'sdr::LogMessage::message()'],['../classsdr_1_1_queue_1_1_message.html#a69200e761a282cda093aec9b23d6febe',1,'sdr::Queue::Message::Message(const RawBuffer &buffer, SinkBase *sink, bool allow_overwrite)'],['../classsdr_1_1_queue_1_1_message.html#a3475f0dd585f7d92b21b70710ed1616e',1,'sdr::Queue::Message::Message(const Message &other)']]] +]; diff --git a/search/all_c.html b/search/all_c.html new file mode 100644 index 0000000..bdd3ee2 --- /dev/null +++ b/search/all_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_c.js b/search/all_c.js new file mode 100644 index 0000000..36343fa --- /dev/null +++ b/search/all_c.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['name',['name',['../structsdr_1_1_options_1_1_definition.html#a31ac625050a465d6eefa5a6876a8a232',1,'sdr::Options::Definition']]], + ['next',['next',['../classsdr_1_1_blocking_source.html#a41188f9ed0b1658908ef3bc6e62ffcce',1,'sdr::BlockingSource::next()'],['../classsdr_1_1_port_source.html#a956dbd9ff5ced54794cd5c2b67bb1826',1,'sdr::PortSource::next()'],['../classsdr_1_1_sig_gen.html#a89919ee99d3eb42c954c2b0fcb6f4085',1,'sdr::SigGen::next()'],['../classsdr_1_1_i_q_sig_gen.html#aaf8ff97c27d5c66472ef87b53f13cb48',1,'sdr::IQSigGen::next()'],['../classsdr_1_1_stream_source.html#ae3877a37e355e1a3668be5bfb0bcb004',1,'sdr::StreamSource::next()'],['../classsdr_1_1_g_w_n_source.html#a0216c5b6d8efeded627b030219858e8c',1,'sdr::GWNSource::next()'],['../classsdr_1_1_wav_source.html#a63d7f25aaf5817e834f9855a9be2a964',1,'sdr::WavSource::next()']]], + ['none',['NONE',['../classsdr_1_1_options_1_1_value.html#a0c9f78ee322f128c50d74b76d51ad33ea92c0a239d71fe6f6d4a5baa3807bf454',1,'sdr::Options::Value']]], + ['norm',['norm',['../classsdr_1_1_buffer.html#a8df39d602194a3294b6494698c5eac5b',1,'sdr::Buffer::norm() const '],['../classsdr_1_1_buffer.html#a13e1b6880ac7553e43a786ea6e71b945',1,'sdr::Buffer::norm(double p) const ']]], + ['norm2',['norm2',['../classsdr_1_1_buffer.html#adc13d307ada394c5d72bff1b23c67e45',1,'sdr::Buffer']]], + ['notifyconfig',['notifyConfig',['../classsdr_1_1_combine.html#ae9a58e1e60e3f8aeb7c99266504302ab',1,'sdr::Combine']]], + ['notifydata',['notifyData',['../classsdr_1_1_combine.html#a122bd26fcf778feb91b4304b3af7056c',1,'sdr::Combine']]], + ['numbuffers',['numBuffers',['../classsdr_1_1_config.html#a023ef493d310cfc8a304c2443c69fc51',1,'sdr::Config']]], + ['numdevices',['numDevices',['../classsdr_1_1_port_audio.html#a3cdb7755e7bd2a1e750b7a717a5bd946',1,'sdr::PortAudio::numDevices()'],['../classsdr_1_1_r_t_l_source.html#a547151ee7ec2d3da1285980b7dbf1664',1,'sdr::RTLSource::numDevices()']]] +]; diff --git a/search/all_d.html b/search/all_d.html new file mode 100644 index 0000000..d510933 --- /dev/null +++ b/search/all_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_d.js b/search/all_d.js new file mode 100644 index 0000000..d48d4c6 --- /dev/null +++ b/search/all_d.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['open',['open',['../classsdr_1_1_wav_source.html#a4a0ad7997d3e663b939ef64818dfd24b',1,'sdr::WavSource']]], + ['operator_28_29',['operator()',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#a3b6086f568b216b7aae2f782a8aae4d5',1,'sdr::FFTPlan< double >::operator()()'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#a5c7f324250f043755028343aacbadb19',1,'sdr::FFTPlan< float >::operator()()'],['../classsdr_1_1_f_f_t_plan.html#a1cf4df7a8518971168efec090930a248',1,'sdr::FFTPlan::operator()()'],['../classsdr_1_1_delegate_interface.html#ab3308df8f5839554e754a713938d71b3',1,'sdr::DelegateInterface::operator()()'],['../classsdr_1_1_delegate.html#aac9c36c8ff5f1800965ce78813a6547f',1,'sdr::Delegate::operator()()']]], + ['operator_2a_3d',['operator*=',['../classsdr_1_1_buffer.html#aa01345df383500df3c889047c0f67c0f',1,'sdr::Buffer']]], + ['operator_2f_3d',['operator/=',['../classsdr_1_1_buffer.html#a7167b037ba6323ac4b10da8871174233',1,'sdr::Buffer']]], + ['operator_3c',['operator<',['../classsdr_1_1_buffer.html#adc798bffbe74b4878c7a7917e12e11d3',1,'sdr::Buffer']]], + ['operator_3d',['operator=',['../classsdr_1_1_raw_buffer.html#ad1723264fc54a81fcb90e640b296a2e6',1,'sdr::RawBuffer::operator=()'],['../classsdr_1_1_buffer.html#a7c366daba7c28c4142b71b64736076e4',1,'sdr::Buffer::operator=()'],['../classsdr_1_1_raw_ring_buffer.html#ad2e14fbe4f6e22e04e55f7ab930d3f52',1,'sdr::RawRingBuffer::operator=()'],['../classsdr_1_1_ring_buffer.html#a0756d690b16cd049f086ba5cb053820a',1,'sdr::RingBuffer::operator=()'],['../classsdr_1_1_config.html#ab2ebc320b1e83ce6913a00f67aa770db',1,'sdr::Config::operator=()'],['../classsdr_1_1_options_1_1_value.html#a9f30705a30b7dbb039717a83fa3e5d92',1,'sdr::Options::Value::operator=()'],['../classsdr_1_1_queue_1_1_message.html#a81ba08e644a4c224d395dff8524b2875',1,'sdr::Queue::Message::operator=()']]], + ['operator_3d_3d',['operator==',['../classsdr_1_1_config.html#a19d150520ec17818c2fc34717327b51f',1,'sdr::Config']]], + ['operator_5b_5d',['operator[]',['../classsdr_1_1_buffer.html#a4824f1dcfabdebab4d1ed2578a48f7c6',1,'sdr::Buffer::operator[]()'],['../classsdr_1_1_raw_ring_buffer.html#a622446adcd06185c645f94dfc4f8b457',1,'sdr::RawRingBuffer::operator[]()'],['../classsdr_1_1_ring_buffer.html#a0869367ba44452dd5111a7f329b48043',1,'sdr::RingBuffer::operator[]()']]], + ['options',['Options',['../classsdr_1_1_options.html#ab72fb640172a6109e34c8a5366563753',1,'sdr::Options']]], + ['options',['Options',['../classsdr_1_1_options.html',1,'sdr']]], + ['order',['order',['../classsdr_1_1_i_q_base_band.html#a7abbe9bdb31179c75668b423114a6fd3',1,'sdr::IQBaseBand::order()'],['../classsdr_1_1_f_i_r_filter.html#a97fad5ad5e7d18085d4d6c6904154836',1,'sdr::FIRFilter::order()']]], + ['osscalar',['oSScalar',['../classsdr_1_1_cast.html#a348bba2ba8a9312296d58427f0ef5674',1,'sdr::Cast']]] +]; diff --git a/search/all_e.html b/search/all_e.html new file mode 100644 index 0000000..3cda017 --- /dev/null +++ b/search/all_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_e.js b/search/all_e.js new file mode 100644 index 0000000..a3c4856 --- /dev/null +++ b/search/all_e.js @@ -0,0 +1,16 @@ +var searchData= +[ + ['parse',['parse',['../classsdr_1_1_options.html#a8e2d6ea59da75b95d5b249a8db4ea0e2',1,'sdr::Options']]], + ['portaudio',['PortAudio',['../classsdr_1_1_port_audio.html',1,'sdr']]], + ['portsink',['PortSink',['../classsdr_1_1_port_sink.html',1,'sdr']]], + ['portsink',['PortSink',['../classsdr_1_1_port_sink.html#a07ddcbde693491c27ad2ef1831f0bc8d',1,'sdr::PortSink']]], + ['portsource',['PortSource',['../classsdr_1_1_port_source.html',1,'sdr']]], + ['portsource',['PortSource',['../classsdr_1_1_port_source.html#a79e184b8673fad74860dcd7fa28df9cd',1,'sdr::PortSource']]], + ['print_5fhelp',['print_help',['../classsdr_1_1_options.html#a513891211cfd8459198d61aa9f896110',1,'sdr::Options']]], + ['process',['process',['../classsdr_1_1_i_q_base_band.html#a4add91f21932190fbe0473cfa4f9c1f7',1,'sdr::IQBaseBand::process()'],['../classsdr_1_1_base_band.html#a35bd6ce1dd4381f20bf5112e718c48f1',1,'sdr::BaseBand::process()'],['../classsdr_1_1_buffer_node.html#abb7d0d4724ccbc18e762c1b1d55d4d95',1,'sdr::BufferNode::process()'],['../classsdr_1_1_combine_sink.html#ad40f7f5a344a4e62db6f78e74e3f2bfe',1,'sdr::CombineSink::process()'],['../classsdr_1_1_combine.html#a7df4082b6b821c36fc61197b9bd561ae',1,'sdr::Combine::process()'],['../classsdr_1_1_interleave.html#a274faa3e0620ff05297809761a51aa85',1,'sdr::Interleave::process()'],['../classsdr_1_1_a_m_demod.html#a392ffdcfb0d482c9b502058e3465cdb5',1,'sdr::AMDemod::process()'],['../classsdr_1_1_u_s_b_demod.html#a136f465b83b4567091797c2d0a28f79f',1,'sdr::USBDemod::process()'],['../classsdr_1_1_f_m_demod.html#ad8d9f4f6914b534f520c5d2615f4ae12',1,'sdr::FMDemod::process()'],['../classsdr_1_1_f_m_deemph.html#a7523e82839cb9b84a4f638c14daeeba7',1,'sdr::FMDeemph::process()'],['../classsdr_1_1_filter_sink.html#aae6050776cbd6cdea85cd1ef368fa634',1,'sdr::FilterSink::process()'],['../classsdr_1_1_filter_source.html#a4bcb98c6b4146c8558e9de40b84dc318',1,'sdr::FilterSource::process()'],['../classsdr_1_1_f_i_r_filter.html#aa2247006714c239918245574605014b9',1,'sdr::FIRFilter::process()'],['../classsdr_1_1_sink.html#aaa6fa5f784d5f328fc9c4e7b241a03e9',1,'sdr::Sink::process()'],['../classsdr_1_1_b_p_s_k31.html#aab706f8a7b70b479213b7bbf9015643d',1,'sdr::BPSK31::process()'],['../classsdr_1_1_varicode.html#a8a6bb2547fe48e8994ae9d34afac375a',1,'sdr::Varicode::process()'],['../classsdr_1_1_sub_sample.html#abd849a63a5365bbbeb4d35eb78a542f2',1,'sdr::SubSample::process()'],['../classsdr_1_1_inpol_sub_sampler.html#a53524d887e696974493d5a74fae8cee7',1,'sdr::InpolSubSampler::process()'],['../classsdr_1_1_real_imag_part.html#ab71379580b5138b2c351da64c58253b3',1,'sdr::RealImagPart::process()'],['../classsdr_1_1_i_q_balance.html#a0a077f57ec502c76244863f1f940d028',1,'sdr::IQBalance::process()'],['../classsdr_1_1_to_complex.html#a7cd62714938db65f91578ad5042a4ed3',1,'sdr::ToComplex::process()'],['../classsdr_1_1_cast.html#a87fce857f7edce169b999d8362715a5b',1,'sdr::Cast::process()'],['../classsdr_1_1_freq_shift.html#aae47d9152dcbd9c40182c9cf319efdc9',1,'sdr::FreqShift::process()'],['../classsdr_1_1_stream_sink.html#a17eb7f702a5fef65bab33179322b4b3c',1,'sdr::StreamSink::process()'],['../classsdr_1_1_scale.html#a22c0cacdcec966a3aa2fa3f178fe168c',1,'sdr::Scale::process()'],['../classsdr_1_1_a_g_c.html#ac1f811db1e85281d33e10f63cd67f7f3',1,'sdr::AGC::process()'],['../classsdr_1_1_debug_store.html#ad4614b418a72ef58bdec3da66baa17b9',1,'sdr::DebugStore::process()'],['../classsdr_1_1_debug_dump.html#ac65877c52fea8c06101245541740a12a',1,'sdr::DebugDump::process()'],['../classsdr_1_1_wav_sink.html#a686354120df4484d2b9ec0aa7b8b5471',1,'sdr::WavSink::process()']]], + ['propagateconfig',['propagateConfig',['../classsdr_1_1_source.html#a3fbd9bdaf370acad141440388da2100c',1,'sdr::Source']]], + ['proxy',['Proxy',['../classsdr_1_1_proxy.html',1,'sdr']]], + ['proxy',['Proxy',['../classsdr_1_1_proxy.html#a57825cd062ffde92f9380ea56d50fac2',1,'sdr::Proxy']]], + ['ptr',['ptr',['../classsdr_1_1_raw_buffer.html#a2384e82c2344e55b0246e8aebcd713f2',1,'sdr::RawBuffer']]], + ['put',['put',['../classsdr_1_1_raw_ring_buffer.html#afd4071b19ead6aea6a8903ada1e1e54a',1,'sdr::RawRingBuffer::put()'],['../classsdr_1_1_ring_buffer.html#a4ee71746961f5dbcfaec15edd74c1afd',1,'sdr::RingBuffer::put()']]] +]; diff --git a/search/all_f.html b/search/all_f.html new file mode 100644 index 0000000..7419b02 --- /dev/null +++ b/search/all_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/all_f.js b/search/all_f.js new file mode 100644 index 0000000..5518883 --- /dev/null +++ b/search/all_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['queue',['Queue',['../classsdr_1_1_queue.html',1,'sdr']]], + ['queue',['Queue',['../classsdr_1_1_queue.html#a7cfca3637d57c4a9e37351b3426ffd40',1,'sdr::Queue']]] +]; diff --git a/search/classes_0.html b/search/classes_0.html new file mode 100644 index 0000000..fabdc03 --- /dev/null +++ b/search/classes_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_0.js b/search/classes_0.js new file mode 100644 index 0000000..b2cc3f3 --- /dev/null +++ b/search/classes_0.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['agc',['AGC',['../classsdr_1_1_a_g_c.html',1,'sdr']]], + ['amdemod',['AMDemod',['../classsdr_1_1_a_m_demod.html',1,'sdr']]], + ['autocast',['AutoCast',['../classsdr_1_1_auto_cast.html',1,'sdr']]] +]; diff --git a/search/classes_1.html b/search/classes_1.html new file mode 100644 index 0000000..800b6ae --- /dev/null +++ b/search/classes_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_1.js b/search/classes_1.js new file mode 100644 index 0000000..5082cf9 --- /dev/null +++ b/search/classes_1.js @@ -0,0 +1,24 @@ +var searchData= +[ + ['baseband',['BaseBand',['../classsdr_1_1_base_band.html',1,'sdr']]], + ['blockingsource',['BlockingSource',['../classsdr_1_1_blocking_source.html',1,'sdr']]], + ['bpsk31',['BPSK31',['../classsdr_1_1_b_p_s_k31.html',1,'sdr']]], + ['buffer',['Buffer',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20cscalar_20_3e',['Buffer< CScalar >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20csscalar_20_3e',['Buffer< CSScalar >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20float_20_3e',['Buffer< float >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20oscalar_20_3e',['Buffer< oScalar >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20scalar_20_3e',['Buffer< Scalar >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20sscalar_20_3e',['Buffer< SScalar >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20std_3a_3acomplex_3c_20double_20_3e_20_3e',['Buffer< std::complex< double > >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20std_3a_3acomplex_3c_20float_20_3e_20_3e',['Buffer< std::complex< float > >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20std_3a_3acomplex_3c_20oscalar_20_3e_20_3e',['Buffer< std::complex< oScalar > >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20std_3a_3acomplex_3c_20scalar_20_3e_20_3e',['Buffer< std::complex< Scalar > >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20std_3a_3acomplex_3c_20sscalar_20_3e_20_3e',['Buffer< std::complex< SScalar > >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffer_3c_20uint8_5ft_20_3e',['Buffer< uint8_t >',['../classsdr_1_1_buffer.html',1,'sdr']]], + ['buffernode',['BufferNode',['../classsdr_1_1_buffer_node.html',1,'sdr']]], + ['buffernode_3c_20std_3a_3acomplex_3c_20scalar_20_3e_20_3e',['BufferNode< std::complex< Scalar > >',['../classsdr_1_1_buffer_node.html',1,'sdr']]], + ['bufferowner',['BufferOwner',['../classsdr_1_1_buffer_owner.html',1,'sdr']]], + ['bufferset',['BufferSet',['../classsdr_1_1_buffer_set.html',1,'sdr']]], + ['bufferset_3c_20std_3a_3acomplex_3c_20scalar_20_3e_20_3e',['BufferSet< std::complex< Scalar > >',['../classsdr_1_1_buffer_set.html',1,'sdr']]] +]; diff --git a/search/classes_10.html b/search/classes_10.html new file mode 100644 index 0000000..e03af79 --- /dev/null +++ b/search/classes_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_10.js b/search/classes_10.js new file mode 100644 index 0000000..4991625 --- /dev/null +++ b/search/classes_10.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['value',['Value',['../classsdr_1_1_options_1_1_value.html',1,'sdr::Options']]], + ['varicode',['Varicode',['../classsdr_1_1_varicode.html',1,'sdr']]] +]; diff --git a/search/classes_11.html b/search/classes_11.html new file mode 100644 index 0000000..519b239 --- /dev/null +++ b/search/classes_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_11.js b/search/classes_11.js new file mode 100644 index 0000000..84f6def --- /dev/null +++ b/search/classes_11.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['wavsink',['WavSink',['../classsdr_1_1_wav_sink.html',1,'sdr']]], + ['wavsource',['WavSource',['../classsdr_1_1_wav_source.html',1,'sdr']]] +]; diff --git a/search/classes_2.html b/search/classes_2.html new file mode 100644 index 0000000..f65d263 --- /dev/null +++ b/search/classes_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_2.js b/search/classes_2.js new file mode 100644 index 0000000..1a798d3 --- /dev/null +++ b/search/classes_2.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['cast',['Cast',['../classsdr_1_1_cast.html',1,'sdr']]], + ['combine',['Combine',['../classsdr_1_1_combine.html',1,'sdr']]], + ['combinesink',['CombineSink',['../classsdr_1_1_combine_sink.html',1,'sdr']]], + ['config',['Config',['../classsdr_1_1_config.html',1,'sdr']]], + ['configerror',['ConfigError',['../classsdr_1_1_config_error.html',1,'sdr']]] +]; diff --git a/search/classes_3.html b/search/classes_3.html new file mode 100644 index 0000000..927e837 --- /dev/null +++ b/search/classes_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_3.js b/search/classes_3.js new file mode 100644 index 0000000..e41d594 --- /dev/null +++ b/search/classes_3.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['debugdump',['DebugDump',['../classsdr_1_1_debug_dump.html',1,'sdr']]], + ['debugstore',['DebugStore',['../classsdr_1_1_debug_store.html',1,'sdr']]], + ['definition',['Definition',['../structsdr_1_1_options_1_1_definition.html',1,'sdr::Options']]], + ['delegate',['Delegate',['../classsdr_1_1_delegate.html',1,'sdr']]], + ['delegateinterface',['DelegateInterface',['../classsdr_1_1_delegate_interface.html',1,'sdr']]] +]; diff --git a/search/classes_4.html b/search/classes_4.html new file mode 100644 index 0000000..a447290 --- /dev/null +++ b/search/classes_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_4.js b/search/classes_4.js new file mode 100644 index 0000000..f350e62 --- /dev/null +++ b/search/classes_4.js @@ -0,0 +1,28 @@ +var searchData= +[ + ['fft',['FFT',['../classsdr_1_1_f_f_t.html',1,'sdr']]], + ['fftplan',['FFTPlan',['../classsdr_1_1_f_f_t_plan.html',1,'sdr']]], + ['fftplan_3c_20double_20_3e',['FFTPlan< double >',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html',1,'sdr']]], + ['fftplan_3c_20float_20_3e',['FFTPlan< float >',['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html',1,'sdr']]], + ['filternode',['FilterNode',['../classsdr_1_1_filter_node.html',1,'sdr']]], + ['filtersink',['FilterSink',['../classsdr_1_1_filter_sink.html',1,'sdr']]], + ['filtersource',['FilterSource',['../classsdr_1_1_filter_source.html',1,'sdr']]], + ['firbandpass',['FIRBandPass',['../classsdr_1_1_f_i_r_band_pass.html',1,'sdr']]], + ['firbandpasscoeffs',['FIRBandPassCoeffs',['../classsdr_1_1_f_i_r_band_pass_coeffs.html',1,'sdr']]], + ['firbandstop',['FIRBandStop',['../classsdr_1_1_f_i_r_band_stop.html',1,'sdr']]], + ['firbandstopcoeffs',['FIRBandStopCoeffs',['../classsdr_1_1_f_i_r_band_stop_coeffs.html',1,'sdr']]], + ['firfilter',['FIRFilter',['../classsdr_1_1_f_i_r_filter.html',1,'sdr']]], + ['firfilter_3c_20scalar_2c_20firbandpasscoeffs_20_3e',['FIRFilter< Scalar, FIRBandPassCoeffs >',['../classsdr_1_1_f_i_r_filter.html',1,'sdr']]], + ['firfilter_3c_20scalar_2c_20firbandstopcoeffs_20_3e',['FIRFilter< Scalar, FIRBandStopCoeffs >',['../classsdr_1_1_f_i_r_filter.html',1,'sdr']]], + ['firfilter_3c_20scalar_2c_20firhighpasscoeffs_20_3e',['FIRFilter< Scalar, FIRHighPassCoeffs >',['../classsdr_1_1_f_i_r_filter.html',1,'sdr']]], + ['firfilter_3c_20scalar_2c_20firlowpasscoeffs_20_3e',['FIRFilter< Scalar, FIRLowPassCoeffs >',['../classsdr_1_1_f_i_r_filter.html',1,'sdr']]], + ['firhighpass',['FIRHighPass',['../classsdr_1_1_f_i_r_high_pass.html',1,'sdr']]], + ['firhighpasscoeffs',['FIRHighPassCoeffs',['../classsdr_1_1_f_i_r_high_pass_coeffs.html',1,'sdr']]], + ['firlowpass',['FIRLowPass',['../classsdr_1_1_f_i_r_low_pass.html',1,'sdr']]], + ['firlowpasscoeffs',['FIRLowPassCoeffs',['../classsdr_1_1_f_i_r_low_pass_coeffs.html',1,'sdr']]], + ['fmdeemph',['FMDeemph',['../classsdr_1_1_f_m_deemph.html',1,'sdr']]], + ['fmdemod',['FMDemod',['../classsdr_1_1_f_m_demod.html',1,'sdr']]], + ['fracsubsamplebase',['FracSubSampleBase',['../classsdr_1_1_frac_sub_sample_base.html',1,'sdr']]], + ['freqshift',['FreqShift',['../classsdr_1_1_freq_shift.html',1,'sdr']]], + ['freqshiftbase',['FreqShiftBase',['../classsdr_1_1_freq_shift_base.html',1,'sdr']]] +]; diff --git a/search/classes_5.html b/search/classes_5.html new file mode 100644 index 0000000..63484c4 --- /dev/null +++ b/search/classes_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_5.js b/search/classes_5.js new file mode 100644 index 0000000..c2f925b --- /dev/null +++ b/search/classes_5.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['gwnsource',['GWNSource',['../classsdr_1_1_g_w_n_source.html',1,'sdr']]] +]; diff --git a/search/classes_6.html b/search/classes_6.html new file mode 100644 index 0000000..f3d7035 --- /dev/null +++ b/search/classes_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_6.js b/search/classes_6.js new file mode 100644 index 0000000..efde0a6 --- /dev/null +++ b/search/classes_6.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['imagpart',['ImagPart',['../classsdr_1_1_imag_part.html',1,'sdr']]], + ['inpolsubsampler',['InpolSubSampler',['../classsdr_1_1_inpol_sub_sampler.html',1,'sdr']]], + ['interleave',['Interleave',['../classsdr_1_1_interleave.html',1,'sdr']]], + ['iqbalance',['IQBalance',['../classsdr_1_1_i_q_balance.html',1,'sdr']]], + ['iqbaseband',['IQBaseBand',['../classsdr_1_1_i_q_base_band.html',1,'sdr']]], + ['iqsiggen',['IQSigGen',['../classsdr_1_1_i_q_sig_gen.html',1,'sdr']]] +]; diff --git a/search/classes_7.html b/search/classes_7.html new file mode 100644 index 0000000..9e5f5c9 --- /dev/null +++ b/search/classes_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_7.js b/search/classes_7.js new file mode 100644 index 0000000..5c78fcb --- /dev/null +++ b/search/classes_7.js @@ -0,0 +1,6 @@ +var searchData= +[ + ['logger',['Logger',['../classsdr_1_1_logger.html',1,'sdr']]], + ['loghandler',['LogHandler',['../classsdr_1_1_log_handler.html',1,'sdr']]], + ['logmessage',['LogMessage',['../classsdr_1_1_log_message.html',1,'sdr']]] +]; diff --git a/search/classes_8.html b/search/classes_8.html new file mode 100644 index 0000000..82c35b3 --- /dev/null +++ b/search/classes_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_8.js b/search/classes_8.js new file mode 100644 index 0000000..6e82920 --- /dev/null +++ b/search/classes_8.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['message',['Message',['../classsdr_1_1_queue_1_1_message.html',1,'sdr::Queue']]] +]; diff --git a/search/classes_9.html b/search/classes_9.html new file mode 100644 index 0000000..4e83ac8 --- /dev/null +++ b/search/classes_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_9.js b/search/classes_9.js new file mode 100644 index 0000000..fb41ec7 --- /dev/null +++ b/search/classes_9.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['options',['Options',['../classsdr_1_1_options.html',1,'sdr']]] +]; diff --git a/search/classes_a.html b/search/classes_a.html new file mode 100644 index 0000000..616feb6 --- /dev/null +++ b/search/classes_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_a.js b/search/classes_a.js new file mode 100644 index 0000000..16c8143 --- /dev/null +++ b/search/classes_a.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['portaudio',['PortAudio',['../classsdr_1_1_port_audio.html',1,'sdr']]], + ['portsink',['PortSink',['../classsdr_1_1_port_sink.html',1,'sdr']]], + ['portsource',['PortSource',['../classsdr_1_1_port_source.html',1,'sdr']]], + ['proxy',['Proxy',['../classsdr_1_1_proxy.html',1,'sdr']]] +]; diff --git a/search/classes_b.html b/search/classes_b.html new file mode 100644 index 0000000..4461152 --- /dev/null +++ b/search/classes_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_b.js b/search/classes_b.js new file mode 100644 index 0000000..b65c007 --- /dev/null +++ b/search/classes_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['queue',['Queue',['../classsdr_1_1_queue.html',1,'sdr']]] +]; diff --git a/search/classes_c.html b/search/classes_c.html new file mode 100644 index 0000000..8f92c86 --- /dev/null +++ b/search/classes_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_c.js b/search/classes_c.js new file mode 100644 index 0000000..b52fc68 --- /dev/null +++ b/search/classes_c.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['rawbuffer',['RawBuffer',['../classsdr_1_1_raw_buffer.html',1,'sdr']]], + ['rawringbuffer',['RawRingBuffer',['../classsdr_1_1_raw_ring_buffer.html',1,'sdr']]], + ['realimagpart',['RealImagPart',['../classsdr_1_1_real_imag_part.html',1,'sdr']]], + ['realpart',['RealPart',['../classsdr_1_1_real_part.html',1,'sdr']]], + ['ringbuffer',['RingBuffer',['../classsdr_1_1_ring_buffer.html',1,'sdr']]], + ['rtlsource',['RTLSource',['../classsdr_1_1_r_t_l_source.html',1,'sdr']]], + ['runtimeerror',['RuntimeError',['../classsdr_1_1_runtime_error.html',1,'sdr']]] +]; diff --git a/search/classes_d.html b/search/classes_d.html new file mode 100644 index 0000000..9690cf0 --- /dev/null +++ b/search/classes_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_d.js b/search/classes_d.js new file mode 100644 index 0000000..e8b037a --- /dev/null +++ b/search/classes_d.js @@ -0,0 +1,18 @@ +var searchData= +[ + ['scale',['Scale',['../classsdr_1_1_scale.html',1,'sdr']]], + ['sdrerror',['SDRError',['../classsdr_1_1_s_d_r_error.html',1,'sdr']]], + ['siggen',['SigGen',['../classsdr_1_1_sig_gen.html',1,'sdr']]], + ['signedtounsigned',['SignedToUnsigned',['../classsdr_1_1_signed_to_unsigned.html',1,'sdr']]], + ['sink',['Sink',['../classsdr_1_1_sink.html',1,'sdr']]], + ['sink_3c_20iscalar_20_3e',['Sink< iScalar >',['../classsdr_1_1_sink.html',1,'sdr']]], + ['sink_3c_20std_3a_3acomplex_3c_20iscalar_20_3e_20_3e',['Sink< std::complex< iScalar > >',['../classsdr_1_1_sink.html',1,'sdr']]], + ['sink_3c_20std_3a_3acomplex_3c_20scalar_20_3e_20_3e',['Sink< std::complex< Scalar > >',['../classsdr_1_1_sink.html',1,'sdr']]], + ['sink_3c_20uint8_5ft_20_3e',['Sink< uint8_t >',['../classsdr_1_1_sink.html',1,'sdr']]], + ['sinkbase',['SinkBase',['../classsdr_1_1_sink_base.html',1,'sdr']]], + ['source',['Source',['../classsdr_1_1_source.html',1,'sdr']]], + ['streamloghandler',['StreamLogHandler',['../classsdr_1_1_stream_log_handler.html',1,'sdr']]], + ['streamsink',['StreamSink',['../classsdr_1_1_stream_sink.html',1,'sdr']]], + ['streamsource',['StreamSource',['../classsdr_1_1_stream_source.html',1,'sdr']]], + ['subsample',['SubSample',['../classsdr_1_1_sub_sample.html',1,'sdr']]] +]; diff --git a/search/classes_e.html b/search/classes_e.html new file mode 100644 index 0000000..24a3ef3 --- /dev/null +++ b/search/classes_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_e.js b/search/classes_e.js new file mode 100644 index 0000000..0d1fd75 --- /dev/null +++ b/search/classes_e.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['tocomplex',['ToComplex',['../classsdr_1_1_to_complex.html',1,'sdr']]], + ['traits',['Traits',['../classsdr_1_1_traits.html',1,'sdr']]], + ['traits_3c_20double_20_3e',['Traits< double >',['../classsdr_1_1_traits_3_01double_01_4.html',1,'sdr']]], + ['traits_3c_20float_20_3e',['Traits< float >',['../classsdr_1_1_traits_3_01float_01_4.html',1,'sdr']]], + ['traits_3c_20int16_5ft_20_3e',['Traits< int16_t >',['../classsdr_1_1_traits_3_01int16__t_01_4.html',1,'sdr']]], + ['traits_3c_20int8_5ft_20_3e',['Traits< int8_t >',['../classsdr_1_1_traits_3_01int8__t_01_4.html',1,'sdr']]], + ['traits_3c_20std_3a_3acomplex_3c_20double_20_3e_20_3e',['Traits< std::complex< double > >',['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html',1,'sdr']]], + ['traits_3c_20std_3a_3acomplex_3c_20float_20_3e_20_3e',['Traits< std::complex< float > >',['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html',1,'sdr']]], + ['traits_3c_20std_3a_3acomplex_3c_20int16_5ft_20_3e_20_3e',['Traits< std::complex< int16_t > >',['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html',1,'sdr']]], + ['traits_3c_20std_3a_3acomplex_3c_20int8_5ft_20_3e_20_3e',['Traits< std::complex< int8_t > >',['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html',1,'sdr']]], + ['traits_3c_20std_3a_3acomplex_3c_20uint16_5ft_20_3e_20_3e',['Traits< std::complex< uint16_t > >',['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html',1,'sdr']]], + ['traits_3c_20std_3a_3acomplex_3c_20uint8_5ft_20_3e_20_3e',['Traits< std::complex< uint8_t > >',['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html',1,'sdr']]], + ['traits_3c_20uint16_5ft_20_3e',['Traits< uint16_t >',['../classsdr_1_1_traits_3_01uint16__t_01_4.html',1,'sdr']]], + ['traits_3c_20uint8_5ft_20_3e',['Traits< uint8_t >',['../classsdr_1_1_traits_3_01uint8__t_01_4.html',1,'sdr']]] +]; diff --git a/search/classes_f.html b/search/classes_f.html new file mode 100644 index 0000000..cee523a --- /dev/null +++ b/search/classes_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/classes_f.js b/search/classes_f.js new file mode 100644 index 0000000..3adc778 --- /dev/null +++ b/search/classes_f.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['unsignedtosigned',['UnsignedToSigned',['../classsdr_1_1_unsigned_to_signed.html',1,'sdr']]], + ['usbdemod',['USBDemod',['../classsdr_1_1_u_s_b_demod.html',1,'sdr']]] +]; diff --git a/search/close.png b/search/close.png new file mode 100644 index 0000000..9342d3d Binary files /dev/null and b/search/close.png differ diff --git a/search/enums_0.html b/search/enums_0.html new file mode 100644 index 0000000..b4cbe1e --- /dev/null +++ b/search/enums_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/enums_0.js b/search/enums_0.js new file mode 100644 index 0000000..0c6a05f --- /dev/null +++ b/search/enums_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['argtype',['ArgType',['../classsdr_1_1_options.html#a9ac110e66c7d6065c7035577bcf51923',1,'sdr::Options']]] +]; diff --git a/search/enums_1.html b/search/enums_1.html new file mode 100644 index 0000000..2af2a03 --- /dev/null +++ b/search/enums_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/enums_1.js b/search/enums_1.js new file mode 100644 index 0000000..84c0683 --- /dev/null +++ b/search/enums_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['direction',['Direction',['../classsdr_1_1_f_f_t.html#a02a2b7ef1f2494d542b133a4995e5344',1,'sdr::FFT']]] +]; diff --git a/search/enums_2.html b/search/enums_2.html new file mode 100644 index 0000000..f96cf0a --- /dev/null +++ b/search/enums_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/enums_2.js b/search/enums_2.js new file mode 100644 index 0000000..617fb03 --- /dev/null +++ b/search/enums_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['type',['Type',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8',1,'sdr::Config::Type()'],['../classsdr_1_1_options_1_1_value.html#a0c9f78ee322f128c50d74b76d51ad33e',1,'sdr::Options::Value::Type()']]] +]; diff --git a/search/enumvalues_0.html b/search/enumvalues_0.html new file mode 100644 index 0000000..3e00fcf --- /dev/null +++ b/search/enumvalues_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/enumvalues_0.js b/search/enumvalues_0.js new file mode 100644 index 0000000..8b16fbd --- /dev/null +++ b/search/enumvalues_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['any',['ANY',['../classsdr_1_1_options.html#a9ac110e66c7d6065c7035577bcf51923a34398a6bf19ef577442e10d24879b953',1,'sdr::Options']]] +]; diff --git a/search/enumvalues_1.html b/search/enumvalues_1.html new file mode 100644 index 0000000..0e575c9 --- /dev/null +++ b/search/enumvalues_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/enumvalues_1.js b/search/enumvalues_1.js new file mode 100644 index 0000000..a3c881c --- /dev/null +++ b/search/enumvalues_1.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['flag',['FLAG',['../classsdr_1_1_options.html#a9ac110e66c7d6065c7035577bcf51923af5db5e6e229f1e46459310e3464bd1a1',1,'sdr::Options']]], + ['float',['FLOAT',['../classsdr_1_1_options_1_1_value.html#a0c9f78ee322f128c50d74b76d51ad33ea41efda03ed5c01cd43053fea11bcd776',1,'sdr::Options::Value::FLOAT()'],['../classsdr_1_1_options.html#a9ac110e66c7d6065c7035577bcf51923a9a98f630dcfbc1649e4e4446a4c91917',1,'sdr::Options::FLOAT()']]] +]; diff --git a/search/enumvalues_2.html b/search/enumvalues_2.html new file mode 100644 index 0000000..e59f4ac --- /dev/null +++ b/search/enumvalues_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/enumvalues_2.js b/search/enumvalues_2.js new file mode 100644 index 0000000..e0f9709 --- /dev/null +++ b/search/enumvalues_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['integer',['INTEGER',['../classsdr_1_1_options_1_1_value.html#a0c9f78ee322f128c50d74b76d51ad33eac078a5863bc0c2ec219569dec05af0a3',1,'sdr::Options::Value::INTEGER()'],['../classsdr_1_1_options.html#a9ac110e66c7d6065c7035577bcf51923a2c66965e290f6a5b1edea96154e0fb9e',1,'sdr::Options::INTEGER()']]] +]; diff --git a/search/enumvalues_3.html b/search/enumvalues_3.html new file mode 100644 index 0000000..0a2d754 --- /dev/null +++ b/search/enumvalues_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/enumvalues_3.js b/search/enumvalues_3.js new file mode 100644 index 0000000..2c5f9d5 --- /dev/null +++ b/search/enumvalues_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['none',['NONE',['../classsdr_1_1_options_1_1_value.html#a0c9f78ee322f128c50d74b76d51ad33ea92c0a239d71fe6f6d4a5baa3807bf454',1,'sdr::Options::Value']]] +]; diff --git a/search/enumvalues_4.html b/search/enumvalues_4.html new file mode 100644 index 0000000..1258082 --- /dev/null +++ b/search/enumvalues_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/enumvalues_4.js b/search/enumvalues_4.js new file mode 100644 index 0000000..63e64d7 --- /dev/null +++ b/search/enumvalues_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['string',['STRING',['../classsdr_1_1_options_1_1_value.html#a0c9f78ee322f128c50d74b76d51ad33eaad06a22705299673cb3d48ef0c1dbcd6',1,'sdr::Options::Value']]] +]; diff --git a/search/enumvalues_5.html b/search/enumvalues_5.html new file mode 100644 index 0000000..e42d495 --- /dev/null +++ b/search/enumvalues_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/enumvalues_5.js b/search/enumvalues_5.js new file mode 100644 index 0000000..70aaf63 --- /dev/null +++ b/search/enumvalues_5.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['type_5fcf32',['Type_cf32',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a3517b22ed2f8ebce25b6ce140e0fc4ae',1,'sdr::Config']]], + ['type_5fcf64',['Type_cf64',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a0533d0f0f70fad0f430cdfa6c86b4e7c',1,'sdr::Config']]], + ['type_5fcs16',['Type_cs16',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a63b4a03813b5e6224170be42b6275fe7',1,'sdr::Config']]], + ['type_5fcs8',['Type_cs8',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a3db588fd468cb4a78e1efabef4b57b76',1,'sdr::Config']]], + ['type_5fcu16',['Type_cu16',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a6a87fdcbcf659811d60fee74fbea7f07',1,'sdr::Config']]], + ['type_5fcu8',['Type_cu8',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a2d44478e68580bf01d17f6e33eb5d856',1,'sdr::Config']]], + ['type_5ff32',['Type_f32',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a16fb6708c6744a2892bc1badb01953b5',1,'sdr::Config']]], + ['type_5ff64',['Type_f64',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a25a618000b12c978963aa6d19ab92f97',1,'sdr::Config']]], + ['type_5fs16',['Type_s16',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a4f222757d46f6b85c63657e1560bf9eb',1,'sdr::Config']]], + ['type_5fs8',['Type_s8',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8adcae9ece1014b07b0546a2b7a80e18c4',1,'sdr::Config']]], + ['type_5fu16',['Type_u16',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8a9fd5000bcdeaf5872cfa097b8df26a74',1,'sdr::Config']]], + ['type_5fu8',['Type_u8',['../classsdr_1_1_config.html#a62084c40ed753ff6caefdc4564c597b8aff58284f9bbd7e3c690a9e4f1d74aefd',1,'sdr::Config']]] +]; diff --git a/search/functions_0.html b/search/functions_0.html new file mode 100644 index 0000000..16a5a52 --- /dev/null +++ b/search/functions_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_0.js b/search/functions_0.js new file mode 100644 index 0000000..1a8c42f --- /dev/null +++ b/search/functions_0.js @@ -0,0 +1,42 @@ +var searchData= +[ + ['_5f_5frtl_5fsdr_5fcallback',['__rtl_sdr_callback',['../classsdr_1_1_r_t_l_source.html#a7725d46b49a347f1dbe76088645bc350',1,'sdr::RTLSource']]], + ['_5f_5frtl_5fsrd_5fparallel_5fmain',['__rtl_srd_parallel_main',['../classsdr_1_1_r_t_l_source.html#a62620f764df61e44fd145c2653df27b2',1,'sdr::RTLSource']]], + ['_5fcalc',['_calc',['../classsdr_1_1_f_f_t_plan.html#ab5162f0172e3ea20bf2aed4cbacf9be8',1,'sdr::FFTPlan']]], + ['_5fcint16_5fcint8',['_cint16_cint8',['../classsdr_1_1_auto_cast.html#a0fe4b72f59b2aac768a91113efdafb57',1,'sdr::AutoCast']]], + ['_5fcint8_5fcint16',['_cint8_cint16',['../classsdr_1_1_auto_cast.html#accbb7fcb82482e288565c5015f2804de',1,'sdr::AutoCast']]], + ['_5fcuint8_5fcint16',['_cuint8_cint16',['../classsdr_1_1_auto_cast.html#a1248f283c2cb50d6ca3dd87fb4bdb6aa',1,'sdr::AutoCast']]], + ['_5fcuint8_5fcint8',['_cuint8_cint8',['../classsdr_1_1_auto_cast.html#a78c7ad6c794efb35c847b788235cf34f',1,'sdr::AutoCast']]], + ['_5fcurrentcontellation',['_currentContellation',['../classsdr_1_1_b_p_s_k31.html#af151da88f45eb7c637a6e28006c88247',1,'sdr::BPSK31']]], + ['_5ferrortracking',['_errorTracking',['../classsdr_1_1_b_p_s_k31.html#a89cddd31ec12ed1a731af8016ca2a54e',1,'sdr::BPSK31']]], + ['_5ffilter_5fring',['_filter_ring',['../classsdr_1_1_i_q_base_band.html#ab7b35251cce6051a56dbb24c78e8e4cd',1,'sdr::IQBaseBand::_filter_ring()'],['../classsdr_1_1_base_band.html#a3b868d96f64b282bc131094efb1a5a64',1,'sdr::BaseBand::_filter_ring()']]], + ['_5fgetnormal',['_getNormal',['../classsdr_1_1_g_w_n_source.html#a90bc06a4667521b8254a830a3cf4dd26',1,'sdr::GWNSource']]], + ['_5fhastransition',['_hasTransition',['../classsdr_1_1_b_p_s_k31.html#a19a7364e76d267ff1e6868f41ee3bbf2',1,'sdr::BPSK31']]], + ['_5fidentity',['_identity',['../classsdr_1_1_auto_cast.html#a33a884aa9a57400004368773b1088382',1,'sdr::AutoCast']]], + ['_5finitializestream',['_initializeStream',['../classsdr_1_1_port_source.html#a5e62bd780d01d8e5c53335c5e7955c96',1,'sdr::PortSource']]], + ['_5fint16_5fcint16',['_int16_cint16',['../classsdr_1_1_auto_cast.html#a4a16f561087f6c65e0ad626377275e14',1,'sdr::AutoCast']]], + ['_5fint16_5fcint8',['_int16_cint8',['../classsdr_1_1_auto_cast.html#a7004366d04d148b7664d0ffc5e5563a8',1,'sdr::AutoCast']]], + ['_5fint16_5fint8',['_int16_int8',['../classsdr_1_1_auto_cast.html#a68806db8e41e4a46bc8b29d0739c70a2',1,'sdr::AutoCast']]], + ['_5fint8_5fcint16',['_int8_cint16',['../classsdr_1_1_auto_cast.html#a2e3149b176c38a1bc3c499f344caaa6a',1,'sdr::AutoCast']]], + ['_5fint8_5fcint8',['_int8_cint8',['../classsdr_1_1_auto_cast.html#a58fcc039a393ea7facfa053869144a02',1,'sdr::AutoCast']]], + ['_5fint8_5fint16',['_int8_int16',['../classsdr_1_1_auto_cast.html#aae019388b9064ec9de9f5fad271de8cc',1,'sdr::AutoCast']]], + ['_5fmain',['_main',['../classsdr_1_1_queue.html#a40e974a7b7f2dfdc22a13eb88390bab1',1,'sdr::Queue']]], + ['_5fnonvirt_5fidle_5fcb',['_nonvirt_idle_cb',['../classsdr_1_1_blocking_source.html#af8effc9fd6b088738e95719e5e242caf',1,'sdr::BlockingSource']]], + ['_5fparallel_5fmain',['_parallel_main',['../classsdr_1_1_blocking_source.html#a9846623aa13f2743fe5de6eb7d6024c6',1,'sdr::BlockingSource']]], + ['_5fphaseerror',['_phaseError',['../classsdr_1_1_b_p_s_k31.html#ac630b11ea9bced1aa085bbb5523d064f',1,'sdr::BPSK31']]], + ['_5fprocess',['_process',['../classsdr_1_1_i_q_base_band.html#ae79b3b824eb5610a1b44732f8ef3842a',1,'sdr::IQBaseBand::_process()'],['../classsdr_1_1_base_band.html#a603c4b949058d0e65870c841e4f4de48',1,'sdr::BaseBand::_process()'],['../classsdr_1_1_u_s_b_demod.html#aa12358f20001ef1691670e5802bc829c',1,'sdr::USBDemod::_process()'],['../classsdr_1_1_f_m_demod.html#a58b7f2935014a069665905662e7d15e3',1,'sdr::FMDemod::_process()'],['../classsdr_1_1_f_m_deemph.html#a44acc50b9eaa05d912923c96ac0b1874',1,'sdr::FMDeemph::_process()'],['../classsdr_1_1_f_i_r_filter.html#aef359a18aadcc324ae912c67d4bb352b',1,'sdr::FIRFilter::_process()'],['../classsdr_1_1_sub_sample.html#a1577ab661aeb7930d43de7dca9f2e732',1,'sdr::SubSample::_process()'],['../classsdr_1_1_i_q_balance.html#a422c8725e158071e147f372759fad99a',1,'sdr::IQBalance::_process()'],['../classsdr_1_1_cast.html#aa4258da6083056686376b32aa0ae15cd',1,'sdr::Cast::_process()']]], + ['_5fprocess_5fint16',['_process_int16',['../classsdr_1_1_unsigned_to_signed.html#ab3736d949dac9e30b98d81b31df182a6',1,'sdr::UnsignedToSigned::_process_int16()'],['../classsdr_1_1_signed_to_unsigned.html#a36a2394ea34ca02868708d7d94ac12bd',1,'sdr::SignedToUnsigned::_process_int16()']]], + ['_5fprocess_5fint8',['_process_int8',['../classsdr_1_1_unsigned_to_signed.html#a39a09d9fb122713b6b8fa187e4d33c07',1,'sdr::UnsignedToSigned::_process_int8()'],['../classsdr_1_1_signed_to_unsigned.html#a42276f4e439813dc8eaa87ce798cbac2',1,'sdr::SignedToUnsigned::_process_int8()']]], + ['_5freconfigure',['_reconfigure',['../classsdr_1_1_i_q_base_band.html#a542fe7d54c62d2ac7c8357fb5d35f7f9',1,'sdr::IQBaseBand']]], + ['_5fsignalidle',['_signalIdle',['../classsdr_1_1_queue.html#a3f0e1694388e1bc6091b2f69c9f47093',1,'sdr::Queue']]], + ['_5fsignalstart',['_signalStart',['../classsdr_1_1_queue.html#a676426643d21b8f4070353dd732c0327',1,'sdr::Queue']]], + ['_5fsignalstop',['_signalStop',['../classsdr_1_1_queue.html#abdd5b0e151e635a0c7b17522f51fd7bd',1,'sdr::Queue']]], + ['_5fuint16_5fcint16',['_uint16_cint16',['../classsdr_1_1_auto_cast.html#ac8f4d2aa4d1b8c3e939d641375024a67',1,'sdr::AutoCast']]], + ['_5fuint8_5fcint16',['_uint8_cint16',['../classsdr_1_1_auto_cast.html#a36280c6f1d20a620ed546d7ab98db63a',1,'sdr::AutoCast']]], + ['_5fuint8_5fcint8',['_uint8_cint8',['../classsdr_1_1_auto_cast.html#a8d6383d01f90a8c4caf63a1253eadc44',1,'sdr::AutoCast']]], + ['_5fupdate_5ffilter_5fkernel',['_update_filter_kernel',['../classsdr_1_1_i_q_base_band.html#a1a803c4e7f54c1f281b4c400d28802f7',1,'sdr::IQBaseBand::_update_filter_kernel()'],['../classsdr_1_1_base_band.html#ab82da1c27859bf64c044bc7f9bb0c568',1,'sdr::BaseBand::_update_filter_kernel()']]], + ['_5fupdate_5flut_5fincr',['_update_lut_incr',['../classsdr_1_1_freq_shift_base.html#a0bcf83cb75130997a19a5954cad2a016',1,'sdr::FreqShiftBase']]], + ['_5fupdatefilter',['_updateFilter',['../classsdr_1_1_filter_source.html#a76f7c56b5170b54d691d867197bcd0ca',1,'sdr::FilterSource']]], + ['_5fupdatepll',['_updatePLL',['../classsdr_1_1_b_p_s_k31.html#a778802b1b78667db77a5b95f934d4cd2',1,'sdr::BPSK31']]], + ['_5fupdatesampler',['_updateSampler',['../classsdr_1_1_b_p_s_k31.html#af7ecee919d13d75c65be3541244aa124',1,'sdr::BPSK31']]] +]; diff --git a/search/functions_1.html b/search/functions_1.html new file mode 100644 index 0000000..3b4eacf --- /dev/null +++ b/search/functions_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_1.js b/search/functions_1.js new file mode 100644 index 0000000..3625348 --- /dev/null +++ b/search/functions_1.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['addeos',['addEOS',['../classsdr_1_1_source.html#a7cf977be7a508097532991155e90ae45',1,'sdr::Source']]], + ['addfilter',['addFilter',['../classsdr_1_1_filter_node.html#af1ff1fbbbb23610f260fa19c2014f4c0',1,'sdr::FilterNode']]], + ['addhandler',['addHandler',['../classsdr_1_1_logger.html#a6c2ed5cb8cc27f85fc9fbf45602604e0',1,'sdr::Logger']]], + ['addidle',['addIdle',['../classsdr_1_1_queue.html#aedd07c29585deedd286266001c0e0356',1,'sdr::Queue']]], + ['addsine',['addSine',['../classsdr_1_1_sig_gen.html#a3c720193f3d4f144ed8e0111de0696d0',1,'sdr::SigGen::addSine()'],['../classsdr_1_1_i_q_sig_gen.html#ab70c8bbf0358a5ac48d120042a8b92a1',1,'sdr::IQSigGen::addSine()']]], + ['addstart',['addStart',['../classsdr_1_1_queue.html#ab17a48f85010dbb8ed25bd5aed143f19',1,'sdr::Queue']]], + ['addstop',['addStop',['../classsdr_1_1_queue.html#aa90eba90f16ed710d4a5214fa9b70354',1,'sdr::Queue']]], + ['agc',['AGC',['../classsdr_1_1_a_g_c.html#a3760a8692f5d81b753b8887396b3866c',1,'sdr::AGC']]], + ['agcenabled',['agcEnabled',['../classsdr_1_1_r_t_l_source.html#a2de19f82c951290711e9a3fa59e33fe6',1,'sdr::RTLSource']]], + ['allowoverwrite',['allowOverwrite',['../classsdr_1_1_queue_1_1_message.html#acd22d9aa751e2bd05f22b00df91d1668',1,'sdr::Queue::Message']]], + ['amdemod',['AMDemod',['../classsdr_1_1_a_m_demod.html#ab09fa003c654b85df3373d1a8c85036a',1,'sdr::AMDemod']]], + ['applyfrequencyshift',['applyFrequencyShift',['../classsdr_1_1_freq_shift_base.html#a871a9aa29165fa8ff1aff21355cdda8b',1,'sdr::FreqShiftBase']]], + ['as',['as',['../classsdr_1_1_buffer.html#a693db0b8995cb1c1cc8d8d424a6699f5',1,'sdr::Buffer']]], + ['autocast',['AutoCast',['../classsdr_1_1_auto_cast.html#ad62daff1b7f3cd069a52306d0050ee0f',1,'sdr::AutoCast']]] +]; diff --git a/search/functions_10.html b/search/functions_10.html new file mode 100644 index 0000000..52cb0d3 --- /dev/null +++ b/search/functions_10.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_10.js b/search/functions_10.js new file mode 100644 index 0000000..8c33ef7 --- /dev/null +++ b/search/functions_10.js @@ -0,0 +1,17 @@ +var searchData= +[ + ['rawbuffer',['RawBuffer',['../classsdr_1_1_raw_buffer.html#a781495d421a8cb4fcf27b0e422a3b432',1,'sdr::RawBuffer::RawBuffer()'],['../classsdr_1_1_raw_buffer.html#ad55ada4bd5b86ea232000360e4e7da38',1,'sdr::RawBuffer::RawBuffer(char *data, size_t offset, size_t len)'],['../classsdr_1_1_raw_buffer.html#a17f8bfebc44cfff6e77af7d6fefdbbe5',1,'sdr::RawBuffer::RawBuffer(size_t N, BufferOwner *owner=0)'],['../classsdr_1_1_raw_buffer.html#a534d87f7eac95b2f9d912e3f7c509d47',1,'sdr::RawBuffer::RawBuffer(const RawBuffer &other)'],['../classsdr_1_1_raw_buffer.html#a274ca58a73c0b27bc23b440e8cc693bf',1,'sdr::RawBuffer::RawBuffer(const RawBuffer &other, size_t offset, size_t len)']]], + ['rawringbuffer',['RawRingBuffer',['../classsdr_1_1_raw_ring_buffer.html#a079ead1956aece8f0d4d50b852362f1e',1,'sdr::RawRingBuffer::RawRingBuffer()'],['../classsdr_1_1_raw_ring_buffer.html#a55bb852e46dbb192651048e8ca1426e4',1,'sdr::RawRingBuffer::RawRingBuffer(size_t size)'],['../classsdr_1_1_raw_ring_buffer.html#aae49387c3f41d2f8674ab8664f9adb52',1,'sdr::RawRingBuffer::RawRingBuffer(const RawRingBuffer &other)']]], + ['realimagpart',['RealImagPart',['../classsdr_1_1_real_imag_part.html#a660f45e4f9967162d1031769fec7d6b8',1,'sdr::RealImagPart']]], + ['realpart',['RealPart',['../classsdr_1_1_real_part.html#a3a7f5dab0a46d0900f1f0f3a249fac38',1,'sdr::RealPart']]], + ['ref',['ref',['../classsdr_1_1_raw_buffer.html#a45139d21c4bb6df7c664720223ea3540',1,'sdr::RawBuffer']]], + ['refcount',['refCount',['../classsdr_1_1_raw_buffer.html#ab6079ff8999d3878071d6308312e063a',1,'sdr::RawBuffer']]], + ['remidle',['remIdle',['../classsdr_1_1_queue.html#a390125515b339ae54ee586cb4e162131',1,'sdr::Queue']]], + ['remstart',['remStart',['../classsdr_1_1_queue.html#a9a3ea601975c9890958759914ce19f88',1,'sdr::Queue']]], + ['remstop',['remStop',['../classsdr_1_1_queue.html#a6d9e3d5fc2007a77d37f4a070159ba5b',1,'sdr::Queue']]], + ['reset',['reset',['../classsdr_1_1_frac_sub_sample_base.html#a8c642f90899d44706f6d1ded63ecf1d8',1,'sdr::FracSubSampleBase']]], + ['resize',['resize',['../classsdr_1_1_buffer_set.html#a2b492dc68f98a3b554790b04578a73b1',1,'sdr::BufferSet::resize()'],['../classsdr_1_1_raw_ring_buffer.html#a9afdf7bcc99f4f4f0ef76ae7e6e5ae40',1,'sdr::RawRingBuffer::resize()'],['../classsdr_1_1_ring_buffer.html#a17f2ffa9f6fd3aec82b3e178bdbc4ce3',1,'sdr::RingBuffer::resize()']]], + ['ringbuffer',['RingBuffer',['../classsdr_1_1_ring_buffer.html#af8b4ecb97ce0d0e922798c7dd12191bd',1,'sdr::RingBuffer::RingBuffer()'],['../classsdr_1_1_ring_buffer.html#ab0eb6596e68ab4550aeae42861d1b7d4',1,'sdr::RingBuffer::RingBuffer(size_t N)'],['../classsdr_1_1_ring_buffer.html#aa67a8759724fb0eda8337dac0a4d9f68',1,'sdr::RingBuffer::RingBuffer(const RingBuffer< Scalar > &other)']]], + ['rtlsource',['RTLSource',['../classsdr_1_1_r_t_l_source.html#a38dcd5242488c599469d0bc4c78547bb',1,'sdr::RTLSource']]], + ['runtimeerror',['RuntimeError',['../classsdr_1_1_runtime_error.html#a36c5739ef1be548638418b2191fbbcf0',1,'sdr::RuntimeError::RuntimeError()'],['../classsdr_1_1_runtime_error.html#ab9b241b1f32d8d7738e70ae4764b70fa',1,'sdr::RuntimeError::RuntimeError(const RuntimeError &other)']]] +]; diff --git a/search/functions_11.html b/search/functions_11.html new file mode 100644 index 0000000..5e91b09 --- /dev/null +++ b/search/functions_11.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_11.js b/search/functions_11.js new file mode 100644 index 0000000..ba42d54 --- /dev/null +++ b/search/functions_11.js @@ -0,0 +1,48 @@ +var searchData= +[ + ['samplerate',['sampleRate',['../classsdr_1_1_freq_shift_base.html#a813683842a2ca15589e84cb89dccfc9a',1,'sdr::FreqShiftBase::sampleRate()'],['../classsdr_1_1_config.html#a42cfb658302fd7de7729ce2c740e9275',1,'sdr::Config::sampleRate()'],['../classsdr_1_1_source.html#aca6c3a89bb5787de5657c4d221bb1ed4',1,'sdr::Source::sampleRate()'],['../classsdr_1_1_r_t_l_source.html#ad04242d3c53001a17a50d4e372316366',1,'sdr::RTLSource::sampleRate()']]], + ['scale',['Scale',['../classsdr_1_1_scale.html#a3e58d1725b33ae78d3047bef28026823',1,'sdr::Scale::Scale()'],['../classsdr_1_1_cast.html#ac04217fae39c2f7fe42de56d28856f2e',1,'sdr::Cast::scale()']]], + ['sdrerror',['SDRError',['../classsdr_1_1_s_d_r_error.html#a718114b7e48ced9def0ce81be8360fb0',1,'sdr::SDRError::SDRError()'],['../classsdr_1_1_s_d_r_error.html#acaa88f0c824621122e5c074d86e349f3',1,'sdr::SDRError::SDRError(const SDRError &other)']]], + ['send',['send',['../classsdr_1_1_source.html#a13921d5daa00574e2057c1ae1fc28054',1,'sdr::Source::send()'],['../classsdr_1_1_queue.html#af5081696c758e00520bf670fffad6918',1,'sdr::Queue::send()']]], + ['setbalance',['setBalance',['../classsdr_1_1_i_q_balance.html#a5e933c51ede575faec047d2e2cc1e384',1,'sdr::IQBalance']]], + ['setbuffersize',['setBufferSize',['../classsdr_1_1_config.html#abca3d2152fd7379b12814c1518f9fa6f',1,'sdr::Config']]], + ['setcenterfrequency',['setCenterFrequency',['../classsdr_1_1_i_q_base_band.html#a9dcc80e8ff21e9753f4bb09a20e28cbc',1,'sdr::IQBaseBand']]], + ['setconfig',['setConfig',['../classsdr_1_1_source.html#afd4c7e3fb94a057ac40e9877167791ec',1,'sdr::Source']]], + ['setdeviceindex',['setDeviceIndex',['../classsdr_1_1_port_source.html#abc0ea18b8794b09ca7dea28fcae26269',1,'sdr::PortSource']]], + ['setfilterfrequency',['setFilterFrequency',['../classsdr_1_1_i_q_base_band.html#af72e51030e9a72fcffce7f75c82bb6fd',1,'sdr::IQBaseBand']]], + ['setfilterwidth',['setFilterWidth',['../classsdr_1_1_i_q_base_band.html#a918174afe3f6ae0e6373368d99320552',1,'sdr::IQBaseBand']]], + ['setfrac',['setFrac',['../classsdr_1_1_frac_sub_sample_base.html#a36217a949cfea7fe5b096cc98aa2e113',1,'sdr::FracSubSampleBase']]], + ['setfreq',['setFreq',['../classsdr_1_1_filter_source.html#aedfc4ad353708e6a096fad3c1fac318c',1,'sdr::FilterSource::setFreq()'],['../classsdr_1_1_f_i_r_low_pass.html#a3c1e5b446425ab0d925d412aeda8348d',1,'sdr::FIRLowPass::setFreq()'],['../classsdr_1_1_f_i_r_high_pass.html#a6a56f692b2cd9e91a962313db04cf51e',1,'sdr::FIRHighPass::setFreq()']]], + ['setfreqcorrection',['setFreqCorrection',['../classsdr_1_1_r_t_l_source.html#afe87804924d1ac5687ea618626a58cb5',1,'sdr::RTLSource']]], + ['setfrequency',['setFrequency',['../classsdr_1_1_r_t_l_source.html#ae48b61d55bae9c016f2120d907348505',1,'sdr::RTLSource']]], + ['setfrequencyshift',['setFrequencyShift',['../classsdr_1_1_freq_shift_base.html#a58abc2c8dd6a21fc5654db3068bc7a23',1,'sdr::FreqShiftBase']]], + ['setgain',['setGain',['../classsdr_1_1_r_t_l_source.html#a1385e656f8d31ab31212ef7b33b2673b',1,'sdr::RTLSource::setGain()'],['../classsdr_1_1_a_g_c.html#aafd22e6eff64cd6f615f025d2d2cdde0',1,'sdr::AGC::setGain()']]], + ['setlowerfreq',['setLowerFreq',['../classsdr_1_1_f_i_r_filter.html#a59adcf3e38e0af2a06fde7f1a68c76ca',1,'sdr::FIRFilter']]], + ['setnumbuffers',['setNumBuffers',['../classsdr_1_1_config.html#a08e8333462c6802a2927d18b0763f946',1,'sdr::Config']]], + ['setorder',['setOrder',['../classsdr_1_1_i_q_base_band.html#ad2959e3dcaf6026fca273b3dca33c66b',1,'sdr::IQBaseBand::setOrder()'],['../classsdr_1_1_f_i_r_filter.html#a3da50552081d57104580336ed0f1d80d',1,'sdr::FIRFilter::setOrder()']]], + ['setoutputsamplerate',['setOutputSampleRate',['../classsdr_1_1_i_q_base_band.html#ac426a960e5fcb82475cd2fbb57b5d9df',1,'sdr::IQBaseBand']]], + ['setsamplerate',['setSampleRate',['../classsdr_1_1_base_band.html#a9b5180e296c0b0d83f04cf9b070d202e',1,'sdr::BaseBand::setSampleRate()'],['../classsdr_1_1_freq_shift_base.html#ac78f1ac2da7e6cf2cd0a6f6bfc15a02c',1,'sdr::FreqShiftBase::setSampleRate()'],['../classsdr_1_1_config.html#a275d514abfc9bda1d72573b73c5c9077',1,'sdr::Config::setSampleRate()'],['../classsdr_1_1_port_source.html#ade30a6651fefb5348fe32793b220f1ff',1,'sdr::PortSource::setSampleRate()'],['../classsdr_1_1_r_t_l_source.html#a4420b0bc023b2bc076936089f958653c',1,'sdr::RTLSource::setSampleRate()']]], + ['setscale',['setScale',['../classsdr_1_1_cast.html#a0b89fdaaac6bc4e52509870fa8740cbe',1,'sdr::Cast']]], + ['setshift',['setShift',['../classsdr_1_1_freq_shift.html#af7af79f187aa77b98abb4643307bd2f7',1,'sdr::FreqShift']]], + ['setsubsample',['setSubsample',['../classsdr_1_1_i_q_base_band.html#a2b7a0ca1c5f35e94a6b3031be2f43778',1,'sdr::IQBaseBand']]], + ['settau',['setTau',['../classsdr_1_1_a_g_c.html#ad5a8b658529798bc5cd93d9a56de6d4f',1,'sdr::AGC']]], + ['settype',['setType',['../classsdr_1_1_config.html#aa38eed09b83bd607c9e3169222c9330f',1,'sdr::Config']]], + ['setupperfreq',['setUpperFreq',['../classsdr_1_1_f_i_r_filter.html#a6c9f663cd552debe0ff032843d65f07d',1,'sdr::FIRFilter']]], + ['shift',['shift',['../classsdr_1_1_freq_shift.html#a50f5b09085e30e1839a29d74f60c4b1d',1,'sdr::FreqShift']]], + ['siggen',['SigGen',['../classsdr_1_1_sig_gen.html#ab71ee17d047e2b6a1691fd30191ed3e7',1,'sdr::SigGen']]], + ['signaleos',['signalEOS',['../classsdr_1_1_source.html#a30eeb1d98d9759ef01a36e938a1172bc',1,'sdr::Source']]], + ['signedtounsigned',['SignedToUnsigned',['../classsdr_1_1_signed_to_unsigned.html#a85e4ac10bb184cf3a22459efedb32523',1,'sdr::SignedToUnsigned']]], + ['sink',['Sink',['../classsdr_1_1_sink.html#a1a5279c1507276612797734eed890ecb',1,'sdr::Sink::Sink()'],['../classsdr_1_1_interleave.html#aae727d1aa24e6d92571125b47eae5ebe',1,'sdr::Interleave::sink()'],['../classsdr_1_1_filter_node.html#ae5b285b5375ef97eb6a7a3e02943d242',1,'sdr::FilterNode::sink()'],['../classsdr_1_1_queue_1_1_message.html#a8df22de4fd6608016d5b20716138c5f7',1,'sdr::Queue::Message::sink()']]], + ['sinkbase',['SinkBase',['../classsdr_1_1_sink_base.html#aaa9fb7219aa47e809ff1d62a819a2d57',1,'sdr::SinkBase']]], + ['size',['size',['../classsdr_1_1_buffer.html#ad2232275b51b1189daea15c6cd9b3a20',1,'sdr::Buffer::size()'],['../classsdr_1_1_ring_buffer.html#a86ddc1ef24e3308671fe3e6163983865',1,'sdr::RingBuffer::size()']]], + ['source',['Source',['../classsdr_1_1_source.html#a660c0a4b8b8f8402568bef86f2cb2fbb',1,'sdr::Source']]], + ['start',['start',['../classsdr_1_1_blocking_source.html#a60ad748162edddcb2d2c21e7f81ba021',1,'sdr::BlockingSource::start()'],['../classsdr_1_1_queue.html#a8e3298dff8edfc75648477ceb0426ffb',1,'sdr::Queue::start()'],['../classsdr_1_1_r_t_l_source.html#a59aa8343fca4ff80948d28359d0a8b0a',1,'sdr::RTLSource::start()']]], + ['stop',['stop',['../classsdr_1_1_blocking_source.html#aabf983bae519915df7e76f429cfce872',1,'sdr::BlockingSource::stop()'],['../classsdr_1_1_queue.html#aaf3a0e226ba622d762de9b32b3cbbb09',1,'sdr::Queue::stop()'],['../classsdr_1_1_r_t_l_source.html#a298ece19ede8427f9968a31108728d17',1,'sdr::RTLSource::stop()']]], + ['storagesize',['storageSize',['../classsdr_1_1_raw_buffer.html#a51e97f8beeacd8734fdb347af02ee215',1,'sdr::RawBuffer']]], + ['stored',['stored',['../classsdr_1_1_ring_buffer.html#a6664867e32e02f79d2c9f4ac5e9288f7',1,'sdr::RingBuffer']]], + ['streamloghandler',['StreamLogHandler',['../classsdr_1_1_stream_log_handler.html#a9c3b48fb4fd550fbc87bb7c79012caa0',1,'sdr::StreamLogHandler']]], + ['streamsink',['StreamSink',['../classsdr_1_1_stream_sink.html#a7543d34895cb13ec98ab25ba94664ac6',1,'sdr::StreamSink']]], + ['streamsource',['StreamSource',['../classsdr_1_1_stream_source.html#a7a0302e45ef26e8af6846f29b40d7d80',1,'sdr::StreamSource']]], + ['sub',['sub',['../classsdr_1_1_buffer.html#a8d8e0ca5402163ed7b9cd486c5236336',1,'sdr::Buffer']]], + ['subsample',['subSample',['../classsdr_1_1_i_q_base_band.html#a04c5dd06532c40bd54a456cdfb064716',1,'sdr::IQBaseBand::subSample()'],['../classsdr_1_1_sub_sample.html#a7097f77c46ba54641ddedbe89721bb1a',1,'sdr::SubSample::SubSample(size_t n)'],['../classsdr_1_1_sub_sample.html#a3a9d5ec57e9b687206145db2d57c5b11',1,'sdr::SubSample::SubSample(double Fs)'],['../classsdr_1_1_frac_sub_sample_base.html#a9570de3fda6677931072581264d33db1',1,'sdr::FracSubSampleBase::subsample()']]] +]; diff --git a/search/functions_12.html b/search/functions_12.html new file mode 100644 index 0000000..1ab0742 --- /dev/null +++ b/search/functions_12.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_12.js b/search/functions_12.js new file mode 100644 index 0000000..76d54c7 --- /dev/null +++ b/search/functions_12.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['tail',['tail',['../classsdr_1_1_buffer.html#ab55a7151f37e6c112bbadfbb9b0af4dd',1,'sdr::Buffer']]], + ['take',['take',['../classsdr_1_1_raw_ring_buffer.html#a8847c1cbdf39ab61a1f8d0f752d7e5b1',1,'sdr::RawRingBuffer::take()'],['../classsdr_1_1_ring_buffer.html#adf3db84956a43e69516079ac0af1f0b5',1,'sdr::RingBuffer::take()']]], + ['tau',['tau',['../classsdr_1_1_a_g_c.html#adc9c78e2a9dcc5a55d81c421a8e534ef',1,'sdr::AGC']]], + ['terminate',['terminate',['../classsdr_1_1_port_audio.html#a1b2c9c26f19d788e436806675f268ec3',1,'sdr::PortAudio']]], + ['tocomplex',['ToComplex',['../classsdr_1_1_to_complex.html#a65f7b684ffbc1f8b8b02760d693f21ea',1,'sdr::ToComplex']]], + ['tofloat',['toFloat',['../classsdr_1_1_options_1_1_value.html#a836761846a7e042efe6346d7bc066cd7',1,'sdr::Options::Value']]], + ['tointeger',['toInteger',['../classsdr_1_1_options_1_1_value.html#a3e18b295561eca4cdae714d6ae303200',1,'sdr::Options::Value']]], + ['tostring',['toString',['../classsdr_1_1_options_1_1_value.html#afbc961d3d5234fad84335b009473a3ef',1,'sdr::Options::Value']]], + ['type',['type',['../classsdr_1_1_config.html#afebc90c2a5f54a8a3ab5b896cfe37724',1,'sdr::Config::type()'],['../classsdr_1_1_source.html#ab9362057c06f35e0a23901cc0556b976',1,'sdr::Source::type()']]], + ['typeid',['typeId',['../classsdr_1_1_config.html#a71df9feb586e1d33241dec5d6a5beae4',1,'sdr::Config::typeId()'],['../classsdr_1_1_config.html#a84cf0959571c6aa5b74f85761dccdc5e',1,'sdr::Config::typeId()'],['../classsdr_1_1_config.html#a84cf0959571c6aa5b74f85761dccdc5e',1,'sdr::Config::typeId()'],['../classsdr_1_1_config.html#a84cf0959571c6aa5b74f85761dccdc5e',1,'sdr::Config::typeId()'],['../classsdr_1_1_config.html#a84cf0959571c6aa5b74f85761dccdc5e',1,'sdr::Config::typeId()'],['../classsdr_1_1_config.html#a84cf0959571c6aa5b74f85761dccdc5e',1,'sdr::Config::typeId()'],['../classsdr_1_1_config.html#a84cf0959571c6aa5b74f85761dccdc5e',1,'sdr::Config::typeId()']]] +]; diff --git a/search/functions_13.html b/search/functions_13.html new file mode 100644 index 0000000..724f5c1 --- /dev/null +++ b/search/functions_13.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_13.js b/search/functions_13.js new file mode 100644 index 0000000..5bbb606 --- /dev/null +++ b/search/functions_13.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['unref',['unref',['../classsdr_1_1_raw_buffer.html#a8ffd3cbf476c9036bfada9ae8c7c5e05',1,'sdr::RawBuffer']]], + ['unsignedtosigned',['UnsignedToSigned',['../classsdr_1_1_unsigned_to_signed.html#a125b90d791bf8e77137ef45f4c71a0c2',1,'sdr::UnsignedToSigned']]], + ['uppertfreq',['uppertFreq',['../classsdr_1_1_f_i_r_filter.html#a9aead6f43054bcfea0db9eee695b53e6',1,'sdr::FIRFilter']]], + ['usbdemod',['USBDemod',['../classsdr_1_1_u_s_b_demod.html#a96e98fa8436abbbd48aa146177ccd173',1,'sdr::USBDemod']]] +]; diff --git a/search/functions_14.html b/search/functions_14.html new file mode 100644 index 0000000..396906b --- /dev/null +++ b/search/functions_14.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_14.js b/search/functions_14.js new file mode 100644 index 0000000..e66aba2 --- /dev/null +++ b/search/functions_14.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['value',['Value',['../classsdr_1_1_options_1_1_value.html#a1dac3eecc4b100594155ab55f82e08a6',1,'sdr::Options::Value::Value()'],['../classsdr_1_1_options_1_1_value.html#a376836180378fbb775c3f1142c9ffd44',1,'sdr::Options::Value::Value(long value)'],['../classsdr_1_1_options_1_1_value.html#ac6565d5f35e470187b2274fe95fc6605',1,'sdr::Options::Value::Value(double value)'],['../classsdr_1_1_options_1_1_value.html#aff0d58485913e6edeb379b6353173711',1,'sdr::Options::Value::Value(const std::string &value)'],['../classsdr_1_1_options_1_1_value.html#aa160414af84cb73130e7d29b7de6c2dd',1,'sdr::Options::Value::Value(const Value &other)']]], + ['varicode',['Varicode',['../classsdr_1_1_varicode.html#a62e59e14876da3cda7f241ba49a51a0e',1,'sdr::Varicode']]] +]; diff --git a/search/functions_15.html b/search/functions_15.html new file mode 100644 index 0000000..2dee32b --- /dev/null +++ b/search/functions_15.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_15.js b/search/functions_15.js new file mode 100644 index 0000000..9f781c2 --- /dev/null +++ b/search/functions_15.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['wait',['wait',['../classsdr_1_1_queue.html#a5017fc308c3be9793a4cc3e96c2eba12',1,'sdr::Queue']]], + ['wavsink',['WavSink',['../classsdr_1_1_wav_sink.html#ab5fee6bdb124ab118db5180d6535d999',1,'sdr::WavSink']]], + ['wavsource',['WavSource',['../classsdr_1_1_wav_source.html#aae456791a7b76d1c6bf5019c10d4e77f',1,'sdr::WavSource::WavSource(size_t buffer_size=1024)'],['../classsdr_1_1_wav_source.html#ab135a01ec10704c4ba767e2ade3eb018',1,'sdr::WavSource::WavSource(const std::string &filename, size_t buffer_size=1024)']]], + ['what',['what',['../classsdr_1_1_s_d_r_error.html#af562fc760a156ea182407cb169ee8d3e',1,'sdr::SDRError']]] +]; diff --git a/search/functions_16.html b/search/functions_16.html new file mode 100644 index 0000000..55d2cda --- /dev/null +++ b/search/functions_16.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_16.js b/search/functions_16.js new file mode 100644 index 0000000..8daa056 --- /dev/null +++ b/search/functions_16.js @@ -0,0 +1,59 @@ +var searchData= +[ + ['_7eamdemod',['~AMDemod',['../classsdr_1_1_a_m_demod.html#af982f1d938899435e391b41d994242d9',1,'sdr::AMDemod']]], + ['_7ebaseband',['~BaseBand',['../classsdr_1_1_base_band.html#a82d75bf057d6d0b60ce39c8721eac386',1,'sdr::BaseBand']]], + ['_7eblockingsource',['~BlockingSource',['../classsdr_1_1_blocking_source.html#a4c5ff3213be1919ccf24fd2568806cb3',1,'sdr::BlockingSource']]], + ['_7ebpsk31',['~BPSK31',['../classsdr_1_1_b_p_s_k31.html#a5f194008dae3fb4b4f004f77e03786dc',1,'sdr::BPSK31']]], + ['_7ebuffer',['~Buffer',['../classsdr_1_1_buffer.html#a5dd718c181201e65f07da21e7fdf532b',1,'sdr::Buffer']]], + ['_7ebufferset',['~BufferSet',['../classsdr_1_1_buffer_set.html#a84d2eb1c4d7f6f351c7db30154e2122b',1,'sdr::BufferSet']]], + ['_7ecombine',['~Combine',['../classsdr_1_1_combine.html#a22d4833e0ee07e58ee84313820c929fa',1,'sdr::Combine']]], + ['_7ecombinesink',['~CombineSink',['../classsdr_1_1_combine_sink.html#a48d36e6d13b66a7d43c70d31583d8d51',1,'sdr::CombineSink']]], + ['_7econfigerror',['~ConfigError',['../classsdr_1_1_config_error.html#a64f66575b0e3cf83e77658b9592cbf2c',1,'sdr::ConfigError']]], + ['_7edebugdump',['~DebugDump',['../classsdr_1_1_debug_dump.html#ad2b8dbf77ca9fd1b29b3521e4661c52f',1,'sdr::DebugDump']]], + ['_7edelegate',['~Delegate',['../classsdr_1_1_delegate.html#aa06533bb0da4bcfbcbcc6e29d4713ecc',1,'sdr::Delegate']]], + ['_7efftplan',['~FFTPlan',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#a7380566a47378ea76194074b70c5cec2',1,'sdr::FFTPlan< double >::~FFTPlan()'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#a8f9aead4349af17fe5ac96ca42a3f689',1,'sdr::FFTPlan< float >::~FFTPlan()'],['../classsdr_1_1_f_f_t_plan.html#a9e9efb0511e20fe5a2aa1ef5da4e1aa7',1,'sdr::FFTPlan::~FFTPlan()']]], + ['_7efilternode',['~FilterNode',['../classsdr_1_1_filter_node.html#a64dc3146d73aceb94bedac25e781b811',1,'sdr::FilterNode']]], + ['_7efiltersink',['~FilterSink',['../classsdr_1_1_filter_sink.html#ac10eeb6b3184cc29bf99c73521bc1398',1,'sdr::FilterSink']]], + ['_7efiltersource',['~FilterSource',['../classsdr_1_1_filter_source.html#ae3e6822f0fa2be09a3361d8eebabacff',1,'sdr::FilterSource']]], + ['_7efirbandpass',['~FIRBandPass',['../classsdr_1_1_f_i_r_band_pass.html#af7d2ee90f2f981f048fb46e4b23fc691',1,'sdr::FIRBandPass']]], + ['_7efirbandstop',['~FIRBandStop',['../classsdr_1_1_f_i_r_band_stop.html#a3f1592d1526c9fdee0604fd734480aa7',1,'sdr::FIRBandStop']]], + ['_7efirfilter',['~FIRFilter',['../classsdr_1_1_f_i_r_filter.html#abd1d8a40766465d012eba2ea7c1fa539',1,'sdr::FIRFilter']]], + ['_7efirhighpass',['~FIRHighPass',['../classsdr_1_1_f_i_r_high_pass.html#aba45d7cad94acf73371d45b0194b8152',1,'sdr::FIRHighPass']]], + ['_7efirlowpass',['~FIRLowPass',['../classsdr_1_1_f_i_r_low_pass.html#a8bf39b3d0a1910339b995aedcc1ff9ae',1,'sdr::FIRLowPass']]], + ['_7efmdeemph',['~FMDeemph',['../classsdr_1_1_f_m_deemph.html#ad66286f2e7e7ab20135444cdb0fa0d18',1,'sdr::FMDeemph']]], + ['_7efmdemod',['~FMDemod',['../classsdr_1_1_f_m_demod.html#ad30001feb9c7e161d486e2481274319d',1,'sdr::FMDemod']]], + ['_7efracsubsamplebase',['~FracSubSampleBase',['../classsdr_1_1_frac_sub_sample_base.html#ad5bd940285973e73db71859509fcf223',1,'sdr::FracSubSampleBase']]], + ['_7efreqshift',['~FreqShift',['../classsdr_1_1_freq_shift.html#a0d9c1e662d530ecfa97ed35b0c7a50cd',1,'sdr::FreqShift']]], + ['_7efreqshiftbase',['~FreqShiftBase',['../classsdr_1_1_freq_shift_base.html#a49fe9f9c91b9ed1d47b66a53ccb4ff59',1,'sdr::FreqShiftBase']]], + ['_7egwnsource',['~GWNSource',['../classsdr_1_1_g_w_n_source.html#a5b9c6d8396b7bd5cfc357d750913314c',1,'sdr::GWNSource']]], + ['_7einpolsubsampler',['~InpolSubSampler',['../classsdr_1_1_inpol_sub_sampler.html#ac0d0836eede79f7bb1e05072ada537ff',1,'sdr::InpolSubSampler']]], + ['_7eiqbalance',['~IQBalance',['../classsdr_1_1_i_q_balance.html#a32b7df4e96d0ad06fdab2e6cb8dbcea6',1,'sdr::IQBalance']]], + ['_7eiqbaseband',['~IQBaseBand',['../classsdr_1_1_i_q_base_band.html#a95b54fb78d0a24154375f2c04df12079',1,'sdr::IQBaseBand']]], + ['_7eiqsiggen',['~IQSigGen',['../classsdr_1_1_i_q_sig_gen.html#ad444946309bab1ad2da15ec74d4928e1',1,'sdr::IQSigGen']]], + ['_7elogger',['~Logger',['../classsdr_1_1_logger.html#acb668a9e186a25fbaad2e4af6d1ed00a',1,'sdr::Logger']]], + ['_7eloghandler',['~LogHandler',['../classsdr_1_1_log_handler.html#ae8728f5dc62eacf6c9499014c9c2aaa5',1,'sdr::LogHandler']]], + ['_7elogmessage',['~LogMessage',['../classsdr_1_1_log_message.html#a6b6ffe80b4859c0907c3b653d4d11485',1,'sdr::LogMessage']]], + ['_7eportsink',['~PortSink',['../classsdr_1_1_port_sink.html#a4bad3616a1b9d4fc661a0d05f82195b5',1,'sdr::PortSink']]], + ['_7eportsource',['~PortSource',['../classsdr_1_1_port_source.html#acdbbc6cf479f7463c8f323970e2f6acb',1,'sdr::PortSource']]], + ['_7eproxy',['~Proxy',['../classsdr_1_1_proxy.html#a2f9c8445a2a1db22422185ffd92a795e',1,'sdr::Proxy']]], + ['_7equeue',['~Queue',['../classsdr_1_1_queue.html#a00d119db8fa3050da37746e82cbcf94f',1,'sdr::Queue']]], + ['_7erawbuffer',['~RawBuffer',['../classsdr_1_1_raw_buffer.html#aa665641793e5fd0f036f0ec66d943c08',1,'sdr::RawBuffer']]], + ['_7erawringbuffer',['~RawRingBuffer',['../classsdr_1_1_raw_ring_buffer.html#a1fe52e281ce0c4ec90c04ae16b37dd75',1,'sdr::RawRingBuffer']]], + ['_7eringbuffer',['~RingBuffer',['../classsdr_1_1_ring_buffer.html#ac7b42639b4c3e11b4d37bcac633cab7b',1,'sdr::RingBuffer']]], + ['_7ertlsource',['~RTLSource',['../classsdr_1_1_r_t_l_source.html#a547b424f343efc32dfd07699142b4e1a',1,'sdr::RTLSource']]], + ['_7eruntimeerror',['~RuntimeError',['../classsdr_1_1_runtime_error.html#a1952beacda0c7fb4b625ee5570305fc6',1,'sdr::RuntimeError']]], + ['_7escale',['~Scale',['../classsdr_1_1_scale.html#a1101a27382e4a4b1e93a0e8cb5caa446',1,'sdr::Scale']]], + ['_7esdrerror',['~SDRError',['../classsdr_1_1_s_d_r_error.html#a76b194238e92d2e745b6fd4a1e1b4555',1,'sdr::SDRError']]], + ['_7esiggen',['~SigGen',['../classsdr_1_1_sig_gen.html#aa7e0d8187e55729276800d4f62f8c465',1,'sdr::SigGen']]], + ['_7esignedtounsigned',['~SignedToUnsigned',['../classsdr_1_1_signed_to_unsigned.html#a3c05ecc93f25194ceea462781d6e22a9',1,'sdr::SignedToUnsigned']]], + ['_7esink',['~Sink',['../classsdr_1_1_sink.html#ad17413f3a75305f326b7c3885be9279a',1,'sdr::Sink']]], + ['_7esinkbase',['~SinkBase',['../classsdr_1_1_sink_base.html#a522205396205d6d3601da6a65bdaf75a',1,'sdr::SinkBase']]], + ['_7esource',['~Source',['../classsdr_1_1_source.html#ac5104a4d66641ae529419b47da4a1473',1,'sdr::Source']]], + ['_7estreamloghandler',['~StreamLogHandler',['../classsdr_1_1_stream_log_handler.html#a904248ee770e350c938e4fe6b70c054e',1,'sdr::StreamLogHandler']]], + ['_7eunsignedtosigned',['~UnsignedToSigned',['../classsdr_1_1_unsigned_to_signed.html#a6a77c851737999a0340ccecea78f7b2d',1,'sdr::UnsignedToSigned']]], + ['_7eusbdemod',['~USBDemod',['../classsdr_1_1_u_s_b_demod.html#a3c8909c8c2072120a98f1c7e5799c4e1',1,'sdr::USBDemod']]], + ['_7evalue',['~Value',['../classsdr_1_1_options_1_1_value.html#a0f0d425e4478a34c26df40036ce6aa3f',1,'sdr::Options::Value']]], + ['_7evaricode',['~Varicode',['../classsdr_1_1_varicode.html#a68fecb7c98722029c8ee4e634101f43e',1,'sdr::Varicode']]], + ['_7ewavsink',['~WavSink',['../classsdr_1_1_wav_sink.html#a61e3e446a40890b420563a87c33abaef',1,'sdr::WavSink']]], + ['_7ewavsource',['~WavSource',['../classsdr_1_1_wav_source.html#a970e12ca4cc30818057a8f42ca316a32',1,'sdr::WavSource']]] +]; diff --git a/search/functions_2.html b/search/functions_2.html new file mode 100644 index 0000000..78be8b4 --- /dev/null +++ b/search/functions_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_2.js b/search/functions_2.js new file mode 100644 index 0000000..7726dc9 --- /dev/null +++ b/search/functions_2.js @@ -0,0 +1,15 @@ +var searchData= +[ + ['balance',['balance',['../classsdr_1_1_i_q_balance.html#a5c01ce755a3a4c09a50767413a8ae94e',1,'sdr::IQBalance']]], + ['baseband',['BaseBand',['../classsdr_1_1_base_band.html#afcf0692c99496dec1419050a03e177b5',1,'sdr::BaseBand::BaseBand(double Fc, double width, size_t order, size_t sub_sample)'],['../classsdr_1_1_base_band.html#a8e1abce4d8e46d419ccc47ac522268f3',1,'sdr::BaseBand::BaseBand(double Fc, double Ff, double width, size_t order, size_t sub_sample)']]], + ['blockingsource',['BlockingSource',['../classsdr_1_1_blocking_source.html#a4590feb79e59560b713af72107c8882b',1,'sdr::BlockingSource']]], + ['bpsk31',['BPSK31',['../classsdr_1_1_b_p_s_k31.html#a7862edf6d977ae6943047bd5c46036ec',1,'sdr::BPSK31']]], + ['buffer',['buffer',['../classsdr_1_1_queue_1_1_message.html#aa023b90e3e9c9f66639f24924f9a94e7',1,'sdr::Queue::Message::buffer() const '],['../classsdr_1_1_queue_1_1_message.html#abc914df82e28a4dd8093b6b6e294640d',1,'sdr::Queue::Message::buffer()'],['../classsdr_1_1_debug_store.html#acc0294ae47ad796ccbb81e90c8cbbdfb',1,'sdr::DebugStore::buffer()'],['../classsdr_1_1_buffer.html#a470ae1acfcaaf1fe42fffdc79bcb970b',1,'sdr::Buffer::Buffer()'],['../classsdr_1_1_buffer.html#ae907c642e4d08230e389a04517ea9659',1,'sdr::Buffer::Buffer(T *data, size_t size)'],['../classsdr_1_1_buffer.html#a825a22b01c374aa198fc2fba5f3b5eea',1,'sdr::Buffer::Buffer(size_t N, BufferOwner *owner=0)'],['../classsdr_1_1_buffer.html#adfabb6f5067b89625a0592c7f819d2ed',1,'sdr::Buffer::Buffer(const Buffer< T > &other)'],['../classsdr_1_1_buffer.html#a481fce90227862e3169aeb74f785b19a',1,'sdr::Buffer::Buffer(const RawBuffer &other)']]], + ['buffernode',['BufferNode',['../classsdr_1_1_buffer_node.html#a231ac24b83844174b6f611a709e50ec7',1,'sdr::BufferNode']]], + ['bufferset',['BufferSet',['../classsdr_1_1_buffer_set.html#ab9925df548ac6382801dcd1a8fd0c280',1,'sdr::BufferSet']]], + ['buffersize',['bufferSize',['../classsdr_1_1_config.html#a940f217ca5157e1a43c55fec08a22362',1,'sdr::Config']]], + ['bufferunused',['bufferUnused',['../classsdr_1_1_buffer_owner.html#ac00340809e90b9719bb44ebd61cb0cec',1,'sdr::BufferOwner::bufferUnused()'],['../classsdr_1_1_buffer_set.html#a431c64dd75ca0e00337073428a8ddbbb',1,'sdr::BufferSet::bufferUnused()']]], + ['bytesfree',['bytesFree',['../classsdr_1_1_raw_ring_buffer.html#a5f9a5fc51e9dd149230cac3310bf9671',1,'sdr::RawRingBuffer']]], + ['byteslen',['bytesLen',['../classsdr_1_1_raw_buffer.html#a822092fbdd5957035d89b7a958fd1f67',1,'sdr::RawBuffer::bytesLen()'],['../classsdr_1_1_raw_ring_buffer.html#a27378a9c8969562b6eac2bcf20e3adb0',1,'sdr::RawRingBuffer::bytesLen()']]], + ['bytesoffset',['bytesOffset',['../classsdr_1_1_raw_buffer.html#a71f6b914f5919bc4403f93bab28798a8',1,'sdr::RawBuffer']]] +]; diff --git a/search/functions_3.html b/search/functions_3.html new file mode 100644 index 0000000..ebf2eeb --- /dev/null +++ b/search/functions_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_3.js b/search/functions_3.js new file mode 100644 index 0000000..376efa7 --- /dev/null +++ b/search/functions_3.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['cast',['Cast',['../classsdr_1_1_cast.html#a0ad652944e908118d862c4d806b91954',1,'sdr::Cast']]], + ['centerfrequency',['centerFrequency',['../classsdr_1_1_i_q_base_band.html#ac075931ee502f636478b395d0556294b',1,'sdr::IQBaseBand']]], + ['clear',['clear',['../classsdr_1_1_raw_ring_buffer.html#a8afcb27e77eb4ea0ffe7f615e610e9b9',1,'sdr::RawRingBuffer::clear()'],['../classsdr_1_1_debug_store.html#a01c2f43a30b8642a663addcf7fd5b897',1,'sdr::DebugStore::clear()']]], + ['close',['close',['../classsdr_1_1_wav_sink.html#a06123515727831cfc98007d26867f700',1,'sdr::WavSink::close()'],['../classsdr_1_1_wav_source.html#a302aadec4b4616280490b7f3794bad6d',1,'sdr::WavSource::close()']]], + ['coeffs',['coeffs',['../classsdr_1_1_f_i_r_low_pass_coeffs.html#ad10f9ddc869c9c33885dbf788a26deda',1,'sdr::FIRLowPassCoeffs::coeffs()'],['../classsdr_1_1_f_i_r_high_pass_coeffs.html#a64e44c1efb3e46aa54e66dbe5c593ba3',1,'sdr::FIRHighPassCoeffs::coeffs()'],['../classsdr_1_1_f_i_r_band_pass_coeffs.html#abd6f0bbcbb0c20eb828bd5f80934fc66',1,'sdr::FIRBandPassCoeffs::coeffs()'],['../classsdr_1_1_f_i_r_band_stop_coeffs.html#ab16669fb8531dfbb1dea863efcb4ac78',1,'sdr::FIRBandStopCoeffs::coeffs()']]], + ['combine',['Combine',['../classsdr_1_1_combine.html#a9a4a802d6a0fd840cb909e0f8e0805ed',1,'sdr::Combine']]], + ['combinesink',['CombineSink',['../classsdr_1_1_combine_sink.html#a6fda9a4e65f9139c6099539b91fd2381',1,'sdr::CombineSink']]], + ['config',['Config',['../classsdr_1_1_config.html#abd0c571c116924871e30444b192b792a',1,'sdr::Config::Config()'],['../classsdr_1_1_config.html#abc4fa71a28fcc6f6b2854c226662287b',1,'sdr::Config::Config(Type type, double sampleRate, size_t bufferSize, size_t numBuffers)'],['../classsdr_1_1_config.html#a5e7857923b67cb5208e4b43d6a652c34',1,'sdr::Config::Config(const Config &other)'],['../classsdr_1_1_auto_cast.html#ad8f0b826c405a26bdb0884690b1dc1e6',1,'sdr::AutoCast::config()'],['../classsdr_1_1_i_q_base_band.html#a737f6c7d26595934f3d5a577304d4e97',1,'sdr::IQBaseBand::config()'],['../classsdr_1_1_base_band.html#adcaeff6352ee34550c04c9d42f669dbe',1,'sdr::BaseBand::config()'],['../classsdr_1_1_buffer_node.html#a827c44de5d3c5a24d548ca498ee8fea6',1,'sdr::BufferNode::config()'],['../classsdr_1_1_combine_sink.html#a0ff7d730bc75a6e7b36d12c42a8ebbf1',1,'sdr::CombineSink::config()'],['../classsdr_1_1_combine.html#a125ddc97065e6ae85bc8a1fce8d8cc6b',1,'sdr::Combine::config()'],['../classsdr_1_1_interleave.html#a565f44f9a680816ab9267bfb96cfe4c1',1,'sdr::Interleave::config()'],['../classsdr_1_1_a_m_demod.html#ae7a8db03a6982ae33c4786ab3b82a6cc',1,'sdr::AMDemod::config()'],['../classsdr_1_1_u_s_b_demod.html#af337424855632186cbfe8d241845e7e1',1,'sdr::USBDemod::config()'],['../classsdr_1_1_f_m_demod.html#a8f3008f786982883d9a1b2284a8b0a57',1,'sdr::FMDemod::config()'],['../classsdr_1_1_f_m_deemph.html#a01f7e78791d641c3498344e712f86bea',1,'sdr::FMDeemph::config()'],['../classsdr_1_1_filter_sink.html#a1331f69c193bfbbf7309347295c5661c',1,'sdr::FilterSink::config()'],['../classsdr_1_1_filter_source.html#aedb6195cdaeadd83f18bd5c699aeb31a',1,'sdr::FilterSource::config()'],['../classsdr_1_1_f_i_r_filter.html#add82f22f403ae4aaa004788a78bf6fb3',1,'sdr::FIRFilter::config()'],['../classsdr_1_1_sink_base.html#aacebf73840f06c82c438e352bf1eb75e',1,'sdr::SinkBase::config()'],['../classsdr_1_1_proxy.html#adb2f2d95d1fd6921b2143116bb0de448',1,'sdr::Proxy::config()'],['../classsdr_1_1_port_sink.html#a864372dbd08d8f5cc0fd8731f093fea0',1,'sdr::PortSink::config()'],['../classsdr_1_1_b_p_s_k31.html#a36da3163abca21c2dcd042139de0a36e',1,'sdr::BPSK31::config()'],['../classsdr_1_1_varicode.html#adf7cb0e1e1603a8c3ab6432932e4d21f',1,'sdr::Varicode::config()'],['../classsdr_1_1_sub_sample.html#a0191ff1b7142c17ed24a05ba502ebbc8',1,'sdr::SubSample::config()'],['../classsdr_1_1_inpol_sub_sampler.html#ad2bdbee4da505eb76b4b89694aef9e2f',1,'sdr::InpolSubSampler::config()'],['../classsdr_1_1_real_imag_part.html#ad1a035bdf7d65807bc00f02e76b14cfa',1,'sdr::RealImagPart::config()'],['../classsdr_1_1_i_q_balance.html#ad87c15d962ab16363ab0b463a9e9724b',1,'sdr::IQBalance::config()'],['../classsdr_1_1_to_complex.html#a318dbc6cdaf30baf9ee2de67ac57bc5a',1,'sdr::ToComplex::config()'],['../classsdr_1_1_cast.html#a7abe34a154f45e89f1b8df475cb8109d',1,'sdr::Cast::config()'],['../classsdr_1_1_unsigned_to_signed.html#a96623592a4d99c2305896d47bd7ccf03',1,'sdr::UnsignedToSigned::config()'],['../classsdr_1_1_signed_to_unsigned.html#a3c95c11ec3424ab0188f4cfacb175a0c',1,'sdr::SignedToUnsigned::config()'],['../classsdr_1_1_freq_shift.html#a2aeaf444562a0b054ae65442992caefc',1,'sdr::FreqShift::config()'],['../classsdr_1_1_stream_sink.html#ace62c79416acaa9680fc48da13bd583e',1,'sdr::StreamSink::config()'],['../classsdr_1_1_scale.html#a2b70619a04f2f50aaea59828f0d333e5',1,'sdr::Scale::config()'],['../classsdr_1_1_a_g_c.html#a76db615ca776e62d16c7ab8b9f348afa',1,'sdr::AGC::config()'],['../classsdr_1_1_debug_store.html#a49a16b42f72c91fadf494ab7e3fa88de',1,'sdr::DebugStore::config()'],['../classsdr_1_1_debug_dump.html#af496d34703693264a457c4f9cb8b6b44',1,'sdr::DebugDump::config()'],['../classsdr_1_1_wav_sink.html#a8fe7a9c850f1d7ab49a258f204e389b5',1,'sdr::WavSink::config()']]], + ['configerror',['ConfigError',['../classsdr_1_1_config_error.html#abf8dde757baedc3691bef55f0a330656',1,'sdr::ConfigError::ConfigError()'],['../classsdr_1_1_config_error.html#a8be2177cd93e28543a87423439ff6394',1,'sdr::ConfigError::ConfigError(const ConfigError &other)']]], + ['connect',['connect',['../classsdr_1_1_source.html#ac7df1faefb31e72e135eec3ecf539132',1,'sdr::Source']]] +]; diff --git a/search/functions_4.html b/search/functions_4.html new file mode 100644 index 0000000..7317ea9 --- /dev/null +++ b/search/functions_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_4.js b/search/functions_4.js new file mode 100644 index 0000000..d205f50 --- /dev/null +++ b/search/functions_4.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['data',['data',['../classsdr_1_1_raw_buffer.html#a41429fafa5acac7eb6ab22001fedc3d7',1,'sdr::RawBuffer']]], + ['debugdump',['DebugDump',['../classsdr_1_1_debug_dump.html#ac2d812e6ce797f273b1c24c89914f1a1',1,'sdr::DebugDump']]], + ['debugstore',['DebugStore',['../classsdr_1_1_debug_store.html#ae0069303062df5385e61654744f42dcb',1,'sdr::DebugStore']]], + ['defaultinputdevice',['defaultInputDevice',['../classsdr_1_1_port_audio.html#a1990e85770c15c10fb29ddaea82fc447',1,'sdr::PortAudio']]], + ['defaultoutputdevice',['defaultOutputDevice',['../classsdr_1_1_port_audio.html#a05af7d9c2963d085e342f12a719c33f1',1,'sdr::PortAudio']]], + ['delegate',['Delegate',['../classsdr_1_1_delegate.html#a4693fde26e5ef52bcdf45e0911053414',1,'sdr::Delegate']]], + ['deviceindex',['deviceIndex',['../classsdr_1_1_port_source.html#adabd60fbc242b04e7e9a2ffc1d55a240',1,'sdr::PortSource']]], + ['devicename',['deviceName',['../classsdr_1_1_port_audio.html#a179ad1349b899080303ddd535e6d23d9',1,'sdr::PortAudio::deviceName()'],['../classsdr_1_1_r_t_l_source.html#a4730e233f63b93afcf0d3a01d8c5ce6e',1,'sdr::RTLSource::deviceName()']]], + ['disconnect',['disconnect',['../classsdr_1_1_source.html#a9b1d1ccef6cee5f4668ee67bc28eed7a',1,'sdr::Source']]], + ['drop',['drop',['../classsdr_1_1_raw_ring_buffer.html#a5fbec40ea5cced229b49103b0ef73001',1,'sdr::RawRingBuffer::drop()'],['../classsdr_1_1_ring_buffer.html#ac96ae51c17f2afbce7b97e873562441f',1,'sdr::RingBuffer::drop()']]] +]; diff --git a/search/functions_5.html b/search/functions_5.html new file mode 100644 index 0000000..1f1d9ce --- /dev/null +++ b/search/functions_5.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_5.js b/search/functions_5.js new file mode 100644 index 0000000..ef9f667 --- /dev/null +++ b/search/functions_5.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['enable',['enable',['../classsdr_1_1_f_m_deemph.html#ae2f205ad6e0cf6fde1652c6629900b6a',1,'sdr::FMDeemph::enable()'],['../classsdr_1_1_f_i_r_filter.html#ae8a63941ff482b039cf1cfdb79c0dc03',1,'sdr::FIRFilter::enable()'],['../classsdr_1_1_a_g_c.html#a1266dd894d568627ea9ab7859eb2366e',1,'sdr::AGC::enable()']]], + ['enableagc',['enableAGC',['../classsdr_1_1_r_t_l_source.html#aebe2870cf1be2ba807c7129b506433bb',1,'sdr::RTLSource']]], + ['enabled',['enabled',['../classsdr_1_1_f_i_r_filter.html#a86bb334d886cebe30844cdf4e12c68a9',1,'sdr::FIRFilter::enabled()'],['../classsdr_1_1_a_g_c.html#ac94a06d5fa2ec089ac5a86c5853274ef',1,'sdr::AGC::enabled()']]], + ['exec',['exec',['../classsdr_1_1_f_f_t.html#a8aaadbbb8ce1c61fd90c5b9842753d1c',1,'sdr::FFT::exec(const Buffer< std::complex< Scalar > > &in, const Buffer< std::complex< Scalar > > &out, FFT::Direction dir)'],['../classsdr_1_1_f_f_t.html#a9eede624e80fd59823522653156c0dc4',1,'sdr::FFT::exec(const Buffer< std::complex< Scalar > > &inplace, FFT::Direction dir)']]] +]; diff --git a/search/functions_6.html b/search/functions_6.html new file mode 100644 index 0000000..c9faaa6 --- /dev/null +++ b/search/functions_6.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_6.js b/search/functions_6.js new file mode 100644 index 0000000..4298c75 --- /dev/null +++ b/search/functions_6.js @@ -0,0 +1,25 @@ +var searchData= +[ + ['fftplan',['FFTPlan',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#aae8346981308f02996a9b027a375ba5b',1,'sdr::FFTPlan< double >::FFTPlan(const Buffer< std::complex< double > > &in, const Buffer< std::complex< double > > &out, FFT::Direction dir)'],['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#aff0129b582964231d58f9a0a0c8230f7',1,'sdr::FFTPlan< double >::FFTPlan(const Buffer< std::complex< double > > &inplace, FFT::Direction dir)'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#a09ecf852c31bbcad0491600ce10f2fee',1,'sdr::FFTPlan< float >::FFTPlan(const Buffer< std::complex< float > > &in, const Buffer< std::complex< float > > &out, FFT::Direction dir)'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#a6723ab098b813ce4f24cae1224a828e7',1,'sdr::FFTPlan< float >::FFTPlan(const Buffer< std::complex< float > > &inplace, FFT::Direction dir)'],['../classsdr_1_1_f_f_t_plan.html#a0797a5d126c311b031f6377b786e328d',1,'sdr::FFTPlan::FFTPlan()']]], + ['filterfrequency',['filterFrequency',['../classsdr_1_1_i_q_base_band.html#a47ec654ceec6c5210b470bb7ff1a651e',1,'sdr::IQBaseBand']]], + ['filternode',['FilterNode',['../classsdr_1_1_filter_node.html#a9ef6fadf38e94d3dac8ed61c170eca78',1,'sdr::FilterNode']]], + ['filtersink',['FilterSink',['../classsdr_1_1_filter_sink.html#a272a1da79e3dd1d9faad8ab278b7176d',1,'sdr::FilterSink']]], + ['filtersource',['FilterSource',['../classsdr_1_1_filter_source.html#a2221451fde11f6c5cd115f4edefeba51',1,'sdr::FilterSource']]], + ['filterwidth',['filterWidth',['../classsdr_1_1_i_q_base_band.html#a60ee9b251a29ca25236d5c725b086516',1,'sdr::IQBaseBand']]], + ['firbandpass',['FIRBandPass',['../classsdr_1_1_f_i_r_band_pass.html#a8140caf5dd9255d52b9c8bb30f81cbff',1,'sdr::FIRBandPass']]], + ['firbandstop',['FIRBandStop',['../classsdr_1_1_f_i_r_band_stop.html#ae5b8813bc44edb38be704b44d1637946',1,'sdr::FIRBandStop']]], + ['firfilter',['FIRFilter',['../classsdr_1_1_f_i_r_filter.html#a94d565503488689e65a75199117146e1',1,'sdr::FIRFilter']]], + ['firhighpass',['FIRHighPass',['../classsdr_1_1_f_i_r_high_pass.html#a7a44da7f400f30bbbb763f7bd00d5660',1,'sdr::FIRHighPass']]], + ['firlowpass',['FIRLowPass',['../classsdr_1_1_f_i_r_low_pass.html#acc816ce385aa609f1e4d747855de87ca',1,'sdr::FIRLowPass']]], + ['fmdeemph',['FMDeemph',['../classsdr_1_1_f_m_deemph.html#a3785af576bab59e8e21fddd5eff4d9b8',1,'sdr::FMDeemph']]], + ['fmdemod',['FMDemod',['../classsdr_1_1_f_m_demod.html#a1d05cb544f56c4b4925c5d9dc6ab4d27',1,'sdr::FMDemod']]], + ['frac',['frac',['../classsdr_1_1_frac_sub_sample_base.html#a7b7b81715160de41b57aaa2b082d4419',1,'sdr::FracSubSampleBase']]], + ['fracsubsamplebase',['FracSubSampleBase',['../classsdr_1_1_frac_sub_sample_base.html#a9541f45940779515077e41542939bdca',1,'sdr::FracSubSampleBase']]], + ['free',['free',['../classsdr_1_1_ring_buffer.html#a17f827a85fbbaed4568a0d59adb1dc1c',1,'sdr::RingBuffer']]], + ['freq',['freq',['../classsdr_1_1_f_i_r_low_pass.html#a2b208c92826e76738fa9a0bf31818736',1,'sdr::FIRLowPass::freq()'],['../classsdr_1_1_f_i_r_high_pass.html#a58b576726bab60c3a47268a5c5740a95',1,'sdr::FIRHighPass::freq()']]], + ['freqcorrection',['freqCorrection',['../classsdr_1_1_r_t_l_source.html#a26243c7c26f8bd9e136a3aeb513f0513',1,'sdr::RTLSource']]], + ['freqshift',['FreqShift',['../classsdr_1_1_freq_shift.html#a277a98f4b337726d07b3245a920b6456',1,'sdr::FreqShift']]], + ['freqshiftbase',['FreqShiftBase',['../classsdr_1_1_freq_shift_base.html#a0fda649f8939151e931c89dc6e6dcc15',1,'sdr::FreqShiftBase']]], + ['frequency',['frequency',['../classsdr_1_1_r_t_l_source.html#a0b0c2bfa386cf42f623cfee094553268',1,'sdr::RTLSource']]], + ['frequencyshift',['frequencyShift',['../classsdr_1_1_freq_shift_base.html#ae35765fc1fd75d595a77551fa1670606',1,'sdr::FreqShiftBase']]] +]; diff --git a/search/functions_7.html b/search/functions_7.html new file mode 100644 index 0000000..ec330da --- /dev/null +++ b/search/functions_7.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_7.js b/search/functions_7.js new file mode 100644 index 0000000..fe220c8 --- /dev/null +++ b/search/functions_7.js @@ -0,0 +1,8 @@ +var searchData= +[ + ['gain',['gain',['../classsdr_1_1_r_t_l_source.html#a158edee2c383a22159760fb755d82b6c',1,'sdr::RTLSource::gain()'],['../classsdr_1_1_a_g_c.html#a021a3a3366f3ae5d400fa8475f6c45d6',1,'sdr::AGC::gain()']]], + ['gainfactors',['gainFactors',['../classsdr_1_1_r_t_l_source.html#abbf08017ff4660e9313b90b5eaa60668',1,'sdr::RTLSource']]], + ['get',['get',['../classsdr_1_1_logger.html#a9b12ce53593be134b7d7dea62607d22d',1,'sdr::Logger::get()'],['../classsdr_1_1_options.html#abf0c8e6106bcca067b0f11dba15fb050',1,'sdr::Options::get()'],['../classsdr_1_1_queue.html#ab4c57ac84eaa535fd412b3b7b7cfc816',1,'sdr::Queue::get()']]], + ['getbuffer',['getBuffer',['../classsdr_1_1_buffer_set.html#aee221d7b71f5f0a5b0b30991c34a362f',1,'sdr::BufferSet']]], + ['gwnsource',['GWNSource',['../classsdr_1_1_g_w_n_source.html#a252d6072247808f11340274fda976500',1,'sdr::GWNSource']]] +]; diff --git a/search/functions_8.html b/search/functions_8.html new file mode 100644 index 0000000..afd4fac --- /dev/null +++ b/search/functions_8.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_8.js b/search/functions_8.js new file mode 100644 index 0000000..1c3f4ab --- /dev/null +++ b/search/functions_8.js @@ -0,0 +1,14 @@ +var searchData= +[ + ['handle',['handle',['../classsdr_1_1_log_handler.html#a09ce2fab756cba41a3fcd94a48b11e8a',1,'sdr::LogHandler::handle()'],['../classsdr_1_1_stream_log_handler.html#a7131db89e93154b4c9d6e434eddc20d7',1,'sdr::StreamLogHandler::handle()']]], + ['handlebuffer',['handleBuffer',['../classsdr_1_1_auto_cast.html#a8acf3f265d8da760d0b75c9281da8c28',1,'sdr::AutoCast::handleBuffer()'],['../classsdr_1_1_sink_base.html#ae64ff25bdf0b31ec5366dab55e219088',1,'sdr::SinkBase::handleBuffer()'],['../classsdr_1_1_sink.html#a25b0849e40053f87496ca72f8b8cd9e2',1,'sdr::Sink::handleBuffer()'],['../classsdr_1_1_proxy.html#a2fff7c978c2cf3e7e80a3eca7ea8a4f6',1,'sdr::Proxy::handleBuffer()'],['../classsdr_1_1_port_sink.html#a080e01c07a812fa597487a88bc99b196',1,'sdr::PortSink::handleBuffer()'],['../classsdr_1_1_unsigned_to_signed.html#a0d33c6c5e8cbfee5b549daa11263f471',1,'sdr::UnsignedToSigned::handleBuffer()'],['../classsdr_1_1_signed_to_unsigned.html#a45b29ca444478cb29c6faf119024efe6',1,'sdr::SignedToUnsigned::handleBuffer()']]], + ['has',['has',['../classsdr_1_1_options.html#a42f37b349c199d9a412e97cb0effea01',1,'sdr::Options']]], + ['hasbuffer',['hasBuffer',['../classsdr_1_1_buffer_set.html#a15907b5ea81bb34ed07a021b6b3de68b',1,'sdr::BufferSet']]], + ['hasbuffersize',['hasBufferSize',['../classsdr_1_1_config.html#a485e488e1411e52c722b22d1807be406',1,'sdr::Config']]], + ['hasinputstream',['hasInputStream',['../classsdr_1_1_port_audio.html#a3e2e0df7ad08bf37b0e436ffb68c36e2',1,'sdr::PortAudio']]], + ['hasnumbuffers',['hasNumBuffers',['../classsdr_1_1_config.html#af4b76131fb34e45cd417a242dc122dd4',1,'sdr::Config']]], + ['hasoutputstream',['hasOutputStream',['../classsdr_1_1_port_audio.html#a9c5fe4bf24d4876fe6a9a4c9c0a3f77e',1,'sdr::PortAudio']]], + ['hassamplerate',['hasSampleRate',['../classsdr_1_1_config.html#a5df3f75dcd6e678bd5f029a7400b404e',1,'sdr::Config::hasSampleRate()'],['../classsdr_1_1_port_source.html#a9e574984db12845def10240fb409a476',1,'sdr::PortSource::hasSampleRate()']]], + ['hastype',['hasType',['../classsdr_1_1_config.html#a7cdfc69aa8e3ab975db7251747343a20',1,'sdr::Config']]], + ['head',['head',['../classsdr_1_1_buffer.html#a3eca322ed118a7b5c4cc62b25ce5d119',1,'sdr::Buffer']]] +]; diff --git a/search/functions_9.html b/search/functions_9.html new file mode 100644 index 0000000..542b9e0 --- /dev/null +++ b/search/functions_9.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_9.js b/search/functions_9.js new file mode 100644 index 0000000..90941c5 --- /dev/null +++ b/search/functions_9.js @@ -0,0 +1,23 @@ +var searchData= +[ + ['imagpart',['ImagPart',['../classsdr_1_1_imag_part.html#ac72d38fd751b2dcfd999285e7ff84104',1,'sdr::ImagPart']]], + ['init',['init',['../classsdr_1_1_port_audio.html#aaec93bedb614d249c5d8f74138b55c3a',1,'sdr::PortAudio']]], + ['inpolsubsampler',['InpolSubSampler',['../classsdr_1_1_inpol_sub_sampler.html#a590caa51890f21695f0e2ab3baa72f4d',1,'sdr::InpolSubSampler']]], + ['instance',['instance',['../classsdr_1_1_delegate_interface.html#a0b1007766581eedcbf202ff76cee2cb4',1,'sdr::DelegateInterface::instance()'],['../classsdr_1_1_delegate.html#a99111db1a5bc61ec46456d132151f9c2',1,'sdr::Delegate::instance()']]], + ['interleave',['Interleave',['../classsdr_1_1_interleave.html#a63ac877ca74af78bfa15838bd6054d99',1,'sdr::Interleave']]], + ['iqbalance',['IQBalance',['../classsdr_1_1_i_q_balance.html#a0ed23d78d6d5cdd9130fb7fb08eefb02',1,'sdr::IQBalance']]], + ['iqbaseband',['IQBaseBand',['../classsdr_1_1_i_q_base_band.html#ac2ee96b0eac170f1a32d21f6a50ea799',1,'sdr::IQBaseBand::IQBaseBand(double Fc, double width, size_t order, size_t sub_sample, double oFs=0.0)'],['../classsdr_1_1_i_q_base_band.html#a797b04b4d9a44a10134408bcfb117228',1,'sdr::IQBaseBand::IQBaseBand(double Fc, double Ff, double width, size_t order, size_t sub_sample, double oFs=0.0)']]], + ['iqsiggen',['IQSigGen',['../classsdr_1_1_i_q_sig_gen.html#acedf832e6e71da70836b98bf8ec3fe38',1,'sdr::IQSigGen']]], + ['isactive',['isActive',['../classsdr_1_1_blocking_source.html#a982d9e5c670e2a738dd5ae3cc783c9ea',1,'sdr::BlockingSource']]], + ['isempty',['isEmpty',['../classsdr_1_1_raw_buffer.html#a944346de6bb972f687716bee921a3bad',1,'sdr::RawBuffer']]], + ['isenabled',['isEnabled',['../classsdr_1_1_f_m_deemph.html#a09465c706c213ac9d3c95617b8fde001',1,'sdr::FMDeemph']]], + ['isfloat',['isFloat',['../classsdr_1_1_options_1_1_value.html#a1b598a10284f1d79558b2681ad85e23d',1,'sdr::Options::Value']]], + ['isinteger',['isInteger',['../classsdr_1_1_options_1_1_value.html#a59b02e020546531e410d5f3f9b53b3e6',1,'sdr::Options::Value']]], + ['isnone',['isNone',['../classsdr_1_1_options_1_1_value.html#a645670bb3c4a4acad49195bb76a492e6',1,'sdr::Options::Value']]], + ['isopen',['isOpen',['../classsdr_1_1_wav_source.html#acc0a433ae943f3cba0aacecedca6290d',1,'sdr::WavSource']]], + ['isreal',['isReal',['../classsdr_1_1_wav_source.html#a5bf72cc575741d70749c25c017852e1d',1,'sdr::WavSource']]], + ['isrunning',['isRunning',['../classsdr_1_1_queue.html#a29564db70cb6f3a0cfd04a3cb95476e4',1,'sdr::Queue']]], + ['isstopped',['isStopped',['../classsdr_1_1_queue.html#ae6682efa4e7917e642e28f538310b65d',1,'sdr::Queue']]], + ['isstring',['isString',['../classsdr_1_1_options_1_1_value.html#a80c92fb288efdb2adaa85658f3644c0c',1,'sdr::Options::Value']]], + ['isunused',['isUnused',['../classsdr_1_1_raw_buffer.html#ab2f4ac2dc396108141ec8473bfb7f99a',1,'sdr::RawBuffer']]] +]; diff --git a/search/functions_a.html b/search/functions_a.html new file mode 100644 index 0000000..94fd395 --- /dev/null +++ b/search/functions_a.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_a.js b/search/functions_a.js new file mode 100644 index 0000000..8073a59 --- /dev/null +++ b/search/functions_a.js @@ -0,0 +1,9 @@ +var searchData= +[ + ['level',['level',['../classsdr_1_1_log_message.html#a83883fa8abbe500be6be276204475d22',1,'sdr::LogMessage']]], + ['log',['log',['../classsdr_1_1_logger.html#ab887e598a2c4dc1a3a3f1027d91e0e58',1,'sdr::Logger']]], + ['logger',['Logger',['../classsdr_1_1_logger.html#abc41bfb031d896170c7675fa96a6b30c',1,'sdr::Logger']]], + ['loghandler',['LogHandler',['../classsdr_1_1_log_handler.html#a59bd3b769913f4e599f0d7a46d9c7d9b',1,'sdr::LogHandler']]], + ['logmessage',['LogMessage',['../classsdr_1_1_log_message.html#af012dfe0e3585a4bf5af9bfa78d193fd',1,'sdr::LogMessage::LogMessage(LogLevel level, const std::string &msg="")'],['../classsdr_1_1_log_message.html#a389d0e1749674ff86dd22aedcfc2cdf2',1,'sdr::LogMessage::LogMessage(const LogMessage &other)']]], + ['lowerfreq',['lowerFreq',['../classsdr_1_1_f_i_r_filter.html#a9681c7d0e584a03c914897cb2fd1604f',1,'sdr::FIRFilter']]] +]; diff --git a/search/functions_b.html b/search/functions_b.html new file mode 100644 index 0000000..1a03617 --- /dev/null +++ b/search/functions_b.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_b.js b/search/functions_b.js new file mode 100644 index 0000000..025b625 --- /dev/null +++ b/search/functions_b.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['message',['message',['../classsdr_1_1_log_message.html#ab20d3bd794761d68f9449239b856fd53',1,'sdr::LogMessage::message()'],['../classsdr_1_1_queue_1_1_message.html#a69200e761a282cda093aec9b23d6febe',1,'sdr::Queue::Message::Message(const RawBuffer &buffer, SinkBase *sink, bool allow_overwrite)'],['../classsdr_1_1_queue_1_1_message.html#a3475f0dd585f7d92b21b70710ed1616e',1,'sdr::Queue::Message::Message(const Message &other)']]] +]; diff --git a/search/functions_c.html b/search/functions_c.html new file mode 100644 index 0000000..a6536e9 --- /dev/null +++ b/search/functions_c.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_c.js b/search/functions_c.js new file mode 100644 index 0000000..ebe6ee9 --- /dev/null +++ b/search/functions_c.js @@ -0,0 +1,10 @@ +var searchData= +[ + ['next',['next',['../classsdr_1_1_blocking_source.html#a41188f9ed0b1658908ef3bc6e62ffcce',1,'sdr::BlockingSource::next()'],['../classsdr_1_1_port_source.html#a956dbd9ff5ced54794cd5c2b67bb1826',1,'sdr::PortSource::next()'],['../classsdr_1_1_sig_gen.html#a89919ee99d3eb42c954c2b0fcb6f4085',1,'sdr::SigGen::next()'],['../classsdr_1_1_i_q_sig_gen.html#aaf8ff97c27d5c66472ef87b53f13cb48',1,'sdr::IQSigGen::next()'],['../classsdr_1_1_stream_source.html#ae3877a37e355e1a3668be5bfb0bcb004',1,'sdr::StreamSource::next()'],['../classsdr_1_1_g_w_n_source.html#a0216c5b6d8efeded627b030219858e8c',1,'sdr::GWNSource::next()'],['../classsdr_1_1_wav_source.html#a63d7f25aaf5817e834f9855a9be2a964',1,'sdr::WavSource::next()']]], + ['norm',['norm',['../classsdr_1_1_buffer.html#a8df39d602194a3294b6494698c5eac5b',1,'sdr::Buffer::norm() const '],['../classsdr_1_1_buffer.html#a13e1b6880ac7553e43a786ea6e71b945',1,'sdr::Buffer::norm(double p) const ']]], + ['norm2',['norm2',['../classsdr_1_1_buffer.html#adc13d307ada394c5d72bff1b23c67e45',1,'sdr::Buffer']]], + ['notifyconfig',['notifyConfig',['../classsdr_1_1_combine.html#ae9a58e1e60e3f8aeb7c99266504302ab',1,'sdr::Combine']]], + ['notifydata',['notifyData',['../classsdr_1_1_combine.html#a122bd26fcf778feb91b4304b3af7056c',1,'sdr::Combine']]], + ['numbuffers',['numBuffers',['../classsdr_1_1_config.html#a023ef493d310cfc8a304c2443c69fc51',1,'sdr::Config']]], + ['numdevices',['numDevices',['../classsdr_1_1_port_audio.html#a3cdb7755e7bd2a1e750b7a717a5bd946',1,'sdr::PortAudio::numDevices()'],['../classsdr_1_1_r_t_l_source.html#a547151ee7ec2d3da1285980b7dbf1664',1,'sdr::RTLSource::numDevices()']]] +]; diff --git a/search/functions_d.html b/search/functions_d.html new file mode 100644 index 0000000..8cdcc06 --- /dev/null +++ b/search/functions_d.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_d.js b/search/functions_d.js new file mode 100644 index 0000000..cc215bf --- /dev/null +++ b/search/functions_d.js @@ -0,0 +1,13 @@ +var searchData= +[ + ['open',['open',['../classsdr_1_1_wav_source.html#a4a0ad7997d3e663b939ef64818dfd24b',1,'sdr::WavSource']]], + ['operator_28_29',['operator()',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#a3b6086f568b216b7aae2f782a8aae4d5',1,'sdr::FFTPlan< double >::operator()()'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#a5c7f324250f043755028343aacbadb19',1,'sdr::FFTPlan< float >::operator()()'],['../classsdr_1_1_f_f_t_plan.html#a1cf4df7a8518971168efec090930a248',1,'sdr::FFTPlan::operator()()'],['../classsdr_1_1_delegate_interface.html#ab3308df8f5839554e754a713938d71b3',1,'sdr::DelegateInterface::operator()()'],['../classsdr_1_1_delegate.html#aac9c36c8ff5f1800965ce78813a6547f',1,'sdr::Delegate::operator()()']]], + ['operator_2a_3d',['operator*=',['../classsdr_1_1_buffer.html#aa01345df383500df3c889047c0f67c0f',1,'sdr::Buffer']]], + ['operator_2f_3d',['operator/=',['../classsdr_1_1_buffer.html#a7167b037ba6323ac4b10da8871174233',1,'sdr::Buffer']]], + ['operator_3c',['operator<',['../classsdr_1_1_buffer.html#adc798bffbe74b4878c7a7917e12e11d3',1,'sdr::Buffer']]], + ['operator_3d',['operator=',['../classsdr_1_1_raw_buffer.html#ad1723264fc54a81fcb90e640b296a2e6',1,'sdr::RawBuffer::operator=()'],['../classsdr_1_1_buffer.html#a7c366daba7c28c4142b71b64736076e4',1,'sdr::Buffer::operator=()'],['../classsdr_1_1_raw_ring_buffer.html#ad2e14fbe4f6e22e04e55f7ab930d3f52',1,'sdr::RawRingBuffer::operator=()'],['../classsdr_1_1_ring_buffer.html#a0756d690b16cd049f086ba5cb053820a',1,'sdr::RingBuffer::operator=()'],['../classsdr_1_1_config.html#ab2ebc320b1e83ce6913a00f67aa770db',1,'sdr::Config::operator=()'],['../classsdr_1_1_options_1_1_value.html#a9f30705a30b7dbb039717a83fa3e5d92',1,'sdr::Options::Value::operator=()'],['../classsdr_1_1_queue_1_1_message.html#a81ba08e644a4c224d395dff8524b2875',1,'sdr::Queue::Message::operator=()']]], + ['operator_3d_3d',['operator==',['../classsdr_1_1_config.html#a19d150520ec17818c2fc34717327b51f',1,'sdr::Config']]], + ['operator_5b_5d',['operator[]',['../classsdr_1_1_buffer.html#a4824f1dcfabdebab4d1ed2578a48f7c6',1,'sdr::Buffer::operator[]()'],['../classsdr_1_1_raw_ring_buffer.html#a622446adcd06185c645f94dfc4f8b457',1,'sdr::RawRingBuffer::operator[]()'],['../classsdr_1_1_ring_buffer.html#a0869367ba44452dd5111a7f329b48043',1,'sdr::RingBuffer::operator[]()']]], + ['options',['Options',['../classsdr_1_1_options.html#ab72fb640172a6109e34c8a5366563753',1,'sdr::Options']]], + ['order',['order',['../classsdr_1_1_i_q_base_band.html#a7abbe9bdb31179c75668b423114a6fd3',1,'sdr::IQBaseBand::order()'],['../classsdr_1_1_f_i_r_filter.html#a97fad5ad5e7d18085d4d6c6904154836',1,'sdr::FIRFilter::order()']]] +]; diff --git a/search/functions_e.html b/search/functions_e.html new file mode 100644 index 0000000..649b2c9 --- /dev/null +++ b/search/functions_e.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_e.js b/search/functions_e.js new file mode 100644 index 0000000..d1010c7 --- /dev/null +++ b/search/functions_e.js @@ -0,0 +1,12 @@ +var searchData= +[ + ['parse',['parse',['../classsdr_1_1_options.html#a8e2d6ea59da75b95d5b249a8db4ea0e2',1,'sdr::Options']]], + ['portsink',['PortSink',['../classsdr_1_1_port_sink.html#a07ddcbde693491c27ad2ef1831f0bc8d',1,'sdr::PortSink']]], + ['portsource',['PortSource',['../classsdr_1_1_port_source.html#a79e184b8673fad74860dcd7fa28df9cd',1,'sdr::PortSource']]], + ['print_5fhelp',['print_help',['../classsdr_1_1_options.html#a513891211cfd8459198d61aa9f896110',1,'sdr::Options']]], + ['process',['process',['../classsdr_1_1_i_q_base_band.html#a4add91f21932190fbe0473cfa4f9c1f7',1,'sdr::IQBaseBand::process()'],['../classsdr_1_1_base_band.html#a35bd6ce1dd4381f20bf5112e718c48f1',1,'sdr::BaseBand::process()'],['../classsdr_1_1_buffer_node.html#abb7d0d4724ccbc18e762c1b1d55d4d95',1,'sdr::BufferNode::process()'],['../classsdr_1_1_combine_sink.html#ad40f7f5a344a4e62db6f78e74e3f2bfe',1,'sdr::CombineSink::process()'],['../classsdr_1_1_combine.html#a7df4082b6b821c36fc61197b9bd561ae',1,'sdr::Combine::process()'],['../classsdr_1_1_interleave.html#a274faa3e0620ff05297809761a51aa85',1,'sdr::Interleave::process()'],['../classsdr_1_1_a_m_demod.html#a392ffdcfb0d482c9b502058e3465cdb5',1,'sdr::AMDemod::process()'],['../classsdr_1_1_u_s_b_demod.html#a136f465b83b4567091797c2d0a28f79f',1,'sdr::USBDemod::process()'],['../classsdr_1_1_f_m_demod.html#ad8d9f4f6914b534f520c5d2615f4ae12',1,'sdr::FMDemod::process()'],['../classsdr_1_1_f_m_deemph.html#a7523e82839cb9b84a4f638c14daeeba7',1,'sdr::FMDeemph::process()'],['../classsdr_1_1_filter_sink.html#aae6050776cbd6cdea85cd1ef368fa634',1,'sdr::FilterSink::process()'],['../classsdr_1_1_filter_source.html#a4bcb98c6b4146c8558e9de40b84dc318',1,'sdr::FilterSource::process()'],['../classsdr_1_1_f_i_r_filter.html#aa2247006714c239918245574605014b9',1,'sdr::FIRFilter::process()'],['../classsdr_1_1_sink.html#aaa6fa5f784d5f328fc9c4e7b241a03e9',1,'sdr::Sink::process()'],['../classsdr_1_1_b_p_s_k31.html#aab706f8a7b70b479213b7bbf9015643d',1,'sdr::BPSK31::process()'],['../classsdr_1_1_varicode.html#a8a6bb2547fe48e8994ae9d34afac375a',1,'sdr::Varicode::process()'],['../classsdr_1_1_sub_sample.html#abd849a63a5365bbbeb4d35eb78a542f2',1,'sdr::SubSample::process()'],['../classsdr_1_1_inpol_sub_sampler.html#a53524d887e696974493d5a74fae8cee7',1,'sdr::InpolSubSampler::process()'],['../classsdr_1_1_real_imag_part.html#ab71379580b5138b2c351da64c58253b3',1,'sdr::RealImagPart::process()'],['../classsdr_1_1_i_q_balance.html#a0a077f57ec502c76244863f1f940d028',1,'sdr::IQBalance::process()'],['../classsdr_1_1_to_complex.html#a7cd62714938db65f91578ad5042a4ed3',1,'sdr::ToComplex::process()'],['../classsdr_1_1_cast.html#a87fce857f7edce169b999d8362715a5b',1,'sdr::Cast::process()'],['../classsdr_1_1_freq_shift.html#aae47d9152dcbd9c40182c9cf319efdc9',1,'sdr::FreqShift::process()'],['../classsdr_1_1_stream_sink.html#a17eb7f702a5fef65bab33179322b4b3c',1,'sdr::StreamSink::process()'],['../classsdr_1_1_scale.html#a22c0cacdcec966a3aa2fa3f178fe168c',1,'sdr::Scale::process()'],['../classsdr_1_1_a_g_c.html#ac1f811db1e85281d33e10f63cd67f7f3',1,'sdr::AGC::process()'],['../classsdr_1_1_debug_store.html#ad4614b418a72ef58bdec3da66baa17b9',1,'sdr::DebugStore::process()'],['../classsdr_1_1_debug_dump.html#ac65877c52fea8c06101245541740a12a',1,'sdr::DebugDump::process()'],['../classsdr_1_1_wav_sink.html#a686354120df4484d2b9ec0aa7b8b5471',1,'sdr::WavSink::process()']]], + ['propagateconfig',['propagateConfig',['../classsdr_1_1_source.html#a3fbd9bdaf370acad141440388da2100c',1,'sdr::Source']]], + ['proxy',['Proxy',['../classsdr_1_1_proxy.html#a57825cd062ffde92f9380ea56d50fac2',1,'sdr::Proxy']]], + ['ptr',['ptr',['../classsdr_1_1_raw_buffer.html#a2384e82c2344e55b0246e8aebcd713f2',1,'sdr::RawBuffer']]], + ['put',['put',['../classsdr_1_1_raw_ring_buffer.html#afd4071b19ead6aea6a8903ada1e1e54a',1,'sdr::RawRingBuffer::put()'],['../classsdr_1_1_ring_buffer.html#a4ee71746961f5dbcfaec15edd74c1afd',1,'sdr::RingBuffer::put()']]] +]; diff --git a/search/functions_f.html b/search/functions_f.html new file mode 100644 index 0000000..386c7d4 --- /dev/null +++ b/search/functions_f.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/functions_f.js b/search/functions_f.js new file mode 100644 index 0000000..172d181 --- /dev/null +++ b/search/functions_f.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['queue',['Queue',['../classsdr_1_1_queue.html#a7cfca3637d57c4a9e37351b3426ffd40',1,'sdr::Queue']]] +]; diff --git a/search/mag_sel.png b/search/mag_sel.png new file mode 100644 index 0000000..81f6040 Binary files /dev/null and b/search/mag_sel.png differ diff --git a/search/nomatches.html b/search/nomatches.html new file mode 100644 index 0000000..b1ded27 --- /dev/null +++ b/search/nomatches.html @@ -0,0 +1,12 @@ + + + + + + + +
+
No Matches
+
+ + diff --git a/search/pages_0.html b/search/pages_0.html new file mode 100644 index 0000000..c51c834 --- /dev/null +++ b/search/pages_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/pages_0.js b/search/pages_0.js new file mode 100644 index 0000000..7dec624 --- /dev/null +++ b/search/pages_0.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['a_20c_2b_2b_20library_20for_20software_20defined_20radio_20_28sdr_29_2e',['A C++ library for software defined radio (SDR).',['../index.html',1,'']]] +]; diff --git a/search/pages_1.html b/search/pages_1.html new file mode 100644 index 0000000..2a98fce --- /dev/null +++ b/search/pages_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/pages_1.js b/search/pages_1.js new file mode 100644 index 0000000..8d42650 --- /dev/null +++ b/search/pages_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['bug_20list',['Bug List',['../bug.html',1,'']]] +]; diff --git a/search/pages_2.html b/search/pages_2.html new file mode 100644 index 0000000..0711a0b --- /dev/null +++ b/search/pages_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/pages_2.js b/search/pages_2.js new file mode 100644 index 0000000..038da54 --- /dev/null +++ b/search/pages_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['deprecated_20list',['Deprecated List',['../deprecated.html',1,'']]] +]; diff --git a/search/pages_3.html b/search/pages_3.html new file mode 100644 index 0000000..4310311 --- /dev/null +++ b/search/pages_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/pages_3.js b/search/pages_3.js new file mode 100644 index 0000000..441b2de --- /dev/null +++ b/search/pages_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['todo_20list',['Todo List',['../todo.html',1,'']]] +]; diff --git a/search/search.css b/search/search.css new file mode 100644 index 0000000..4d7612f --- /dev/null +++ b/search/search.css @@ -0,0 +1,271 @@ +/*---------------- Search Box */ + +#FSearchBox { + float: left; +} + +#MSearchBox { + white-space : nowrap; + position: absolute; + float: none; + display: inline; + margin-top: 8px; + right: 0px; + width: 170px; + z-index: 102; + background-color: white; +} + +#MSearchBox .left +{ + display:block; + position:absolute; + left:10px; + width:20px; + height:19px; + background:url('search_l.png') no-repeat; + background-position:right; +} + +#MSearchSelect { + display:block; + position:absolute; + width:20px; + height:19px; +} + +.left #MSearchSelect { + left:4px; +} + +.right #MSearchSelect { + right:5px; +} + +#MSearchField { + display:block; + position:absolute; + height:19px; + background:url('search_m.png') repeat-x; + border:none; + width:111px; + margin-left:20px; + padding-left:4px; + color: #909090; + outline: none; + font: 9pt Arial, Verdana, sans-serif; +} + +#FSearchBox #MSearchField { + margin-left:15px; +} + +#MSearchBox .right { + display:block; + position:absolute; + right:10px; + top:0px; + width:20px; + height:19px; + background:url('search_r.png') no-repeat; + background-position:left; +} + +#MSearchClose { + display: none; + position: absolute; + top: 4px; + background : none; + border: none; + margin: 0px 4px 0px 0px; + padding: 0px 0px; + outline: none; +} + +.left #MSearchClose { + left: 6px; +} + +.right #MSearchClose { + right: 2px; +} + +.MSearchBoxActive #MSearchField { + color: #000000; +} + +/*---------------- Search filter selection */ + +#MSearchSelectWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #90A5CE; + background-color: #F9FAFC; + z-index: 1; + padding-top: 4px; + padding-bottom: 4px; + -moz-border-radius: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + -webkit-border-bottom-left-radius: 4px; + -webkit-border-bottom-right-radius: 4px; + -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15); +} + +.SelectItem { + font: 8pt Arial, Verdana, sans-serif; + padding-left: 2px; + padding-right: 12px; + border: 0px; +} + +span.SelectionMark { + margin-right: 4px; + font-family: monospace; + outline-style: none; + text-decoration: none; +} + +a.SelectItem { + display: block; + outline-style: none; + color: #000000; + text-decoration: none; + padding-left: 6px; + padding-right: 12px; +} + +a.SelectItem:focus, +a.SelectItem:active { + color: #000000; + outline-style: none; + text-decoration: none; +} + +a.SelectItem:hover { + color: #FFFFFF; + background-color: #3D578C; + outline-style: none; + text-decoration: none; + cursor: pointer; + display: block; +} + +/*---------------- Search results window */ + +iframe#MSearchResults { + width: 60ex; + height: 15em; +} + +#MSearchResultsWindow { + display: none; + position: absolute; + left: 0; top: 0; + border: 1px solid #000; + background-color: #EEF1F7; +} + +/* ----------------------------------- */ + + +#SRIndex { + clear:both; + padding-bottom: 15px; +} + +.SREntry { + font-size: 10pt; + padding-left: 1ex; +} + +.SRPage .SREntry { + font-size: 8pt; + padding: 1px 5px; +} + +body.SRPage { + margin: 5px 2px; +} + +.SRChildren { + padding-left: 3ex; padding-bottom: .5em +} + +.SRPage .SRChildren { + display: none; +} + +.SRSymbol { + font-weight: bold; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRScope { + display: block; + color: #425E97; + font-family: Arial, Verdana, sans-serif; + text-decoration: none; + outline: none; +} + +a.SRSymbol:focus, a.SRSymbol:active, +a.SRScope:focus, a.SRScope:active { + text-decoration: underline; +} + +span.SRScope { + padding-left: 4px; +} + +.SRPage .SRStatus { + padding: 2px 5px; + font-size: 8pt; + font-style: italic; +} + +.SRResult { + display: none; +} + +DIV.searchresults { + margin-left: 10px; + margin-right: 10px; +} + +/*---------------- External search page results */ + +.searchresult { + background-color: #F0F3F8; +} + +.pages b { + color: white; + padding: 5px 5px 3px 5px; + background-image: url("../tab_a.png"); + background-repeat: repeat-x; + text-shadow: 0 1px 1px #000000; +} + +.pages { + line-height: 17px; + margin-left: 4px; + text-decoration: none; +} + +.hl { + font-weight: bold; +} + +#searchresults { + margin-bottom: 20px; +} + +.searchpages { + margin-top: 10px; +} + diff --git a/search/search.js b/search/search.js new file mode 100644 index 0000000..0654b99 --- /dev/null +++ b/search/search.js @@ -0,0 +1,807 @@ +// Search script generated by doxygen +// Copyright (C) 2009 by Dimitri van Heesch. + +// The code in this file is loosly based on main.js, part of Natural Docs, +// which is Copyright (C) 2003-2008 Greg Valure +// Natural Docs is licensed under the GPL. + +var indexSectionsWithContent = +{ + 0: "_abcdefghilmnopqrstuvw~", + 1: "abcdfgilmopqrstuvw", + 2: "_abcdefghilmnopqrstuvw~", + 3: "_hnst", + 4: "ciors", + 5: "adt", + 6: "afinst", + 7: "abdt" +}; + +var indexSectionNames = +{ + 0: "all", + 1: "classes", + 2: "functions", + 3: "variables", + 4: "typedefs", + 5: "enums", + 6: "enumvalues", + 7: "pages" +}; + +function convertToId(search) +{ + var result = ''; + for (i=0;i do a search + { + this.Search(); + } + } + + this.OnSearchSelectKey = function(evt) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==40 && this.searchIndex0) // Up + { + this.searchIndex--; + this.OnSelectItem(this.searchIndex); + } + else if (e.keyCode==13 || e.keyCode==27) + { + this.OnSelectItem(this.searchIndex); + this.CloseSelectionWindow(); + this.DOMSearchField().focus(); + } + return false; + } + + // --------- Actions + + // Closes the results window. + this.CloseResultsWindow = function() + { + this.DOMPopupSearchResultsWindow().style.display = 'none'; + this.DOMSearchClose().style.display = 'none'; + this.Activate(false); + } + + this.CloseSelectionWindow = function() + { + this.DOMSearchSelectWindow().style.display = 'none'; + } + + // Performs a search. + this.Search = function() + { + this.keyTimeout = 0; + + // strip leading whitespace + var searchValue = this.DOMSearchField().value.replace(/^ +/, ""); + + var code = searchValue.toLowerCase().charCodeAt(0); + var idxChar = searchValue.substr(0, 1).toLowerCase(); + if ( 0xD800 <= code && code <= 0xDBFF && searchValue > 1) // surrogate pair + { + idxChar = searchValue.substr(0, 2); + } + + var resultsPage; + var resultsPageWithSearch; + var hasResultsPage; + + var idx = indexSectionsWithContent[this.searchIndex].indexOf(idxChar); + if (idx!=-1) + { + var hexCode=idx.toString(16); + resultsPage = this.resultsPath + '/' + indexSectionNames[this.searchIndex] + '_' + hexCode + '.html'; + resultsPageWithSearch = resultsPage+'?'+escape(searchValue); + hasResultsPage = true; + } + else // nothing available for this search term + { + resultsPage = this.resultsPath + '/nomatches.html'; + resultsPageWithSearch = resultsPage; + hasResultsPage = false; + } + + window.frames.MSearchResults.location = resultsPageWithSearch; + var domPopupSearchResultsWindow = this.DOMPopupSearchResultsWindow(); + + if (domPopupSearchResultsWindow.style.display!='block') + { + var domSearchBox = this.DOMSearchBox(); + this.DOMSearchClose().style.display = 'inline'; + if (this.insideFrame) + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + domPopupSearchResultsWindow.style.position = 'relative'; + domPopupSearchResultsWindow.style.display = 'block'; + var width = document.body.clientWidth - 8; // the -8 is for IE :-( + domPopupSearchResultsWindow.style.width = width + 'px'; + domPopupSearchResults.style.width = width + 'px'; + } + else + { + var domPopupSearchResults = this.DOMPopupSearchResults(); + var left = getXPos(domSearchBox) + 150; // domSearchBox.offsetWidth; + var top = getYPos(domSearchBox) + 20; // domSearchBox.offsetHeight + 1; + domPopupSearchResultsWindow.style.display = 'block'; + left -= domPopupSearchResults.offsetWidth; + domPopupSearchResultsWindow.style.top = top + 'px'; + domPopupSearchResultsWindow.style.left = left + 'px'; + } + } + + this.lastSearchValue = searchValue; + this.lastResultsPage = resultsPage; + } + + // -------- Activation Functions + + // Activates or deactivates the search panel, resetting things to + // their default values if necessary. + this.Activate = function(isActive) + { + if (isActive || // open it + this.DOMPopupSearchResultsWindow().style.display == 'block' + ) + { + this.DOMSearchBox().className = 'MSearchBoxActive'; + + var searchField = this.DOMSearchField(); + + if (searchField.value == this.searchLabel) // clear "Search" term upon entry + { + searchField.value = ''; + this.searchActive = true; + } + } + else if (!isActive) // directly remove the panel + { + this.DOMSearchBox().className = 'MSearchBoxInactive'; + this.DOMSearchField().value = this.searchLabel; + this.searchActive = false; + this.lastSearchValue = '' + this.lastResultsPage = ''; + } + } +} + +// ----------------------------------------------------------------------- + +// The class that handles everything on the search results page. +function SearchResults(name) +{ + // The number of matches from the last run of . + this.lastMatchCount = 0; + this.lastKey = 0; + this.repeatOn = false; + + // Toggles the visibility of the passed element ID. + this.FindChildElement = function(id) + { + var parentElement = document.getElementById(id); + var element = parentElement.firstChild; + + while (element && element!=parentElement) + { + if (element.nodeName == 'DIV' && element.className == 'SRChildren') + { + return element; + } + + if (element.nodeName == 'DIV' && element.hasChildNodes()) + { + element = element.firstChild; + } + else if (element.nextSibling) + { + element = element.nextSibling; + } + else + { + do + { + element = element.parentNode; + } + while (element && element!=parentElement && !element.nextSibling); + + if (element && element!=parentElement) + { + element = element.nextSibling; + } + } + } + } + + this.Toggle = function(id) + { + var element = this.FindChildElement(id); + if (element) + { + if (element.style.display == 'block') + { + element.style.display = 'none'; + } + else + { + element.style.display = 'block'; + } + } + } + + // Searches for the passed string. If there is no parameter, + // it takes it from the URL query. + // + // Always returns true, since other documents may try to call it + // and that may or may not be possible. + this.Search = function(search) + { + if (!search) // get search word from URL + { + search = window.location.search; + search = search.substring(1); // Remove the leading '?' + search = unescape(search); + } + + search = search.replace(/^ +/, ""); // strip leading spaces + search = search.replace(/ +$/, ""); // strip trailing spaces + search = search.toLowerCase(); + search = convertToId(search); + + var resultRows = document.getElementsByTagName("div"); + var matches = 0; + + var i = 0; + while (i < resultRows.length) + { + var row = resultRows.item(i); + if (row.className == "SRResult") + { + var rowMatchName = row.id.toLowerCase(); + rowMatchName = rowMatchName.replace(/^sr\d*_/, ''); // strip 'sr123_' + + if (search.length<=rowMatchName.length && + rowMatchName.substr(0, search.length)==search) + { + row.style.display = 'block'; + matches++; + } + else + { + row.style.display = 'none'; + } + } + i++; + } + document.getElementById("Searching").style.display='none'; + if (matches == 0) // no results + { + document.getElementById("NoMatches").style.display='block'; + } + else // at least one result + { + document.getElementById("NoMatches").style.display='none'; + } + this.lastMatchCount = matches; + return true; + } + + // return the first item with index index or higher that is visible + this.NavNext = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index++; + } + return focusItem; + } + + this.NavPrev = function(index) + { + var focusItem; + while (1) + { + var focusName = 'Item'+index; + focusItem = document.getElementById(focusName); + if (focusItem && focusItem.parentNode.parentNode.style.display=='block') + { + break; + } + else if (!focusItem) // last element + { + break; + } + focusItem=null; + index--; + } + return focusItem; + } + + this.ProcessKeys = function(e) + { + if (e.type == "keydown") + { + this.repeatOn = false; + this.lastKey = e.keyCode; + } + else if (e.type == "keypress") + { + if (!this.repeatOn) + { + if (this.lastKey) this.repeatOn = true; + return false; // ignore first keypress after keydown + } + } + else if (e.type == "keyup") + { + this.lastKey = 0; + this.repeatOn = false; + } + return this.lastKey!=0; + } + + this.Nav = function(evt,itemIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + var newIndex = itemIndex-1; + var focusItem = this.NavPrev(newIndex); + if (focusItem) + { + var child = this.FindChildElement(focusItem.parentNode.parentNode.id); + if (child && child.style.display == 'block') // children visible + { + var n=0; + var tmpElem; + while (1) // search for last child + { + tmpElem = document.getElementById('Item'+newIndex+'_c'+n); + if (tmpElem) + { + focusItem = tmpElem; + } + else // found it! + { + break; + } + n++; + } + } + } + if (focusItem) + { + focusItem.focus(); + } + else // return focus to search field + { + parent.document.getElementById("MSearchField").focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = itemIndex+1; + var focusItem; + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem && elem.style.display == 'block') // children visible + { + focusItem = document.getElementById('Item'+itemIndex+'_c0'); + } + if (!focusItem) focusItem = this.NavNext(newIndex); + if (focusItem) focusItem.focus(); + } + else if (this.lastKey==39) // Right + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'block'; + } + else if (this.lastKey==37) // Left + { + var item = document.getElementById('Item'+itemIndex); + var elem = this.FindChildElement(item.parentNode.parentNode.id); + if (elem) elem.style.display = 'none'; + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } + + this.NavChild = function(evt,itemIndex,childIndex) + { + var e = (evt) ? evt : window.event; // for IE + if (e.keyCode==13) return true; + if (!this.ProcessKeys(e)) return false; + + if (this.lastKey==38) // Up + { + if (childIndex>0) + { + var newIndex = childIndex-1; + document.getElementById('Item'+itemIndex+'_c'+newIndex).focus(); + } + else // already at first child, jump to parent + { + document.getElementById('Item'+itemIndex).focus(); + } + } + else if (this.lastKey==40) // Down + { + var newIndex = childIndex+1; + var elem = document.getElementById('Item'+itemIndex+'_c'+newIndex); + if (!elem) // last child, jump to parent next parent + { + elem = this.NavNext(itemIndex+1); + } + if (elem) + { + elem.focus(); + } + } + else if (this.lastKey==27) // Escape + { + parent.searchBox.CloseResultsWindow(); + parent.document.getElementById("MSearchField").focus(); + } + else if (this.lastKey==13) // Enter + { + return true; + } + return false; + } +} + +function setKeyActions(elem,action) +{ + elem.setAttribute('onkeydown',action); + elem.setAttribute('onkeypress',action); + elem.setAttribute('onkeyup',action); +} + +function setClassAttr(elem,attr) +{ + elem.setAttribute('class',attr); + elem.setAttribute('className',attr); +} + +function createResults() +{ + var results = document.getElementById("SRResults"); + for (var e=0; e + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/typedefs_0.js b/search/typedefs_0.js new file mode 100644 index 0000000..6a5ec35 --- /dev/null +++ b/search/typedefs_0.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['cscalar',['CScalar',['../classsdr_1_1_i_q_base_band.html#ac8422d94925fc86974bf613f9584d9e7',1,'sdr::IQBaseBand::CScalar()'],['../classsdr_1_1_base_band.html#af431512cfeefa7687a381f2f4a89d48f',1,'sdr::BaseBand::CScalar()'],['../classsdr_1_1_u_s_b_demod.html#a57224082b72708511815a025a1f602b8',1,'sdr::USBDemod::CScalar()'],['../classsdr_1_1_freq_shift_base.html#aaabd2094734ce7479591569d6bd3ea7e',1,'sdr::FreqShiftBase::CScalar()']]], + ['csscalar',['CSScalar',['../classsdr_1_1_i_q_base_band.html#a562034e757c3c934c0d43d5e00cb85ce',1,'sdr::IQBaseBand::CSScalar()'],['../classsdr_1_1_base_band.html#a24238931b88dad7c83900efee6efd3d6',1,'sdr::BaseBand::CSScalar()'],['../classsdr_1_1_freq_shift_base.html#ae9142edde557f4987cfb035ab5d85e06',1,'sdr::FreqShiftBase::CSScalar()']]] +]; diff --git a/search/typedefs_1.html b/search/typedefs_1.html new file mode 100644 index 0000000..455fe2b --- /dev/null +++ b/search/typedefs_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/typedefs_1.js b/search/typedefs_1.js new file mode 100644 index 0000000..12db9f1 --- /dev/null +++ b/search/typedefs_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['isscalar',['iSScalar',['../classsdr_1_1_cast.html#a6d0afd25d2d0d2e0dd89dc1759a3f7b4',1,'sdr::Cast']]] +]; diff --git a/search/typedefs_2.html b/search/typedefs_2.html new file mode 100644 index 0000000..fac5dba --- /dev/null +++ b/search/typedefs_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/typedefs_2.js b/search/typedefs_2.js new file mode 100644 index 0000000..492b143 --- /dev/null +++ b/search/typedefs_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['osscalar',['oSScalar',['../classsdr_1_1_cast.html#a348bba2ba8a9312296d58427f0ef5674',1,'sdr::Cast']]] +]; diff --git a/search/typedefs_3.html b/search/typedefs_3.html new file mode 100644 index 0000000..9cb52e4 --- /dev/null +++ b/search/typedefs_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/typedefs_3.js b/search/typedefs_3.js new file mode 100644 index 0000000..c4db436 --- /dev/null +++ b/search/typedefs_3.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['rscalar',['RScalar',['../classsdr_1_1_traits_3_01uint8__t_01_4.html#a1de8e7c8d4f74504efa30dbf8583feea',1,'sdr::Traits< uint8_t >::RScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html#a32ff9e28255471e6bec69f7da45761bf',1,'sdr::Traits< std::complex< uint8_t > >::RScalar()'],['../classsdr_1_1_traits_3_01int8__t_01_4.html#a0f9fd3ed2f9d0007ad2f161fd33c8cb6',1,'sdr::Traits< int8_t >::RScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html#a83abf696ec4760daf07524e22bb3070d',1,'sdr::Traits< std::complex< int8_t > >::RScalar()'],['../classsdr_1_1_traits_3_01uint16__t_01_4.html#a143aa2faff12897677877d0a305924f4',1,'sdr::Traits< uint16_t >::RScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html#a21a48f2328238e11bc735f8d1c199145',1,'sdr::Traits< std::complex< uint16_t > >::RScalar()'],['../classsdr_1_1_traits_3_01int16__t_01_4.html#a0b13ba8f410005b27f657ec59478282a',1,'sdr::Traits< int16_t >::RScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html#ae474db53d39cd48eef8e70c5163a1d37',1,'sdr::Traits< std::complex< int16_t > >::RScalar()'],['../classsdr_1_1_traits_3_01float_01_4.html#a2fe3ac0732b73b35c0c99a2a8c367b40',1,'sdr::Traits< float >::RScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html#aab96c69e8f9c02fcfe49855e056eb89d',1,'sdr::Traits< std::complex< float > >::RScalar()'],['../classsdr_1_1_traits_3_01double_01_4.html#a91bb965aeb1aae9d2b8e3504ea8fbae1',1,'sdr::Traits< double >::RScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html#a02524eae226e91daa624f64ba0360588',1,'sdr::Traits< std::complex< double > >::RScalar()']]] +]; diff --git a/search/typedefs_4.html b/search/typedefs_4.html new file mode 100644 index 0000000..64c6cce --- /dev/null +++ b/search/typedefs_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/typedefs_4.js b/search/typedefs_4.js new file mode 100644 index 0000000..c4f3e50 --- /dev/null +++ b/search/typedefs_4.js @@ -0,0 +1,5 @@ +var searchData= +[ + ['scalar',['Scalar',['../classsdr_1_1_traits_3_01uint8__t_01_4.html#a99103e507dfadcc72399be2d4704ea3b',1,'sdr::Traits< uint8_t >::Scalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html#a717e05e65c30028a566e630b1abb06ff',1,'sdr::Traits< std::complex< uint8_t > >::Scalar()'],['../classsdr_1_1_traits_3_01int8__t_01_4.html#a4754153fd42feeffe2b0799b36b6f769',1,'sdr::Traits< int8_t >::Scalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html#aaca99ca5fa20911b04da96449afe28c8',1,'sdr::Traits< std::complex< int8_t > >::Scalar()'],['../classsdr_1_1_traits_3_01uint16__t_01_4.html#a88d8fddbc034af2c6ff550fe22aa3697',1,'sdr::Traits< uint16_t >::Scalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html#a8a7100b15f3424692dd4507148d86725',1,'sdr::Traits< std::complex< uint16_t > >::Scalar()'],['../classsdr_1_1_traits_3_01int16__t_01_4.html#ae9099d40f118f875b033884e6e3ad3d5',1,'sdr::Traits< int16_t >::Scalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html#a1176d48404f60df5db4ecb77d1646f07',1,'sdr::Traits< std::complex< int16_t > >::Scalar()'],['../classsdr_1_1_traits_3_01float_01_4.html#a5a89f919fea9d771f6320a7c938fd922',1,'sdr::Traits< float >::Scalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html#aaf4716088eec8f5d9b91ff7fd68e6660',1,'sdr::Traits< std::complex< float > >::Scalar()'],['../classsdr_1_1_traits_3_01double_01_4.html#aff7a0a7ffa15c25b4455f83dcf836715',1,'sdr::Traits< double >::Scalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html#a987f55798d4d12e7b495033eeda23934',1,'sdr::Traits< std::complex< double > >::Scalar()']]], + ['sscalar',['SScalar',['../classsdr_1_1_i_q_base_band.html#ae916b696954ddf0f93fdd9d98398b01d',1,'sdr::IQBaseBand::SScalar()'],['../classsdr_1_1_base_band.html#a6e17045e3d019be6518d9f4be7de5b66',1,'sdr::BaseBand::SScalar()'],['../classsdr_1_1_u_s_b_demod.html#a2674638bcd3acfbda9d64a45fa6ba0cf',1,'sdr::USBDemod::SScalar()'],['../classsdr_1_1_f_m_demod.html#a0481ffd7d460540b4832546bfc3c8126',1,'sdr::FMDemod::SScalar()'],['../classsdr_1_1_f_f_t_plan.html#a3640c788bea68b27772771b9d73653b9',1,'sdr::FFTPlan::SScalar()'],['../classsdr_1_1_freq_shift_base.html#af613bd56b0ccf4532fb729aaaca959e7',1,'sdr::FreqShiftBase::SScalar()'],['../classsdr_1_1_sub_sample.html#ac87d15135a8ec7be826b3371aa6ce016',1,'sdr::SubSample::SScalar()'],['../classsdr_1_1_frac_sub_sample_base.html#ac10da92570b7c169095388951a90282b',1,'sdr::FracSubSampleBase::SScalar()'],['../classsdr_1_1_traits_3_01uint8__t_01_4.html#adda52d55c735633d87bdcaf97ee87d20',1,'sdr::Traits< uint8_t >::SScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html#a2e47757cf0de4866c358c2d93c3acba6',1,'sdr::Traits< std::complex< uint8_t > >::SScalar()'],['../classsdr_1_1_traits_3_01int8__t_01_4.html#a6f15f99ae9e8bc3f4aee73d837e53275',1,'sdr::Traits< int8_t >::SScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html#a9a1db5ee3605f5fdc28d198d8d8c45cf',1,'sdr::Traits< std::complex< int8_t > >::SScalar()'],['../classsdr_1_1_traits_3_01uint16__t_01_4.html#afc00377467d267fd814fb4f7bae1b3e5',1,'sdr::Traits< uint16_t >::SScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html#ad78bbb1f762e3f2eb122b8b75afafcd3',1,'sdr::Traits< std::complex< uint16_t > >::SScalar()'],['../classsdr_1_1_traits_3_01int16__t_01_4.html#a2baeeac5d7f984b86e3de564f4724160',1,'sdr::Traits< int16_t >::SScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html#a22f8c74d48349465555c6d6c983a4192',1,'sdr::Traits< std::complex< int16_t > >::SScalar()'],['../classsdr_1_1_traits_3_01float_01_4.html#ae1ac6f8551b36aedf5c66c1b3b6b58ea',1,'sdr::Traits< float >::SScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html#a8fbe8a5520ad9dacf2cff93c8855408a',1,'sdr::Traits< std::complex< float > >::SScalar()'],['../classsdr_1_1_traits_3_01double_01_4.html#a34e6dc159ed80b15fd2ff95aadf6d891',1,'sdr::Traits< double >::SScalar()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html#a95f5fffbf6b2111b00c17cc28f57513b',1,'sdr::Traits< std::complex< double > >::SScalar()'],['../classsdr_1_1_i_q_balance.html#a547a6def95efec1987ca5ed8f5a79326',1,'sdr::IQBalance::SScalar()']]] +]; diff --git a/search/variables_0.html b/search/variables_0.html new file mode 100644 index 0000000..1b8adc9 --- /dev/null +++ b/search/variables_0.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_0.js b/search/variables_0.js new file mode 100644 index 0000000..f3df3ae --- /dev/null +++ b/search/variables_0.js @@ -0,0 +1,152 @@ +var searchData= +[ + ['_5fagc_5fenabled',['_agc_enabled',['../classsdr_1_1_r_t_l_source.html#aacba577d0db6a112a1599ce97c507ac6',1,'sdr::RTLSource']]], + ['_5fallow_5foverwrite',['_allow_overwrite',['../classsdr_1_1_queue_1_1_message.html#ace94bf2702c9a1590b4c1257cbec0dee',1,'sdr::Queue::Message']]], + ['_5falpha',['_alpha',['../classsdr_1_1_f_m_deemph.html#af36a535927f6395e4540ae956574e223',1,'sdr::FMDeemph::_alpha()'],['../classsdr_1_1_f_i_r_filter.html#ab9642beb28d53e0da14e78c903a16c88',1,'sdr::FIRFilter::_alpha()'],['../classsdr_1_1_b_p_s_k31.html#a5840fa06ad5ab371d8cb720ebef3d283',1,'sdr::BPSK31::_alpha()']]], + ['_5favg',['_avg',['../classsdr_1_1_f_m_deemph.html#afd042cc162b75603454ea8c943d38900',1,'sdr::FMDeemph::_avg()'],['../classsdr_1_1_frac_sub_sample_base.html#a115e6e3fd14cabc4669fa63d0f47c4d5',1,'sdr::FracSubSampleBase::_avg()']]], + ['_5fb_5flength',['_b_length',['../classsdr_1_1_raw_buffer.html#aa14cbd626cb63e4fffc080ddbe14120d',1,'sdr::RawBuffer']]], + ['_5fb_5foffset',['_b_offset',['../classsdr_1_1_raw_buffer.html#a4ff93265c612917548b5b9e27e729c83',1,'sdr::RawBuffer']]], + ['_5fb_5fstored',['_b_stored',['../classsdr_1_1_raw_ring_buffer.html#aa83b365b78b6a2e4a4f05169685b80c2',1,'sdr::RawRingBuffer']]], + ['_5fbeta',['_beta',['../classsdr_1_1_b_p_s_k31.html#a0688ca26994611e997248184f585ac70',1,'sdr::BPSK31']]], + ['_5fbitspersample',['_bitsPerSample',['../classsdr_1_1_wav_sink.html#ac61fd2be2b4320ab0d1639c1ca7d151f',1,'sdr::WavSink']]], + ['_5fblock_5fsize',['_block_size',['../classsdr_1_1_filter_sink.html#aa5cc8d6c36634fef76a79440d52260ad',1,'sdr::FilterSink::_block_size()'],['../classsdr_1_1_filter_source.html#ab0b14caa4e639acb94d0312f4635059e',1,'sdr::FilterSource::_block_size()'],['../classsdr_1_1_filter_node.html#ac8394452dd15c25bd497310777c2d8b5',1,'sdr::FilterNode::_block_size()']]], + ['_5fbuffer',['_buffer',['../classsdr_1_1_auto_cast.html#a20df99da53913cc217c65023fb7bc247',1,'sdr::AutoCast::_buffer()'],['../classsdr_1_1_i_q_base_band.html#ac5b28b7664a51c300ded740850f5e8a6',1,'sdr::IQBaseBand::_buffer()'],['../classsdr_1_1_base_band.html#a4d421c04c1b8f61361522eddd5e401e7',1,'sdr::BaseBand::_buffer()'],['../classsdr_1_1_combine_sink.html#a0cd59909ace71173d1c0d2df2049b473',1,'sdr::CombineSink::_buffer()'],['../classsdr_1_1_interleave.html#a18974fc85ea24f83dbb18610a6070564',1,'sdr::Interleave::_buffer()'],['../classsdr_1_1_a_m_demod.html#a6ee7ca724827bbcb1df39f94e04ffa4e',1,'sdr::AMDemod::_buffer()'],['../classsdr_1_1_u_s_b_demod.html#a02f4e2b68146d92357e21b8a6bd9eb80',1,'sdr::USBDemod::_buffer()'],['../classsdr_1_1_f_m_demod.html#a0ce0a86d6f854a551fa0b5015c7a54c9',1,'sdr::FMDemod::_buffer()'],['../classsdr_1_1_f_m_deemph.html#acf6fbe76f109f5a892c9f4eb0bdd5159',1,'sdr::FMDeemph::_buffer()'],['../classsdr_1_1_filter_node.html#af6632c647ccb2726713df21603e662d9',1,'sdr::FilterNode::_buffer()'],['../classsdr_1_1_f_i_r_filter.html#a6f8f3db14310d350b5bffb6499513b1b',1,'sdr::FIRFilter::_buffer()'],['../classsdr_1_1_port_source.html#af4875056f3b373dd947453156fd944b6',1,'sdr::PortSource::_buffer()'],['../classsdr_1_1_b_p_s_k31.html#a612d180c1f6d289dd2f5a21fb15566d1',1,'sdr::BPSK31::_buffer()'],['../classsdr_1_1_varicode.html#aa0477054e352fe806e1b6f80a27a2549',1,'sdr::Varicode::_buffer()'],['../classsdr_1_1_queue_1_1_message.html#a920ee574314cfa09d49b423c90e45674',1,'sdr::Queue::Message::_buffer()'],['../classsdr_1_1_sig_gen.html#aa546f62fa4a6d6e27d3a5ce65d7fef5f',1,'sdr::SigGen::_buffer()'],['../classsdr_1_1_i_q_sig_gen.html#abb68fab0ced366cc8a7f4e9fc2ad28ad',1,'sdr::IQSigGen::_buffer()'],['../classsdr_1_1_sub_sample.html#a4f62f6f07ef3f2199c41b79081d8011b',1,'sdr::SubSample::_buffer()'],['../classsdr_1_1_inpol_sub_sampler.html#a899e34cc809b40fe64361d3e22fbd67e',1,'sdr::InpolSubSampler::_buffer()'],['../classsdr_1_1_real_imag_part.html#acd2bc9b8566fcddc0bf80a877bcebdfc',1,'sdr::RealImagPart::_buffer()'],['../classsdr_1_1_i_q_balance.html#aefff792d62de2b41b22fbc9ae86ea0c3',1,'sdr::IQBalance::_buffer()'],['../classsdr_1_1_to_complex.html#accdf35c4a20d7b22c9db4a43c6f1b2ba',1,'sdr::ToComplex::_buffer()'],['../classsdr_1_1_cast.html#a0c462ab540ab0df43a62c16717298fd7',1,'sdr::Cast::_buffer()'],['../classsdr_1_1_unsigned_to_signed.html#a3cc3c87952251d8fa523e226d4f99d0b',1,'sdr::UnsignedToSigned::_buffer()'],['../classsdr_1_1_signed_to_unsigned.html#a4d88721f8a5dd40c39621b4bf3a574bd',1,'sdr::SignedToUnsigned::_buffer()'],['../classsdr_1_1_freq_shift.html#a3ba4c6fd7e064c599a393b1d6dc0e2cc',1,'sdr::FreqShift::_buffer()'],['../classsdr_1_1_stream_source.html#a73ba741b0802a7ddbcdb351166238415',1,'sdr::StreamSource::_buffer()'],['../classsdr_1_1_scale.html#af753a012e62924527c29e3d15fc8e2b3',1,'sdr::Scale::_buffer()'],['../classsdr_1_1_a_g_c.html#af8e3c300e5a264a568ed9b18a0c1b02e',1,'sdr::AGC::_buffer()'],['../classsdr_1_1_debug_store.html#adb09b528eaa679d15bb695b100e5fd2a',1,'sdr::DebugStore::_buffer()'],['../classsdr_1_1_g_w_n_source.html#ad1dc4b69edc21b6f95d35de9e21cd275',1,'sdr::GWNSource::_buffer()'],['../classsdr_1_1_wav_source.html#a8ff2d8552444854f58818ee8c3abc88b',1,'sdr::WavSource::_buffer()']]], + ['_5fbuffer_5fsize',['_buffer_size',['../classsdr_1_1_r_t_l_source.html#aa483814f66474e4e988f38a0f1673520',1,'sdr::RTLSource::_buffer_size()'],['../classsdr_1_1_g_w_n_source.html#a3aec2ae939e55cf83a35fe85e3502f18',1,'sdr::GWNSource::_buffer_size()'],['../classsdr_1_1_wav_source.html#a2396f50de268fe1a126555f5e9144a1d',1,'sdr::WavSource::_buffer_size()']]], + ['_5fbuffers',['_buffers',['../classsdr_1_1_buffer_set.html#aa1f0fa97d1b819c03fbc5cb1ec2bd56b',1,'sdr::BufferSet::_buffers()'],['../classsdr_1_1_combine.html#a46442ff7ace056d83ed22fcabe3b9caa',1,'sdr::Combine::_buffers()'],['../classsdr_1_1_filter_source.html#affa0031e5136becba16e7c87ea7b3f3a',1,'sdr::FilterSource::_buffers()']]], + ['_5fbufferset',['_bufferSet',['../classsdr_1_1_buffer_node.html#a50fe21ba7349e28eb8c05b6bf65b9968',1,'sdr::BufferNode']]], + ['_5fbuffersize',['_bufferSize',['../classsdr_1_1_buffer_set.html#a4e40fee0411c0cce0d6706e7d606ac5e',1,'sdr::BufferSet::_bufferSize()'],['../classsdr_1_1_buffer_node.html#a1b8c539b97c3180c6e6155a63248443b',1,'sdr::BufferNode::_bufferSize()'],['../classsdr_1_1_config.html#a6985335c5c05e0a947e1d658321d2a49',1,'sdr::Config::_bufferSize()'],['../classsdr_1_1_sig_gen.html#aed3d1542ccb10ed878ba5000415334f3',1,'sdr::SigGen::_bufferSize()'],['../classsdr_1_1_i_q_sig_gen.html#a44e7c74ce49f90f55054c0856659e8f1',1,'sdr::IQSigGen::_bufferSize()']]], + ['_5fc_5f0t',['_c_0T',['../classsdr_1_1_b_p_s_k31.html#a4071742bae6cc43656d05dc375e309fc',1,'sdr::BPSK31']]], + ['_5fc_5f1t',['_c_1T',['../classsdr_1_1_b_p_s_k31.html#a16efac49cb378741c6c9162012029355',1,'sdr::BPSK31']]], + ['_5fc_5f2t',['_c_2T',['../classsdr_1_1_b_p_s_k31.html#a0b548185b5057602c3dbe975fbf7dc89',1,'sdr::BPSK31']]], + ['_5fcan_5foverwrite',['_can_overwrite',['../classsdr_1_1_f_m_demod.html#abba89674656a69fb3e68725ede2f7f29',1,'sdr::FMDemod::_can_overwrite()'],['../classsdr_1_1_cast.html#a76cdb3ac362446ec8a351f4621cd47dd',1,'sdr::Cast::_can_overwrite()']]], + ['_5fcast',['_cast',['../classsdr_1_1_auto_cast.html#a4677ef8e89a3258772edf36a91c76f3c',1,'sdr::AutoCast']]], + ['_5fcode_5ftable',['_code_table',['../classsdr_1_1_varicode.html#ab5116289591398976643bb79baadfcf6',1,'sdr::Varicode']]], + ['_5fconfig',['_config',['../classsdr_1_1_combine.html#a6b25fb98f4cfc8956b00ecb6f48ce5ff',1,'sdr::Combine::_config()'],['../classsdr_1_1_source.html#ac7ea547c33d45cf5b5654ce21957ab27',1,'sdr::Source::_config()']]], + ['_5fdelta',['_delta',['../classsdr_1_1_freq_shift.html#a3a7dcad74e53d7c193221e069abe090c',1,'sdr::FreqShift']]], + ['_5fdevice',['_device',['../classsdr_1_1_r_t_l_source.html#a993dab73333abe82ca3460a7691f6a36',1,'sdr::RTLSource']]], + ['_5fdeviceindex',['_deviceIndex',['../classsdr_1_1_port_source.html#a580cb416af502286a00414f1d8f5c40e',1,'sdr::PortSource']]], + ['_5fdl',['_dl',['../classsdr_1_1_b_p_s_k31.html#a99f0eb17cf4fedd7be540c213e3867aa',1,'sdr::BPSK31::_dl()'],['../classsdr_1_1_inpol_sub_sampler.html#ac08c976f927fc2719e193231c80d5577',1,'sdr::InpolSubSampler::_dl()']]], + ['_5fdl_5fidx',['_dl_idx',['../classsdr_1_1_b_p_s_k31.html#ac66bb680fd30fd4f135702605ae89757',1,'sdr::BPSK31::_dl_idx()'],['../classsdr_1_1_inpol_sub_sampler.html#aff4ebce508c557dcaf12684f06406773',1,'sdr::InpolSubSampler::_dl_idx()']]], + ['_5fdo_5fscale',['_do_scale',['../classsdr_1_1_cast.html#abf6ebc0370f338cdf861efd30cc354ec',1,'sdr::Cast']]], + ['_5fdt',['_dt',['../classsdr_1_1_sig_gen.html#a56921f73161095d549a6b92a7afef11d',1,'sdr::SigGen::_dt()'],['../classsdr_1_1_i_q_sig_gen.html#ac5c559287e23478dcde72a3b13e96f7e',1,'sdr::IQSigGen::_dt()']]], + ['_5fenabled',['_enabled',['../classsdr_1_1_f_m_deemph.html#a7be9defbf55abcd863db899e8afea501',1,'sdr::FMDeemph::_enabled()'],['../classsdr_1_1_f_i_r_filter.html#a72d1e0297c601f479ed46a46519fb502',1,'sdr::FIRFilter::_enabled()'],['../classsdr_1_1_a_g_c.html#a8554d5134e0f0160289db46ebe66314d',1,'sdr::AGC::_enabled()']]], + ['_5feos',['_eos',['../classsdr_1_1_source.html#aee600dc30d6f91466acec5ffcde0f3ac',1,'sdr::Source']]], + ['_5ff',['_F',['../classsdr_1_1_b_p_s_k31.html#a4e13fe56c1136046637e1ece07f35f89',1,'sdr::BPSK31']]], + ['_5ffactor',['_factor',['../classsdr_1_1_freq_shift.html#a43aa0216b57d389293956bbc737cb415',1,'sdr::FreqShift']]], + ['_5ffc',['_Fc',['../classsdr_1_1_i_q_base_band.html#a43381aa4a16574e5b054cf73bfd492e7',1,'sdr::IQBaseBand']]], + ['_5fff',['_Ff',['../classsdr_1_1_i_q_base_band.html#a45a6cf70c24d876f6ba49f3ff6c33346',1,'sdr::IQBaseBand::_Ff()'],['../classsdr_1_1_base_band.html#ad82f571c95904676f3e41aad3894d0f4',1,'sdr::BaseBand::_Ff()']]], + ['_5ffft_5ffwd',['_fft_fwd',['../classsdr_1_1_filter_node.html#a5fa231d790ab7f72e5f8dd13b1e92897',1,'sdr::FilterNode']]], + ['_5ffile',['_file',['../classsdr_1_1_wav_sink.html#a833f921f2220b876f678ed5978bbe962',1,'sdr::WavSink::_file()'],['../classsdr_1_1_wav_source.html#a42f0fff8f62da96bc6703c3fe03ec2ad',1,'sdr::WavSource::_file()']]], + ['_5ffilters',['_filters',['../classsdr_1_1_filter_node.html#ab0888f91626b189cf00f9ba01b8e3a3d',1,'sdr::FilterNode']]], + ['_5ffl',['_Fl',['../classsdr_1_1_f_i_r_filter.html#a3e661ccb9bcdabd926f5e529f6d4dc2d',1,'sdr::FIRFilter']]], + ['_5ffmax',['_fmax',['../classsdr_1_1_filter_source.html#a918cb8387d026ae922582d3f105cff76',1,'sdr::FilterSource::_fmax()'],['../classsdr_1_1_b_p_s_k31.html#a106fd36dcef5ebb97c70b2e7145a2f73',1,'sdr::BPSK31::_Fmax()']]], + ['_5ffmin',['_fmin',['../classsdr_1_1_filter_source.html#afb6a987c3726d7559893e141afd342bc',1,'sdr::FilterSource::_fmin()'],['../classsdr_1_1_b_p_s_k31.html#a3cbb35d4aee991bf3be8137f2218f0dd',1,'sdr::BPSK31::_Fmin()']]], + ['_5ffmt',['_fmt',['../classsdr_1_1_port_source.html#a6b117cef08484042585e32f7ecc1acb7',1,'sdr::PortSource']]], + ['_5ffrac',['_frac',['../classsdr_1_1_inpol_sub_sampler.html#aadf9f91f6296bbe71d48e6f9673e0105',1,'sdr::InpolSubSampler']]], + ['_5fframe_5fcount',['_frame_count',['../classsdr_1_1_wav_source.html#a6cddd3386d7aa0bb2fda9c61596d1adf',1,'sdr::WavSource']]], + ['_5fframe_5fsize',['_frame_size',['../classsdr_1_1_port_sink.html#a110e4fb11c1637fc7ff94389d684cda3',1,'sdr::PortSink']]], + ['_5fframecount',['_frameCount',['../classsdr_1_1_wav_sink.html#a436d25284e3d73f71844c5bc6d587a83',1,'sdr::WavSink']]], + ['_5fframes_5fleft',['_frames_left',['../classsdr_1_1_wav_source.html#a42f770909d7a1324039957d3b2be5027',1,'sdr::WavSource']]], + ['_5ffree_5fbuffers',['_free_buffers',['../classsdr_1_1_buffer_set.html#afcc2d267bac67e0de7450d7a520e4439',1,'sdr::BufferSet']]], + ['_5ffreq_5fshift',['_freq_shift',['../classsdr_1_1_freq_shift_base.html#ac8e562910ad6622842b2a3f56fe1c32c',1,'sdr::FreqShiftBase']]], + ['_5ffrequency',['_frequency',['../classsdr_1_1_r_t_l_source.html#aaecce2d8124feada4ae22ec5e99c8e34',1,'sdr::RTLSource']]], + ['_5ffs',['_Fs',['../classsdr_1_1_i_q_base_band.html#acc93c5f88ac3bf10614c6aab09727edd',1,'sdr::IQBaseBand::_Fs()'],['../classsdr_1_1_f_i_r_filter.html#ad7caee7b3f07e5e38956ffc014d5baa6',1,'sdr::FIRFilter::_Fs()'],['../classsdr_1_1_freq_shift_base.html#a3ae11faa2285a87e4de1e4d1d3211d03',1,'sdr::FreqShiftBase::_Fs()']]], + ['_5ffu',['_Fu',['../classsdr_1_1_f_i_r_filter.html#a8246c325efe878771231ee1e10e03ed8',1,'sdr::FIRFilter']]], + ['_5ffunction',['_function',['../classsdr_1_1_delegate.html#a5ffa9250f1da96b4a555d4b519112880',1,'sdr::Delegate']]], + ['_5fgain',['_gain',['../classsdr_1_1_a_g_c.html#afb650299c4ce14a6452eaa51963a78e2',1,'sdr::AGC']]], + ['_5fgain_5fmu',['_gain_mu',['../classsdr_1_1_b_p_s_k31.html#a40a278099c4100e6d04053f97fe310d8',1,'sdr::BPSK31']]], + ['_5fgain_5fomega',['_gain_omega',['../classsdr_1_1_b_p_s_k31.html#a7365c27f5eb587af4a9a97731d2fdff8',1,'sdr::BPSK31']]], + ['_5fgains',['_gains',['../classsdr_1_1_r_t_l_source.html#a43d46e099e14c740cd72b25eb3cddbb1',1,'sdr::RTLSource']]], + ['_5fhandler',['_handler',['../classsdr_1_1_logger.html#a41eae9cb41b7808da70728b0817c2076',1,'sdr::Logger']]], + ['_5fhist',['_hist',['../classsdr_1_1_b_p_s_k31.html#aab684b2c77f69551f81e6134ee4ca7da',1,'sdr::BPSK31']]], + ['_5fhist_5fidx',['_hist_idx',['../classsdr_1_1_b_p_s_k31.html#abc76ab3fa3638e4d0b1f29eadd2b1e10',1,'sdr::BPSK31']]], + ['_5fidle',['_idle',['../classsdr_1_1_queue.html#a31f323fab261acd8456b68dc6ed188bf',1,'sdr::Queue']]], + ['_5fimagfact',['_imagFact',['../classsdr_1_1_i_q_balance.html#aa0624e0e246cc184f69273e5b034675a',1,'sdr::IQBalance']]], + ['_5fin',['_in',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#a7e0a792771ed0ecffead52c82d617107',1,'sdr::FFTPlan< double >::_in()'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#acd1ef620ab77c9a1be3c61eb45eb7d44',1,'sdr::FFTPlan< float >::_in()'],['../classsdr_1_1_f_f_t_plan.html#a52e13675a3b936b977df3edc5c132c87',1,'sdr::FFTPlan::_in()']]], + ['_5fin_5fbuffer',['_in_buffer',['../classsdr_1_1_filter_sink.html#a4b0a1b1eb672a3c7994feeb2c135dfb3',1,'sdr::FilterSink::_in_buffer()'],['../classsdr_1_1_filter_source.html#addfd0c3ab6775a252059e7aa1e7b61f7',1,'sdr::FilterSource::_in_buffer()']]], + ['_5findex',['_index',['../classsdr_1_1_combine_sink.html#a89e22e19450bfc3b8625d74fdc90dc92',1,'sdr::CombineSink']]], + ['_5finstance',['_instance',['../classsdr_1_1_logger.html#a3477ad7e31f05db92807692445a2670d',1,'sdr::Logger::_instance()'],['../classsdr_1_1_delegate.html#ad8db0139eda95e8256df178ad151b8aa',1,'sdr::Delegate::_instance()']]], + ['_5fis_5factive',['_is_active',['../classsdr_1_1_blocking_source.html#a47c22cd9fc949b7745279970d26c9008',1,'sdr::BlockingSource']]], + ['_5fis_5fparallel',['_is_parallel',['../classsdr_1_1_blocking_source.html#a0dba272393a870e9cfd2934a9737fb0a',1,'sdr::BlockingSource']]], + ['_5fis_5freal',['_is_real',['../classsdr_1_1_port_source.html#acf00e7c85d2e1d56409b7ff26d65b4c5',1,'sdr::PortSource']]], + ['_5fkern',['_kern',['../classsdr_1_1_filter_source.html#ac4f73d688fdd6c2cf787c050d09b1d74',1,'sdr::FilterSource']]], + ['_5fkernel',['_kernel',['../classsdr_1_1_i_q_base_band.html#acc734a115e0fb90882efe4f9037e2933',1,'sdr::IQBaseBand::_kernel()'],['../classsdr_1_1_base_band.html#a615a720afff59af2135d4d6fb926fbf5',1,'sdr::BaseBand::_kernel()']]], + ['_5flambda',['_lambda',['../classsdr_1_1_a_g_c.html#a1242cabb99a9c5ce1565aac5b0d49c58',1,'sdr::AGC']]], + ['_5flast',['_last',['../classsdr_1_1_i_q_base_band.html#aa6a60f7aa8cd3a67cc7170198f11a14c',1,'sdr::IQBaseBand::_last()'],['../classsdr_1_1_base_band.html#ad2574c8b23dc9b60944f0253825f0af8',1,'sdr::BaseBand::_last()'],['../classsdr_1_1_sub_sample.html#a103f68ddb3f7d6ff00ad00769508e6ef',1,'sdr::SubSample::_last()']]], + ['_5flast_5fconstellation',['_last_constellation',['../classsdr_1_1_b_p_s_k31.html#adaba010c7d0c74e28c719054d0c0f44f',1,'sdr::BPSK31']]], + ['_5flast_5ftrafo',['_last_trafo',['../classsdr_1_1_filter_source.html#a3f6a037eef3366aaeb887fafd08cb6d8',1,'sdr::FilterSource']]], + ['_5flast_5fvalue',['_last_value',['../classsdr_1_1_f_m_demod.html#a8678f4589d7c1d02e9690162b4227b65',1,'sdr::FMDemod']]], + ['_5fleft',['_left',['../classsdr_1_1_sub_sample.html#a9624a4aa7a367b12262069abea312f36',1,'sdr::SubSample']]], + ['_5flevel',['_level',['../classsdr_1_1_log_message.html#af6a4f1af32cf1fca7a4c7af1b0397226',1,'sdr::LogMessage::_level()'],['../classsdr_1_1_stream_log_handler.html#a72d772134ed966c6debb6e64ec157bd7',1,'sdr::StreamLogHandler::_level()']]], + ['_5flut',['_lut',['../classsdr_1_1_base_band.html#aab790a4c39ab63becd65ba1970b48ebe',1,'sdr::BaseBand::_lut()'],['../classsdr_1_1_f_f_t_plan.html#ae9a3563521774be6b902dd67005c26d2',1,'sdr::FFTPlan::_lut()'],['../classsdr_1_1_freq_shift_base.html#ade47bb8ec78af5fca20385fb4f37d5df',1,'sdr::FreqShiftBase::_lut()']]], + ['_5flut_5fcount',['_lut_count',['../classsdr_1_1_base_band.html#afffcd2c96c4e2917d4dd60f2049fab64',1,'sdr::BaseBand::_lut_count()'],['../classsdr_1_1_freq_shift_base.html#aea542686459b7a93ade63a14d09a839e',1,'sdr::FreqShiftBase::_lut_count()']]], + ['_5flut_5finc',['_lut_inc',['../classsdr_1_1_base_band.html#af0533d9636f4acf0863693ce2eb7e08e',1,'sdr::BaseBand::_lut_inc()'],['../classsdr_1_1_freq_shift_base.html#a5e660571870e06094d3c14137d2a2028',1,'sdr::FreqShiftBase::_lut_inc()']]], + ['_5flut_5fsize',['_lut_size',['../classsdr_1_1_base_band.html#ab9673003415f11a53470e39dba82e099',1,'sdr::BaseBand::_lut_size()'],['../classsdr_1_1_freq_shift_base.html#a9d83444915779715665337c03697b517',1,'sdr::FreqShiftBase::_lut_size()']]], + ['_5fmax_5fomega',['_max_omega',['../classsdr_1_1_b_p_s_k31.html#aca8de3ffeaec1ef562d26b55447cc37c',1,'sdr::BPSK31']]], + ['_5fmean',['_mean',['../classsdr_1_1_g_w_n_source.html#a376a552d03b41d7062c4101ece4ddeb7',1,'sdr::GWNSource']]], + ['_5fmin_5fomega',['_min_omega',['../classsdr_1_1_b_p_s_k31.html#aae86fc72e6e69cd5f3ec383c1c58dd36',1,'sdr::BPSK31']]], + ['_5fmu',['_mu',['../classsdr_1_1_b_p_s_k31.html#a4c54a851adee3e49f8d1bf377f78c220',1,'sdr::BPSK31::_mu()'],['../classsdr_1_1_inpol_sub_sampler.html#a0b282aab60784e2d3d81528db07d7c8e',1,'sdr::InpolSubSampler::_mu()']]], + ['_5fn',['_n',['../classsdr_1_1_sub_sample.html#ad3127d84e3a0d1e64f02d5eeba31526d',1,'sdr::SubSample::_n()'],['../classsdr_1_1_interleave.html#a41d7277b1f858e7e26ed2aaebcc2a9c8',1,'sdr::Interleave::_N()'],['../classsdr_1_1_f_f_t_plan.html#a89e50030f9bec2fc66ef18564b3fa49e',1,'sdr::FFTPlan::_N()']]], + ['_5fnumbuffers',['_numBuffers',['../classsdr_1_1_config.html#a272eaf73bc71aefa8137fadddf547db6',1,'sdr::Config']]], + ['_5fnumchanels',['_numChanels',['../classsdr_1_1_wav_sink.html#aaa77d25b30620ca3cba6a2e795d1e855',1,'sdr::WavSink']]], + ['_5fofs',['_oFs',['../classsdr_1_1_i_q_base_band.html#a0e5a1ce6011ddb1de0c661d1e2354b7c',1,'sdr::IQBaseBand::_oFs()'],['../classsdr_1_1_sub_sample.html#a477e48ecf9300c57df07557925af0aae',1,'sdr::SubSample::_oFs()']]], + ['_5fomega',['_omega',['../classsdr_1_1_b_p_s_k31.html#a5470329484c6ffb1b3d2a084d7a7fc64',1,'sdr::BPSK31']]], + ['_5fomega_5frel',['_omega_rel',['../classsdr_1_1_b_p_s_k31.html#a694edbdce37208b475d545c5be610161',1,'sdr::BPSK31']]], + ['_5fonstart',['_onStart',['../classsdr_1_1_queue.html#a778063ea21baba61c0e2ede519fb0da8',1,'sdr::Queue']]], + ['_5fonstop',['_onStop',['../classsdr_1_1_queue.html#a88450462f8ca5c2a68bdee5e88ae6768',1,'sdr::Queue']]], + ['_5foptions',['_options',['../classsdr_1_1_options.html#ae59c6b922121a19ff9ad59200b51f48c',1,'sdr::Options']]], + ['_5forder',['_order',['../classsdr_1_1_i_q_base_band.html#a37078c6a2799c118c0892fbdd6968e0c',1,'sdr::IQBaseBand::_order()'],['../classsdr_1_1_base_band.html#adc54207b20067fd43fb61f89e5a720e1',1,'sdr::BaseBand::_order()'],['../classsdr_1_1_f_i_r_filter.html#af3fa19a8ce102614bf261b4e58134b01',1,'sdr::FIRFilter::_order()']]], + ['_5fout',['_out',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#a4f006a3ff002e57646b47a47e15177bf',1,'sdr::FFTPlan< double >::_out()'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#a10c55ea7cf4286140ea66d529ad56c2a',1,'sdr::FFTPlan< float >::_out()'],['../classsdr_1_1_f_f_t_plan.html#a58b32e87e4b7bf0f7e6a1ec270c748a3',1,'sdr::FFTPlan::_out()']]], + ['_5fout_5fbuffer',['_out_buffer',['../classsdr_1_1_filter_sink.html#ae48100343288c6f7eff25cd1462215ed',1,'sdr::FilterSink']]], + ['_5fowner',['_owner',['../classsdr_1_1_raw_buffer.html#a3127de65087a2e2260d53c28616089bc',1,'sdr::RawBuffer']]], + ['_5fp',['_P',['../classsdr_1_1_b_p_s_k31.html#ade59846cb15dbe988a7238ed598df9a3',1,'sdr::BPSK31']]], + ['_5fp_5f0t',['_p_0T',['../classsdr_1_1_b_p_s_k31.html#a36a15215bd1ca9ff77ed24007026897c',1,'sdr::BPSK31']]], + ['_5fp_5f1t',['_p_1T',['../classsdr_1_1_b_p_s_k31.html#a9176a05d6e8f1cd3f566df0e8710d0a3',1,'sdr::BPSK31']]], + ['_5fp_5f2t',['_p_2T',['../classsdr_1_1_b_p_s_k31.html#aaff3323641cbe2ec6f6c821fc688df4d',1,'sdr::BPSK31']]], + ['_5fparent',['_parent',['../classsdr_1_1_combine_sink.html#a3237dac67dfc266e3dee4a6da9ce86ce',1,'sdr::CombineSink']]], + ['_5fperiod',['_period',['../classsdr_1_1_frac_sub_sample_base.html#a3ed0ad8fe1fbbb652cb11975aa1f9220',1,'sdr::FracSubSampleBase']]], + ['_5fplan',['_plan',['../classsdr_1_1_f_f_t_plan_3_01double_01_4.html#a7da6ed898ae917a9d249b9ab026fe754',1,'sdr::FFTPlan< double >::_plan()'],['../classsdr_1_1_f_f_t_plan_3_01float_01_4.html#a5932b9331a8977462bc77e2eb20fbede',1,'sdr::FFTPlan< float >::_plan()'],['../classsdr_1_1_filter_sink.html#a84f020c44d3affe66382e16df0db3ef8',1,'sdr::FilterSink::_plan()'],['../classsdr_1_1_filter_source.html#a07e4f06f35b5406f7862d6a8b4bef533',1,'sdr::FilterSource::_plan()']]], + ['_5fprocess',['_process',['../classsdr_1_1_unsigned_to_signed.html#acb1a98e5c458a8512f093e6f94ef4153',1,'sdr::UnsignedToSigned::_process()'],['../classsdr_1_1_signed_to_unsigned.html#a565b29d0368fba94c752b1c761fca3f3',1,'sdr::SignedToUnsigned::_process()']]], + ['_5fptr',['_ptr',['../classsdr_1_1_raw_buffer.html#add2d96bdd2f1d7229c980a20b388e4dd',1,'sdr::RawBuffer']]], + ['_5fqueue',['_queue',['../classsdr_1_1_queue.html#ae686ad5be0afd27a38a1b8d3d15e08c3',1,'sdr::Queue']]], + ['_5fqueue_5fcond',['_queue_cond',['../classsdr_1_1_queue.html#afd7a65823156e0d1a4512542674883a4',1,'sdr::Queue']]], + ['_5fqueue_5flock',['_queue_lock',['../classsdr_1_1_queue.html#a258a5d1adc7edb81cebf19470a55d646',1,'sdr::Queue']]], + ['_5frealfact',['_realFact',['../classsdr_1_1_i_q_balance.html#aab10690f6088fdcd79ab8b11b71d3fb1',1,'sdr::IQBalance']]], + ['_5frefcount',['_refcount',['../classsdr_1_1_raw_buffer.html#abb345679b48051ba741887b194e93c1c',1,'sdr::RawBuffer']]], + ['_5fring',['_ring',['../classsdr_1_1_i_q_base_band.html#a51e65ca8d52b7f933b1fcb92f679a1e0',1,'sdr::IQBaseBand::_ring()'],['../classsdr_1_1_base_band.html#aa2f45ff7e2ef122c59874cedaa4aaf5f',1,'sdr::BaseBand::_ring()'],['../classsdr_1_1_f_i_r_filter.html#a74c56d78d4e7fbb6fa20eaf9d284494b',1,'sdr::FIRFilter::_ring()']]], + ['_5fring_5foffset',['_ring_offset',['../classsdr_1_1_i_q_base_band.html#a1bbc86d2b25e284ec2e3c4ad9cf658e7',1,'sdr::IQBaseBand::_ring_offset()'],['../classsdr_1_1_base_band.html#af2cabe70849fbf9da652c5ae3e5585a6',1,'sdr::BaseBand::_ring_offset()'],['../classsdr_1_1_f_i_r_filter.html#aaad38be5e520d03c50877f94dfe19725',1,'sdr::FIRFilter::_ring_offset()']]], + ['_5frunning',['_running',['../classsdr_1_1_queue.html#a737a26f99e37b820256f1116f58c5f12',1,'sdr::Queue']]], + ['_5fsample_5fcount',['_sample_count',['../classsdr_1_1_i_q_base_band.html#a27657f14e40d2d7fbb9b8d965083e7cf',1,'sdr::IQBaseBand::_sample_count()'],['../classsdr_1_1_base_band.html#a7fbe83bf8cd4ba081296116e16b9f698',1,'sdr::BaseBand::_sample_count()'],['../classsdr_1_1_frac_sub_sample_base.html#a3908cb97d6b862c99a10b34ef84ae817',1,'sdr::FracSubSampleBase::_sample_count()']]], + ['_5fsample_5frate',['_sample_rate',['../classsdr_1_1_filter_source.html#a171e2c01f2259b02be63170e0ea28033',1,'sdr::FilterSource::_sample_rate()'],['../classsdr_1_1_filter_node.html#ad2b27f79cb8472e5a1a4f2993d4c1d9e',1,'sdr::FilterNode::_sample_rate()'],['../classsdr_1_1_r_t_l_source.html#aff177370aee15feb02b7962774e306b6',1,'sdr::RTLSource::_sample_rate()'],['../classsdr_1_1_freq_shift.html#ae8b6f7658eeed069a77d4ed998a85bde',1,'sdr::FreqShift::_sample_rate()'],['../classsdr_1_1_a_g_c.html#aec81c9b69ebb847516e27f8fed0c92ae',1,'sdr::AGC::_sample_rate()'],['../classsdr_1_1_g_w_n_source.html#a4ce174e09f78cd1f6b27dcb0a832dc44',1,'sdr::GWNSource::_sample_rate()'],['../classsdr_1_1_wav_source.html#a803c46ff54124dfeae2dcf5f345d7b09',1,'sdr::WavSource::_sample_rate()']]], + ['_5fsamplerate',['_sampleRate',['../classsdr_1_1_config.html#a9547c7c2cd25efde4c2f64b367d287cb',1,'sdr::Config::_sampleRate()'],['../classsdr_1_1_port_source.html#aa710e7498cf6fe7423aa382e610cdfe7',1,'sdr::PortSource::_sampleRate()'],['../classsdr_1_1_sig_gen.html#ab5e7158fea455f2bc39ef8eb3cbb5f73',1,'sdr::SigGen::_sampleRate()'],['../classsdr_1_1_i_q_sig_gen.html#a4e612b880736efe6840ce639293803a7',1,'sdr::IQSigGen::_sampleRate()'],['../classsdr_1_1_wav_sink.html#a39c4470a68702b523acb3529fffea96e',1,'sdr::WavSink::_sampleRate()']]], + ['_5fsamplesleft',['_samplesLeft',['../classsdr_1_1_buffer_node.html#ace6451c9fe46e682742911b9dc3aa6e9',1,'sdr::BufferNode']]], + ['_5fscale',['_scale',['../classsdr_1_1_sig_gen.html#aa93ae70c7407f7a21db6bc1558b1e524',1,'sdr::SigGen::_scale()'],['../classsdr_1_1_i_q_sig_gen.html#a9de3f71a911474ecaa219387fe686916',1,'sdr::IQSigGen::_scale()'],['../classsdr_1_1_real_imag_part.html#ab0c78ce9e462059be02dfd38aefdc52f',1,'sdr::RealImagPart::_scale()'],['../classsdr_1_1_to_complex.html#a40dbe4df970113fab71aaf4150d6c648',1,'sdr::ToComplex::_scale()'],['../classsdr_1_1_cast.html#a23bee3cb921304367906cfacba00914b',1,'sdr::Cast::_scale()'],['../classsdr_1_1_unsigned_to_signed.html#af1580673231b72102b11e3defee63bee',1,'sdr::UnsignedToSigned::_scale()'],['../classsdr_1_1_freq_shift.html#a8e4ce9a7cb2b81b88cfc4f75f5ebc6a9',1,'sdr::FreqShift::_scale()'],['../classsdr_1_1_scale.html#aa5e3017fda68332c67ac0cf84bfdd260',1,'sdr::Scale::_scale()']]], + ['_5fsd',['_sd',['../classsdr_1_1_a_g_c.html#a1723d92b909754ad0ce7636cabd65076',1,'sdr::AGC']]], + ['_5fselect_5freal',['_select_real',['../classsdr_1_1_real_imag_part.html#adb9159445d2a383cd72c94d405c6debb',1,'sdr::RealImagPart']]], + ['_5fshift',['_shift',['../classsdr_1_1_f_m_demod.html#a82781f8d9631106089841545c9796f8c',1,'sdr::FMDemod::_shift()'],['../classsdr_1_1_cast.html#aab41bbc2d49266be3a42ac2f6c5685a8',1,'sdr::Cast::_shift()'],['../classsdr_1_1_freq_shift.html#a806ffc298da46fad3a1a057e19a61db1',1,'sdr::FreqShift::_shift()'],['../classsdr_1_1_scale.html#a6040d1d6f88868a90ea39ab05aafd6ee',1,'sdr::Scale::_shift()']]], + ['_5fshift_5ffreq',['_shift_freq',['../classsdr_1_1_base_band.html#a3190f860e84dbe6eb8a4fa55e5a19b42',1,'sdr::BaseBand']]], + ['_5fsignals',['_signals',['../classsdr_1_1_sig_gen.html#a22453551d22b2db778dff5edb47856ab',1,'sdr::SigGen::_signals()'],['../classsdr_1_1_i_q_sig_gen.html#a6b3ad712c7f874ae85a903671d0e16ac',1,'sdr::IQSigGen::_signals()']]], + ['_5fsink',['_sink',['../classsdr_1_1_queue_1_1_message.html#a0dac26785e72edd9cb7154ca1f265353',1,'sdr::Queue::Message']]], + ['_5fsinks',['_sinks',['../classsdr_1_1_combine.html#a2bbe7c33dac4827b42eae989b9b0d505',1,'sdr::Combine::_sinks()'],['../classsdr_1_1_source.html#a2d030b840c4a1ad45d7a6598f9f582b9',1,'sdr::Source::_sinks()']]], + ['_5fsize',['_size',['../classsdr_1_1_buffer.html#aa6c46a40790972e318be202f9c9e3f63',1,'sdr::Buffer::_size()'],['../classsdr_1_1_ring_buffer.html#a5b0e525f4c6191d8c8d24da46eb5384d',1,'sdr::RingBuffer::_size()']]], + ['_5fsourcebs',['_sourceBs',['../classsdr_1_1_i_q_base_band.html#a777b755a8230ea494f7bac5ff98c4e20',1,'sdr::IQBaseBand']]], + ['_5fstorage_5fsize',['_storage_size',['../classsdr_1_1_raw_buffer.html#a101a2f2a11976504d8782b8e952f289d',1,'sdr::RawBuffer']]], + ['_5fstored',['_stored',['../classsdr_1_1_ring_buffer.html#ad4a1a9131befb84f2288dd0f45e89dc8',1,'sdr::RingBuffer']]], + ['_5fstream',['_stream',['../classsdr_1_1_stream_log_handler.html#a2cb2c121e94b12e098e9b9a751967def',1,'sdr::StreamLogHandler::_stream()'],['../classsdr_1_1_port_sink.html#a13ef6bcf81b5d490bf33241efcb7d157',1,'sdr::PortSink::_stream()'],['../classsdr_1_1_port_source.html#ad09e69cd96993d8963e46e4d2a87a967',1,'sdr::PortSource::_stream()'],['../classsdr_1_1_stream_source.html#a7108de045b76348e4df87eb9500c1cf2',1,'sdr::StreamSource::_stream()'],['../classsdr_1_1_stream_sink.html#af206a47a032f79ba38923c7f1e511450',1,'sdr::StreamSink::_stream()'],['../classsdr_1_1_debug_dump.html#a5bc2bcd87d1188ec321b51c27c78e0ea',1,'sdr::DebugDump::_stream()']]], + ['_5fstreamisopen',['_streamIsOpen',['../classsdr_1_1_port_source.html#a29c6c91a2f98159a58a9535c8c6dfeb5',1,'sdr::PortSource']]], + ['_5fsub_5fsample',['_sub_sample',['../classsdr_1_1_i_q_base_band.html#a2ddc881b31b6142d53486d1d2110841c',1,'sdr::IQBaseBand::_sub_sample()'],['../classsdr_1_1_base_band.html#a8f612b4bacf93e8fa290bb2752a35735',1,'sdr::BaseBand::_sub_sample()']]], + ['_5fsupersample',['_superSample',['../classsdr_1_1_b_p_s_k31.html#a271efce529e564fe4255862f41137662',1,'sdr::BPSK31']]], + ['_5ft',['_t',['../classsdr_1_1_sig_gen.html#acc6e02b40efd978aa75841ca80e169f0',1,'sdr::SigGen::_t()'],['../classsdr_1_1_i_q_sig_gen.html#a6604987b78ee11f911768cbc6cfe0f64',1,'sdr::IQSigGen::_t()']]], + ['_5ftake_5fidx',['_take_idx',['../classsdr_1_1_raw_ring_buffer.html#a62b8711073973314e044e52607eeed6a',1,'sdr::RawRingBuffer']]], + ['_5ftarget',['_target',['../classsdr_1_1_a_g_c.html#a8155580ed50faab0c458b4461430ee5c',1,'sdr::AGC']]], + ['_5ftau',['_tau',['../classsdr_1_1_a_g_c.html#ab569653f091eda6bf11174d3e8cfa9ae',1,'sdr::AGC']]], + ['_5ftemp',['_temp',['../classsdr_1_1_buffer_node.html#ad3b1f7333d120b68ef817ab040915c68',1,'sdr::BufferNode']]], + ['_5ftheta',['_theta',['../classsdr_1_1_b_p_s_k31.html#abba53fd1265a1e8d1286ea0fb45d2e94',1,'sdr::BPSK31']]], + ['_5fthread',['_thread',['../classsdr_1_1_blocking_source.html#a6395ea6ce34f3db1dadba775af35fd5f',1,'sdr::BlockingSource::_thread()'],['../classsdr_1_1_queue.html#ac9e0bc546b7bd19be55140d2bcec535a',1,'sdr::Queue::_thread()'],['../classsdr_1_1_r_t_l_source.html#a6f4e7644090786d6d83d91fbb7a430a2',1,'sdr::RTLSource::_thread()']]], + ['_5ftmax',['_tMax',['../classsdr_1_1_sig_gen.html#adf316314416047feb32c6b0582250c20',1,'sdr::SigGen::_tMax()'],['../classsdr_1_1_i_q_sig_gen.html#a988e5b23f1dc32fbd00128a4d8a366be',1,'sdr::IQSigGen::_tMax()']]], + ['_5ftrafo_5fbuffer',['_trafo_buffer',['../classsdr_1_1_filter_source.html#a967b9c6420c17c4a4c216ba7814c8230',1,'sdr::FilterSource']]], + ['_5ftype',['_type',['../classsdr_1_1_config.html#aca928dd7fdd6e83f882aa57d16e923f3',1,'sdr::Config::_type()'],['../classsdr_1_1_options_1_1_value.html#aa92742ca1a84741e1565c68249abf041',1,'sdr::Options::Value::_type()'],['../classsdr_1_1_wav_source.html#a6b27bd80779e95de3ca034f368964cdf',1,'sdr::WavSource::_type()']]], + ['_5fvalue',['_value',['../classsdr_1_1_options_1_1_value.html#acda594feba20f8a625cc4fe6964b88d0',1,'sdr::Options::Value::_value()'],['../classsdr_1_1_varicode.html#a162dfe8dd1ae552e64ca87ac3dee6edc',1,'sdr::Varicode::_value()']]], + ['_5fview',['_view',['../classsdr_1_1_debug_store.html#ae50fa8b237a4f4db86829bad5b862a17',1,'sdr::DebugStore']]], + ['_5fwidth',['_width',['../classsdr_1_1_i_q_base_band.html#abd62f27924fe4bd0dff0ad75f312584b',1,'sdr::IQBaseBand::_width()'],['../classsdr_1_1_base_band.html#a586aef87dd64f94f9c377b45575681eb',1,'sdr::BaseBand::_width()']]] +]; diff --git a/search/variables_1.html b/search/variables_1.html new file mode 100644 index 0000000..78f63cd --- /dev/null +++ b/search/variables_1.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_1.js b/search/variables_1.js new file mode 100644 index 0000000..3978289 --- /dev/null +++ b/search/variables_1.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['help',['help',['../structsdr_1_1_options_1_1_definition.html#a155078c7926934c3ae49100aa88ee1ee',1,'sdr::Options::Definition']]] +]; diff --git a/search/variables_2.html b/search/variables_2.html new file mode 100644 index 0000000..ea80d20 --- /dev/null +++ b/search/variables_2.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_2.js b/search/variables_2.js new file mode 100644 index 0000000..88d882b --- /dev/null +++ b/search/variables_2.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['name',['name',['../structsdr_1_1_options_1_1_definition.html#a31ac625050a465d6eefa5a6876a8a232',1,'sdr::Options::Definition']]] +]; diff --git a/search/variables_3.html b/search/variables_3.html new file mode 100644 index 0000000..0dca26f --- /dev/null +++ b/search/variables_3.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_3.js b/search/variables_3.js new file mode 100644 index 0000000..e8514fe --- /dev/null +++ b/search/variables_3.js @@ -0,0 +1,7 @@ +var searchData= +[ + ['scalarid',['scalarId',['../classsdr_1_1_traits_3_01uint8__t_01_4.html#a89e2ef0e1fab866d401487041ee84330',1,'sdr::Traits< uint8_t >::scalarId()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html#a869d8b912392b79e2ac01a7083af1b67',1,'sdr::Traits< std::complex< uint8_t > >::scalarId()'],['../classsdr_1_1_traits_3_01int8__t_01_4.html#acebb260f88b477e1be6c440c70425ba5',1,'sdr::Traits< int8_t >::scalarId()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html#a1f6552335b6ffc24c656ac2d0dba59ba',1,'sdr::Traits< std::complex< int8_t > >::scalarId()'],['../classsdr_1_1_traits_3_01uint16__t_01_4.html#a41d9a7869a8c332eecd601e5635a5a7b',1,'sdr::Traits< uint16_t >::scalarId()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html#a0b4d91ce868bcc7fe07b2d4af0220c07',1,'sdr::Traits< std::complex< uint16_t > >::scalarId()'],['../classsdr_1_1_traits_3_01int16__t_01_4.html#a5d8358ee74417e7f9315166b46612a25',1,'sdr::Traits< int16_t >::scalarId()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html#ab72033b20413f21ef9bb662d2d1473ab',1,'sdr::Traits< std::complex< int16_t > >::scalarId()'],['../classsdr_1_1_traits_3_01float_01_4.html#aad204365b6177029346d806c1dfeaa11',1,'sdr::Traits< float >::scalarId()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html#a5a88c67053d0059fbaf3119cdea53e81',1,'sdr::Traits< std::complex< float > >::scalarId()'],['../classsdr_1_1_traits_3_01double_01_4.html#a76e091b4d439be325326b3d68366116d',1,'sdr::Traits< double >::scalarId()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html#a3539553e4fad45367be10aa81dfda487',1,'sdr::Traits< std::complex< double > >::scalarId()']]], + ['scale',['scale',['../classsdr_1_1_traits_3_01uint8__t_01_4.html#a0e1a7a08571e6ba453f46eacf6404fd8',1,'sdr::Traits< uint8_t >::scale()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html#ada8db008e1e84ccfb12f5228b38eaf11',1,'sdr::Traits< std::complex< uint8_t > >::scale()'],['../classsdr_1_1_traits_3_01int8__t_01_4.html#a61d9eb303aa7eea6f26f7dbe3b885313',1,'sdr::Traits< int8_t >::scale()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html#a5c485671457a4f6b3101403efe4aaac7',1,'sdr::Traits< std::complex< int8_t > >::scale()'],['../classsdr_1_1_traits_3_01uint16__t_01_4.html#abfcdf445b6ba1e1d775328a2d7a89669',1,'sdr::Traits< uint16_t >::scale()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html#aabe0027c715f4263aa47d5c8246701d2',1,'sdr::Traits< std::complex< uint16_t > >::scale()'],['../classsdr_1_1_traits_3_01int16__t_01_4.html#aaffacbbd5e63ae796c60064f36bf7722',1,'sdr::Traits< int16_t >::scale()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html#a7bf925c7d7f3f93676f285aa1e5e6914',1,'sdr::Traits< std::complex< int16_t > >::scale()'],['../classsdr_1_1_traits_3_01float_01_4.html#a76598a7171a72a0670cbe5060ff7f6c1',1,'sdr::Traits< float >::scale()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html#af413ae74c509876e6d4c0d24c595e121',1,'sdr::Traits< std::complex< float > >::scale()'],['../classsdr_1_1_traits_3_01double_01_4.html#a1156d4a9663d7eeb389d3a848f24e180',1,'sdr::Traits< double >::scale()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html#aa035f66183e74546d3844f754a844576',1,'sdr::Traits< std::complex< double > >::scale()']]], + ['shift',['shift',['../classsdr_1_1_traits_3_01uint8__t_01_4.html#aa5867a8623638b22972ba4775eb51cf4',1,'sdr::Traits< uint8_t >::shift()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint8__t_01_4_01_4.html#a901b7cdbf96c155ea13bca0c22a641e1',1,'sdr::Traits< std::complex< uint8_t > >::shift()'],['../classsdr_1_1_traits_3_01int8__t_01_4.html#ad1cafedc05c1afc4582d53edf28a7a72',1,'sdr::Traits< int8_t >::shift()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int8__t_01_4_01_4.html#a8f6f0f5bb2aed6f83b35872c90d97edd',1,'sdr::Traits< std::complex< int8_t > >::shift()'],['../classsdr_1_1_traits_3_01uint16__t_01_4.html#a6839e4ca579c3afb9fce7d5d4c5614a8',1,'sdr::Traits< uint16_t >::shift()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01uint16__t_01_4_01_4.html#a436e3d6ad2d6995b318b5faeca891603',1,'sdr::Traits< std::complex< uint16_t > >::shift()'],['../classsdr_1_1_traits_3_01int16__t_01_4.html#ad3f1c47a8ece9abcd014aee08ec7e252',1,'sdr::Traits< int16_t >::shift()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01int16__t_01_4_01_4.html#a34ca51cf94258133330fc7352d6d5043',1,'sdr::Traits< std::complex< int16_t > >::shift()'],['../classsdr_1_1_traits_3_01float_01_4.html#aa38461035c5cb3692202cdd452d1e9e9',1,'sdr::Traits< float >::shift()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01float_01_4_01_4.html#a4d4feacccab426d657ab5c6dd39b9fb8',1,'sdr::Traits< std::complex< float > >::shift()'],['../classsdr_1_1_traits_3_01double_01_4.html#aef6959ade5ad02c7795f1a5c10e11645',1,'sdr::Traits< double >::shift()'],['../classsdr_1_1_traits_3_01std_1_1complex_3_01double_01_4_01_4.html#afe7850e019a4de7af5baa386f35d682b',1,'sdr::Traits< std::complex< double > >::shift()']]], + ['short_5fname',['short_name',['../structsdr_1_1_options_1_1_definition.html#ad52d5923eeeea250e1e563b875b15fa7',1,'sdr::Options::Definition']]] +]; diff --git a/search/variables_4.html b/search/variables_4.html new file mode 100644 index 0000000..400e8e9 --- /dev/null +++ b/search/variables_4.html @@ -0,0 +1,26 @@ + + + + + + + + + +
+
Loading...
+
+ +
Searching...
+
No Matches
+ +
+ + diff --git a/search/variables_4.js b/search/variables_4.js new file mode 100644 index 0000000..286c6f7 --- /dev/null +++ b/search/variables_4.js @@ -0,0 +1,4 @@ +var searchData= +[ + ['type',['type',['../structsdr_1_1_options_1_1_definition.html#aa78a55af6815b3cf3a3254d010e4dbd2',1,'sdr::Options::Definition']]] +]; diff --git a/siggen_8hh_source.html b/siggen_8hh_source.html new file mode 100644 index 0000000..bf16673 --- /dev/null +++ b/siggen_8hh_source.html @@ -0,0 +1,276 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/siggen.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
siggen.hh
+
+
+
1 #ifndef __SDR_SIGGEN_HH__
+
2 #define __SDR_SIGGEN_HH__
+
3 
+
4 #include "node.hh"
+
5 
+
6 
+
7 namespace sdr {
+
8 
+
10 template <class Scalar>
+
11 class SigGen: public Source
+
12 {
+
13 public:
+
15  SigGen(double samplerate, size_t buffersize, double tmax=-1)
+
16  : Source(), _sampleRate(samplerate), _dt(1./_sampleRate), _t(0), _tMax(tmax), _scale(1),
+
17  _bufferSize(buffersize), _buffer(buffersize)
+
18  {
+
19  switch (Config::typeId<Scalar>()) {
+
20  case Config::Type_u8:
+
21  case Config::Type_s8:
+
22  case Config::Type_cu8:
+
23  case Config::Type_cs8:
+
24  _scale = 1<<6; break;
+
25  case Config::Type_u16:
+
26  case Config::Type_s16:
+
27  case Config::Type_cu16:
+
28  case Config::Type_cs16:
+
29  _scale = 1<<14; break;
+
30  default:
+
31  _scale = 1; break;
+
32  }
+
33 
+
34  this->setConfig(Config(Config::typeId<Scalar>(), samplerate, buffersize, 1));
+
35  }
+
36 
+
38  virtual ~SigGen() {}
+
39 
+
41  void next() {
+
42  // Stop processing once the max time elapsed
+
43  if ((_tMax>0) && (_t >= _tMax)) { Queue::get().stop(); return; }
+
44  // Assemble signal
+
45  for (size_t i=0; i<_bufferSize; i++) {
+
46  _buffer[i] = 0;
+
47  if (_signals.size() > 0) {
+
48  std::list< std::vector<double> >::iterator item = _signals.begin();
+
49  for (; item != _signals.end(); item++) {
+
50  _buffer[i] += (_scale*((*item)[1] * sin(2*M_PI*(*item)[0]*_t + (*item)[2]))/_signals.size());
+
51  }
+
52  }
+
53  _t += _dt;
+
54  }
+
55  // Send buffer
+
56  this->send(_buffer);
+
57  }
+
58 
+
60  void addSine(double freq, double ampl=1, double phase=0) {
+
61  std::vector<double> tmp(3); tmp[0] = freq; tmp[1] = ampl; tmp[2] = phase;
+
62  _signals.push_back(tmp);
+
63  }
+
64 
+
65 protected:
+
67  double _sampleRate;
+
69  double _dt;
+
71  double _t;
+
73  double _tMax;
+
75  double _scale;
+
77  std::list< std::vector<double> > _signals;
+
79  size_t _bufferSize;
+ +
82 };
+
83 
+
84 
+
85 
+
87 template <class Scalar>
+
88 class IQSigGen: public Source
+
89 {
+
90 public:
+
92  IQSigGen(double samplerate, size_t buffersize, double tmax=-1)
+
93  : Source(), _sampleRate(samplerate), _dt(1./_sampleRate), _t(0), _tMax(tmax), _scale(1),
+
94  _bufferSize(buffersize), _buffer(buffersize)
+
95  {
+
96  switch (Config::typeId<Scalar>()) {
+
97  case Config::Type_cu8:
+
98  case Config::Type_cs8:
+
99  _scale = 1<<6; break;
+
100  case Config::Type_cu16:
+
101  case Config::Type_cs16:
+
102  _scale = 1<<14; break;
+
103  default:
+
104  _scale = 1; break;
+
105  }
+
106 
+
107  this->setConfig(Config(Config::typeId< std::complex<Scalar> >(), samplerate, buffersize, 1));
+
108  }
+
109 
+
111  virtual ~IQSigGen() {}
+
112 
+
114  void next() {
+
115  // Stop processing once the max time elapsed
+
116  if ((_tMax>0) && (_t >= _tMax)) { Queue::get().stop(); return; }
+
117  // Assemble signal
+
118  for (size_t i=0; i<_bufferSize; i++) {
+
119  _buffer[i] = 0;
+
120  if (_signals.size() > 0) {
+
121  std::list< std::vector<double> >::iterator item = _signals.begin();
+
122  for (; item != _signals.end(); item++) {
+
123  _buffer[i] += (_scale*((*item)[1] * std::exp(std::complex<double>(0, 2*M_PI*(*item)[0]*_t + (*item)[2])))/double(_signals.size()));
+
124  }
+
125  }
+
126  _t += _dt;
+
127  }
+
128  // Send buffer
+
129  this->send(_buffer);
+
130  }
+
131 
+
133  void addSine(double freq, double ampl=1, double phase=0) {
+
134  std::vector<double> tmp(3); tmp[0] = freq; tmp[1] = ampl; tmp[2] = phase;
+
135  _signals.push_back(tmp);
+
136  }
+
137 
+
138 protected:
+
140  double _sampleRate;
+
142  double _dt;
+
144  double _t;
+
146  double _tMax;
+
148  double _scale;
+
150  std::list< std::vector<double> > _signals;
+
152  size_t _bufferSize;
+ +
155 };
+
156 
+
157 }
+
158 
+
159 
+
160 #endif // __SDR_SIGGEN_HH__
+
void addSine(double freq, double ampl=1, double phase=0)
Add a sine function to the function generator.
Definition: siggen.hh:60
+
Buffer< std::complex< Scalar > > _buffer
The output buffer.
Definition: siggen.hh:154
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
std::list< std::vector< double > > _signals
A list of functions.
Definition: siggen.hh:77
+
size_t _bufferSize
The size of the output buffer.
Definition: siggen.hh:79
+
virtual ~SigGen()
Destructor.
Definition: siggen.hh:38
+
double _scale
The scaling of the signal.
Definition: siggen.hh:148
+
Real signed 16b ints.
Definition: node.hh:28
+
SigGen(double samplerate, size_t buffersize, double tmax=-1)
Constructs the function generator.
Definition: siggen.hh:15
+
virtual void send(const RawBuffer &buffer, bool allow_overwrite=false)
Sends the given buffer to all connected sinks.
Definition: node.cc:67
+
static Queue & get()
Get a reference to the global instance of the queue.
Definition: queue.cc:15
+
Complex (aka I/Q) type of unsigned 16b ints.
Definition: node.hh:33
+
double _dt
The sample period.
Definition: siggen.hh:69
+
double _sampleRate
The sample rate of the function generator.
Definition: siggen.hh:140
+
Real signed 8b ints.
Definition: node.hh:26
+
void stop()
Signals the queue to stop processing.
Definition: queue.cc:64
+
void addSine(double freq, double ampl=1, double phase=0)
Add a sine function to the function generator.
Definition: siggen.hh:133
+
Generic source class.
Definition: node.hh:197
+
Real unsigned 8b ints.
Definition: node.hh:25
+
size_t _bufferSize
The size of the output buffer.
Definition: siggen.hh:152
+
double _t
The current time.
Definition: siggen.hh:144
+
double _scale
The scaling of the signal.
Definition: siggen.hh:75
+
Real unsigned 16b ints.
Definition: node.hh:27
+
virtual void setConfig(const Config &config)
Stores the configuration and propergates it if the configuration has been changed.
Definition: node.cc:98
+
double _dt
The sample period.
Definition: siggen.hh:142
+
Arbitrary function generator.
Definition: siggen.hh:88
+
double _tMax
The maximum time.
Definition: siggen.hh:146
+
double _t
The current time.
Definition: siggen.hh:71
+
double _sampleRate
The sample rate of the function generator.
Definition: siggen.hh:67
+
Buffer< Scalar > _buffer
The output buffer.
Definition: siggen.hh:81
+
static Type typeId()
Returns the type-id of the template type.
+
virtual ~IQSigGen()
Destructor.
Definition: siggen.hh:111
+
std::list< std::vector< double > > _signals
A list of functions.
Definition: siggen.hh:150
+
IQSigGen(double samplerate, size_t buffersize, double tmax=-1)
Constructs the function generator.
Definition: siggen.hh:92
+
double _tMax
The maximum time.
Definition: siggen.hh:73
+
void next()
Computes the next buffer.
Definition: siggen.hh:114
+
Complex (aka I/Q) type of signed 8b ints.
Definition: node.hh:32
+
Complex (aka I/Q) type of signed 16b ints.
Definition: node.hh:34
+
Complex (aka I/Q) type of unsigned 8b ints.
Definition: node.hh:31
+
Arbitrary function generator.
Definition: siggen.hh:11
+
void next()
Computes the next buffer.
Definition: siggen.hh:41
+ +
+ + + + diff --git a/streamsource_8hh_source.html b/streamsource_8hh_source.html new file mode 100644 index 0000000..e720413 --- /dev/null +++ b/streamsource_8hh_source.html @@ -0,0 +1,112 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/streamsource.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
streamsource.hh
+
+
+
1 #ifndef __SDR_STREAMSOURCE_HH__
+
2 #define __SDR_STREAMSOURCE_HH__
+
3 
+
4 #include <istream>
+
5 #include "node.hh"
+
6 #include "queue.hh"
+
7 
+
8 namespace sdr {
+
9 
+
10 }
+
11 
+
12 #endif // __SDR_STREAMSOURCE_HH__
+
+ + + + diff --git a/structsdr_1_1_options_1_1_definition-members.html b/structsdr_1_1_options_1_1_definition-members.html new file mode 100644 index 0000000..06fcb48 --- /dev/null +++ b/structsdr_1_1_options_1_1_definition-members.html @@ -0,0 +1,110 @@ + + + + + + +libsdr: Member List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
sdr::Options::Definition Member List
+
+ + + + + diff --git a/structsdr_1_1_options_1_1_definition.html b/structsdr_1_1_options_1_1_definition.html new file mode 100644 index 0000000..0867d78 --- /dev/null +++ b/structsdr_1_1_options_1_1_definition.html @@ -0,0 +1,136 @@ + + + + + + +libsdr: sdr::Options::Definition Struct Reference + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+ +
+
sdr::Options::Definition Struct Reference
+
+
+ +

Argument definition. + More...

+ +

#include <options.hh>

+ + + + + + + + + + + + + + +

+Public Attributes

+const char * name
 Argument name (long).
 
+char short_name
 Argument name (short).
 
+ArgType type
 Argument type.
 
+const char * help
 Help string.
 
+

Detailed Description

+

Argument definition.

+

The documentation for this struct was generated from the following file: +
+ + + + diff --git a/subsample_8hh_source.html b/subsample_8hh_source.html new file mode 100644 index 0000000..b2f43df --- /dev/null +++ b/subsample_8hh_source.html @@ -0,0 +1,401 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/subsample.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
subsample.hh
+
+
+
1 #ifndef __SDR_SUBSAMPLE_HH__
+
2 #define __SDR_SUBSAMPLE_HH__
+
3 
+
4 #include "node.hh"
+
5 #include "buffer.hh"
+
6 #include "traits.hh"
+
7 #include "interpolate.hh"
+
8 #include "logger.hh"
+
9 
+
10 
+
11 namespace sdr {
+
12 
+
14 template <class Scalar>
+
15 class SubSample: public Sink<Scalar>, public Source
+
16 {
+
17 public:
+
19  typedef typename Traits<Scalar>::SScalar SScalar;
+
20 
+
21 public:
+
23  SubSample(size_t n)
+
24  : Sink<Scalar>(), Source(),
+
25  _n(n), _oFs(0), _last(0), _left(0), _buffer()
+
26  {
+
27  // pass...
+
28  }
+
29 
+
31  SubSample(double Fs)
+
32  : Sink<Scalar>(), Source(),
+
33  _n(1), _oFs(Fs), _last(0), _left(0), _buffer()
+
34  {
+
35  // pass...
+
36  }
+
37 
+
39  virtual void config(const Config &src_cfg) {
+
40  // Requires type and buffer size
+
41  if (!src_cfg.hasType() || !src_cfg.hasBufferSize()) { return; }
+
42  // check buffer type
+
43  if (Config::typeId<Scalar>() != src_cfg.type()) {
+
44  ConfigError err;
+
45  err << "Can not configure SubSample node: Invalid buffer type " << src_cfg.type()
+
46  << ", expected " << Config::typeId<Scalar>();
+
47  throw err;
+
48  }
+
49 
+
50  // If target sample rate is specified, determine _n by _oFs
+
51  if (_oFs > 0) {
+
52  _n = std::max(1.0, src_cfg.sampleRate()/_oFs);
+
53  }
+
54  // Determine buffer size
+
55  size_t out_size = src_cfg.bufferSize()/_n;
+
56  if (src_cfg.bufferSize() % _n) { out_size += 1; }
+
57 
+
58  LogMessage msg(LOG_DEBUG);
+
59  msg << "Configure SubSample node:" << std::endl
+
60  << " by: " << _n << std::endl
+
61  << " type: " << src_cfg.type() << std::endl
+
62  << " sample-rate: " << src_cfg.sampleRate()
+
63  << " -> " << src_cfg.sampleRate()/_n << std::endl
+
64  << " buffer-size: " << src_cfg.bufferSize()
+
65  << " -> " << out_size;
+
66  Logger::get().log(msg);
+
67 
+
68  // Resize buffer
+
69  _buffer = Buffer<Scalar>(out_size);
+
70  // Propergate config
+
71  this->setConfig(Config(src_cfg.type(), src_cfg.sampleRate()/_n, out_size, 1));
+
72  }
+
73 
+
75  virtual void process(const Buffer<Scalar> &buffer, bool allow_overwrite) {
+
76  if (allow_overwrite) {
+
77  _process(buffer, buffer);
+
78  } else if (_buffer.isUnused()) {
+
79  _process(buffer, _buffer);
+
80  } else {
+
81 #ifdef SDR_DEBUG
+
82  LogMessage msg(LOG_WARNING);
+
83  msg << "SubSample: Drop buffer, output buffer still in use.";
+
84  Logger::get().log(msg);
+
85 #endif
+
86  }
+
87  }
+
88 
+
89 protected:
+
91  void _process(const Buffer<Scalar> &in, const Buffer<Scalar> &out) {
+
92  size_t j=0;
+
93  for (size_t i=0; i<in.size(); i++) {
+
94  _last += in[i]; _left++;
+
95  if (_n <= _left) {
+
96  out[j] = _last/SScalar(_n); j++; _last=0; _left=0;
+
97  }
+
98  }
+
99  this->send(out.head(j), true);
+
100  }
+
101 
+
102 
+
103 protected:
+
105  size_t _n;
+
107  double _oFs;
+ +
111  size_t _left;
+ +
114 };
+
115 
+
116 
+
118 template <class Scalar>
+ +
120 {
+
121 public:
+ +
124 
+
125 public:
+ +
130  : _avg(0), _sample_count(0), _period(0) {
+
131  if (frac < 1) {
+
132  ConfigError err;
+
133  err << "FracSubSampleBase: Can not sub-sample with fraction smaller one: " << frac;
+
134  throw err;
+
135  }
+
136  _period = (frac*(1<<16));
+
137  }
+
138 
+
140  virtual ~FracSubSampleBase() {
+
141  // pass...
+
142  }
+
143 
+
145  inline void setFrac(double frac) {
+
146  if (frac < 1) {
+
147  ConfigError err;
+
148  err << "FracSubSampleBase: Can not sub-sample with fraction smaller one: " << frac;
+
149  throw err;
+
150  }
+
151  _period = (frac*(1<<16)); _sample_count=0; _avg = 0;
+
152  }
+
153 
+
155  inline double frac() const {
+
156  return double(_period)/(1<<16);
+
157  }
+
158 
+
160  inline void reset() {
+
161  _avg=0; _sample_count=0;
+
162  }
+
163 
+
166  inline Buffer<Scalar> subsample(const Buffer<Scalar> &in, const Buffer<Scalar> &out) {
+
167  size_t oidx = 0;
+
168  for (size_t i=0; i<in.size(); i++) {
+
169  _avg += in[i]; _sample_count += (1<<16);
+
170  if (_sample_count >= _period) {
+
171  out[oidx] = _avg/SScalar(_sample_count/(1<<16));
+
172  _sample_count=0; _avg = 0; oidx++;
+
173  }
+
174  }
+
175  return out.head(oidx);
+
176  }
+
177 
+
178 protected:
+ + +
184  size_t _period;
+
185 };
+
186 
+
187 
+
192 template <class iScalar, class oScalar = iScalar>
+
193 class InpolSubSampler: public Sink<iScalar>, public Source
+
194 {
+
195 public:
+
199  InpolSubSampler(float frac)
+
200  : Sink<iScalar>(), Source(), _frac(frac), _mu(0)
+
201  {
+
202  if (_frac <= 0) {
+
203  ConfigError err;
+
204  err << "Can not configure InpolSubSample node: Sample rate fraction must be > 0!"
+
205  << " Fraction given: " << _frac;
+
206  throw err;
+
207  }
+
208  }
+
209 
+
211  virtual ~InpolSubSampler() {
+
212  // pass...
+
213  }
+
214 
+
216  virtual void config(const Config &src_cfg) {
+
217  // Requires type and buffer size
+
218  if (!src_cfg.hasType() || !src_cfg.hasBufferSize()) { return; }
+
219 
+
220  // check buffer type
+
221  if (Config::typeId<iScalar>() != src_cfg.type()) {
+
222  ConfigError err;
+
223  err << "Can not configure InpolSubSample node: Invalid buffer type " << src_cfg.type()
+
224  << ", expected " << Config::typeId<iScalar>();
+
225  throw err;
+
226  }
+
227 
+
228  // Allocate buffer
+
229  size_t bufSize = std::ceil(src_cfg.bufferSize() * src_cfg.sampleRate()/_frac);
+
230  _buffer = Buffer<oScalar>(bufSize);
+
231 
+
232  // Allocate & init delay line
+
233  _dl = Buffer<oScalar>(16); _dl_idx = 0;
+
234  for (size_t i=0; i<16; i++) { _dl[i] = 0; }
+
235  _mu = 0;
+
236 
+
237  LogMessage msg(LOG_DEBUG);
+
238  msg << "Configure InpolSubSampler node:" << std::endl
+
239  << " by: " << _frac << std::endl
+
240  << " type: " << src_cfg.type() << std::endl
+
241  << " sample-rate: " << src_cfg.sampleRate()
+
242  << " -> " << src_cfg.sampleRate()/_frac;
+
243  Logger::get().log(msg);
+
244 
+
245  // Propergate config
+
246  this->setConfig(Config(Traits<oScalar>::scalarId, src_cfg.sampleRate()/_frac, bufSize, 1));
+
247  }
+
248 
+
250  virtual void process(const Buffer<iScalar> &buffer, bool allow_overwrite)
+
251  {
+
252  // Short cut
+
253  if (1 == _frac) {
+
254  this->send(buffer, allow_overwrite);
+
255  return;
+
256  }
+
257 
+
258  size_t i=0, o=0;
+
259  while (i<buffer.size()) {
+
260  // First, fill sampler...
+
261  while ( (_mu >= 1) && (i<buffer.size()) ) {
+
262  _dl[_dl_idx] = _dl[_dl_idx+8] = buffer[i]; i++;
+
263  _dl_idx = (_dl_idx + 1) % 8; _mu -= 1;
+
264  }
+
265  while (_mu <= 1) {
+
266  // Interpolate
+
267  _buffer[o] = interpolate(_dl.sub(_dl_idx,8), _mu);
+
268  _mu += _frac; o++;
+
269  }
+
270  }
+
271  this->send(_buffer.head(o));
+
272  }
+
273 
+
274 
+
275 protected:
+
277  float _frac;
+
279  float _mu;
+ +
283  size_t _dl_idx;
+ +
286 };
+
287 
+
288 }
+
289 #endif // __SDR_SUBSAMPLE_HH__
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
Buffer< oScalar > _dl
A delay-line (buffer) for the interpolation.
Definition: subsample.hh:281
+
size_t _sample_count
The number of samples collected times (1<<16).
Definition: subsample.hh:182
+
void setFrac(double frac)
Resets the sample rate fraction.
Definition: subsample.hh:145
+
size_t _n
The sub-sampling, n=1 means no sub-sampling at all.
Definition: subsample.hh:105
+
Buffer< oScalar > _buffer
The output buffer.
Definition: subsample.hh:285
+
virtual void send(const RawBuffer &buffer, bool allow_overwrite=false)
Sends the given buffer to all connected sinks.
Definition: node.cc:67
+
virtual ~FracSubSampleBase()
Destructor.
Definition: subsample.hh:140
+
Typed sink.
Definition: node.hh:176
+
InpolSubSampler(float frac)
Constructor.
Definition: subsample.hh:199
+
size_t _dl_idx
Index of the delay-line.
Definition: subsample.hh:283
+
float _mu
The current (fractional) sample count.
Definition: subsample.hh:279
+
Generic source class.
Definition: node.hh:197
+
virtual void process(const Buffer< iScalar > &buffer, bool allow_overwrite)
Performs the sub-sampling.
Definition: subsample.hh:250
+
double _oFs
Target sample rate.
Definition: subsample.hh:107
+
float _frac
The sub-sampling fraction.
Definition: subsample.hh:277
+
size_t size() const
Returns the number of elements of type T in this buffer.
Definition: buffer.hh:166
+
bool hasType() const
If true, the configuration has a type.
Definition: node.hh:53
+
double frac() const
Returns the effective sub-sample fraction.
Definition: subsample.hh:155
+
void reset()
Reset sample counter.
Definition: subsample.hh:160
+
virtual void setConfig(const Config &config)
Stores the configuration and propergates it if the configuration has been changed.
Definition: node.cc:98
+
SubSample(size_t n)
Constructs a sub-sampler.
Definition: subsample.hh:23
+
Buffer< T > head(size_t n) const
Returns a new view on this buffer.
Definition: buffer.hh:237
+
void log(const LogMessage &message)
Logs a message.
Definition: logger.cc:100
+
void _process(const Buffer< Scalar > &in, const Buffer< Scalar > &out)
Performs the sub-sampling from in into out.
Definition: subsample.hh:91
+
Buffer< Scalar > _buffer
The output buffer, unused if the sub-sampling is performed in-place.
Definition: subsample.hh:113
+
Type type() const
Returns the type.
Definition: node.hh:55
+
Traits< Scalar >::SScalar SScalar
The input & output type super-scalar.
Definition: subsample.hh:123
+
virtual void process(const Buffer< Scalar > &buffer, bool allow_overwrite)
Performs the sub-sampling on the given buffer.
Definition: subsample.hh:75
+
static Logger & get()
Returns the singleton instance of the logger.
Definition: logger.cc:89
+
Buffer< T > sub(size_t offset, size_t len) const
Returns a new view on this buffer.
Definition: buffer.hh:231
+
virtual void config(const Config &src_cfg)
Configures the sub-sampler.
Definition: subsample.hh:39
+
virtual void config(const Config &src_cfg)
Configures the sub-sampling node.
Definition: subsample.hh:216
+
The configuration error class.
Definition: exception.hh:24
+
A log message.
Definition: logger.hh:21
+
size_t bufferSize() const
Returns the max.
Definition: node.hh:67
+
SScalar _avg
The average.
Definition: subsample.hh:180
+
Implements a fractional sub-sampler.
Definition: subsample.hh:119
+
SubSample(double Fs)
Constructs a sub-sampler by target sample rate.
Definition: subsample.hh:31
+
size_t _left
How many samples are left.
Definition: subsample.hh:111
+
FracSubSampleBase(double frac)
Constructor.
Definition: subsample.hh:129
+
Traits< Scalar >::SScalar SScalar
The super-scalar of the input type.
Definition: subsample.hh:19
+
bool isUnused() const
We assume here that buffers are owned by some object: A buffer is therefore "unused" if the owner hol...
Definition: buffer.hh:87
+
Forward declaration of type tratis template.
Definition: traits.hh:20
+
Buffer< Scalar > subsample(const Buffer< Scalar > &in, const Buffer< Scalar > &out)
Performs the sub-sampling.
Definition: subsample.hh:166
+
size_t _period
The sub-sample period.
Definition: subsample.hh:184
+
SScalar _last
The last value.
Definition: subsample.hh:109
+ +
virtual ~InpolSubSampler()
Destructor.
Definition: subsample.hh:211
+
An interpolating sub-sampler.
Definition: subsample.hh:193
+
bool hasBufferSize() const
If true, the configuration has a buffer size.
Definition: node.hh:65
+
Simple averaging sub-sampler.
Definition: subsample.hh:15
+
double sampleRate() const
Returns the sample rate.
Definition: node.hh:61
+
+ + + + diff --git a/sync_off.png b/sync_off.png new file mode 100644 index 0000000..3b443fc Binary files /dev/null and b/sync_off.png differ diff --git a/sync_on.png b/sync_on.png new file mode 100644 index 0000000..e08320f Binary files /dev/null and b/sync_on.png differ diff --git a/tab_a.png b/tab_a.png new file mode 100644 index 0000000..3b725c4 Binary files /dev/null and b/tab_a.png differ diff --git a/tab_b.png b/tab_b.png new file mode 100644 index 0000000..e2b4a86 Binary files /dev/null and b/tab_b.png differ diff --git a/tab_h.png b/tab_h.png new file mode 100644 index 0000000..fd5cb70 Binary files /dev/null and b/tab_h.png differ diff --git a/tab_s.png b/tab_s.png new file mode 100644 index 0000000..ab478c9 Binary files /dev/null and b/tab_s.png differ diff --git a/tabs.css b/tabs.css new file mode 100644 index 0000000..9cf578f --- /dev/null +++ b/tabs.css @@ -0,0 +1,60 @@ +.tabs, .tabs2, .tabs3 { + background-image: url('tab_b.png'); + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + display: table-cell; + background-image: url('tab_b.png'); + line-height: 36px; + list-style: none; +} + +.tablist a { + display: block; + padding: 0 20px; + font-weight: bold; + background-image:url('tab_s.png'); + background-repeat:no-repeat; + background-position:right; + color: #283A5D; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-image: url('tab_h.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); + text-decoration: none; +} + +.tablist li.current a { + background-image: url('tab_a.png'); + background-repeat:repeat-x; + color: #fff; + text-shadow: 0px 1px 1px rgba(0, 0, 0, 1.0); +} diff --git a/todo.html b/todo.html new file mode 100644 index 0000000..f4af772 --- /dev/null +++ b/todo.html @@ -0,0 +1,97 @@ + + + + + + +libsdr: Todo List + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + +
+ +
+ +
+
+
+
Todo List
+
+
+
+
Member sdr::PortSource< Scalar >::next ()
+
Signal loss of samples in debug mode.
+
Member sdr::RawRingBuffer::put (const RawBuffer &src)
+
Allow overwrite
+
+
+ + + + diff --git a/traits_8hh_source.html b/traits_8hh_source.html new file mode 100644 index 0000000..196473c --- /dev/null +++ b/traits_8hh_source.html @@ -0,0 +1,321 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/traits.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
traits.hh
+
+
+
1 #ifndef __SDR_TRAITS_HH__
+
2 #define __SDR_TRAITS_HH__
+
3 
+
4 #include <inttypes.h>
+
5 #include <complex>
+
6 #include "node.hh"
+
7 
+
8 namespace sdr {
+
9 
+
20 template <class Scalar> class Traits;
+
21 
+
23 template <>
+
24 class Traits<uint8_t> {
+
25 public:
+
27  typedef uint8_t Scalar;
+
29  typedef uint8_t RScalar;
+
31  typedef uint16_t SScalar;
+
33  const static float scale;
+
35  const static size_t shift;
+
37  const static Config::Type scalarId = Config::Type_u8;
+
38 };
+
39 
+
41 template <>
+
42 class Traits< std::complex<uint8_t> > {
+
43 public:
+
45  typedef std::complex<uint8_t> Scalar;
+
47  typedef uint8_t RScalar;
+
49  typedef std::complex<uint16_t> SScalar;
+
51  const static float scale;
+
53  const static size_t shift;
+
55  const static Config::Type scalarId = Config::Type_cu8;
+
56 };
+
57 
+
59 template <>
+
60 class Traits<int8_t> {
+
61 public:
+
63  typedef int8_t Scalar;
+
65  typedef int8_t RScalar;
+
67  typedef int16_t SScalar;
+
69  const static float scale;
+
71  const static size_t shift;
+
73  const static Config::Type scalarId = Config::Type_s8;
+
74 };
+
75 
+
77 template <>
+
78 class Traits< std::complex<int8_t> > {
+
79 public:
+
81  typedef std::complex<int8_t> Scalar;
+
83  typedef int8_t RScalar;
+
85  typedef std::complex<int16_t> SScalar;
+
87  const static float scale;
+
89  const static size_t shift;
+
91  const static Config::Type scalarId = Config::Type_cs8;
+
92 };
+
93 
+
95 template <>
+
96 class Traits<uint16_t> {
+
97 public:
+
99  typedef uint16_t Scalar;
+
101  typedef uint16_t RScalar;
+
103  typedef uint32_t SScalar;
+
105  const static float scale;
+
107  const static size_t shift;
+
109  const static Config::Type scalarId = Config::Type_u16;
+
110 };
+
111 
+
113 template <>
+
114 class Traits< std::complex<uint16_t> > {
+
115 public:
+
117  typedef std::complex<uint16_t> Scalar;
+
119  typedef uint16_t RScalar;
+
121  typedef std::complex<uint32_t> SScalar;
+
123  const static float scale;
+
125  const static size_t shift;
+
127  const static Config::Type scalarId = Config::Type_cu16;
+
128 };
+
129 
+
131 template <>
+
132 class Traits<int16_t> {
+
133 public:
+
135  typedef int16_t Scalar;
+
137  typedef int16_t RScalar;
+
139  typedef int32_t SScalar;
+
141  const static float scale;
+
143  const static size_t shift;
+
145  const static Config::Type scalarId = Config::Type_s16;
+
146 };
+
147 
+
149 template <>
+
150 class Traits< std::complex<int16_t> > {
+
151 public:
+
153  typedef std::complex<int16_t> Scalar;
+
155  typedef int16_t RScalar;
+
157  typedef std::complex<int32_t> SScalar;
+
159  const static float scale;
+
161  const static size_t shift;
+
163  const static Config::Type scalarId = Config::Type_cs16;
+
164 };
+
165 
+
167 template <>
+
168 class Traits<float> {
+
169 public:
+
171  typedef float Scalar;
+
173  typedef float RScalar;
+
175  typedef float SScalar;
+
177  const static float scale;
+
179  const static size_t shift;
+
181  const static Config::Type scalarId = Config::Type_f32;
+
182 };
+
183 
+
185 template <>
+
186 class Traits< std::complex<float> > {
+
187 public:
+
189  typedef std::complex<float> Scalar;
+
191  typedef float RScalar;
+
193  typedef std::complex<float> SScalar;
+
195  const static float scale;
+
197  const static size_t shift;
+
199  const static Config::Type scalarId = Config::Type_cf32;
+
200 };
+
201 
+
203 template <>
+
204 class Traits<double> {
+
205 public:
+
207  typedef double Scalar;
+
209  typedef double RScalar;
+
211  typedef double SScalar;
+
213  const static float scale;
+
215  const static size_t shift;
+
217  const static Config::Type scalarId = Config::Type_f64;
+
218 };
+
219 
+
221 template <>
+
222 class Traits< std::complex<double> > {
+
223 public:
+
225  typedef std::complex<double> Scalar;
+
227  typedef double RScalar;
+
229  typedef std::complex<double> SScalar;
+
231  const static float scale;
+
233  const static size_t shift;
+
235  const static Config::Type scalarId = Config::Type_cf64;
+
236 };
+
237 
+
238 
+
239 }
+
240 
+
241 #endif
+
static const float scale
The scaleing factor from floating point to integer.
Definition: traits.hh:123
+
Complex (aka I/Q) type of 32bit floats aka. std::complex<float>.
Definition: node.hh:35
+
int8_t RScalar
The real scalar type.
Definition: traits.hh:83
+
uint16_t Scalar
The scalar type.
Definition: traits.hh:99
+
std::complex< uint32_t > SScalar
The compute scalar type.
Definition: traits.hh:121
+
int16_t RScalar
The real scalar type.
Definition: traits.hh:137
+
uint16_t RScalar
The real scalar type.
Definition: traits.hh:101
+
Real signed 16b ints.
Definition: node.hh:28
+
static const size_t shift
The scaleing factor from floating point to integer expressed as 2^exp.
Definition: traits.hh:197
+
float SScalar
The compute scalar type.
Definition: traits.hh:175
+
std::complex< double > Scalar
The scalar type.
Definition: traits.hh:225
+
Complex (aka I/Q) type of unsigned 16b ints.
Definition: node.hh:33
+
double Scalar
The scalar type.
Definition: traits.hh:207
+
static const size_t shift
The scaleing factor from floating point to integer expressed as 2^exp.
Definition: traits.hh:233
+
Real signed 8b ints.
Definition: node.hh:26
+
uint32_t SScalar
The compute scalar type.
Definition: traits.hh:103
+
double RScalar
The real scalar type.
Definition: traits.hh:227
+
static const size_t shift
The scaleing factor from floating point to integer expressed as 2^exp.
Definition: traits.hh:107
+
Real unsigned 8b ints.
Definition: node.hh:25
+
static const float scale
The scaleing factor from floating point to integer.
Definition: traits.hh:159
+
static const size_t shift
The scaleing factor from floating point to integer expressed as 2^exp.
Definition: traits.hh:125
+
static const float scale
The scaleing factor from floating point to integer.
Definition: traits.hh:51
+
int16_t Scalar
The scalar type.
Definition: traits.hh:135
+
int16_t RScalar
The real Scalar type.
Definition: traits.hh:155
+
static const float scale
The scaleing factor from floating point to integer.
Definition: traits.hh:141
+
std::complex< int32_t > SScalar
The compute scalar type.
Definition: traits.hh:157
+
static const size_t shift
The scaleing factor from floating point to integer expressed as 2^exp.
Definition: traits.hh:161
+
Real 64b floats aka. "double".
Definition: node.hh:30
+
static const float scale
The scaleing factor from floating point to integer.
Definition: traits.hh:87
+
Real unsigned 16b ints.
Definition: node.hh:27
+
static const size_t shift
The scaleing factor from floating point to integer expressed as 2^exp.
Definition: traits.hh:179
+
float Scalar
The Scalar type.
Definition: traits.hh:171
+
uint8_t RScalar
The real scalar type.
Definition: traits.hh:47
+
double SScalar
The compute scalar type.
Definition: traits.hh:211
+
std::complex< double > SScalar
The compute (super) scalar type.
Definition: traits.hh:229
+
uint16_t RScalar
The real scalar type.
Definition: traits.hh:119
+
int8_t RScalar
The real scalar type.
Definition: traits.hh:65
+
std::complex< float > Scalar
The scalar type.
Definition: traits.hh:189
+
uint8_t RScalar
The real scalar type.
Definition: traits.hh:29
+
static const size_t shift
The scaleing factor from floating point to integer expressed as 2^exp.
Definition: traits.hh:89
+
uint16_t SScalar
The compute scalar type.
Definition: traits.hh:31
+
int16_t SScalar
The compute scalar type.
Definition: traits.hh:67
+
uint8_t Scalar
The scalar type.
Definition: traits.hh:27
+
static const size_t shift
The scaleing factor from floating point to integer expressed as 2^exp.
Definition: traits.hh:71
+
std::complex< float > SScalar
The compute scalar type.
Definition: traits.hh:193
+
std::complex< int8_t > Scalar
The scalar type.
Definition: traits.hh:81
+
int32_t SScalar
The compute scalar type.
Definition: traits.hh:139
+
static const float scale
The scaleing factor from floating point to integer.
Definition: traits.hh:33
+
Real 32b floats aka. "float".
Definition: node.hh:29
+
std::complex< uint16_t > Scalar
The scalar type.
Definition: traits.hh:117
+
static const float scale
The scaleing factor from floating point to integer.
Definition: traits.hh:213
+
static const size_t shift
The scaleing factor from floating point to integer expressed as 2^exp.
Definition: traits.hh:143
+
std::complex< int16_t > SScalar
The compute scalar type.
Definition: traits.hh:85
+
Type
The type IDs.
Definition: node.hh:23
+
static const float scale
The scaleing factor from floating point to integer.
Definition: traits.hh:231
+
std::complex< int16_t > Scalar
The scalar type.
Definition: traits.hh:153
+
Complex (aka I/Q) type of signed 8b ints.
Definition: node.hh:32
+
std::complex< uint16_t > SScalar
The compute scalar type.
Definition: traits.hh:49
+
std::complex< uint8_t > Scalar
The scalar type.
Definition: traits.hh:45
+
static const float scale
The scaleing factor from floating point to integer.
Definition: traits.hh:195
+
static const float scale
The scaleing factor from floating point to integer.
Definition: traits.hh:177
+
static const float scale
The scaleing factor from floating point to integer.
Definition: traits.hh:105
+
static const size_t shift
The scaleing factor from floating point to integer expressed as 2^exp.
Definition: traits.hh:53
+
Complex (aka I/Q) type of signed 16b ints.
Definition: node.hh:34
+
Complex (aka I/Q) type of unsigned 8b ints.
Definition: node.hh:31
+
float RScalar
The real scalar type.
Definition: traits.hh:191
+
Forward declaration of type tratis template.
Definition: traits.hh:20
+
int8_t Scalar
The scalar type.
Definition: traits.hh:63
+
static const size_t shift
The scaleing factor from floating point to integer expressed as 2^exp.
Definition: traits.hh:215
+
float RScalar
The real scalar type.
Definition: traits.hh:173
+
static const float scale
The scaleing factor from floating point to integer.
Definition: traits.hh:69
+
static const size_t shift
Shift from Scalar to SScalar.
Definition: traits.hh:35
+
double RScalar
The real scalar type.
Definition: traits.hh:209
+
Complex (aka I/Q) type of 64bit floats aka. std::complex<double>.
Definition: node.hh:36
+
+ + + + diff --git a/utils_8hh_source.html b/utils_8hh_source.html new file mode 100644 index 0000000..1fe0f25 --- /dev/null +++ b/utils_8hh_source.html @@ -0,0 +1,1084 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/utils.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
utils.hh
+
+
+
1 #ifndef __SDR_UTILS_HH__
+
2 #define __SDR_UTILS_HH__
+
3 
+
4 #include "config.hh"
+
5 #include "node.hh"
+
6 #include "traits.hh"
+
7 #include "operators.hh"
+
8 #include "logger.hh"
+
9 #include <ctime>
+
10 
+
11 
+
12 namespace sdr {
+
13 
+
15 template <class Scalar>
+
16 class RealImagPart: public Sink< std::complex<Scalar> >, public Source
+
17 {
+
18 public:
+
21  RealImagPart(bool select_real, double scale=1.0)
+
22  : Sink< std::complex<Scalar> >(), Source(), _buffer(), _select_real(select_real), _scale(scale)
+
23  {
+
24  // pass...
+
25  }
+
26 
+
28  virtual void config(const Config &src_cfg) {
+
29  // Needs full config
+
30  if ((Config::Type_UNDEFINED==src_cfg.type()) || (0 == src_cfg.bufferSize())) { return; }
+
31  // Assert complex type
+
32  if (src_cfg.type() != Config::typeId< std::complex<Scalar> >()) {
+
33  ConfigError err;
+
34  err << "Can not configure sink of RealPart: Invalid buffer type " << src_cfg.type()
+
35  << " expected " << Config::typeId< std::complex<Scalar> >();
+
36  throw err;
+
37  }
+
38  // Resize buffer
+
39  _buffer = Buffer<Scalar>(src_cfg.bufferSize());
+
40  // propergate config
+
41  this->setConfig(Config(Config::typeId< Scalar >(), src_cfg.sampleRate(),
+
42  src_cfg.bufferSize(), 1));
+
43 
+
44  if (_select_real) {
+
45  LogMessage msg(LOG_DEBUG);
+
46  msg << "Configured RealPart node:" << std::endl
+
47  << " type: " << Config::typeId<Scalar>() << std::endl
+
48  << " sample-rate: " << src_cfg.sampleRate() << std::endl
+
49  << " buffer-size: " << src_cfg.bufferSize();
+
50  Logger::get().log(msg);
+
51  }
+
52  }
+
53 
+
55  virtual void process(const Buffer<std::complex<Scalar> > &buffer, bool allow_overwrite) {
+
56  // Convert
+
57  if (_select_real) {
+
58  for (size_t i=0; i<buffer.size(); i++) {
+
59  _buffer[i] = _scale*buffer[i].real();
+
60  }
+
61  } else {
+
62  for (size_t i=0; i<buffer.size(); i++) {
+
63  _buffer[i] = _scale*buffer[i].imag();
+
64  }
+
65  }
+
66  this->send(_buffer);
+
67  }
+
68 
+
69 protected:
+ + +
75  double _scale;
+
76 };
+
77 
+
78 
+
80 template <class Scalar>
+
81 class RealPart: public RealImagPart<Scalar>
+
82 {
+
83 public:
+
85  RealPart(double scale=1.0)
+
86  : RealImagPart<Scalar>(true, scale)
+
87  {
+
88  // pass...
+
89  }
+
90 };
+
91 
+
92 
+
94 template <class Scalar>
+
95 class ImagPart: public RealImagPart<Scalar>
+
96 {
+
97 public:
+
99  ImagPart(double scale=1.0)
+
100  : RealImagPart<Scalar>(false, scale)
+
101  {
+
102  // pass...
+
103  }
+
104 };
+
105 
+
106 
+
108 template <class Scalar>
+
109 class IQBalance: public Sink< std::complex<Scalar> >, public Source
+
110 {
+
111 public:
+ +
114 
+
115 public:
+
120  IQBalance(double balance=0.0)
+
121  : Sink< std::complex<Scalar> >(), Source(), _realFact(1), _imagFact(1)
+
122  {
+
123  if (balance < 0) {
+
124  // scale real part
+
125  balance = std::min(1.,-balance);
+
126  _realFact = (1-balance)*(1<<8);
+
127  _imagFact = (1<<8);
+
128  } else { // scale imag part
+
129  balance = std::min(1., balance);
+
130  _realFact = (1<<8);
+
131  _imagFact = (1-balance)*(1<<8);
+
132  }
+
133  }
+
134 
+
136  virtual ~IQBalance() {
+
137  _buffer.unref();
+
138  }
+
139 
+
141  double balance() const {
+
142  if (_realFact != (1<<8)) {
+
143  return (double(_realFact)/(1<<8)-1);
+
144  }
+
145  return (1-double(_imagFact)/(1<<8));
+
146  }
+
147 
+
149  void setBalance(double balance) {
+
150  if (balance < 0) {
+
151  // scale real part
+
152  balance = std::min(1.,-balance);
+
153  _realFact = balance*(1<<8);
+
154  _imagFact = (1<<8);
+
155  } else { // scale imag part
+
156  balance = std::min(1., balance);
+
157  _realFact = (1<<8);
+
158  _imagFact = balance*(1<<8);
+
159  }
+
160  }
+
161 
+
163  virtual void config(const Config &src_cfg) {
+
164  // Check if config is complete
+
165  if (! src_cfg.hasBufferSize()) { return; }
+
166  // Allocate buffer
+ +
168  // Forward config
+
169  Config cfg(src_cfg); cfg.setNumBuffers(1);
+
170  this->setConfig(cfg);
+
171  }
+
172 
+
174  virtual void process(const Buffer<std::complex<Scalar> > &buffer, bool allow_overwrite) {
+
175  if (allow_overwrite) {
+
176  _process(buffer, buffer);
+
177  this->send(buffer);
+
178  } else {
+
179  _process(buffer, _buffer);
+
180  this->send(_buffer.head(buffer.size()));
+
181  }
+
182  }
+
183 
+
184 protected:
+
186  void _process(const Buffer< std::complex<Scalar> > &in, const Buffer< std::complex<Scalar> > &out) {
+
187  for (size_t i=0; i<in.size(); i++) {
+
188  out[i] = std::complex<Scalar>((_realFact*SScalar(in[i].real()))/(1<<8),
+
189  (_imagFact*SScalar(in[i].imag()))/(1<<8));
+
190  }
+
191  }
+
192 
+
193 protected:
+
195  int32_t _realFact;
+
197  int32_t _imagFact;
+ +
200 };
+
201 
+
202 
+
205 template <class iScalar, class oScalar=iScalar>
+
206 class ToComplex: public Sink<iScalar>, public Source
+
207 {
+
208 public:
+
210  ToComplex(double scale=1.0)
+
211  : Sink<iScalar>(), Source(), _scale(scale)
+
212  {
+
213  // pass...
+
214  }
+
215 
+
217  virtual void config(const Config &src_cfg) {
+
218  // Requires at least type & buffer size
+
219  if (!src_cfg.hasType() || !src_cfg.hasBufferSize()) { return; }
+
220  // Check input type
+
221  if (Config::typeId<iScalar>() != src_cfg.type()) {
+
222  ConfigError err;
+
223  err << "Can not configure ToComplex node: Invalid buffer type " << src_cfg.type()
+
224  << ", expected " << Config::typeId<iScalar>();
+
225  throw err;
+
226  }
+
227  // Allocate buffer:
+ +
229  // Propergate config
+
230  this->setConfig(
+
231  Config(Config::typeId< std::complex<oScalar> >(),
+
232  src_cfg.sampleRate(), src_cfg.bufferSize(), src_cfg.numBuffers()));
+
233  }
+
234 
+
236  virtual void process(const Buffer<iScalar> &buffer, bool allow_overwrite) {
+
237  if (1.0 == _scale) {
+
238  for (size_t i=0; i<buffer.size(); i++) {
+
239  _buffer[i] = std::complex<oScalar>(oScalar(buffer[i]));
+
240  }
+
241  } else {
+
242  for (size_t i=0; i<buffer.size(); i++) {
+
243  _buffer[i] = std::complex<oScalar>(_scale*oScalar(buffer[i]));
+
244  }
+
245  }
+
246  // propergate buffer
+
247  this->send(_buffer.head(buffer.size()));
+
248  }
+
249 
+
250 protected:
+
252  double _scale;
+ +
255 };
+
256 
+
257 
+
258 
+
260 template <class iScalar, class oScalar>
+
261 class Cast : public Sink<iScalar>, public Source
+
262 {
+
263 public:
+ + +
268 
+
269 public:
+
271  Cast(oScalar scale=1, iScalar shift=0)
+
272  : Sink<iScalar>(), Source(), _can_overwrite(false), _do_scale(false),
+
273  _scale(scale), _shift(shift), _buffer()
+
274  {
+
275  // pass...
+
276  }
+
277 
+
279  virtual void config(const Config &src_cfg) {
+
280  // only check type
+
281  if (!src_cfg.hasType()) { return; }
+
282  if (src_cfg.type() != Config::typeId<iScalar>()) {
+
283  ConfigError err;
+
284  err << "Can not configure Cast: Invalid input type " << src_cfg.type()
+
285  << ", expected " << Config::typeId<iScalar>();
+
286  throw err;
+
287  }
+
288 
+
289  // unreference buffer if non-empty
+
290  if (! _buffer.isEmpty()) { _buffer.unref(); }
+
291 
+
292  // allocate buffer
+
293  _buffer = Buffer<oScalar>(src_cfg.bufferSize());
+
294 
+
295  LogMessage msg(LOG_DEBUG);
+
296  msg << "Configure Cast node:" << std::endl
+
297  << " conversion: "<< Config::typeId<iScalar>()
+
298  << " -> " << Config::typeId<oScalar>() << std::endl
+
299  << " in-place " << (_can_overwrite ? "true" : "false") << std::endl
+
300  << " scale: " << _scale;
+
301  Logger::get().log(msg);
+
302 
+
303  _can_overwrite = sizeof(iScalar) >= sizeof(oScalar);
+
304  _do_scale = (_scale != oScalar(0));
+
305 
+
306  // forward config
+
307  this->setConfig(Config(Config::typeId<oScalar>(), src_cfg.sampleRate(),
+
308  src_cfg.bufferSize(), 1));
+
309  }
+
310 
+
312  virtual void process(const Buffer<iScalar> &buffer, bool allow_overwrite) {
+
313  if (allow_overwrite && _can_overwrite) {
+
314  _process(buffer, Buffer<oScalar>(buffer));
+
315  } else if (_buffer.isUnused()) {
+
316  _process(buffer, _buffer);
+
317  } else {
+
318 #ifdef SDR_DEBUG
+
319  std::cerr << "Cast: Drop buffer: Output buffer is still in use by "
+
320  << _buffer.refCount() << std::endl;
+
321 #endif
+
322  }
+
323  }
+
324 
+
326  inline double scale() const { return _scale; }
+
327 
+
329  void setScale(double scale) {
+
330  _scale = scale;
+
331  _do_scale = (0 != _scale);
+
332  }
+
333 
+
334 protected:
+
336  inline void _process(const Buffer<iScalar> &in, const Buffer<oScalar> &out) {
+
337  if (_do_scale) {
+
338  for (size_t i=0; i<in.size(); i++) {
+
339  out[i] = _scale*( cast<iScalar,oScalar>(in[i]) + cast<iScalar, oScalar>(_shift) );
+
340  }
+
341  } else {
+
342  for (size_t i=0; i<in.size(); i++) {
+
343  out[i] = in[i]+_shift;
+
344  }
+
345  }
+
346  this->send(out.head(in.size()));
+
347  }
+
348 
+
349 protected:
+ +
353  bool _do_scale;
+
355  oScalar _scale;
+
357  iScalar _shift;
+ +
360 };
+
361 
+
362 
+
363 
+
365 class UnsignedToSigned: public SinkBase, public Source
+
366 {
+
367 public:
+
369  UnsignedToSigned(float scale=1.0);
+
371  virtual ~UnsignedToSigned();
+
372 
+
374  virtual void config(const Config &src_cfg);
+
376  virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite);
+
377 
+
378 protected:
+
380  void _process_int8(const RawBuffer &in, const RawBuffer &out);
+
382  void _process_int16(const RawBuffer &in, const RawBuffer &out);
+
383 
+
384 protected:
+
386  void (UnsignedToSigned::*_process)(const RawBuffer &in, const RawBuffer &out);
+ +
390  float _scale;
+
391 };
+
392 
+
393 
+
394 
+
396 class SignedToUnsigned: public SinkBase, public Source
+
397 {
+
398 public:
+ +
402  virtual ~SignedToUnsigned();
+
403 
+
405  virtual void config(const Config &src_cfg);
+
407  virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite);
+
408 
+
409 protected:
+
411  void _process_int8(const RawBuffer &in, const RawBuffer &out);
+
413  void _process_int16(const RawBuffer &in, const RawBuffer &out);
+
414 
+
415 protected:
+
417  void (SignedToUnsigned::*_process)(const RawBuffer &in, const RawBuffer &out);
+ +
420 };
+
421 
+
422 
+
427 template <class Scalar>
+
428 class FreqShift: public Sink< std::complex<Scalar> >, public Source
+
429 {
+
430 public:
+
432  FreqShift(double shift, Scalar scale=1.0)
+
433  : Sink< std::complex<Scalar> >(), Source(),
+
434  _shift(shift), _scale(scale), _factor(1), _sample_rate(0), _delta(1)
+
435  {
+
436  // pass...
+
437  }
+
438 
+
440  virtual ~FreqShift() {
+
441  // pass...
+
442  }
+
443 
+
445  inline double shift() const { return _shift; }
+
446 
+
448  void setShift(double shift) {
+
449  // Update delta
+
450  _shift = shift;
+
451  _delta = exp(std::complex<double>(0,2*M_PI*_shift/_sample_rate));
+
452  }
+
453 
+
455  virtual void config(const Config &src_cfg) {
+
456  // Requires type, samplerate & buffersize
+
457  if ((Config::Type_UNDEFINED==src_cfg.type()) || (0==src_cfg.sampleRate()) || (0==src_cfg.bufferSize())) { return; }
+
458  // Assert type
+
459  if (src_cfg.type() != Config::typeId< std::complex<Scalar> >()) {
+
460  ConfigError err;
+
461  err << "Can not configure FreqShift node: Invalid source type " << src_cfg.type()
+
462  << ", expected " << Config::typeId< std::complex<Scalar> >();
+
463  throw err;
+
464  }
+
465  // Allocate buffer
+ +
467  // Store sample rate
+
468  _sample_rate = src_cfg.sampleRate();
+
469  // Precalc delta
+
470  _delta = exp(std::complex<double>(0,2*M_PI*_shift/_sample_rate));
+
471  // reset factor
+
472  _factor = 1;
+
473 
+
474  LogMessage msg(LOG_DEBUG);
+
475  msg << "Configure FreqShift node:" << std::endl
+
476  << " shift: " << _shift << std::endl
+
477  << " scale: " << _scale << std::endl
+
478  << " sample-rate: " << src_cfg.sampleRate() << std::endl
+
479  << " buffer-suize: " << src_cfg.bufferSize();
+
480  Logger::get().log(msg);
+
481 
+
482  // Propergate config
+
483  this->setConfig(Config(Config::typeId< std::complex<Scalar> >(), src_cfg.sampleRate(),
+
484  src_cfg.bufferSize(), 1));
+
485  }
+
486 
+
488  virtual void process(const Buffer<std::complex<Scalar> > &buffer, bool allow_overwrite) {
+
489  // Shift freq:
+
490  for (size_t i=0; i<buffer.size(); i++) {
+
491  _buffer[i] = (double(_scale)*_factor)*buffer[i]; _factor *= _delta;
+
492  }
+
493  // Send buffer
+
494  this->send(_buffer);
+
495  }
+
496 
+
497 protected:
+ +
501  double _shift;
+
503  Scalar _scale;
+
505  std::complex<double> _factor;
+
507  double _sample_rate;
+
509  std::complex<double> _delta;
+
510 };
+
511 
+
512 
+
514 template<class Scalar>
+
515 class StreamSource: public Source
+
516 {
+
517 public:
+
519  StreamSource(std::istream &stream, double sample_rate=1, size_t buffersize=1024)
+
520  : Source(), _stream(stream), _buffer(buffersize)
+
521  {
+
522  // Assemble config for stream:
+
523  this->_config = Config(Config::typeId<Scalar>(), sample_rate, buffersize, 1);
+
524  }
+
525 
+
528  void next() {
+
529  if(_stream.eof()) { Queue::get().stop(); return; }
+
530  int len = _stream.read(_buffer.ptr(), _buffer.storageSize());
+
531  if (len > 0) {
+
532  this->send(_buffer.head(len/sizeof(Scalar)));
+
533  }
+
534  }
+
535 
+
536 protected:
+
538  std::istream &_stream;
+ +
541 };
+
542 
+
543 
+
545 template <class Scalar>
+
546 class StreamSink: public Sink<Scalar>
+
547 {
+
548 public:
+
550  StreamSink(std::ostream &stream)
+
551  : Sink<Scalar>(), _stream(stream)
+
552  {
+
553  // pass...
+
554  }
+
555 
+
557  virtual void config(const Config &src_cfg) {
+
558  if (Config::Type_UNDEFINED == src_cfg.type()) { return; }
+
559  if (src_cfg.type() != Config::typeId<Scalar>()) {
+
560  ConfigError err;
+
561  err << "Can not configure StreamSink: Invalid buffer type " << src_cfg.type()
+
562  << ", expected " << Config::typeId<Scalar>();
+
563  throw err;
+
564  }
+
565  // done...
+
566  }
+
567 
+
569  virtual void process(const Buffer<Scalar> &buffer, bool allow_overwrite) {
+
571  _stream.write(buffer.data(), buffer.size()*sizeof(Scalar));
+
572  }
+
573 
+
574 protected:
+
576  std::ostream &_stream;
+
577 };
+
578 
+
579 
+
580 
+
581 
+
583 template <class Scalar>
+
584 class Scale : public Sink<Scalar>, public Source
+
585 {
+
586 public:
+
588  Scale(float scale=1, Scalar shift=0)
+
589  : Sink<Scalar>(), Source(), _scale(scale), _shift(shift)
+
590  {
+
591  // pass...
+
592  }
+
593 
+
595  virtual ~Scale() {
+
596  // pass...
+
597  }
+
598 
+
600  virtual void config(const Config &src_cfg) {
+
601  // Check for type & buffer size
+
602  if (!src_cfg.hasType() || !src_cfg.bufferSize()) { return; }
+
603  // Check type
+
604  if (Config::typeId<Scalar>() != src_cfg.type()) {
+
605  ConfigError err;
+
606  err << "Can not configure Scale node: Invalid type " << src_cfg.type()
+
607  << ", expected " << Config::typeId<Scalar>();
+
608  throw err;
+
609  }
+
610  // Allocate buffer
+
611  _buffer = Buffer<Scalar>(src_cfg.bufferSize());
+
612  // Done, propergate config
+
613  this->setConfig(src_cfg);
+
614  }
+
615 
+
617  virtual void process(const Buffer<Scalar> &buffer, bool allow_overwrite) {
+
618  if ((1 == _scale) && (Scalar(0) == _shift)) {
+
619  this->send(buffer, allow_overwrite);
+
620  } else if (allow_overwrite) {
+
621  // Scale inplace
+
622  for (size_t i=0; i<buffer.size(); i++) { buffer[i] *= _scale; }
+
623  this->send(buffer, allow_overwrite);
+
624  } else if (_buffer.isUnused()) {
+
625  // Scale out-of-place
+
626  for (size_t i=0; i<buffer.size(); i++) { _buffer[i] = _scale*_buffer[i]; }
+
627  this->send(_buffer.head(buffer.size()), true);
+
628  }
+
629  // else if buffer is still in use -> drop buffer...
+
630  }
+
631 
+
632 protected:
+ +
636  float _scale;
+
638  Scalar _shift;
+
639 };
+
640 
+
641 
+
642 
+
644 template <class Scalar>
+
645 class AGC: public Sink<Scalar>, public Source
+
646 {
+
647 public:
+
649  AGC(double tau=0.1, double target=0)
+
650  : Sink<Scalar>(), Source(), _enabled(true), _tau(tau), _lambda(0), _sd(0),
+
651  _target(target), _gain(1), _sample_rate(0)
+
652  {
+
653  if (0 == target) {
+
654  // Determine target by scalar type
+
655  switch (Config::typeId<Scalar>()) {
+
656  case Config::Type_u8:
+
657  case Config::Type_s8:
+
658  case Config::Type_cu8:
+
659  case Config::Type_cs8:
+
660  _target = 64; break;
+
661  case Config::Type_u16:
+
662  case Config::Type_s16:
+
663  case Config::Type_cu16:
+
664  case Config::Type_cs16:
+
665  _target = 16000; break;
+
666  case Config::Type_f32:
+
667  case Config::Type_f64:
+
668  case Config::Type_cf32:
+
669  case Config::Type_cf64:
+
670  _target = 0.5; break;
+
671  case Config::Type_UNDEFINED: {
+
672  ConfigError err; err << "Can not configure AGC node: Unsupported type."; throw err;
+
673  }
+
674  }
+
675  }
+
676  _sd = _target;
+
677  }
+
678 
+
680  inline bool enabled() const {
+
681  return _enabled;
+
682  }
+
683 
+
685  inline void enable(bool enabled) {
+
686  _enabled = enabled;
+
687  }
+
688 
+
690  inline float gain() const {
+
691  return _gain;
+
692  }
+
693 
+
695  inline void setGain(float gain) {
+
696  _gain = gain;
+
697  }
+
698 
+
700  inline double tau() const {
+
701  return _tau;
+
702  }
+
703 
+
705  inline void setTau(double tau) {
+
706  // calc decay factor
+
707  _tau = tau;
+
708  _lambda = exp(-1./(_tau*_sample_rate));
+
709  }
+
710 
+
712  virtual void config(const Config &src_cfg) {
+
713  // Need sample rate & type
+
714  if (!src_cfg.hasType() || !src_cfg.hasSampleRate() || !src_cfg.hasBufferSize()) { return; }
+
715  if (Config::typeId<Scalar>() != src_cfg.type()) {
+
716  ConfigError err;
+
717  err << "Can not configure AGC node: Invalid type " << src_cfg.type()
+
718  << ", expected " << Config::typeId<Scalar>();
+
719  throw err;
+
720  }
+
721 
+
722  // calc decay factor
+
723  _sample_rate = src_cfg.sampleRate();
+
724  _lambda = exp(-1./(_tau*src_cfg.sampleRate()));
+
725  // reset variance
+
726  _sd = _target;
+
727 
+
728  // Allocate buffer
+
729  _buffer = Buffer<Scalar>(src_cfg.bufferSize());
+
730 
+
731  LogMessage msg(LOG_DEBUG);
+
732  msg << "Configured AGC:" << std::endl
+
733  << " type: " << src_cfg.type() << std::endl
+
734  << " sample-rate: " << src_cfg.sampleRate() << std::endl
+
735  << " tau: " << _tau << std::endl
+
736  << " lambda [1/s]: " << pow(_lambda, src_cfg.sampleRate()) << std::endl
+
737  << " lambda [1/sam]: " << _lambda << std::endl
+
738  << " target value: " << _target;
+
739  Logger::get().log(msg);
+
740 
+
741  // Propergate config
+
742  this->setConfig(Config(Config::typeId<Scalar>(), src_cfg.sampleRate(),
+
743  src_cfg.bufferSize(), 1));
+
744  }
+
745 
+
746 
+
748  virtual void process(const Buffer<Scalar> &buffer, bool allow_overwrite) {
+
749  // Simply forward buffer if disabled
+
750  if ((! _enabled) && (0 == _gain) ) {
+
751  this->send(buffer, allow_overwrite); return;
+
752  }
+
753  // Update signal ampl
+
754  for (size_t i=0; i<buffer.size(); i++) {
+
755  _sd = _lambda*_sd + (1-_lambda)*std::abs(buffer[i]);
+
756  if (_enabled) { _gain = _target/(4*_sd); }
+
757  _buffer[i] = _gain*buffer[i];
+
758  }
+
759  this->send(_buffer);
+
760  }
+
761 
+
762 
+
763 protected:
+
765  bool _enabled;
+
767  float _tau;
+
769  float _lambda;
+
771  float _sd;
+
773  float _target;
+
775  float _gain;
+
777  double _sample_rate;
+ +
780 };
+
781 
+
782 
+
784 template <class Scalar>
+
785 class DebugStore: public Sink<Scalar>
+
786 {
+
787 public:
+
789  DebugStore() : Sink<Scalar>(), _buffer(), _view() { }
+
790  virtual ~DebugStore() {
+
791  _buffer.unref();
+
792  }
+
793 
+
795  virtual void config(const Config &src_cfg) {
+
796  // Requires type and buffer size
+
797  if (!src_cfg.hasType() || !src_cfg.hasBufferSize()) { return; }
+
798  // Check type
+
799  if (Config::typeId<Scalar>() != src_cfg.type()) {
+
800  ConfigError err;
+
801  err << "Can not configure DebugStore node: Invalid input type " << src_cfg.type()
+
802  << ", expected " << Config::typeId<Scalar>();
+
803  throw err;
+
804  }
+
805  // Allocate buffer
+
806  _buffer = Buffer<Scalar>(src_cfg.bufferSize());
+
807  }
+
808 
+
810  virtual void process(const Buffer<Scalar> &buffer, bool allow_overwrite) {
+
811  size_t N = std::min(buffer.size(), _buffer.size());
+
812  memcpy(_buffer.ptr(), buffer.data(), N*sizeof(Scalar));
+
813  // Store view
+
814  _view = _buffer.head(N);
+
815  }
+
816 
+
818  inline const Buffer<Scalar> &buffer() const { return _view; }
+
820  inline void clear() { _view = Buffer<Scalar>(); }
+
821 
+
822 public:
+ + +
827 };
+
828 
+
829 
+
831 template <class Scalar>
+
832 class DebugDump: public Sink<Scalar>
+
833 {
+
834 public:
+
836  DebugDump(std::ostream &stream=std::cerr)
+
837  : Sink<Scalar>(), _stream(stream)
+
838  {
+
839  // pass...
+
840  }
+
841 
+
843  virtual ~DebugDump() {
+
844  // pass...
+
845  }
+
846 
+
848  virtual void config(const Config &src_cfg) {
+
849  // Requires type
+
850  if (!src_cfg.hasType()) { return; }
+
851  // check type
+
852  if (Config::typeId<Scalar>() != src_cfg.type()) {
+
853  ConfigError err;
+
854  err << "Can not configure DebugDump sink: Invalid input type " << src_cfg.type()
+
855  << ", expected " << Config::typeId<Scalar>();
+
856  throw err;
+
857  }
+
858  // Done...
+
859  }
+
860 
+
862  virtual void process(const Buffer<Scalar> &buffer, bool allow_overwrite) {
+
863  _stream << buffer << std::endl;
+
864  }
+
865 
+
866 protected:
+
868  std::ostream &_stream;
+
869 };
+
870 
+
871 
+
873 template <class Scalar>
+
874 class GWNSource: public Source
+
875 {
+
876 public:
+
878  GWNSource(double sample_rate, size_t buffer_size=1024)
+
879  : Source(), _sample_rate(sample_rate), _buffer_size(buffer_size), _buffer(_buffer_size),
+
880  _mean(0)
+
881  {
+
882  // Seed RNG
+
883  std::srand(std::time(0));
+
884  // Determine mean
+
885  switch (Config::typeId<Scalar>()) {
+
886  case Config::Type_u8:
+
887  case Config::Type_cu8:
+
888  case Config::Type_u16:
+
889  case Config::Type_cu16:
+
890  _mean = 1;
+
891  break;
+
892  default:
+
893  _mean = 0;
+
894  break;
+
895  }
+
896  // Propergate config
+
897  setConfig(Config(Config::typeId<Scalar>(), _sample_rate, _buffer_size, 1));
+
898  }
+
899 
+
901  virtual ~GWNSource() {
+
902  _buffer.unref();
+
903  }
+
904 
+
908  void next() {
+
909  double a,b;
+
910  for (size_t i=0; i<_buffer_size; i+=2) {
+
911  _getNormal(a,b);
+
912  _buffer[i] = Scalar(Traits<Scalar>::scale*(a+_mean));
+
913  _buffer[i+1] = Scalar(Traits<Scalar>::scale*(b+_mean));
+
914  }
+
915  if (_buffer_size%2) {
+
916  _getNormal(a,b); _buffer[_buffer_size-1] = Scalar(Traits<Scalar>::scale*(a+_mean));
+
917  }
+
918  this->send(_buffer, true);
+
919  }
+
920 
+
921 
+
922 protected:
+
924  void _getNormal(double &a, double &b) {
+
925  // Obtain pair of std. normal floating point values
+
926  double x = 2*(double(std::rand())/RAND_MAX) - 1;
+
927  double y = 2*(double(std::rand())/RAND_MAX) - 1;
+
928  double s = std::sqrt(x*x + y*y);
+
929  while (s >= 1) {
+
930  x = 2*(double(std::rand())/RAND_MAX) - 1;
+
931  y = 2*(double(std::rand())/RAND_MAX) - 1;
+
932  s = std::sqrt(x*x + y*y);
+
933  }
+
934  a = x*std::sqrt(-2*log(s)/s);
+
935  b = y*std::sqrt(-2*log(s)/s);
+
936  }
+
937 
+
938 protected:
+
940  double _sample_rate;
+
942  size_t _buffer_size;
+ +
946  double _mean;
+
947 };
+
948 
+
949 }
+
950 
+
951 #endif // __SDR_UTILS_HH__
+
void enable(bool enabled)
Enable/disable the AGC node.
Definition: utils.hh:685
+
virtual void process(const Buffer< iScalar > &buffer, bool allow_overwrite)
Casts the input real buffer into the complex output buffer.
Definition: utils.hh:236
+
Buffer< Scalar > _buffer
A pre-allocated buffer, that will hold the last data received.
Definition: utils.hh:824
+
void _process_int16(const RawBuffer &in, const RawBuffer &out)
Performs the cast for uint16 -> int16.
Definition: utils.cc:91
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
double _sample_rate
The sample rate.
Definition: utils.hh:940
+
void setGain(float gain)
Resets the current gain factor.
Definition: utils.hh:695
+
RawBuffer _buffer
The output buffer, unused if the cast can be performed in-place.
Definition: utils.hh:388
+
Complex (aka I/Q) type of 32bit floats aka. std::complex<float>.
Definition: node.hh:35
+
oScalar _scale
The scaling.
Definition: utils.hh:355
+
virtual void process(const Buffer< Scalar > &buffer, bool allow_overwrite)
Dumps the received buffer.
Definition: utils.hh:862
+
float gain() const
Returns the current gain factor.
Definition: utils.hh:690
+
virtual void config(const Config &src_cfg)
Configures the cast node.
Definition: utils.cc:117
+
float _tau
The time-constant of the AGC.
Definition: utils.hh:767
+
Base class of all buffers, represents an untyped array of bytes.
Definition: buffer.hh:32
+
double _scale
The scale.
Definition: utils.hh:75
+
void setShift(double shift)
Sets the frequency shift.
Definition: utils.hh:448
+
Config _config
Holds the source configuration, this can be updated by calling setConfig.
Definition: node.hh:237
+
virtual void process(const Buffer< Scalar > &buffer, bool allow_overwrite)
Performs the amplification and adjusts the gain.
Definition: utils.hh:748
+
virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite)
Performs the cast.
Definition: utils.cc:158
+
Scalar _scale
The optional scale.
Definition: utils.hh:503
+
double scale() const
Returns the scaling.
Definition: utils.hh:326
+
Cast(oScalar scale=1, iScalar shift=0)
Constructs a type-cast with optional scaleing.
Definition: utils.hh:271
+
virtual ~Scale()
Destructor.
Definition: utils.hh:595
+
Buffer< std::complex< oScalar > > _buffer
The output buffer.
Definition: utils.hh:254
+
Real signed 16b ints.
Definition: node.hh:28
+
virtual ~SignedToUnsigned()
Destructor.
Definition: utils.cc:112
+
Performs a reinterprete cast from an unsinged value to a singed one.
Definition: utils.hh:365
+
A Gaussian White Noise source.
Definition: utils.hh:874
+
virtual void send(const RawBuffer &buffer, bool allow_overwrite=false)
Sends the given buffer to all connected sinks.
Definition: node.cc:67
+
const Buffer< Scalar > & buffer() const
Retunrs a reference to the last received buffer.
Definition: utils.hh:818
+
static Queue & get()
Get a reference to the global instance of the queue.
Definition: queue.cc:15
+
DebugStore()
Constrctor.
Definition: utils.hh:789
+
virtual void config(const Config &src_cfg)
Configures the raw sink.
Definition: utils.hh:557
+
virtual void config(const Config &src_cfg)
Configures the cast node.
Definition: utils.cc:20
+
Typed sink.
Definition: node.hh:176
+
Extracts the real or imaginary part of a complex valued data stream.
Definition: utils.hh:16
+
Scale(float scale=1, Scalar shift=0)
Constructs the scaling node.
Definition: utils.hh:588
+
double _shift
The frequency shift in Hz ( ).
Definition: utils.hh:501
+
double _sample_rate
The current sample-rate.
Definition: utils.hh:777
+
Complex (aka I/Q) type of unsigned 16b ints.
Definition: node.hh:33
+
void setBalance(double balance)
Sets the I/Q balance.
Definition: utils.hh:149
+
size_t numBuffers() const
Returns the max.
Definition: node.hh:73
+
bool isEmpty() const
Returns true if the buffer is invalid/empty.
Definition: buffer.hh:77
+
Real signed 8b ints.
Definition: node.hh:26
+
StreamSource(std::istream &stream, double sample_rate=1, size_t buffersize=1024)
Constructs a raw input source.
Definition: utils.hh:519
+
void(UnsignedToSigned::* _process)(const RawBuffer &in, const RawBuffer &out)
Type-cast callback.
Definition: utils.hh:386
+
size_t storageSize() const
Returns the raw buffer size in bytes.
Definition: buffer.hh:75
+
Performs a frequency shift on a complex input signal, by multiplying it with .
Definition: utils.hh:428
+
ToComplex(double scale=1.0)
Constructor.
Definition: utils.hh:210
+
void stop()
Signals the queue to stop processing.
Definition: queue.cc:64
+
bool hasSampleRate() const
If true, the configuration has a sample rate.
Definition: node.hh:59
+
Generic source class.
Definition: node.hh:197
+
Real unsigned 8b ints.
Definition: node.hh:25
+
int refCount() const
Returns the reference counter.
Definition: buffer.hh:84
+
Explicit type cast node.
Definition: utils.hh:261
+
SignedToUnsigned()
Constructor with optional scaleing.
Definition: utils.cc:106
+
virtual void config(const Config &src_cfg)
Configures the node.
Definition: utils.hh:795
+
Traits< iScalar >::SScalar iSScalar
Specifies the input super scalar.
Definition: utils.hh:265
+
Buffer< Scalar > _buffer
The output buffer.
Definition: utils.hh:779
+
virtual void process(const Buffer< Scalar > &buffer, bool allow_overwrite)
Stores the given buffer.
Definition: utils.hh:810
+
virtual void process(const Buffer< iScalar > &buffer, bool allow_overwrite)
Performs the type-cast node.
Definition: utils.hh:312
+
virtual void process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
Performs the frequency shift.
Definition: utils.hh:488
+
size_t size() const
Returns the number of elements of type T in this buffer.
Definition: buffer.hh:166
+
bool hasType() const
If true, the configuration has a type.
Definition: node.hh:53
+
int32_t _imagFact
Scaleing factor for the imaginary part.
Definition: utils.hh:197
+
FreqShift(double shift, Scalar scale=1.0)
Constructs a frequency shift node with optional scaleing of the result.
Definition: utils.hh:432
+
std::ostream & _stream
The output stream.
Definition: utils.hh:576
+
void setScale(double scale)
Sets the scaling.
Definition: utils.hh:329
+
virtual ~DebugDump()
Destructor.
Definition: utils.hh:843
+
Real 64b floats aka. "double".
Definition: node.hh:30
+
char * data() const
Returns the pointer to the data of the buffer view.
Definition: buffer.hh:69
+
Real unsigned 16b ints.
Definition: node.hh:27
+
size_t _buffer_size
The size of the buffer.
Definition: utils.hh:942
+
AGC(double tau=0.1, double target=0)
Constructor.
Definition: utils.hh:649
+
virtual void setConfig(const Config &config)
Stores the configuration and propergates it if the configuration has been changed.
Definition: node.cc:98
+
void(SignedToUnsigned::* _process)(const RawBuffer &in, const RawBuffer &out)
Type-cast callback.
Definition: utils.hh:417
+
virtual void config(const Config &src_cfg)
Configures the node.
Definition: utils.hh:217
+
Buffer< T > head(size_t n) const
Returns a new view on this buffer.
Definition: buffer.hh:237
+
double _scale
The scale.
Definition: utils.hh:252
+
void _process_int16(const RawBuffer &in, const RawBuffer &out)
Performs the int16 -> uint16 cast.
Definition: utils.cc:181
+
Buffer< Scalar > _buffer
The output buffer.
Definition: utils.hh:944
+
GWNSource(double sample_rate, size_t buffer_size=1024)
Constructor.
Definition: utils.hh:878
+
double balance() const
Retunrs the balance.
Definition: utils.hh:141
+
double tau() const
Returns the time-constant of the AGC.
Definition: utils.hh:700
+
float _sd
The averaged std.
Definition: utils.hh:771
+
Selects the real part of a complex signal.
Definition: utils.hh:81
+
std::ostream & _stream
A reference to the output stream.
Definition: utils.hh:868
+
virtual ~UnsignedToSigned()
Destructor.
Definition: utils.cc:15
+
Buffer< Scalar > _buffer
The output buffer.
Definition: utils.hh:71
+
virtual void process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
Processes the incomming data.
Definition: utils.hh:55
+
virtual void process(const Buffer< Scalar > &buffer, bool allow_overwrite)
Dumps the buffer into the stream as raw data.
Definition: utils.hh:569
+
virtual ~IQBalance()
Destructor.
Definition: utils.hh:136
+
double _sample_rate
The current sample rate.
Definition: utils.hh:507
+
void log(const LogMessage &message)
Logs a message.
Definition: logger.cc:100
+
Traits< Scalar >::SScalar SScalar
The internal used compute scalar.
Definition: utils.hh:113
+
RealImagPart(bool select_real, double scale=1.0)
Constructor.
Definition: utils.hh:21
+
double _mean
The mean value of the GWN.
Definition: utils.hh:946
+
Type type() const
Returns the type.
Definition: node.hh:55
+
void _process_int8(const RawBuffer &in, const RawBuffer &out)
Performs the cast for uint8 -> int8.
Definition: utils.cc:78
+
Selects the imaginary part of a complex signal.
Definition: utils.hh:95
+
virtual void process(const Buffer< Scalar > &buffer, bool allow_overwrite)
Performs the scaleing.
Definition: utils.hh:617
+
Buffer< Scalar > _view
A view to the last data received.
Definition: utils.hh:826
+
virtual void config(const Config &src_cfg)
Configures the type-cast node.
Definition: utils.hh:279
+
Buffer< std::complex< Scalar > > _buffer
The output buffer.
Definition: utils.hh:499
+
DebugDump(std::ostream &stream=std::cerr)
Constructor.
Definition: utils.hh:836
+
Performs a reinterprete cast from an unsinged value to a singed one.
Definition: utils.hh:396
+
Simple scaling node.
Definition: utils.hh:584
+
iScalar _shift
Another scaling, using integer shift operation (faster).
Definition: utils.hh:357
+
float _scale
Holds the scaleing.
Definition: utils.hh:390
+
A simple node, that allows to balance an IQ signal.
Definition: utils.hh:109
+
Buffer< std::complex< Scalar > > _buffer
The working buffer.
Definition: utils.hh:199
+
static Type typeId()
Returns the type-id of the template type.
+
double shift() const
Returns the frequency shift.
Definition: utils.hh:445
+
static Logger & get()
Returns the singleton instance of the logger.
Definition: logger.cc:89
+
Reads raw samples from an imput stream, (ie a file).
Definition: utils.hh:515
+
virtual void config(const Config &src_cfg)
Configures the dump-node.
Definition: utils.hh:848
+
Scalar _shift
Alternative formulation for the scaling, using integer shift operators.
Definition: utils.hh:638
+
Dumps buffers in a human readable form.
Definition: utils.hh:832
+
Real 32b floats aka. "float".
Definition: node.hh:29
+
bool _select_real
Real/Imag selection.
Definition: utils.hh:73
+
The configuration error class.
Definition: exception.hh:24
+
A log message.
Definition: logger.hh:21
+
Traits< oScalar >::SScalar oSScalar
Specified the output super scalar.
Definition: utils.hh:267
+
Keeps a copy of the last buffer received.
Definition: utils.hh:785
+
size_t bufferSize() const
Returns the max.
Definition: node.hh:67
+
void next()
Samples and emits the next chunk of data.
Definition: utils.hh:908
+
void _process(const Buffer< iScalar > &in, const Buffer< oScalar > &out)
Internal used method to perform the type-case out-of-place.
Definition: utils.hh:336
+
virtual void config(const Config &src_cfg)
Configures the scaleing node.
Definition: utils.hh:600
+
virtual void handleBuffer(const RawBuffer &buffer, bool allow_overwrite)
Performs the cast.
Definition: utils.cc:64
+
std::istream & _stream
The input stream.
Definition: utils.hh:538
+
Basic interface of all Sinks.
Definition: node.hh:158
+
float _lambda
One over the time-constant.
Definition: utils.hh:769
+
char * ptr() const
Returns the pointer to the data (w/o view).
Definition: buffer.hh:67
+
Complex (aka I/Q) type of signed 8b ints.
Definition: node.hh:32
+
float _scale
The scaling.
Definition: utils.hh:636
+
Buffer< Scalar > _buffer
The output buffer.
Definition: utils.hh:540
+
void clear()
Clears the buffer.
Definition: utils.hh:820
+
void setTau(double tau)
Sets the time-constant of the AGC.
Definition: utils.hh:705
+
void _process_int8(const RawBuffer &in, const RawBuffer &out)
Performs the int8 -> uint8 cast.
Definition: utils.cc:172
+
bool _do_scale
If true, the output gets scaled.
Definition: utils.hh:353
+
int32_t _realFact
Scaleing factor for the real part.
Definition: utils.hh:195
+
Tiny helper node to transform a real part into a complex, including a possible type-cast.
Definition: utils.hh:206
+
RealPart(double scale=1.0)
Constructor.
Definition: utils.hh:85
+
Complex (aka I/Q) type of signed 16b ints.
Definition: node.hh:34
+
Complex (aka I/Q) type of unsigned 8b ints.
Definition: node.hh:31
+
std::complex< double > _factor
The current exponental factor, gets updated for every sample.
Definition: utils.hh:505
+
virtual void config(const Config &src_cfg)
Configures the node.
Definition: utils.hh:28
+
void unref()
Dereferences the buffer.
Definition: buffer.cc:61
+
bool isUnused() const
We assume here that buffers are owned by some object: A buffer is therefore "unused" if the owner hol...
Definition: buffer.hh:87
+
UnsignedToSigned(float scale=1.0)
Constructor with optional scaleing.
Definition: utils.cc:9
+
Buffer< oScalar > _buffer
The output buffer, unused if the type-cast is performed in-place .
Definition: utils.hh:359
+
StreamSink(std::ostream &stream)
Constructor.
Definition: utils.hh:550
+
bool enabled() const
Returns true, if the AGC is enabled.
Definition: utils.hh:680
+
std::complex< double > _delta
.
Definition: utils.hh:509
+
float _target
The target level of the output signal.
Definition: utils.hh:773
+
Forward declaration of type tratis template.
Definition: traits.hh:20
+
virtual ~GWNSource()
Destructor.
Definition: utils.hh:901
+
Buffer< Scalar > _buffer
The output buffer, unused if the scaling is performed in-place.
Definition: utils.hh:634
+
float _gain
The current gain factor.
Definition: utils.hh:775
+
RawBuffer _buffer
The output buffer, unused if the cast is performed in-place.
Definition: utils.hh:419
+
bool _can_overwrite
If true, the type-cast (an scaleing) can be performed in-place.
Definition: utils.hh:351
+
void _process(const Buffer< std::complex< Scalar > > &in, const Buffer< std::complex< Scalar > > &out)
The actual implementation.
Definition: utils.hh:186
+
An automatic gain control node.
Definition: utils.hh:645
+
void next()
Reads the next chunk.
Definition: utils.hh:528
+
virtual void config(const Config &src_cfg)
Configures the frequency shift node.
Definition: utils.hh:455
+
virtual void config(const Config &src_cfg)
Configures the AGC node.
Definition: utils.hh:712
+
Serializes the incomming buffers as raw data.
Definition: utils.hh:546
+
virtual void process(const Buffer< std::complex< Scalar > > &buffer, bool allow_overwrite)
Processes a buffer.
Definition: utils.hh:174
+
ImagPart(double scale=1.0)
Constructor.
Definition: utils.hh:99
+ +
bool hasBufferSize() const
If true, the configuration has a buffer size.
Definition: node.hh:65
+
virtual ~FreqShift()
Destructor.
Definition: utils.hh:440
+
void _getNormal(double &a, double &b)
Sample two std.
Definition: utils.hh:924
+
Complex (aka I/Q) type of 64bit floats aka. std::complex<double>.
Definition: node.hh:36
+
virtual void config(const Config &src_cfg)
Configures the node.
Definition: utils.hh:163
+
double sampleRate() const
Returns the sample rate.
Definition: node.hh:61
+
bool _enabled
If true, the automatic gain adjustment is enabled.
Definition: utils.hh:765
+
IQBalance(double balance=0.0)
Constructor.
Definition: utils.hh:120
+
+ + + + diff --git a/wavfile_8hh_source.html b/wavfile_8hh_source.html new file mode 100644 index 0000000..ba49a31 --- /dev/null +++ b/wavfile_8hh_source.html @@ -0,0 +1,292 @@ + + + + + + +libsdr: /home/hannes/sdr/libsdr/src/wavfile.hh Source File + + + + + + + + + +
+
+ + + + + + +
+
libsdr +  0.1.0 +
+
A simple SDR library
+
+
+ + + + + + + + + +
+ +
+ + +
+
+
+
wavfile.hh
+
+
+
1 #ifndef __SDR_WAVFILE_HH__
+
2 #define __SDR_WAVFILE_HH__
+
3 
+
4 #include "node.hh"
+
5 #include <fstream>
+
6 
+
7 namespace sdr {
+
8 
+
10 template <class Scalar>
+
11 class WavSink: public Sink<Scalar>
+
12 {
+
13 public:
+
16  WavSink(const std::string &filename)
+
17  : Sink<Scalar>(), _file(filename.c_str(), std::ios_base::out|std::ios_base::binary),
+ +
19  {
+
20  if (!_file.is_open()) {
+
21  ConfigError err;
+
22  err << "Can not open wav file for output: " << filename;
+
23  throw err;
+
24  }
+
25  // Fill first 36+8 bytes with 0, the headers are written once close() gets called.
+
26  for (size_t i=0; i<44; i++) { _file.write("\x00", 1); }
+
27 
+
28  // check format
+
29  switch (Config::typeId<Scalar>()) {
+
30  case Config::Type_u8:
+
31  case Config::Type_s8:
+
32  _bitsPerSample = 8;
+
33  _numChanels = 1;
+
34  break;
+
35  case Config::Type_cu8:
+
36  case Config::Type_cs8:
+
37  _bitsPerSample = 8;
+
38  _numChanels = 2;
+
39  break;
+
40  case Config::Type_u16:
+
41  case Config::Type_s16:
+
42  _bitsPerSample = 16;
+
43  _numChanels = 1;
+
44  break;
+
45  case Config::Type_cu16:
+
46  case Config::Type_cs16:
+
47  _bitsPerSample = 16;
+
48  _numChanels = 2;
+
49  break;
+
50  default:
+
51  ConfigError err;
+
52  err << "WAV format only allows (real) integer typed data.";
+
53  throw err;
+
54  }
+
55  }
+
56 
+
58  virtual ~WavSink() {
+
59  if (_file.is_open()) {
+
60  this->close();
+
61  }
+
62  }
+
63 
+
65  virtual void config(const Config &src_cfg) {
+
66  // Requires type, samplerate
+
67  if (!src_cfg.hasType() || !src_cfg.hasSampleRate()) { return; }
+
68  // Check if type matches
+
69  if (Config::typeId<Scalar>() != src_cfg.type()) {
+
70  ConfigError err;
+
71  err << "Can not configure WavSink: Invalid buffer type " << src_cfg.type()
+
72  << ", expected " << Config::typeId<Scalar>();
+
73  throw err;
+
74  }
+
75  // Store sample rate
+
76  _sampleRate = src_cfg.sampleRate();
+
77  }
+
78 
+
80  void close() {
+
81  if (! _file.is_open()) { return; }
+
82  uint32_t val4;
+
83  uint16_t val2;
+
84 
+
85  _file.seekp(0);
+
86  _file.write("RIFF", 4);
+
87  val4 = (uint32_t)(36u+2u*_frameCount); _file.write((char *)&val4, 4);
+
88  _file.write("WAVE", 4);
+
89 
+
90  _file.write("fmt ", 4);
+
91  val4 = 16; _file.write((char *)&val4, 4); // sub header size = 16
+
92  val2 = 1; _file.write((char *)&val2, 2); // format PCM = 1
+
93  _file.write((char *)&_numChanels, 2); // num chanels = 1
+
94  _file.write((char *)&_sampleRate, 4);
+ +
96  _file.write((char *)&val4, 4); // byte rate
+
97  val2 = _numChanels*(_bitsPerSample/8);
+
98  _file.write((char *)&val2, 2); // block align
+
99  _file.write((char *)&_bitsPerSample, 2); // bits per sample
+
100 
+
101  _file.write("data", 4);
+
102  val4 = _numChanels*_frameCount*(_bitsPerSample/8); _file.write((char *)&val4, 4);
+
103  _file.close();
+
104  }
+
105 
+
107  virtual void process(const Buffer<Scalar> &buffer, bool allow_overwrite) {
+
108  if (! _file.is_open()) { return; }
+
109  _file.write(buffer.data(), buffer.size()*sizeof(Scalar));
+
110  _frameCount += buffer.size();
+
111  }
+
112 
+
113 
+
114 protected:
+
116  std::fstream _file;
+
118  uint16_t _bitsPerSample;
+
120  uint32_t _frameCount;
+
122  uint32_t _sampleRate;
+
124  uint16_t _numChanels;
+
125 };
+
126 
+
127 
+
128 
+
131 class WavSource: public Source
+
132 {
+
133 public:
+
135  WavSource(size_t buffer_size=1024);
+
137  WavSource(const std::string &filename, size_t buffer_size=1024);
+
139  virtual ~WavSource();
+
140 
+
142  bool isOpen() const;
+
144  void open(const std::string &filename);
+
146  void close();
+
147 
+
149  bool isReal() const;
+
150 
+
152  void next();
+
153 
+
154 protected:
+
156  std::fstream _file;
+ +
160  size_t _buffer_size;
+
161 
+
163  size_t _frame_count;
+ +
167  double _sample_rate;
+
169  size_t _frames_left;
+
170 };
+
171 
+
172 }
+
173 
+
174 #endif // __SDR_WAVFILE_HH__
+
double _sample_rate
The sample rate.
Definition: wavfile.hh:167
+
A collection of configuration information that is send by a source to all connected sinks to properga...
Definition: node.hh:19
+
Base class of all buffers, represents an untyped array of bytes.
Definition: buffer.hh:32
+
WavSource(size_t buffer_size=1024)
Constructor, buffer_size specified the output buffer size.
Definition: wavfile.cc:9
+
Stores the received buffers into a WAV file.
Definition: wavfile.hh:11
+
Real signed 16b ints.
Definition: node.hh:28
+
Typed sink.
Definition: node.hh:176
+
Complex (aka I/Q) type of unsigned 16b ints.
Definition: node.hh:33
+
size_t _frames_left
The number of frames left to be read.
Definition: wavfile.hh:169
+
WavSink(const std::string &filename)
Constructor, filename specifies the file name, the WAV data is stored into.
Definition: wavfile.hh:16
+
Real signed 8b ints.
Definition: node.hh:26
+
A simple imput source that reads from a wav file.
Definition: wavfile.hh:131
+
uint16_t _bitsPerSample
The number of bits per sample (depends on the template type).
Definition: wavfile.hh:118
+
bool hasSampleRate() const
If true, the configuration has a sample rate.
Definition: node.hh:59
+
Generic source class.
Definition: node.hh:197
+
Real unsigned 8b ints.
Definition: node.hh:25
+
std::fstream _file
The file output stream.
Definition: wavfile.hh:116
+
void close()
Completes the WAV header and closes the file.
Definition: wavfile.hh:80
+
size_t size() const
Returns the number of elements of type T in this buffer.
Definition: buffer.hh:166
+
bool hasType() const
If true, the configuration has a type.
Definition: node.hh:53
+
Config::Type _type
The type of the data in the WAV file.
Definition: wavfile.hh:165
+
char * data() const
Returns the pointer to the data of the buffer view.
Definition: buffer.hh:69
+
Real unsigned 16b ints.
Definition: node.hh:27
+
size_t _buffer_size
The current buffer size.
Definition: wavfile.hh:160
+
uint32_t _sampleRate
The sample rate.
Definition: wavfile.hh:122
+
void open(const std::string &filename)
Open a new file.
Definition: wavfile.cc:33
+
virtual void process(const Buffer< Scalar > &buffer, bool allow_overwrite)
Writes some data into the WAV file.
Definition: wavfile.hh:107
+
Type type() const
Returns the type.
Definition: node.hh:55
+
uint32_t _frameCount
The total number of frame counts.
Definition: wavfile.hh:120
+
virtual void config(const Config &src_cfg)
Configures the sink.
Definition: wavfile.hh:65
+
void close()
Close the current file.
Definition: wavfile.cc:188
+
void next()
Read the next data.
Definition: wavfile.cc:199
+
The configuration error class.
Definition: exception.hh:24
+
virtual ~WavSink()
Destructor, closes the file if not done yet.
Definition: wavfile.hh:58
+
Type
The type IDs.
Definition: node.hh:23
+
RawBuffer _buffer
The output buffer.
Definition: wavfile.hh:158
+
uint16_t _numChanels
The number of chanels.
Definition: wavfile.hh:124
+
bool isOpen() const
Returns true if the file is open.
Definition: wavfile.cc:28
+
Complex (aka I/Q) type of signed 8b ints.
Definition: node.hh:32
+
Complex (aka I/Q) type of signed 16b ints.
Definition: node.hh:34
+
Complex (aka I/Q) type of unsigned 8b ints.
Definition: node.hh:31
+
std::fstream _file
The input file stream.
Definition: wavfile.hh:156
+
bool isReal() const
Returns true, if the input is real (stereo files are handled as I/Q signals).
Definition: wavfile.cc:194
+
size_t _frame_count
The number of available frames.
Definition: wavfile.hh:163
+ +
double sampleRate() const
Returns the sample rate.
Definition: node.hh:61
+
virtual ~WavSource()
Destructor.
Definition: wavfile.cc:23
+
+ + + +