Conflicts:
	src/autocast.hh
	src/baseband.hh
	src/freqshift.hh
	src/rtlsource.hh
	src/utils.hh
master
Hannes Matuschek 11 years ago
commit 6dde3c11c7

@ -1,21 +1,25 @@
Source: libsdr
Priority: extra
Maintainer: Hannes Matuschek <hmatuschek@gmail.com>
Build-Depends: cdbs (>= 0.4.51), dh-exec, debhelper (>= 8.0.0), cmake, qtbase5-dev (>= 5.0), portaudio19-dev, librtlsdr-dev, fftw3-dev
Standards-Version: 3.9.2
Build-Depends: cdbs (>= 0.4.51), dh-exec, debhelper (>= 9.0.0), cmake, portaudio19-dev, librtlsdr-dev, fftw3-dev
Standards-Version: 3.9.5
Section: hamradio
Homepage: http://github.com/hmatuschek/libsdr
Package: libsdr
Package: libsdr1
Section: hamradio
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}
Multi-Arch: same
Pre-Depends: multiarch-support, ${misc:Pre-Depends}
Depends: ${shlibs:Depends}, ${misc:Depends}, libportaudio2
Description: libsdr
A C++ library for software defined radio.
Package: libsdr-dev
Section: hamradio
Architecture: any
Depends: ${shlibs:Depends}, ${misc:Depends}, libsdr
Multi-Arch: same
Pre-Depends: multiarch-support, ${misc:Pre-Depends}
Depends: libsdr1 (= ${binary:Version}), ${misc:Depends}, portaudio19-dev, librtlsdr-dev, fftw3-dev, libsdr1
Description: libsdr
A C++ library for software defined radio. Development files.

@ -1,4 +1,3 @@
#! /usr/bin/dh-exec
/usr/lib/${DEB_HOST_MULTIARCH}/libsdr.so
/usr/lib/${DEB_HOST_MULTIARCH}/libsdr-gui.so
/usr/include/*
usr/lib/*/libsdr.so
usr/include/*

@ -1,3 +0,0 @@
#! /usr/bin/dh-exec
/usr/lib/${DEB_HOST_MULTIARCH}/libsdr.so.*
/usr/lib/${DEB_HOST_MULTIARCH}/libsdr-gui.so.*

@ -0,0 +1,2 @@
#! /usr/bin/dh-exec
usr/lib/*/libsdr.so.*

