# Library for Acoustic Signal Processing


Welcome to LASP: Library for Acoustic Signal Processing. LASP is a C++ library
with a Python interface which is supposed to acquire and process (multi) sensor data in real time on a PC and output results.

Current features that are implemented:


- Communication with data acquisition (DAQ) devices, of which:
    - Internal sound cards via the [RtAudio](http://www.music.mcgill.ca/~gary/rtaudio) backend. Many thanks to Gary P. Scavone et al.
    - [Measurement Computing](https://www.mccdaq.com) [DT9838A](https://www.mccdaq.com/Products/Sound-Vibration-DAQ/DT9837) signal analyzer.
- Configuration of DAQ devices: AC coupling, IEPE, sensitivity physical
  quantities.
- Recording of signals from these DAQ devices, and storing in a HDF5 file.
- Filter designers to create A/C sound pressure weighting
- Biquad filter designers for low pass, high pass, peaking and notch filters
- A Peak Programme Meter (PPM) to monitor signal levels from DAQ and to watch
  for signal clipping.
- A signal generator to create sine waves, sweeps and noise (white / pink).
- Equalizers to equalize the output prior to sending.
- Averaged power spectra and power spectral density determination
  using Welch' method. Taper functions of Hann, Hamming, Bartlett and
  Blackman are provided.
- (One third) octave filter bank filters designed to comply with IEC 61260
  (1995).
- Slow and fast time updates of (A/C/Z) weighted sound pressure levels
- Full Sound Level Meter implementation
- Real time Sound Level meter, Power / Transfer function estimator
- Spectra data smoothing algorithms
- Sensor calibration for microphones


Future features (wish-list)


- Conventional and delay-and-sum beam-forming algorithms
- Impedance tube measurement processing

For now, the source code is well-documented on [lasp.ascee.nl](https://lasp.ascee.nl) but it requires some
additional documentation (the math behind it). This is maintained
in a sister repository [lasp-doc](https://code.ascee.nl/ascee/lasp-doc).

If you have any question(s), please feel free to contact us: [email](info@ascee.nl).

# Installation - Linux (Ubuntu-based)

## From wheel (recommended for non-developers)

### Prerequisites

Run the following on the command line to install all prerequisites on
Debian-based Linux:

- `sudo apt install python3-pip libfftw3-3 libopenblas-base libusb-1.0-0
  libpulse0`

### Download and install LASP

Go to: [LASP releases](https://code.ascee.nl/ASCEE/lasp/releases/latest/) and
download the latest `.whl`. Then run:

- `pip install lasp-*-linux_x86_64.whl`

## From source (Ubuntu-based)

### Prerequisites

Run the following one-liner:

- `sudo apt install -y git python3 python3-virtualenv python3-venv libopenblas-dev python3-pip libfftw3-dev libusb-1.0-0-dev libpulse-dev python3-build`

If building RtAudio with the ALSA backend, you will also require the following packages:

- `sudo apt install libclalsadrv-dev`

If building RtAudio with the Jack Audio Connection Kit (JACK) backend, you will also require the following packages:

- `sudo apt install libjack-jackd2-dev`

### Download & build

- `$ git clone --recursive https://code.ascee.nl/ASCEE/lasp.git`
- `$ cd lasp`
- `pip install -e .`

# Installation - (x86_64) Windows (with WinPython), build with MSYS2 (NOT YET UPDATED!!)

## Prerequisites

- Download and install [WinPython](https://winpython.github.io)
- Download and install [MSYS2](https://msys2.org). Make sure to install the
  x86_64 version.
- Download and install [Git for Windows](https://git-scm.com)

- When unzipping WinPython, make sure to choose a proper and simple path, i.e.
  C:\winpython
- Append C:\winpython\ to the PATH environment variable.
- Run Python and install Pybind11
    - `python -m pip install pybind11`


- Open a msys2 **MINGW64** terminal. And run:

    - `pacman -S git`

- Then clone the LASP repo:

    - `git clone https://code.ascee.nl/ascee/lasp`
    - `cd lasp`

- Configure MSYS2 further, and run cmake:

    - `scripts/install_msys2_buiddeps.sh`
    - `scripts/configur_cmake_msys2.sh`


# Documentation

## Online

[Online LASP documentation](https://lasp.ascee.nl/).

## In directory

`$ sudo apt install doxygen graphviz`
`$ pip install doxypypy`

While still in lasp dir:

`$ doxygen`

This will build the documentation. It can be read by:

`$ <YOUR-BROWSER> doc/html/index.html`

# Usage

- See examples directories for IPython notebooks.
- Please refer to the [documentation](https://lasp.ascee.nl/) for features.
