iir1
Loading...
Searching...
No Matches
Butterworth.h
1
35
36#pragma once
37
38#include "Common.h"
39#include "Cascade.h"
40#include "PoleFilter.h"
41#include "State.h"
42
43namespace Iir {
44
51namespace Butterworth {
52
56class IIR_EXPORT AnalogLowPass : public LayoutBase
57{
58public:
59 AnalogLowPass ();
60
61 void design (const int numPoles);
62
63private:
64 int m_numPoles = 0;
65};
66
67//------------------------------------------------------------------------------
68
72class IIR_EXPORT AnalogLowShelf : public LayoutBase
73{
74public:
75 AnalogLowShelf ();
76
77 void design (int numPoles, double gainDb);
78
79private:
80 int m_numPoles = 0;
81 double m_gainDb = 0.0;
82};
83
84//------------------------------------------------------------------------------
85
86struct IIR_EXPORT LowPassBase : PoleFilterBase <AnalogLowPass>
87{
88 void setup (int order,
89 double cutoffFrequency);
90};
91
92struct IIR_EXPORT HighPassBase : PoleFilterBase <AnalogLowPass>
93{
94 void setup (int order,
95 double cutoffFrequency);
96};
97
98struct IIR_EXPORT BandPassBase : PoleFilterBase <AnalogLowPass>
99{
100 void setup (int order,
101 double centerFrequency,
102 double widthFrequency);
103};
104
105struct IIR_EXPORT BandStopBase : PoleFilterBase <AnalogLowPass>
106{
107 void setup (int order,
108 double centerFrequency,
109 double widthFrequency);
110};
111
112struct IIR_EXPORT LowShelfBase : PoleFilterBase <AnalogLowShelf>
113{
114 void setup (int order,
115 double cutoffFrequency,
116 double gainDb);
117};
118
119struct IIR_EXPORT HighShelfBase : PoleFilterBase <AnalogLowShelf>
120{
121 void setup (int order,
122 double cutoffFrequency,
123 double gainDb);
124};
125
126struct IIR_EXPORT BandShelfBase : PoleFilterBase <AnalogLowShelf>
127{
128 void setup (int order,
129 double centerFrequency,
130 double widthFrequency,
131 double gainDb);
132};
133
134//------------------------------------------------------------------------------
135
136//
137// Filters for the user
138//
139
145template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
146struct LowPass : PoleFilter <LowPassBase, StateType, FilterOrder>
147{
153 void setup (double sampleRate,
154 double cutoffFrequency) {
155 LowPassBase::setup (FilterOrder,
156 cutoffFrequency / sampleRate);
157 }
158
165 void setup (int reqOrder,
166 double sampleRate,
167 double cutoffFrequency) {
168 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
169 LowPassBase::setup (reqOrder,
170 cutoffFrequency / sampleRate);
171 }
172
173
178 void setupN(double cutoffFrequency) {
179 LowPassBase::setup (FilterOrder,
180 cutoffFrequency);
181 }
182
188 void setupN(int reqOrder,
189 double cutoffFrequency) {
190 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
191 LowPassBase::setup (reqOrder,
192 cutoffFrequency);
193 }
194};
195
201template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
202struct HighPass : PoleFilter <HighPassBase, StateType, FilterOrder>
203{
204
210 void setup (double sampleRate,
211 double cutoffFrequency) {
212 HighPassBase::setup (FilterOrder,
213 cutoffFrequency / sampleRate);
214 }
215
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 }
238
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 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 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 setup (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 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 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 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}
Definition PoleFilter.h:90
Definition Butterworth.cpp:41
Definition Biquad.cpp:40
Definition Butterworth.h:99
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:127
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:106
Definition Butterworth.h:328
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 setup(int reqOrder, double sampleRate, double centerFrequency, double widthFrequency)
Definition Butterworth.h:350
void setupN(double centerFrequency, double widthFrequency)
Definition Butterworth.h:367
Definition Butterworth.h:93
Definition Butterworth.h:203
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:120
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:87
Definition Butterworth.h:147
void setup(int reqOrder, double sampleRate, double cutoffFrequency)
Definition Butterworth.h:165
void setup(double sampleRate, double cutoffFrequency)
Definition Butterworth.h:153
void setupN(double cutoffFrequency)
Definition Butterworth.h:178
void setupN(int reqOrder, double cutoffFrequency)
Definition Butterworth.h:188
Definition Butterworth.h:113
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