• Stars
    star
    187
  • Rank 206,464 (Top 5 %)
  • Language
    C++
  • License
    GNU General Publi...
  • Created almost 11 years ago
  • Updated over 8 years ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

DSP Using C++ - Digital filters, Equalizers, Comm building blocks

SPUC - Signal Processing Using C++

Build status - Mac Os X, clang

Build Status

This is an update of code that has been on sourceforge for about 14 years. The genesis of this code goes back even further - before decent C++ template support and availability of a useful complex class.

Most of the filtering code reqired here is now from spuce library rather than inherent to this library Also most files now use MIT License (check each file)

To install via Homebrew

  • brew tap audiofilter/spuc
  • brew install spuce
  • brew install spuc (or brew install -HEAD spuc for latest sources (unstable)

Library documentation pages here : http://audiofilter.github.io/spuc/


Various Sub-projects also on Github

SPUC_FIXED - Fixed point class similiar to SystemC Build Status

SPUCE - Update of spuc. At this point FIRs,IIRs and Windows supported. Includes QT Examples Build Status


Background Info

Since the code on sourceforge, has not compiled for modern compilers for several years, this update fixes compiler errors and other bugs found in more real-life testing. Also various parts have been updated/upgraded.

For now this is merely an update and is lacking in other documentation and / or examples.

In addition to very very basic examples, there are some in graphic_examples that can be compiled and display data using OpenGL For this purpose the cpplot project files are added as a subdirectory. This should work fine on a Mac if you have Boost installed. The examples display impulse responses for various filters. There is also an example that display BER for an MLSE Equalizer as noise is added to the input.

Travis is being used to display the build integrity and uses Clang on Mac OSX 10.9. However, this should also work fine with GCC 4.8


Information (details on http://audiofilter.github.io/spuc/ )

SPUC was originally written since early C++ had no complex class as part of a standard. In addition we needed a complex class to support handling fixed-point data types to model real hardware in digital communication ASICs. After that many filtering classes and functions were added. This allowed trading off stopband and cut-off without having to go to Matlab to recalculate coefficients. So of the filter types supported are (now in spuce)

  • Butterworth
  • Chebyshev
  • Elliptic
  • Maximally flat FIR
  • Remez Equiripple
  • Raised Cosine FIR
  • Gaussian FIR
  • CIC
  • Notch filter
  • Cut/Boost Filter
  • Halfband/Subband IIR filters

Digital Filter types are either FIR or IIR Filters. To separate filter design from filter usage, there are typically different classes involved rather than putting everything into one class.

Thus there is

  • a FIR coefficient class and an IIR coefficient class
  • Separate functions that calculate coefficients for the Classic IIR Filters:
    • Butterworth
    • Chebyshev
    • Elliptic
  • Separate functions that calculate coefficients for the various FIR Filters as noted above

Then typically separate classes that can implement these filters

  • For IIR filters design can be broken down to biquad sections which is what is typically used in hard-ware

In addition to digital filtering this library handles resampling using

  • Polyphase filtering approach
  • Cascaded Integrate Comb filters (or CIC filters)
  • Irrational resampling with Farrow & Lagrange based filters

================================================================================

Equalizers

  • FIR Adaptive filters

    • FIR only
    • FIR with Decision Feedback Estimator
  • Recursive Least Squares Estimator

  • Maximum Likelihood Sequence Estimators

    • MLSD
    • DDFSE
    • RSDFSE

================================================================================

Digital Communication Building Blocks

  • Phase lock loops + various discriminators

    • For carrier frequency acquistion and tracking
    • For Symbol timing synchronization
  • Cordic processor

  • QPSK, QAM Single Carrier Modulators/Demodulators

  • OFDM

  • Convolutional Encoder + Viterbi Decoder

  • Fading Channel


Examples - QPSK BER Simulation for various SNR ratios in AWGN

QPSK BER


A QT App for filter design - Use mouse to shape filters

http://github.com/audiofilter/spuc_filter

Demo App in SPUC filter


Requirements

  • cmake
  • boost for graphic examples

Building

# First spuce
git clone https://github.com/audiofilter/spuce.git
cd spuce
mkdir build
cd build
cmake ..
make install
# Now spuc
cd ../..
mkdir build
cd build
cmake ..
make

Extra switches to CMake enable the various examples to be built

  • SPUC_BUILD_ALL - Build everything
  • SPUC_EXAMPLES - Build the examples
  • SPUC_GRAPHICS - Build the examples that requires gl,opengl, etc

More Repositories

1

spuce

A DSP digital filtering library - IIR/FIR filtering
C++
147
star
2

mex-it

Automatically mex C/C++ functions for Matlab or Octave (with C++11 compiler)
C++
29
star
3

nmflib

Code from http://www.ee.columbia.edu/~grindlay/code.html
MATLAB
25
star
4

spuc_filter

Qt5 demo app for spuce
C++
11
star
5

matlib

Collection of old matlab utilities and functions, both home made and downloaded from various sources
MATLAB
7
star
6

audio_scripts

Python scripts for manipulating audio in mp3s, etc, using lame ctypes interface on Mac OSX
Python
6
star
7

nbfm

Narrow band FM demodulator for RTL-SDR - mostly for experimentation
C++
5
star
8

spuclib

Signal processing using C++. Digital filters, Equalizers, Digital communications blocks, etc
5
star
9

spuc_qpsk

QPSK example based on spuclib.
C++
4
star
10

fasst

Copy of FASST toolbox modified to build with QT5 on Mac OS X
C
3
star
11

cpm-spuc

CPM package for spuclib (Signal processing using C++. Digital filters, Equalizers, Digital communications blocks)
Makefile
2
star
12

spuc_fixed

Template C++ fixed point classes for fast simulation similar to SystemC types
C++
2
star
13

pothos_sandbox

For testing out pothos
1
star
14

blis

Automatically exported from code.google.com/p/blis
C
1
star
15

homebrew-spuc

Homebrew formula for spuce
Ruby
1
star
16

utilities

Various useful unix scripts
Emacs Lisp
1
star
17

psdtf

Positive Semidefinite Tensor Factorization code from http://winnie.kuis.kyoto-u.ac.jp/members/yoshii/psdtf/
MATLAB
1
star
18

mex_wav_writer

Write single precision chunks of data to .wav files
C++
1
star
19

pyspuc

Python extensions for spuc library
C++
1
star