MayaFlux 0.5.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ biquad_low_shelf()

MAYAFLUX_API void MayaFlux::Kinesis::Discrete::biquad_low_shelf ( double  frequency,
double  slope,
double  gain_db,
double  sample_rate,
std::vector< double > &  a,
std::vector< double > &  b 
)

Second-order low shelf coefficients.

Parameters
frequencyShelf midpoint in Hz
slopeShelf slope; 1.0 is the steepest without overshoot
gain_dbShelf level relative to unity, in dB
sample_rateSampling rate in Hz
aDenominator output, resized to 3, a[0] == 1.0
bNumerator output, resized to 3

Definition at line 138 of file Coefficients.cpp.

140{
141 const double amp = db_to_amplitude_sqrt(gain_db);
142 const double nyquist = sample_rate * 0.5;
143 const double f = std::clamp(frequency, 1.0, nyquist - 1.0);
144 const double w0 = 2.0 * std::numbers::pi * f / sample_rate;
145 const double cosw0 = std::cos(w0);
146 const double s = std::clamp(slope, 1e-4, 1.0);
147 const double alpha = std::sin(w0) * 0.5
148 * std::sqrt((amp + 1.0 / amp) * (1.0 / s - 1.0) + 2.0);
149 const double sq = 2.0 * std::sqrt(amp) * alpha;
150
151 emit(a, b,
152 (amp + 1.0) + (amp - 1.0) * cosw0 + sq,
153 -2.0 * ((amp - 1.0) + (amp + 1.0) * cosw0),
154 (amp + 1.0) + (amp - 1.0) * cosw0 - sq,
155 amp * ((amp + 1.0) - (amp - 1.0) * cosw0 + sq),
156 2.0 * amp * ((amp - 1.0) - (amp + 1.0) * cosw0),
157 amp * ((amp + 1.0) - (amp - 1.0) * cosw0 - sq));
158}
double cosw0
double alpha
double w0
size_t a
size_t b
double frequency

References a, alpha, b, cosw0, frequency, and w0.