# What is Aquila?

Aquila is an open source and cross-platform DSP (Digital Signal Processing) library for C++11.

# Example

```
#include "aquila/aquila.h"
int main()
{
// input signal parameters
const std::size_t SIZE = 64;
const Aquila::FrequencyType sampleFreq = 2000, f1 = 125, f2 = 700;
Aquila::SineGenerator sine1(sampleFreq);
sine1.setAmplitude(32).setFrequency(f1).generate(SIZE);
Aquila::SineGenerator sine2(sampleFreq);
sine2.setAmplitude(8).setFrequency(f2).setPhase(0.75).generate(SIZE);
auto sum = sine1 + sine2;
Aquila::TextPlot plot("Input signal");
plot.plot(sum);
// calculate the FFT
auto fft = Aquila::FftFactory::getFft(SIZE);
Aquila::SpectrumType spectrum = fft->fft(sum.toArray());
plot.setTitle("Spectrum");
plot.plotSpectrum(spectrum);
return 0;
}
```

For more usage examples see the `examples`

directory or browse them online.

# Features

- various signal sources (generators, text/binary/WAVE files)
- signal windowing and filtering
- performing operations on a frame-by-frame basis
- calculating energy, power, FFT and DCT of a signal
- feature extraction, including MFCC and HFCC features, widely used in speech recognition
- pattern matching with DTW (dynamic time warping) algorithm

# Requirements

The following dependencies are required to build the library from source.

- a modern C++11 compiler
- CMake >= 2.8

# Contributing

See CONTRIBUTING.md for some guidelines how to get involved.

# License

The library is licensed under the MIT (X11) license. A copy of the license is distributed with the library in the LICENSE file.

# Authors

Zbigniew Siciarz (zbigniew at siciarz dot net)

This library includes code from Takuya Ooura's mathematical software packages, which are available at http://www.kurims.kyoto-u.ac.jp/~ooura/.