All Projects → lsp-plugins → lsp-dsp-lib

lsp-plugins / lsp-dsp-lib

Licence: LGPL-3.0, GPL-3.0 licenses found Licenses found LGPL-3.0 COPYING.LESSER GPL-3.0 COPYING
DSP library for signal processing

Programming Languages

C++
36643 projects - #6 most used programming language
Makefile
30231 projects
c
50402 projects - #5 most used programming language

Projects that are alternatives of or similar to lsp-dsp-lib

Unisimd Assembler
SIMD macro assembler unified for ARM, MIPS, PPC and x86
Stars: ✭ 63 (+70.27%)
Mutual labels:  x86-64, simd, armv7, aarch64
Computelibrary
The Compute Library is a set of computer vision and machine learning functions optimised for both Arm CPUs and GPUs using SIMD technologies.
Stars: ✭ 2,123 (+5637.84%)
Mutual labels:  simd, armv7, aarch64
Sleef
SIMD Library for Evaluating Elementary Functions, vectorized libm and DFT
Stars: ✭ 353 (+854.05%)
Mutual labels:  simd, fft, aarch64
Compute Engine
Highly optimized inference engine for Binarized Neural Networks
Stars: ✭ 138 (+272.97%)
Mutual labels:  simd, armv7, aarch64
peekaboo
An standalone execution trace library built on DynamoRIO.
Stars: ✭ 17 (-54.05%)
Mutual labels:  x86-64, aarch64, x86-32
Rappel
A linux-based assembly REPL for x86, amd64, armv7, and armv8
Stars: ✭ 818 (+2110.81%)
Mutual labels:  x86-64, armv7, aarch64
Kfr
Fast, modern C++ DSP framework, FFT, Sample Rate Conversion, FIR/IIR/Biquad Filters (SSE, AVX, AVX-512, ARM NEON)
Stars: ✭ 985 (+2562.16%)
Mutual labels:  dsp, simd, fft
FFTVisualizer
This project demonstrates DSP capabilities of Terasic DE2-115
Stars: ✭ 17 (-54.05%)
Mutual labels:  dsp, fft
dsp
DSP and filtering library
Stars: ✭ 36 (-2.7%)
Mutual labels:  dsp, fft
dsp-kit
A digital signal processing library in Javascript
Stars: ✭ 32 (-13.51%)
Mutual labels:  dsp, fft
DTMF-Decoder
A Java program to implement a DMTF Decoder.
Stars: ✭ 28 (-24.32%)
Mutual labels:  dsp, fft
ooura
Javascript port of Ooura FFT implementation
Stars: ✭ 23 (-37.84%)
Mutual labels:  dsp, fft
Asmjit
Machine code generation for C++
Stars: ✭ 2,874 (+7667.57%)
Mutual labels:  x86-64, aarch64
fmcw-RADAR
[mmWave based fmcw radar design files] based on AWR1843 chip operating at 76-GHz to 81-GHz.
Stars: ✭ 41 (+10.81%)
Mutual labels:  dsp, fft
Onednn
oneAPI Deep Neural Network Library (oneDNN)
Stars: ✭ 2,600 (+6927.03%)
Mutual labels:  x86-64, aarch64
math
Useful m-scripts for DSP (CIC, FIR, FFT, Fast convolution, Partial Filters etc.)
Stars: ✭ 15 (-59.46%)
Mutual labels:  dsp, fft
Wag
WebAssembly compiler implemented in Go
Stars: ✭ 177 (+378.38%)
Mutual labels:  x86-64, aarch64
dsp-theory
Theory of digital signal processing (DSP): signals, filtration (IIR, FIR, CIC, MAF), transforms (FFT, DFT, Hilbert, Z-transform) etc.
Stars: ✭ 643 (+1637.84%)
Mutual labels:  dsp, fft
intfftk
Fully pipelined Integer Scaled / Unscaled Radix-2 Forward/Inverse Fast Fourier Transform (FFT) IP-core for newest Xilinx FPGAs (Source language - VHDL / Verilog). GNU GPL 3.0.
Stars: ✭ 43 (+16.22%)
Mutual labels:  dsp, fft
Dsp Theory
Theory of digital signal processing (DSP): signals, filtration (IIR, FIR, CIC, MAF), transforms (FFT, DFT, Hilbert, Z-transform) etc.
Stars: ✭ 437 (+1081.08%)
Mutual labels:  dsp, fft

lsp-dsp-lib

DSP library for digital signal processing (and more)

This library provides set of functions that perform SIMD-optimized computing on several hardware architectures.

Currently supported set of SIMD extensions:

  • i586 architecture (32-bit): SSE, SSE2, SSE3, AVX, AVX2 and FMA3;
  • x86_64 architecture (64-bit): SSE, SSE2, SSE3, AVX, AVX2 and FMA3;
  • armv7 architecture (32-bit): NEON;
  • AArch64 architecture (64-bit): ASIMD.

