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

Offline FIR design from sampled frequency-domain targets. 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 <numeric>
#include <span>
#include <stdexcept>
#include <vector>

Go to the source code of this file.

Classes

struct  pulp::signal::FirDesignPoint
struct  pulp::signal::FirLeastSquaresOptions
struct  pulp::signal::FirLeastSquaresResult
struct  pulp::signal::FirEquirippleBand
 One contiguous approximation band for an equiripple design. More...
struct  pulp::signal::FirEquirippleOptions
struct  pulp::signal::FirEquirippleResult
struct  pulp::signal::MinimumPhaseFirOptions
struct  pulp::signal::MinimumPhaseFirResult

Namespaces

namespace  pulp
namespace  pulp::signal
namespace  pulp::signal::fir_design_detail

Enumerations

enum class  pulp::signal::FirDesignStatus {
  pulp::signal::success , pulp::signal::invalid_argument , pulp::signal::unsupported_size , pulp::signal::workspace_limit_exceeded ,
  pulp::signal::allocation_failure , pulp::signal::rank_deficient , pulp::signal::ill_conditioned , pulp::signal::numerical_failure ,
  pulp::signal::not_converged
}
enum class  pulp::signal::LinearPhaseFirType { pulp::signal::type_i_symmetric_odd , pulp::signal::type_ii_symmetric_even , pulp::signal::type_iii_antisymmetric_odd , pulp::signal::type_iv_antisymmetric_even }

Functions

bool pulp::signal::fir_design_detail::is_forced_zero_endpoint (LinearPhaseFirType type, double omega) noexcept
std::complex< double > pulp::signal::fir_response (std::span< const double > coefficients, double omega) noexcept
double pulp::signal::linear_phase_fir_amplitude (std::span< const double > coefficients, LinearPhaseFirType type, double omega) noexcept
 Signed amplitude after removing the exact linear delay of a Type I-IV FIR.
bool pulp::signal::fir_design_detail::valid_type_length (LinearPhaseFirType type, std::size_t count) noexcept
std::size_t pulp::signal::fir_design_detail::independent_coefficient_count (LinearPhaseFirType type, std::size_t count) noexcept
double pulp::signal::fir_design_detail::basis_value (LinearPhaseFirType type, std::size_t column, double omega) noexcept
void pulp::signal::fir_design_detail::clear_payload (FirLeastSquaresResult &result) noexcept
void pulp::signal::fir_design_detail::clear_payload (MinimumPhaseFirResult &result) noexcept
bool pulp::signal::fir_design_detail::is_power_of_two (std::size_t value) noexcept
bool pulp::signal::fir_design_detail::admit_minimum_phase_workspace (std::size_t fft_size, std::size_t bins, std::size_t coefficients, std::uint64_t limit) noexcept
bool pulp::signal::fir_design_detail::admit_least_squares_workspace (std::size_t rows, std::size_t columns, std::size_t taps, std::uint64_t limit) noexcept
void pulp::signal::fir_design_detail::reconstruct_coefficients (LinearPhaseFirType type, std::span< const double > independent, std::span< double > coefficients) noexcept
FirLeastSquaresResult pulp::signal::design_fir_least_squares (std::span< const FirDesignPoint > points, const FirLeastSquaresOptions &options)
 Weighted least-squares design of a real Type I, II, III, or IV linear-phase FIR.
bool pulp::signal::fir_design_detail::solve_dense_in_place (std::vector< double > &matrix, std::vector< double > &rhs, std::size_t n) noexcept
 Solve a small dense square system in place by Gaussian elimination with partial pivoting.
void pulp::signal::fir_design_detail::clear_payload (FirEquirippleResult &result) noexcept
FirEquirippleResult pulp::signal::design_fir_equiripple (std::span< const FirEquirippleBand > bands, const FirEquirippleOptions &options)
 Equiripple (weighted minimax) design of a real Type I-IV linear-phase FIR by the Remez exchange, the Parks and McClellan method.
MinimumPhaseFirResult pulp::signal::reconstruct_minimum_phase_fir (std::span< const double > one_sided_magnitudes, const MinimumPhaseFirOptions &options={})
 Reconstruct a causal minimum-phase FIR from N/2+1 nonnegative magnitude bins.

Variables

constexpr std::uint64_t pulp::signal::kDefaultFirDesignWorkspaceBytes = 256u * 1024u * 1024u
constexpr std::size_t pulp::signal::kMaximumFirDesignTapCount = 1023u
constexpr std::size_t pulp::signal::kMaximumFirDesignPointCount = 65536u
constexpr std::size_t pulp::signal::kMaximumMinimumPhaseFirSize = 65536u
 Largest admitted radix-2 FFT size for minimum-phase reconstruction.
constexpr double pulp::signal::fir_design_detail::pi = 3.141592653589793238462643383279502884

Detailed Description

Offline FIR design from sampled frequency-domain targets.