• Stars
    star
    1,832
  • Rank 25,329 (Top 0.5 %)
  • Language
    C++
  • Created over 12 years ago
  • Updated over 1 year ago

Reviews

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

Repository Details

A Collection of Useful C++ Classes for Digital Signal Processing

A Collection of Useful C++ Classes for Digital Signal Processing

"Techniques for digital signal processing are well guarded and held close to the chest, as they have valuable applications for multimedia content. The black art of Infinite Impulse Response ("IIR") filtering has remained veiled in secrecy with little publicly available source code...until now."

What is this?

Building on the work of cherished luminaries such as Sophocles Orfanidis, Andreas Antoniou, Martin Holters, and Udo Zolzer, this library harnesses the power of C++ templates to solve a useful problem in Digital Signal Processing: the realization of multichannel IIR filters of arbitrary order and prescribed specifications with various properties such as Butterworth, Chebyshev, Elliptic, and Optimum-L (Legendre) responses. The library is provided under the MIT license and is therefore fully compatible with proprietary usage.

Classes are designed as independent re-usable building blocks. Use some or all of the provided features, or extend the functionality by writing your own objects that plug into the robust framework. Only the code that you need will get linked into your application. Here's a list of features:

  • Exclusive focus on IIR filters instead of boring FIR filters
  • Complete implementation of all "RBJ Biquad" Cookbook filter formulas
  • Butterworth, Chebyshev, Elliptic, Bessel, Legendre designs
  • Low Pass, High Pass, Band Pass, Band Stop transformations
  • Low, High, and Band Shelf filter implementations for most types
  • Smooth interpolation of filter settings, pole/zeros, and biquad coefficients to achieve seamless parameter changes
  • Representation of digital filters using poles and zeros
  • Realization using Direct Form I, Direct Form II, or user provided class
  • Fully factored to minimize template instantiations
  • "Design" layer provides runtime introspection into a filter
  • Utility template functions for manipulating buffers of sample data
  • No calls to malloc or new, great for embedded systems
  • No external dependencies, just the standard C++ library!

Using these filters is easy:

// Create a Chebyshev type I Band Stop filter of order 3
// with state for processing 2 channels of audio.
Dsp::SimpleFilter <Dsp::ChebyshevI::BandStop <3>, 2> f;
f.setup (3,    // order
         44100,// sample rate
         4000, // center frequency
         880,  // band width
         1);   // ripple dB
f.process (numSamples, arrayOfChannels);

An accompanying demonstration program that works on most popular platforms by using the separately licensed Juce application framework (included), exercises all the functionality of the library, including these features:

  • Dynamic interface creates itself using filter introspection capabilities
  • Audio playback with real time application of a selected filter
  • Live time stretching and amplitude modulation without clicks or popping
  • Charts to show magnitude, phase response and pole/zero placement
  • Thread safety "best practices" for audio applications

This is the provided DSP Filters Demo application, which demonstrates the features of the library and uses the Juce application framework to run on all popular platforms:

If you've been searching in futility on the Internet for some source code for implementing high order filters, then look no further because this is it! Whether you are a student of C++ or digital signal processing, a writer of audio plugins, or even a VST synthesizer coder, "A Collection of Useful C++ Classes for Digital Signal Processing" might have something for you!

DSP Filters on the Web

DSP Filters Official Discussion Forum
http://www.kvraudio.com/forum/viewtopic.php?t=249926

DSP and Audio Plugin Discussion Forum
http://www.kvraudio.com/forum/viewforum.php?f=33

Juce Official Discussion Forum
http://www.rawmaterialsoftware.com/index.php

Juce Official Site
http://www.rawmaterialsoftware.com

Terms and Conditions

DSP Filters Library and DSP Demo Application Copyright (c) 2009 by Vinnie Falco
Source code is provided under the MIT License
The Juce Library is licensed separately, from Raw Material Software.

More Repositories

1

LuaBridge

A lightweight, dependency-free library for binding Lua to C++
C
1,633
star
2

Amalgamate

A tool for creating an amalgamation from C and C++ sources
C++
436
star
3

CppCon2018

CppCon 2018 Presentation materials
C++
128
star
4

LayerEffects

Photoshop Layer Effects for juce::Graphics
C
64
star
5

DSPFiltersDemo

A Collection of Useful C++ Classes for Digital Signal Processing Demo
C++
56
star
6

FreeTypeAmalgam

The FreeType Project: a free, high-quality and portable font engine.
C
48
star
7

SimpleDJ

A self-contained set of cross platform applications and audio plugins.
C
44
star
8

LuaBridgeDemo

Demonstration and test harness for LuaBridge
C++
38
star
9

CppCon2017

Make Classes Great Again (CppCon 2017 Presentation)
C++
26
star
10

Amalgams

Templates for producing various amalgamations
C++
19
star
11

TagLibAmalgam

TagLib Audio Meta-Data Library
C++
9
star
12

library_template

An empty project configured for creating a library with examples and tests
C++
6
star
13

buffers-asio

Stand-alone library to provide Asio buffer sequence support without including all of Asio
C++
5
star
14

ssl_verify

Cross platform verification of SSL/TLS server certificates
C++
4
star
15

LuaBridgeUnitTests

Stand alone application for running and verifying LuaBridge unit tests.
C
4
star
16

p1134

An Elegant Coroutine Abstraction
C++
3
star
17

BeastLounge

Massively Multiplayer Online Blackjack Game using Boost.Beast
C++
2
star
18

cpp

LWG and LEWG documents
HTML
1
star
19

MusicPlaylistCreationTools

Tools for Macintosh and Windows users to generate playlists from directories
Shell
1
star
20

Assets

1
star
21

vinniefalco.github.com

User Page
JavaScript
1
star
22

beast2

Testbed for a re-imagining of Beast
C++
1
star
23

LuaUnityBuild

Versioned releases of Lua organized in the unity build style.
C
1
star
24

BeastAssets

Source files for Beast repository assets
HTML
1
star
25

genesis-bk

1
star