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

◆ biquad_high_shelf()

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

Second-order high 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 160 of file Coefficients.cpp.

162{
163 const double amp = db_to_amplitude_sqrt(gain_db);
164 const double nyquist = sample_rate * 0.5;
165 const double f = std::clamp(frequency, 1.0, nyquist - 1.0);
166 const double w0 = 2.0 * std::numbers::pi * f / sample_rate;
167 const double cosw0 = std::cos(w0);
168 const double s = std::clamp(slope, 1e-4, 1.0);
169 const double alpha = std::sin(w0) * 0.5
170 * std::sqrt((amp + 1.0 / amp) * (1.0 / s - 1.0) + 2.0);
171 const double sq = 2.0 * std::sqrt(amp) * alpha;
172
173 emit(a, b,
174 (amp + 1.0) - (amp - 1.0) * cosw0 + sq,
175 2.0 * ((amp - 1.0) - (amp + 1.0) * cosw0),
176 (amp + 1.0) - (amp - 1.0) * cosw0 - sq,
177 amp * ((amp + 1.0) + (amp - 1.0) * cosw0 + sq),
178 -2.0 * amp * ((amp - 1.0) + (amp + 1.0) * cosw0),
179 amp * ((amp + 1.0) + (amp - 1.0) * cosw0 - sq));
180}
double cosw0
double alpha
double w0
size_t a
size_t b
double frequency

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