Pulp 1.88.0
Cross-platform audio plugin framework
Loading...
Searching...
No Matches
source_filter_analysis.hpp File Reference

Prepared, allocation-free spectral-envelope and linear-prediction analysis. More...

#include <pulp/signal/checked_allocation.hpp>
#include <pulp/signal/fft.hpp>
#include <algorithm>
#include <cmath>
#include <complex>
#include <cstddef>
#include <cstdint>
#include <limits>
#include <new>
#include <span>
#include <stdexcept>
#include <type_traits>
#include <utility>
#include <vector>

Go to the source code of this file.

Classes

struct  pulp::signal::CepstralEnvelopeConfigT< SampleType >
struct  pulp::signal::CepstralEnvelopeResultT< SampleType >
class  pulp::signal::CepstralEnvelopeAnalyzerT< SampleType >
 Log-magnitude spectrum to liftered log-envelope. More...
struct  pulp::signal::AutocorrelationResultT< SampleType >
struct  pulp::signal::LevinsonDurbinResultT< SampleType >
struct  pulp::signal::LpcAnalysisResultT< SampleType >
class  pulp::signal::LpcAnalyzerT< SampleType >

Namespaces

namespace  pulp
namespace  pulp::signal

Typedefs

using pulp::signal::CepstralEnvelopeConfig = CepstralEnvelopeConfigT<float>
using pulp::signal::CepstralEnvelopeConfig64 = CepstralEnvelopeConfigT<double>
using pulp::signal::CepstralEnvelopeAnalyzer = CepstralEnvelopeAnalyzerT<float>
using pulp::signal::CepstralEnvelopeAnalyzer64 = CepstralEnvelopeAnalyzerT<double>
using pulp::signal::LpcAnalyzer = LpcAnalyzerT<float>
using pulp::signal::LpcAnalyzer64 = LpcAnalyzerT<double>

Enumerations

enum class  pulp::signal::SourceFilterAnalysisStatus : std::uint8_t {
  pulp::signal::Ok , pulp::signal::NotPrepared , pulp::signal::InvalidFftSize , pulp::signal::InvalidOrder ,
  pulp::signal::InvalidIterationCount , pulp::signal::InvalidTolerance , pulp::signal::InvalidInputSize , pulp::signal::InvalidOutputSize ,
  pulp::signal::InvalidWorkspaceSize , pulp::signal::AllocationFailure , pulp::signal::NonFiniteInput , pulp::signal::NumericalOverflow ,
  pulp::signal::DegenerateInput , pulp::signal::RankDeficient , pulp::signal::UnstableModel , pulp::signal::PredictionErrorOverflow ,
  pulp::signal::InvalidSampleRate , pulp::signal::InvalidGain , pulp::signal::ResponseSingularity
}

Functions

bool pulp::signal::source_filter_fft_size_valid (int fft_size) noexcept
template<typename SampleType>
AutocorrelationResultT< SampleType > pulp::signal::scaled_autocorrelation (std::span< const SampleType > samples, int order, std::span< SampleType > autocorrelation) noexcept
 Biased autocorrelation of a safely normalized signal.
template<typename SampleType>
LevinsonDurbinResultT< SampleType > pulp::signal::levinson_durbin (std::span< const SampleType > autocorrelation, std::span< SampleType > coefficients, std::span< SampleType > reflection_coefficients, std::span< SampleType > workspace, SampleType rank_tolerance=std::numeric_limits< SampleType >::epsilon() *SampleType{64}) noexcept
 Solves A(z) = 1 + sum(a[k] z^-(k+1)).
template<typename SampleType>
SourceFilterAnalysisStatus pulp::signal::lpc_stability (std::span< const SampleType > coefficients, std::span< SampleType > workspace, SampleType stability_margin=std::numeric_limits< SampleType >::epsilon() *SampleType{64}) noexcept
 Explicit Schur step-down stability test for the A(z) coefficient convention used above.
template<typename SampleType>
SourceFilterAnalysisStatus pulp::signal::all_pole_magnitude_response (std::span< const SampleType > coefficients, SampleType gain, SampleType sample_rate, int fft_size, std::span< SampleType > magnitude, std::span< SampleType > stability_workspace, SampleType stability_margin=std::numeric_limits< SampleType >::epsilon() *SampleType{64}, SampleType denominator_floor=std::numeric_limits< SampleType >::epsilon() *SampleType{64}) noexcept
 Evaluates gain / |A(e^jw)| at fft_size / 2 + 1 bins from DC through Nyquist.

Variables

constexpr int pulp::signal::kSourceFilterMinimumFftSize = 256
constexpr int pulp::signal::kSourceFilterMaximumFftSize = 1 << 20
constexpr int pulp::signal::kSourceFilterMaximumLpcOrder = 256
constexpr int pulp::signal::kSourceFilterMaximumEnvelopeIterations = 1024

Detailed Description

Prepared, allocation-free spectral-envelope and linear-prediction analysis.

These analyzers are mutable single-owner objects intended for control-thread or offline work. prepare() allocates; analysis calls retain no borrowed spans and allocate nothing. They are not safe for concurrent use.