36 #ifndef IIR1_BUTTERWORTH_H
37 #define IIR1_BUTTERWORTH_H
41 #include "PoleFilter.h"
52 namespace Butterworth {
62 void design (
const int numPoles);
78 void design (
int numPoles,
double gainDb);
89 void setup (
int order,
90 double cutoffFrequency);
95 void setup (
int order,
96 double cutoffFrequency);
101 void setup (
int order,
102 double centerFrequency,
103 double widthFrequency);
108 void setup (
int order,
109 double centerFrequency,
110 double widthFrequency);
115 void setup (
int order,
116 double cutoffFrequency,
122 void setup (
int order,
123 double cutoffFrequency,
129 void setup (
int order,
130 double centerFrequency,
131 double widthFrequency,
146 template <
int FilterOrder = DEFAULT_FILTER_ORDER,
class StateType = DEFAULT_STATE>
155 double cutoffFrequency) {
156 LowPassBase::setup (FilterOrder,
157 cutoffFrequency / sampleRate);
168 double cutoffFrequency) {
169 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
170 LowPassBase::setup (reqOrder,
171 cutoffFrequency / sampleRate);
180 LowPassBase::setup (FilterOrder,
190 double cutoffFrequency) {
191 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
192 LowPassBase::setup (reqOrder,
202 template <
int FilterOrder = DEFAULT_FILTER_ORDER,
class StateType = DEFAULT_STATE>
211 double cutoffFrequency) {
212 HighPassBase::setup (FilterOrder,
213 cutoffFrequency / sampleRate);
223 double cutoffFrequency) {
224 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
225 HighPassBase::setup (reqOrder,
226 cutoffFrequency / sampleRate);
235 HighPassBase::setup (FilterOrder,
244 double cutoffFrequency) {
245 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
246 HighPassBase::setup (reqOrder,
256 template <
int FilterOrder = DEFAULT_FILTER_ORDER,
class StateType = DEFAULT_STATE>
266 double centerFrequency,
267 double widthFrequency) {
268 BandPassBase::setup(FilterOrder,
269 centerFrequency / sampleRate,
270 widthFrequency / sampleRate);
282 double centerFrequency,
283 double widthFrequency) {
284 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
285 BandPassBase::setup(reqOrder,
286 centerFrequency / sampleRate,
287 widthFrequency / sampleRate);
298 double widthFrequency) {
299 BandPassBase::setup(FilterOrder,
311 double centerFrequency,
312 double widthFrequency) {
313 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
314 BandPassBase::setup(reqOrder,
326 template <
int FilterOrder = DEFAULT_FILTER_ORDER,
class StateType = DEFAULT_STATE>
336 double centerFrequency,
337 double widthFrequency) {
338 BandStopBase::setup (FilterOrder,
339 centerFrequency / sampleRate,
340 widthFrequency / sampleRate);
352 double centerFrequency,
353 double widthFrequency) {
354 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
355 BandStopBase::setup (reqOrder,
356 centerFrequency / sampleRate,
357 widthFrequency / sampleRate);
368 double widthFrequency) {
369 BandStopBase::setup (FilterOrder,
381 double centerFrequency,
382 double widthFrequency) {
383 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
384 BandStopBase::setup (reqOrder,
397 template <
int FilterOrder = DEFAULT_FILTER_ORDER,
class StateType = DEFAULT_STATE>
407 double cutoffFrequency,
409 LowShelfBase::setup (FilterOrder,
410 cutoffFrequency / sampleRate,
423 double cutoffFrequency,
425 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
426 LowShelfBase::setup (reqOrder,
427 cutoffFrequency / sampleRate,
441 LowShelfBase::setup (FilterOrder,
453 double cutoffFrequency,
455 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
456 LowShelfBase::setup (reqOrder,
470 template <
int FilterOrder = DEFAULT_FILTER_ORDER,
class StateType = DEFAULT_STATE>
480 double cutoffFrequency,
482 HighShelfBase::setup (FilterOrder,
483 cutoffFrequency / sampleRate,
496 double cutoffFrequency,
498 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
499 HighShelfBase::setup (reqOrder,
500 cutoffFrequency / sampleRate,
513 HighShelfBase::setup (FilterOrder,
525 double cutoffFrequency,
527 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
528 HighShelfBase::setup (reqOrder,
541 template <
int FilterOrder = DEFAULT_FILTER_ORDER,
class StateType = DEFAULT_STATE>
552 double centerFrequency,
553 double widthFrequency,
555 BandShelfBase::setup (FilterOrder,
556 centerFrequency / sampleRate,
557 widthFrequency / sampleRate,
571 double centerFrequency,
572 double widthFrequency,
574 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
575 BandShelfBase::setup (reqOrder,
576 centerFrequency / sampleRate,
577 widthFrequency / sampleRate,
590 double widthFrequency,
592 BandShelfBase::setup (FilterOrder,
606 double centerFrequency,
607 double widthFrequency,
609 if (reqOrder > FilterOrder)
throw std::invalid_argument(orderTooHigh);
610 BandShelfBase::setup (reqOrder,