@ -8,7 +8,8 @@
namespace sdr {
/** This class performs some automatic casts to a certain buffer type (if possible) specified by
* the template argument. Currently only integer casts are supported. */
* the template argument. Currently only integer casts are supported.
* @ingroup datanodes */
template <class Scalar>
class AutoCast: public SinkBase, public Source
{

@ -16,7 +16,8 @@ namespace sdr {
* with width @c width) then shifts the center frequency @c Fc to 0 and finally sub-samples the
* resulting stream. This node can be used to select a portion of the input spectrum and for the
* reduction of the stream rate, allowing for some more expensive operations to be performed on the
* output stream. */
* output stream.
* @ingroup filters */
template <class Scalar>
class IQBaseBand: public Sink< std::complex<Scalar> >, public Source, public FreqShiftBase<Scalar>
{
@ -298,7 +299,8 @@ protected:
/** 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. */
* the selected base-band is well represented.
* @ingroup filters */
template <class Scalar>
class BaseBand: public Sink<Scalar>, public Source, public FreqShiftBase<Scalar>
{

@ -12,7 +12,8 @@
namespace sdr {
/** 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. */
* front of a node that performs a FFT transform, which requires a certain buffer size.
* @ingroup datanodes */
template <class Scalar>
class BufferNode : public Sink<Scalar>, public Source
{

@ -60,7 +60,8 @@ protected:
};
/** A combine node. This node allows to combine several streams into one. */
/** A combine node. This node allows to combine several streams into one.
* @ingroup datanodes */
template <class Scalar>
class Combine
{
@ -149,7 +150,8 @@ protected:
};
/** Interleaves several input streams. */
/** Interleaves several input streams.
* @ingroup datanodes */
template <class Scalar>
class Interleave : public Combine<Scalar>, public Source
{

@ -12,7 +12,8 @@
namespace sdr {
/** Amplitude modulation (AM) demodulator from an I/Q signal. */
/** Amplitude modulation (AM) demodulator from an I/Q signal.
* @ingroup demods */
template <class Scalar>
class AMDemod
: public Sink< std::complex<Scalar> >, public Source
@ -85,7 +86,8 @@ protected:
};
/** SSB upper side band (USB) demodulator from an I/Q signal. */
/** SSB upper side band (USB) demodulator from an I/Q signal.
* @ingroup demods */
template <class Scalar>
class USBDemod
: public Sink< std::complex<Scalar> >, public Source
@ -165,7 +167,10 @@ protected:
/** Demodulates FM from an I/Q signal. */
/** Demodulates FM from an I/Q signal.
* This node only implements the demodulation of the signal, the needed post-filtering (deemphasize)
* is implemented in a separate node, @c sdr::FMDeemph.
* @ingroup demods */
template <class iScalar, class oScalar=iScalar>
class FMDemod: public Sink< std::complex<iScalar> >, public Source
{
@ -281,7 +286,8 @@ protected:
};
/** A tiny node to de-emphasize the higher frequencies of a FM transmitted audio signal. */
/** A tiny node to de-emphasize the higher frequencies of a FM transmitted audio signal.
* @ingroup filters */
template <class Scalar>
class FMDeemph: public Sink<Scalar>, public Source
{

@ -226,7 +226,8 @@ protected:
};
/** A FFT filter bank node wich consists of several filters. */
/** A FFT filter bank node wich consists of several filters.
* @ingroup filters */
template <class Scalar>
class FilterNode
{

@ -111,7 +111,8 @@ public:
/** Generic FIR filter class. Use one of the specializations below for a low-, high- or band-pass
* filter. */
* filter.
* @ingroup filters */
template <class Scalar, class FilterCoeffs>
class FIRFilter: public Sink<Scalar>, public Source
{
@ -269,7 +270,8 @@ protected:
};
/** Low-pass FIR filter specialization. */
/** Low-pass FIR filter specialization.
* @ingroup filters */
template <class Scalar>
class FIRLowPass: public FIRFilter<Scalar, FIRLowPassCoeffs>
{
@ -285,7 +287,8 @@ public:
inline void setFreq(double freq) { FIRFilter<Scalar, FIRLowPassCoeffs>::setUpperFreq(freq); }
};
/** High-pass FIR filter specialization. */
/** High-pass FIR filter specialization.
* @ingroup filters */
template <class Scalar>
class FIRHighPass: public FIRFilter<Scalar, FIRHighPassCoeffs>
{
@ -302,7 +305,8 @@ public:
};
/** Band-pass FIR filter specialization. */
/** Band-pass FIR filter specialization.
* @ingroup filters */
template <class Scalar>
class FIRBandPass: public FIRFilter<Scalar, FIRBandPassCoeffs>
{
@ -314,7 +318,8 @@ public:
virtual ~FIRBandPass() { }
};
/** Band-stop FIR filter specialization. */
/** Band-stop FIR filter specialization.
* @ingroup filters */
template <class Scalar>
class FIRBandStop: public FIRFilter<Scalar, FIRBandStopCoeffs>
{

@ -8,7 +8,8 @@
namespace sdr {
/** A performant implementation of a frequency-shift operation on integer signals. */
/** A performant implementation of a frequency-shift operation on integer signals.
* @ingroup filters */
template <class Scalar>
class FreqShiftBase
{

@ -1,3 +1,19 @@
/** @defgroup sources Data sources.
* This module collects all data sources provided by libsdr.
*
* @defgroup sinks Data sinks.
* This module collects all data sinks provided by libsdr.
*
* @defgroup filters Filter and signal processing nodes.
* This group collects all filter and signal processing nodes provided by libsdr.
*
* @defgroup demods Demodulator nodes.
* This group collects all demodulation nodes.
*
* @defgroup datanodes Data handling nodes.
* This group collects all nodes related to data handling. I.e. type casts etc.
*/
#ifndef __SDR_NODE_HH__
#define __SDR_NODE_HH__
@ -294,7 +310,8 @@ private:
};
/** A NOP node. */
/** A NOP node.
* @ingroup filters */
class Proxy: public SinkBase, public Source
{
public:

@ -33,7 +33,8 @@ public:
};
/** PortAudio playback node. */
/** PortAudio playback node.
* @ingroup sinks */
class PortSink: public SinkBase
{
public:
@ -55,7 +56,8 @@ protected:
};
/** PortAudio input stream as a @c Source. */
/** PortAudio input stream as a @c Source.
* @ingroup sources */
template <class Scalar>
class PortSource: public Source
{

@ -11,7 +11,8 @@ namespace sdr {
/** 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 @c 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. */
* node uses a simple PLL to adjust for small detunings.
* @ingroup demod */
template <class Scalar>
class BPSK31: public Sink< std::complex<Scalar> >, public Source
{
@ -293,7 +294,8 @@ protected:
/** 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! */
* ignored. The output stream has no samplerate!
* @ingroup datanodes */
class Varicode: public Sink<uint8_t>, public Source
{
public:

@ -11,7 +11,8 @@ namespace sdr {
/** Implements a @c uint_8 I/Q source for RTL2832 based TV dongles.
* This source runs in its own thread, hence the user does not need to trigger the reception of
* the next data chunk explicitly. The reception is started by calling the @c start method and
* stopped by calling the @c stop method. */
* stopped by calling the @c stop method.
* @ingroup sources */
class RTLSource: public Source
{
public:

@ -6,7 +6,8 @@
namespace sdr {
/** Arbitrary function generator. */
/** Arbitrary function generator.
* @ingroup sources */
template <class Scalar>
class SigGen: public Source
{
@ -83,7 +84,8 @@ protected:
/** Arbitrary function generator. */
/** Arbitrary function generator.
* @ingroup sources */
template <class Scalar>
class IQSigGen: public Source
{

@ -10,7 +10,8 @@
namespace sdr {
/** Simple averaging sub-sampler. */
/** Simple averaging sub-sampler.
* @ingroup filters */
template <class Scalar>
class SubSample: public Sink<Scalar>, public Source
{
@ -188,7 +189,8 @@ protected:
/** 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. */
* subsampling it.
* @ingroup filters */
template <class iScalar, class oScalar = iScalar>
class InpolSubSampler: public Sink<iScalar>, public Source
{

@ -11,7 +11,8 @@
namespace sdr {
/** Extracts the real or imaginary part of a complex valued data stream. */
/** Extracts the real or imaginary part of a complex valued data stream.
* @ingroup datanodes */
template <class Scalar>
class RealImagPart: public Sink< std::complex<Scalar> >, public Source
{
@ -76,7 +77,8 @@ protected:
};
/** Selects the real part of a complex signal. */
/** Selects the real part of a complex signal.
* @ingroup datanodes */
template <class Scalar>
class RealPart: public RealImagPart<Scalar>
{
@ -90,7 +92,8 @@ public:
};
/** Selects the imaginary part of a complex signal. */
/** Selects the imaginary part of a complex signal.
* @ingroup datanodes */
template <class Scalar>
class ImagPart: public RealImagPart<Scalar>
{
@ -104,7 +107,8 @@ public:
};
/** A simple node, that allows to balance an IQ signal. */
/** A simple node, that allows to balance an IQ signal.
* @ingroup filters */
template <class Scalar>
class IQBalance: public Sink< std::complex<Scalar> >, public Source
{
@ -201,7 +205,8 @@ protected:
/** Tiny helper node to transform a real part into a complex, including
* a possible type-cast*/
* a possible type-cast
* @ingroup datanodes */
template <class iScalar, class oScalar=iScalar>
class ToComplex: public Sink<iScalar>, public Source
{
@ -256,7 +261,8 @@ protected:
/** Explicit type cast node. */
/** Explicit type cast node.
* @ingroup datanodes */
template <class iScalar, class oScalar>
class Cast : public Sink<iScalar>, public Source
{
@ -361,7 +367,8 @@ protected:
/** Performs a reinterprete cast from an unsinged value to a singed one. */
/** Performs a reinterprete cast from an unsinged value to a singed one.
* @ingroup datanodes */
class UnsignedToSigned: public SinkBase, public Source
{
public:
@ -392,7 +399,8 @@ protected:
/** Performs a reinterprete cast from an unsinged value to a singed one. */
/** Performs a reinterprete cast from an unsinged value to a singed one.
* @ingroup datanodes */
class SignedToUnsigned: public SinkBase, public Source
{
public:
@ -423,7 +431,8 @@ protected:
/** Performs a frequency shift on a complex input signal, by multiplying it with \f$e^{i\omega t}\f$.
* 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. */
* @deprecated Implement a more efficient variant using FreqShiftBase.
* @ingroup filters */
template <class Scalar>
class FreqShift: public Sink< std::complex<Scalar> >, public Source
{
@ -510,7 +519,8 @@ protected:
};
/** Reads raw samples from an imput stream, (ie a file). */
/** Reads raw samples from an imput stream, (ie a file).
* @ingroup sources */
template<class Scalar>
class StreamSource: public Source
{
@ -541,7 +551,8 @@ protected:
};
/** Serializes the incomming buffers as raw data. */
/** Serializes the incomming buffers as raw data.
* @ingroup sinks */
template <class Scalar>
class StreamSink: public Sink<Scalar>
{
@ -579,7 +590,8 @@ protected:
/** Simple scaling node. */
/** Simple scaling node.
* @ingroup filters */
template <class Scalar>
class Scale : public Sink<Scalar>, public Source
{
@ -640,7 +652,8 @@ protected:
/** An automatic gain control node. */
/** An automatic gain control node.
* @ingroup filters */
template <class Scalar>
class AGC: public Sink<Scalar>, public Source
{
@ -780,7 +793,8 @@ protected:
};
/** Keeps a copy of the last buffer received. */
/** Keeps a copy of the last buffer received.
* @ingroup sinks */
template <class Scalar>
class DebugStore: public Sink<Scalar>
{
@ -827,7 +841,8 @@ public:
};
/** Dumps buffers in a human readable form. */
/** Dumps buffers in a human readable form.
* @ingroup sinks*/
template <class Scalar>
class DebugDump: public Sink<Scalar>
{
@ -868,21 +883,26 @@ protected:
std::ostream &_stream;
};
/** Dumps the received uin8_t byte-stream as (ASCII) text.
* @ingroup sink */
class TextDump : public Sink<uint8_t>
{
public:
/** Constructor. @c stream specifies the ouput stream. */
TextDump(std::ostream &stream=std::cerr);
/** Configures the sink. */
virtual void config(const Config &src_cfg);
/** Processes the input stream. */
virtual void process(const Buffer<uint8_t> &buffer, bool allow_overwrite);
protected:
/** The output stream. */
std::ostream &_stream;
};
/** A Gaussian White Noise source. */
/** A Gaussian White Noise source.
* @ingroup sources */
template <class Scalar>
class GWNSource: public Source
{

@ -6,7 +6,8 @@
namespace sdr {
/** Stores the received buffers into a WAV file. */
/** Stores the received buffers into a WAV file.
* @ingroup sinks */
template <class Scalar>
class WavSink: public Sink<Scalar>
{
@ -127,7 +128,8 @@ protected:
/** A simple imput source that reads from a wav file. Some data is read from the file on every call
* to @c next until the end of file is reached. */
* to @c next until the end of file is reached.
* @ingroup sources */
class WavSource: public Source
{
public:

Loading…
Cancel
Save