iir1
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 
44 namespace Iir {
45 
52 namespace Butterworth {
53 
57 class DllExport AnalogLowPass : public LayoutBase
58 {
59 public:
60  AnalogLowPass ();
61 
62  void design (const int numPoles);
63 
64 private:
65  int m_numPoles = 0;
66 };
67 
68 //------------------------------------------------------------------------------
69 
73 class DllExport AnalogLowShelf : public LayoutBase
74 {
75 public:
76  AnalogLowShelf ();
77 
78  void design (int numPoles, double gainDb);
79 
80 private:
81  int m_numPoles = 0;
82  double m_gainDb = 0.0;
83 };
84 
85 //------------------------------------------------------------------------------
86 
87 struct DllExport LowPassBase : PoleFilterBase <AnalogLowPass>
88 {
89  void setup (int order,
90  double cutoffFrequency);
91 };
92 
93 struct DllExport HighPassBase : PoleFilterBase <AnalogLowPass>
94 {
95  void setup (int order,
96  double cutoffFrequency);
97 };
98 
99 struct DllExport BandPassBase : PoleFilterBase <AnalogLowPass>
100 {
101  void setup (int order,
102  double centerFrequency,
103  double widthFrequency);
104 };
105 
106 struct DllExport BandStopBase : PoleFilterBase <AnalogLowPass>
107 {
108  void setup (int order,
109  double centerFrequency,
110  double widthFrequency);
111 };
112 
113 struct DllExport LowShelfBase : PoleFilterBase <AnalogLowShelf>
114 {
115  void setup (int order,
116  double cutoffFrequency,
117  double gainDb);
118 };
119 
120 struct DllExport HighShelfBase : PoleFilterBase <AnalogLowShelf>
121 {
122  void setup (int order,
123  double cutoffFrequency,
124  double gainDb);
125 };
126 
127 struct 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 
146 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
147 struct 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 
202 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
203 struct 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 
256 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
257 struct 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 
326 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
327 struct 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 
397 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
398 struct 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 
470 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
471 struct 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 
541 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
542 struct 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