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

◆ compute_biquad()

void MayaFlux::Nodes::Network::ResonatorNetwork::compute_biquad ( ResonatorNode r)
private

Compute RBJ biquad bandpass coefficients and push them into a resonator's IIR.

Parameters
rResonator to update (reads r.frequency, r.q, m_sample_rate)

Definition at line 165 of file ResonatorNetwork.cpp.

166{
167 /*
168 * RBJ Audio EQ Cookbook — BPF (constant 0 dB peak gain):
169 *
170 * w0 = 2π f0 / Fs
171 * alpha = sin(w0) / (2 Q)
172 * b0 = alpha
173 * b1 = 0
174 * b2 = -alpha
175 * a0 = 1 + alpha
176 * a1 = -2 cos(w0)
177 * a2 = 1 - alpha
178 *
179 * Normalised (divide through by a0):
180 * b_coefs = { b0/a0, 0, b2/a0 }
181 * a_coefs = { 1, a1/a0, a2/a0 }
182 */
183 const double w0 = 2.0 * std::numbers::pi * r.frequency / m_sample_rate;
184 const double sinw0 = std::sin(w0);
185 const double cosw0 = std::cos(w0);
186 const double alpha = sinw0 / (2.0 * r.q);
187 const double a0 = 1.0 + alpha;
188
189 const std::vector<double> a = {
190 1.0,
191 (-2.0 * cosw0) / a0,
192 (1.0 - alpha) / a0,
193 };
194 const std::vector<double> b = {
195 alpha / a0,
196 0.0,
197 -alpha / a0,
198 };
199
200 r.filter->setACoefficients(a);
201 r.filter->setBCoefficients(b);
202 r.filter->reset();
203}
size_t a
size_t b

References a, b, MayaFlux::Nodes::Network::ResonatorNetwork::ResonatorNode::filter, MayaFlux::Nodes::Network::ResonatorNetwork::ResonatorNode::frequency, MayaFlux::Nodes::Network::NodeNetwork::m_sample_rate, and MayaFlux::Nodes::Network::ResonatorNetwork::ResonatorNode::q.

Referenced by apply_preset(), build_resonators(), set_frequency(), and set_q().

+ Here is the caller graph for this function: