iir1
Loading...
Searching...
No Matches
Butterworth.h
1
36#ifndef IIR1_BUTTERWORTH_H
37#define IIR1_BUTTERWORTH_H
38
39#include "Common.h"
40#include "Cascade.h"
41#include "PoleFilter.h"
42#include "State.h"
43
44namespace Iir {
45
52namespace Butterworth {
53
57class DllExport AnalogLowPass : public LayoutBase
58{
59public:
61
62 void design (const int numPoles);
63
64private:
65 int m_numPoles = 0;
66};
67
68//------------------------------------------------------------------------------
69
73class DllExport AnalogLowShelf : public LayoutBase
74{
75public:
77
78 void design (int numPoles, double gainDb);
79
80private:
81 int m_numPoles = 0;
82 double m_gainDb = 0.0;
83};
84
85//------------------------------------------------------------------------------
86
87struct DllExport LowPassBase : PoleFilterBase <AnalogLowPass>
88{
89 void setup (int order,
90 double cutoffFrequency);
91};
92
93struct DllExport HighPassBase : PoleFilterBase <AnalogLowPass>
94{
95 void setup (int order,
96 double cutoffFrequency);
97};
98
99struct DllExport BandPassBase : PoleFilterBase <AnalogLowPass>
100{
101 void setup (int order,
102 double centerFrequency,
103 double widthFrequency);
104};
105
106struct DllExport BandStopBase : PoleFilterBase <AnalogLowPass>
107{
108 void setup (int order,
109 double centerFrequency,
110 double widthFrequency);
111};
112
113struct DllExport LowShelfBase : PoleFilterBase <AnalogLowShelf>
114{
115 void setup (int order,
116 double cutoffFrequency,
117 double gainDb);
118};
119
120struct DllExport HighShelfBase : PoleFilterBase <AnalogLowShelf>
121{
122 void setup (int order,
123 double cutoffFrequency,
124 double gainDb);
125};
126
127struct DllExport BandShelfBase : PoleFilterBase <AnalogLowShelf>
128{
129 void setup (int order,
130 double centerFrequency,
131 double widthFrequency,
132 double gainDb);
133};
134
135//------------------------------------------------------------------------------
136
137//
138// Filters for the user
139//
140
146template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
147struct DllExport LowPass : PoleFilter <LowPassBase, StateType, FilterOrder>
148{
154 void setup (double sampleRate,
155 double cutoffFrequency) {
156 LowPassBase::setup (FilterOrder,
157 cutoffFrequency / sampleRate);
158 }
159
166 void setup (int reqOrder,
167 double sampleRate,
168 double cutoffFrequency) {
169 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
170 LowPassBase::setup (reqOrder,
171 cutoffFrequency / sampleRate);
172 }
173
174
179 void setupN(double cutoffFrequency) {
180 LowPassBase::setup (FilterOrder,
181 cutoffFrequency);
182 }
183
189 void setupN(int reqOrder,
190 double cutoffFrequency) {
191 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
192 LowPassBase::setup (reqOrder,
193 cutoffFrequency);
194 }
195};
196
202template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
203struct DllExport HighPass : PoleFilter <HighPassBase, StateType, FilterOrder>
204{
210 void setup (double sampleRate,
211 double cutoffFrequency) {
212 HighPassBase::setup (FilterOrder,
213 cutoffFrequency / sampleRate);
214 }
221 void setup (int reqOrder,
222 double sampleRate,
223 double cutoffFrequency) {
224 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
225 HighPassBase::setup (reqOrder,
226 cutoffFrequency / sampleRate);
227 }
228
229
234 void setupN(double cutoffFrequency) {
235 HighPassBase::setup (FilterOrder,
236 cutoffFrequency);
237 }
243 void setupN(int reqOrder,
244 double cutoffFrequency) {
245 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
246 HighPassBase::setup (reqOrder,
247 cutoffFrequency);
248 }
249};
250
256template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
257struct DllExport BandPass : PoleFilter <BandPassBase, StateType, FilterOrder, FilterOrder*2>
258{
265 void setup (double sampleRate,
266 double centerFrequency,
267 double widthFrequency) {
268 BandPassBase::setup(FilterOrder,
269 centerFrequency / sampleRate,
270 widthFrequency / sampleRate);
271 }
272
280 void setup (int reqOrder,
281 double sampleRate,
282 double centerFrequency,
283 double widthFrequency) {
284 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
285 BandPassBase::setup(reqOrder,
286 centerFrequency / sampleRate,
287 widthFrequency / sampleRate);
288 }
289
290
291
297 void setupN(double centerFrequency,
298 double widthFrequency) {
299 BandPassBase::setup(FilterOrder,
300 centerFrequency,
301 widthFrequency);
302 }
303
310 void setupN(int reqOrder,
311 double centerFrequency,
312 double widthFrequency) {
313 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
314 BandPassBase::setup(reqOrder,
315 centerFrequency,
316 widthFrequency);
317 }
318};
319
320
326template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
327struct DllExport BandStop : PoleFilter <BandStopBase, StateType, FilterOrder, FilterOrder*2>
328{
335 void setup (double sampleRate,
336 double centerFrequency,
337 double widthFrequency) {
338 BandStopBase::setup (FilterOrder,
339 centerFrequency / sampleRate,
340 widthFrequency / sampleRate);
341 }
342
350 void setupN(int reqOrder,
351 double sampleRate,
352 double centerFrequency,
353 double widthFrequency) {
354 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
355 BandStopBase::setup (reqOrder,
356 centerFrequency / sampleRate,
357 widthFrequency / sampleRate);
358 }
359
360
361
367 void setupN(double centerFrequency,
368 double widthFrequency) {
369 BandStopBase::setup (FilterOrder,
370 centerFrequency,
371 widthFrequency);
372 }
373
380 void setupN(int reqOrder,
381 double centerFrequency,
382 double widthFrequency) {
383 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
384 BandStopBase::setup (reqOrder,
385 centerFrequency,
386 widthFrequency);
387 }
388
389};
390
397template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
398struct DllExport LowShelf : PoleFilter <LowShelfBase, StateType, FilterOrder>
399{
406 void setup (double sampleRate,
407 double cutoffFrequency,
408 double gainDb) {
409 LowShelfBase::setup (FilterOrder,
410 cutoffFrequency / sampleRate,
411 gainDb);
412 }
413
421 void setup (int reqOrder,
422 double sampleRate,
423 double cutoffFrequency,
424 double gainDb) {
425 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
426 LowShelfBase::setup (reqOrder,
427 cutoffFrequency / sampleRate,
428 gainDb);
429 }
430
431
432
433
439 void setupN(double cutoffFrequency,
440 double gainDb) {
441 LowShelfBase::setup (FilterOrder,
442 cutoffFrequency,
443 gainDb);
444 }
445
452 void setupN(int reqOrder,
453 double cutoffFrequency,
454 double gainDb) {
455 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
456 LowShelfBase::setup (reqOrder,
457 cutoffFrequency,
458 gainDb);
459 }
460
461};
462
463
470template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
471struct DllExport HighShelf : PoleFilter <HighShelfBase, StateType, FilterOrder>
472{
479 void setup (double sampleRate,
480 double cutoffFrequency,
481 double gainDb) {
482 HighShelfBase::setup (FilterOrder,
483 cutoffFrequency / sampleRate,
484 gainDb);
485 }
486
494 void setup (int reqOrder,
495 double sampleRate,
496 double cutoffFrequency,
497 double gainDb) {
498 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
499 HighShelfBase::setup (reqOrder,
500 cutoffFrequency / sampleRate,
501 gainDb);
502 }
503
504
505
511 void setupN(double cutoffFrequency,
512 double gainDb) {
513 HighShelfBase::setup (FilterOrder,
514 cutoffFrequency,
515 gainDb);
516 }
517
524 void setupN(int reqOrder,
525 double cutoffFrequency,
526 double gainDb) {
527 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
528 HighShelfBase::setup (reqOrder,
529 cutoffFrequency,
530 gainDb);
531 }
532};
533
534
541template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
542struct DllExport BandShelf : PoleFilter <BandShelfBase, StateType, FilterOrder, FilterOrder*2>
543{
551 void setup (double sampleRate,
552 double centerFrequency,
553 double widthFrequency,
554 double gainDb) {
555 BandShelfBase::setup (FilterOrder,
556 centerFrequency / sampleRate,
557 widthFrequency / sampleRate,
558 gainDb);
559 }
560
569 void setup (int reqOrder,
570 double sampleRate,
571 double centerFrequency,
572 double widthFrequency,
573 double gainDb) {
574 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
575 BandShelfBase::setup (reqOrder,
576 centerFrequency / sampleRate,
577 widthFrequency / sampleRate,
578 gainDb);
579 }
580
581
582
589 void setupN(double centerFrequency,
590 double widthFrequency,
591 double gainDb) {
592 BandShelfBase::setup (FilterOrder,
593 centerFrequency,
594 widthFrequency,
595 gainDb);
596 }
597
605 void setupN(int reqOrder,
606 double centerFrequency,
607 double widthFrequency,
608 double gainDb) {
609 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
610 BandShelfBase::setup (reqOrder,
611 centerFrequency,
612 widthFrequency,
613 gainDb);
614 }
615};
616
617}
618
619}
620
621#endif
622
Definition Butterworth.h:58
Definition Butterworth.h:74
Definition Layout.h:63
Definition PoleFilter.h:90
Definition Biquad.cpp:40
Definition Butterworth.h:100
Definition Butterworth.h:258
void setup(int reqOrder, double sampleRate, double centerFrequency, double widthFrequency)
Definition Butterworth.h:280
void setupN(int reqOrder, double centerFrequency, double widthFrequency)
Definition Butterworth.h:310
void setup(double sampleRate, double centerFrequency, double widthFrequency)
Definition Butterworth.h:265
void setupN(double centerFrequency, double widthFrequency)
Definition Butterworth.h:297
Definition Butterworth.h:128
Definition Butterworth.h:543
void setup(double sampleRate, double centerFrequency, double widthFrequency, double gainDb)
Definition Butterworth.h:551
void setupN(double centerFrequency, double widthFrequency, double gainDb)
Definition Butterworth.h:589
void setupN(int reqOrder, double centerFrequency, double widthFrequency, double gainDb)
Definition Butterworth.h:605
void setup(int reqOrder, double sampleRate, double centerFrequency, double widthFrequency, double gainDb)
Definition Butterworth.h:569
Definition Butterworth.h:107
Definition Butterworth.h:328
void setupN(int reqOrder, double sampleRate, double centerFrequency, double widthFrequency)
Definition Butterworth.h:350
void setup(double sampleRate, double centerFrequency, double widthFrequency)
Definition Butterworth.h:335
void setupN(int reqOrder, double centerFrequency, double widthFrequency)
Definition Butterworth.h:380
void setupN(double centerFrequency, double widthFrequency)
Definition Butterworth.h:367
Definition Butterworth.h:94
Definition Butterworth.h:204
void setupN(int reqOrder, double cutoffFrequency)
Definition Butterworth.h:243
void setupN(double cutoffFrequency)
Definition Butterworth.h:234
void setup(int reqOrder, double sampleRate, double cutoffFrequency)
Definition Butterworth.h:221
void setup(double sampleRate, double cutoffFrequency)
Definition Butterworth.h:210
Definition Butterworth.h:121
Definition Butterworth.h:472
void setup(double sampleRate, double cutoffFrequency, double gainDb)
Definition Butterworth.h:479
void setupN(int reqOrder, double cutoffFrequency, double gainDb)
Definition Butterworth.h:524
void setup(int reqOrder, double sampleRate, double cutoffFrequency, double gainDb)
Definition Butterworth.h:494
void setupN(double cutoffFrequency, double gainDb)
Definition Butterworth.h:511
Definition Butterworth.h:88
Definition Butterworth.h:148
void setup(int reqOrder, double sampleRate, double cutoffFrequency)
Definition Butterworth.h:166
void setup(double sampleRate, double cutoffFrequency)
Definition Butterworth.h:154
void setupN(double cutoffFrequency)
Definition Butterworth.h:179
void setupN(int reqOrder, double cutoffFrequency)
Definition Butterworth.h:189
Definition Butterworth.h:114
Definition Butterworth.h:399
void setupN(int reqOrder, double cutoffFrequency, double gainDb)
Definition Butterworth.h:452
void setup(int reqOrder, double sampleRate, double cutoffFrequency, double gainDb)
Definition Butterworth.h:421
void setup(double sampleRate, double cutoffFrequency, double gainDb)
Definition Butterworth.h:406
void setupN(double cutoffFrequency, double gainDb)
Definition Butterworth.h:439
Definition PoleFilter.h:114