All functions currently operate on IEEE-754 single-precision floating-point numbers.

Current set of functions provided:

  • Functions that gather system information and optimize CPU for better computing;
  • Cooley-Tukey 1-dimensional FFT algorithms with unpacked complex numbers;
  • Cooley-Tukey 1-dimensional FFT algorithms with packed complex numbers;
  • Direct convolution algorithm;
  • Fast convolution functions that enhance performance of FFT-based convolution algorithms;
  • Biquad static filter transform and processing algorithms;
  • Biquad dynamic filter transform and processing algorithms;
  • Floating-point operations: copying, moving, protection from NaNs and denormals;
  • Parallel arithmetics functions on long vectors including fused multiply operations;
  • Basic unpacked complex number arithmetics;
  • Basic packed complex number arithmetics;
  • Some functions that operate on RGB and HSL colors and their conversions;
  • Mid/Side matrix functions for converting Stereo channel to Mid/Side and back;
  • Functions for searching minimums and maximums;
  • Resampling functions based on Lanczos filter;
  • Interpolation functions;
  • Some set of function to work with 3D mathematics.

Supported platforms

The build and correct unit test execution has been confirmed for following platforms:

  • FreeBSD
  • GNU/Linux
  • OpenBSD
  • Windows 32-bit
  • Windows 64-bit

Supported architectures

The support of following list of hardware architectures has been implemented:

  • i386 (32-bit) - full support.
  • x86_64 (64-bit) - full support.
  • ARMv6A - full support.
  • ARMv7A - full support.
  • AArch64 - most functions.

For all other architectures the generic implementation of algorithms is used, without any architecture-specific optimizations.

Requirements

The following packages need to be installed for building:

  • gcc >= 4.9
  • make >= 4.0

Building

To build the library, perform the following commands:

make config # Configure the build
make fetch # Fetch dependencies from Git repository
make
sudo make install

To get more build options, run:

make help

To uninstall library, simply issue:

make uninstall

To clean all binary files, run:

make clean

To clean the whole project tree including configuration files, run:

make prune

To fetch all possible dependencies and make the source code tree portable between different architectures and platforms, run:

make tree

To build source code archive with all possible dependencies, run:

make distsrc

Usage

Here's the code snippet of how the library can be initialized and used in C++:

#include <lsp-plug.in/dsp/dsp.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char **argv)
{
    // Initialize DSP
    lsp::dsp::init();

    // Optionally: output information about the system
    lsp::dsp::info_t *info = lsp::dsp::info();
    if (info != NULL)
    {
        printf("Architecture:   %s\n", info->arch);
        printf("Processor:      %s\n", info->cpu);
        printf("Model:          %s\n", info->model);
        printf("Features:       %s\n", info->features);

        ::free(info);
    }
    
    // For faster computing we can tune CPU by updating thread context.
    // This will enable Flush-to-Zero and Denormals-are-Zero flags on
    // CPUs that support them. This is thread-local change and should
    // be called in each individual processing thread
    lsp::dsp::context_t ctx;
    lsp::dsp::start(&ctx);
    
    // Here we call some dsp functions, for example dsp::fill_zero
    float v[0x1000];
    lsp::dsp::fill_zero(v, sizeof(v)/sizeof(float));
    
    // At the end, we need to restore the context and reset CPU settings to defaults
    lsp::dsp::finish(&ctx);
    
    return 0;
}

Also all functions can be accessed from pure C with lsp_dsp_ prefix in the funcion and type names:

#include <lsp-plug.in/dsp/dsp.h>
#include <stdio.h>
#include <stdlib.h>

int main(int argc, const char **argv)
{
    // Initialize DSP
    lsp_dsp_init();

    // Optionally: output information about the system
    lsp_dsp_info_t *info = lsp_dsp_info();
    if (info != NULL)
    {
        printf("Architecture:   %s\n", info->arch);
        printf("Processor:      %s\n", info->cpu);
        printf("Model:          %s\n", info->model);
        printf("Features:       %s\n", info->features);

        free(info);
    }
    
    // For faster computing we can tune CPU by updating thread context.
    // This will enable Flush-to-Zero and Denormals-are-Zero flags on
    // CPUs that support them. This is thread-local change and should
    // be called in each individual processing thread
    lsp_dsp_context_t ctx;
    lsp_dsp_start(&ctx);
    
    // Here we call some dsp functions, for example lsp_dsp_fill_zero
    float v[0x1000];
    lsp_dsp_fill_zero(v, sizeof(v)/sizeof(float));
    
    // At the end, we need to restore the context and reset CPU settings to defaults
    lsp_dsp_finish(&ctx);
    
    return 0;
}

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].