numerics 0.1.0
Loading...
Searching...
No Matches
FFT Examples

include/spectral/fft.hpp provides complex FFT, inverse FFT, real-input FFT, inverse real FFT, and reusable plans.

Real Signal Spectrum

#include <numerics.hpp>
#include <cmath>
#include <numbers>
constexpr int N = 1024;
constexpr double fs = 1000.0;
constexpr double pi = std::numbers::pi;
for (int i = 0; i < N; ++i) {
double t = static_cast<double>(i) / fs;
x[i] = std::sin(2.0 * pi * 50.0 * t)
+ 0.5 * std::sin(2.0 * pi * 120.0 * t);
}
num::CVector X(N / 2 + 1);
void rfft(const Vector &in, CVector &out, FFTBackend b=default_fft_backend)
Definition fft.cpp:65
Umbrella include for the numerics library.

Frequency bin \(k\) corresponds to

\[ f_k = k f_s / N . \]

num::Series spectrum;
for (num::idx k = 0; k < X.size(); ++k) {
spectrum.store(static_cast<double>(k) * fs / N, std::abs(X[k]));
}
std::size_t idx
Definition types.hpp:11
void store(double x, double y)
Definition plot.hpp:17

Complex Round Trip

num::CVector x(N), X(N), y(N);
void ifft(const CVector &in, CVector &out, FFTBackend b=default_fft_backend)
Definition fft.cpp:40
void fft(const CVector &in, CVector &out, FFTBackend b=default_fft_backend)
Definition fft.cpp:15

The inverse routine returns the normalized inverse transform.

Reusable Plan

for (int sample = 0; sample < nsamples; ++sample) {
load_sample(sample, x);
plan.execute(x, X);
}
Precomputed complex transform plan.
Definition fft.hpp:68
constexpr FFTBackend default_fft_backend
Definition fft.hpp:50

Explicit Backend

default_fft_backend selects FFTW3 when available, otherwise the best built-in backend.