Open Source DSP Library

High-performance digital signal processing library with SIMD optimization

LibDSP: Modern C++ Signal Processing Library

A comprehensive, header-only Digital Signal Processing (DSP) library written in modern C++ with SIMD optimizations for x86 (SSE/AVX) and ARM (NEON) architectures.

Features

Core Signal Processing

  • Transforms: FFT, DCT, Wavelet transforms
  • Filters: FIR, IIR, Adaptive filters
  • Windows: Hamming, Hanning, Blackman, Kaiser
  • Spectral Analysis: PSD, Spectrogram, Cepstrum

Advanced Algorithms

  • Multirate Processing: Decimation, Interpolation, Polyphase filters
  • Adaptive Algorithms: LMS, RLS, NLMS
  • Statistical Processing: Correlation, Convolution, Hilbert transform
  • Audio Processing: Pitch detection, MFCC, Audio effects

Architecture

namespace dsp {
    // Example: SIMD-optimized FIR filter
    template<typename T, size_t N>
    class FIRFilter {
    private:
        alignas(32) std::array<T, N> coefficients;
        CircularBuffer<T, N> delay_line;

    public:
        T process(T input) {
            delay_line.push(input);

            #ifdef __AVX2__
                return process_avx2();
            #elif defined(__ARM_NEON)
                return process_neon();
            #else
                return process_scalar();
            #endif
        }

    private:
        T process_avx2() {
            // AVX2 implementation
            __m256 sum = _mm256_setzero_ps();
            for (size_t i = 0; i < N; i += 8) {
                __m256 coef = _mm256_load_ps(&coefficients[i]);
                __m256 data = _mm256_load_ps(&delay_line[i]);
                sum = _mm256_fmadd_ps(coef, data, sum);
            }
            return horizontal_sum(sum);
        }
    };
}

Performance Benchmarks

Benchmark Results

Algorithm LibDSP (AVX2) Intel IPP FFTW Speedup
1024 FFT 1.2 μs 1.5 μs 1.8 μs 1.5x
256 FIR 0.8 μs 1.1 μs N/A 1.4x
Correlation 2.1 μs 2.8 μs N/A 1.3x

Usage Examples

Basic FFT

#include <libdsp/transforms.hpp>

// Create FFT object
dsp::FFT<float, 1024> fft;

// Prepare input data
std::array<std::complex<float>, 1024> signal;
generate_sine_wave(signal, 440.0f, 48000.0f);

// Perform FFT
auto spectrum = fft.forward(signal);

// Calculate magnitude spectrum
auto magnitude = dsp::magnitude_spectrum(spectrum);

Real-time Filtering

#include <libdsp/filters.hpp>

// Design lowpass filter
auto coeffs = dsp::design_lowpass_fir<float, 64>(
    1000.0f,  // cutoff frequency
    48000.0f, // sample rate
    dsp::Window::KAISER
);

// Create filter
dsp::FIRFilter<float, 64> filter(coeffs);

// Process audio stream
for (auto& sample : audio_buffer) {
    sample = filter.process(sample);
}

Integration with Other Libraries

Python Bindings

import libdsp

# Create spectrogram analyzer
analyzer = libdsp.Spectrogram(
    window_size=1024,
    hop_size=512,
    window_type='hann'
)

# Analyze audio
spectrogram = analyzer.compute(audio_data)

MATLAB Interface

% Load LibDSP MEX functions
addpath('libdsp/matlab');

% Use optimized FFT
spectrum = libdsp_fft(signal);

% Apply adaptive filter
[output, weights] = libdsp_lms(input, desired, mu);

Documentation

Comprehensive documentation with examples available at libdsp.readthedocs.io

API Reference

Contributing

We welcome contributions! See our contributing guidelines.

Development Setup

# Clone repository
git clone https://github.com/muditbhargava66/libdsp.git
cd libdsp

# Build with CMake
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Release
make -j8

# Run tests
ctest --verbose

License

MIT License - see LICENSE file.

Citations

If you use LibDSP in your research, please cite:

@software{bhargava2024libdsp,
  author = {Bhargava, Mudit},
  title = {LibDSP: High-Performance Digital Signal Processing Library},
  year = {2024},
  url = {https://github.com/muditbhargava66/libdsp}
}