30
30
#include "AUD_ButterworthFactory.h"
31
31
#include "AUD_IIRFilterReader.h"
36
#define M_PI 3.14159265358979323846
39
#define BWPB41 0.76536686473
40
#define BWPB42 1.84775906502
42
AUD_ButterworthFactory::AUD_ButterworthFactory(AUD_Reference<AUD_IFactory> factory,
32
#include "AUD_ButterworthCalculator.h"
34
AUD_ButterworthFactory::AUD_ButterworthFactory(boost::shared_ptr<AUD_IFactory> factory,
44
AUD_DynamicIIRFilterFactory(factory),
45
m_frequency(frequency)
36
AUD_DynamicIIRFilterFactory(factory, boost::shared_ptr<AUD_IDynamicIIRFilterCalculator>(new AUD_ButterworthCalculator(frequency)))
49
void AUD_ButterworthFactory::recalculateCoefficients(AUD_SampleRate rate,
50
std::vector<float> &b,
51
std::vector<float> &a)
53
float omega = 2 * tan(m_frequency * M_PI / rate);
54
float o2 = omega * omega;
56
float x1 = o2 + 2 * BWPB41 * omega + 4;
57
float x2 = o2 + 2 * BWPB42 * omega + 4;
58
float y1 = o2 - 2 * BWPB41 * omega + 4;
59
float y2 = o2 - 2 * BWPB42 * omega + 4;
60
float o228 = 2 * o2 - 8;
63
a.push_back((x1 + x2) * o228 / norm);
64
a.push_back((x1 * y2 + x2 * y1 + o228 * o228) / norm);
65
a.push_back((y1 + y2) * o228 / norm);
66
a.push_back(y1 * y2 / norm);
67
b.push_back(o4 / norm);
68
b.push_back(4 * o4 / norm);
69
b.push_back(6 * o4 / norm);