iir1
ChebyshevI.h
1 
36 #ifndef IIR1_CHEBYSHEVI_H
37 #define IIR1_CHEBYSHEVI_H
38 
39 #include "Common.h"
40 #include "Cascade.h"
41 #include "PoleFilter.h"
42 #include "State.h"
43 
44 namespace Iir {
45 
50 namespace ChebyshevI {
51 
55 class DllExport AnalogLowPass : public LayoutBase
56 {
57 public:
58  AnalogLowPass ();
59 
60  void design (const int numPoles,
61  double rippleDb);
62 
63 private:
64  int m_numPoles = 0;
65  double m_rippleDb = 0.0;
66 };
67 
71 class DllExport AnalogLowShelf : public LayoutBase
72 {
73 public:
74  AnalogLowShelf ();
75 
76  void design (int numPoles,
77  double gainDb,
78  double rippleDb);
79 
80 private:
81  int m_numPoles = 0;
82  double m_rippleDb = 0.0;
83  double m_gainDb = 0.0;
84 };
85 
86 //------------------------------------------------------------------------------
87 
88 struct DllExport LowPassBase : PoleFilterBase <AnalogLowPass>
89 {
90  void setup (int order,
91  double cutoffFrequency,
92  double rippleDb);
93 };
94 
95 struct DllExport HighPassBase : PoleFilterBase <AnalogLowPass>
96 {
97  void setup (int order,
98  double cutoffFrequency,
99  double rippleDb);
100 };
101 
102 struct DllExport BandPassBase : PoleFilterBase <AnalogLowPass>
103 {
104  void setup (int order,
105  double centerFrequency,
106  double widthFrequency,
107  double rippleDb);
108 };
109 
110 struct DllExport BandStopBase : PoleFilterBase <AnalogLowPass>
111 {
112  void setup (int order,
113  double centerFrequency,
114  double widthFrequency,
115  double rippleDb);
116 };
117 
118 struct DllExport LowShelfBase : PoleFilterBase <AnalogLowShelf>
119 {
120  void setup (int order,
121  double cutoffFrequency,
122  double gainDb,
123  double rippleDb);
124 };
125 
126 struct DllExport HighShelfBase : PoleFilterBase <AnalogLowShelf>
127 {
128  void setup (int order,
129  double cutoffFrequency,
130  double gainDb,
131  double rippleDb);
132 };
133 
134 struct DllExport BandShelfBase : PoleFilterBase <AnalogLowShelf>
135 {
136  void setup (int order,
137  double centerFrequency,
138  double widthFrequency,
139  double gainDb,
140  double rippleDb);
141 };
142 
143 //------------------------------------------------------------------------------
144 
145 //
146 // Userland filters
147 //
148 
154 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
155  struct DllExport LowPass : PoleFilter <LowPassBase, StateType, FilterOrder>
156  {
163  void setup (double sampleRate,
164  double cutoffFrequency,
165  double rippleDb) {
166  LowPassBase::setup (FilterOrder,
167  cutoffFrequency / sampleRate,
168  rippleDb);
169  }
170 
178  void setup (int reqOrder,
179  double sampleRate,
180  double cutoffFrequency,
181  double rippleDb) {
182  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
183  LowPassBase::setup (reqOrder,
184  cutoffFrequency / sampleRate,
185  rippleDb);
186  }
187 
188 
189 
195  void setupN(double cutoffFrequency,
196  double rippleDb) {
197  LowPassBase::setup (FilterOrder,
198  cutoffFrequency,
199  rippleDb);
200  }
201 
208  void setupN(int reqOrder,
209  double cutoffFrequency,
210  double rippleDb) {
211  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
212  LowPassBase::setup (reqOrder,
213  cutoffFrequency,
214  rippleDb);
215  }
216 };
217 
223 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
224  struct DllExport HighPass : PoleFilter <HighPassBase, StateType, FilterOrder>
225  {
232  void setup (double sampleRate,
233  double cutoffFrequency,
234  double rippleDb) {
235  HighPassBase::setup (FilterOrder,
236  cutoffFrequency / sampleRate,
237  rippleDb);
238  }
239 
247  void setup (int reqOrder,
248  double sampleRate,
249  double cutoffFrequency,
250  double rippleDb) {
251  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
252  HighPassBase::setup (reqOrder,
253  cutoffFrequency / sampleRate,
254  rippleDb);
255  }
256 
257 
258 
264  void setupN(double cutoffFrequency,
265  double rippleDb) {
266  HighPassBase::setup (FilterOrder,
267  cutoffFrequency,
268  rippleDb);
269  }
270 
277  void setupN(int reqOrder,
278  double cutoffFrequency,
279  double rippleDb) {
280  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
281  HighPassBase::setup (reqOrder,
282  cutoffFrequency,
283  rippleDb);
284  }
285 };
286 
292 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
293  struct DllExport BandPass : PoleFilter <BandPassBase, StateType, FilterOrder, FilterOrder*2>
294  {
302  void setup (double sampleRate,
303  double centerFrequency,
304  double widthFrequency,
305  double rippleDb) {
306  BandPassBase::setup (FilterOrder,
307  centerFrequency / sampleRate,
308  widthFrequency / sampleRate,
309  rippleDb);
310  }
311 
320  void setup (int reqOrder,
321  double sampleRate,
322  double centerFrequency,
323  double widthFrequency,
324  double rippleDb) {
325  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
326  BandPassBase::setup (reqOrder,
327  centerFrequency / sampleRate,
328  widthFrequency / sampleRate,
329  rippleDb);
330  }
331 
332 
333 
340  void setupN(double centerFrequency,
341  double widthFrequency,
342  double rippleDb) {
343  BandPassBase::setup (FilterOrder,
344  centerFrequency,
345  widthFrequency,
346  rippleDb);
347  }
348 
356  void setupN(int reqOrder,
357  double centerFrequency,
358  double widthFrequency,
359  double rippleDb) {
360  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
361  BandPassBase::setup (reqOrder,
362  centerFrequency,
363  widthFrequency,
364  rippleDb);
365  }
366 };
367 
373 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
374  struct DllExport BandStop : PoleFilter <BandStopBase, StateType, FilterOrder, FilterOrder*2>
375  {
383  void setup (double sampleRate,
384  double centerFrequency,
385  double widthFrequency,
386  double rippleDb) {
387  BandStopBase::setup (FilterOrder,
388  centerFrequency / sampleRate,
389  widthFrequency / sampleRate,
390  rippleDb);
391  }
392 
401  void setup (int reqOrder,
402  double sampleRate,
403  double centerFrequency,
404  double widthFrequency,
405  double rippleDb) {
406  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
407  BandStopBase::setup (reqOrder,
408  centerFrequency / sampleRate,
409  widthFrequency / sampleRate,
410  rippleDb);
411  }
412 
413 
414 
421  void setupN(double centerFrequency,
422  double widthFrequency,
423  double rippleDb) {
424  BandStopBase::setup (FilterOrder,
425  centerFrequency,
426  widthFrequency,
427  rippleDb);
428  }
429 
437  void setupN(int reqOrder,
438  double centerFrequency,
439  double widthFrequency,
440  double rippleDb) {
441  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
442  BandStopBase::setup (reqOrder,
443  centerFrequency,
444  widthFrequency,
445  rippleDb);
446  }
447 
448 };
449 
455 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
456  struct DllExport LowShelf : PoleFilter <LowShelfBase, StateType, FilterOrder>
457  {
465  void setup (double sampleRate,
466  double cutoffFrequency,
467  double gainDb,
468  double rippleDb) {
469  LowShelfBase::setup (FilterOrder,
470  cutoffFrequency / sampleRate,
471  gainDb,
472  rippleDb);
473  }
474 
483  void setup (int reqOrder,
484  double sampleRate,
485  double cutoffFrequency,
486  double gainDb,
487  double rippleDb) {
488  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
489  LowShelfBase::setup (reqOrder,
490  cutoffFrequency / sampleRate,
491  gainDb,
492  rippleDb);
493  }
494 
495 
496 
503  void setupN(double cutoffFrequency,
504  double gainDb,
505  double rippleDb) {
506  LowShelfBase::setup (FilterOrder,
507  cutoffFrequency,
508  gainDb,
509  rippleDb);
510  }
511 
519  void setupN(int reqOrder,
520  double cutoffFrequency,
521  double gainDb,
522  double rippleDb) {
523  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
524  LowShelfBase::setup (reqOrder,
525  cutoffFrequency,
526  gainDb,
527  rippleDb);
528  }
529 };
530 
536 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
537  struct DllExport HighShelf : PoleFilter <HighShelfBase, StateType, FilterOrder>
538  {
546  void setup (double sampleRate,
547  double cutoffFrequency,
548  double gainDb,
549  double rippleDb) {
550  HighShelfBase::setup (FilterOrder,
551  cutoffFrequency / sampleRate,
552  gainDb,
553  rippleDb);
554  }
555 
564  void setup (int reqOrder,
565  double sampleRate,
566  double cutoffFrequency,
567  double gainDb,
568  double rippleDb) {
569  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
570  HighShelfBase::setup (reqOrder,
571  cutoffFrequency / sampleRate,
572  gainDb,
573  rippleDb);
574  }
575 
576 
577 
578 
585  void setupN(double cutoffFrequency,
586  double gainDb,
587  double rippleDb) {
588  HighShelfBase::setup (FilterOrder,
589  cutoffFrequency,
590  gainDb,
591  rippleDb);
592  }
593 
601  void setupN(int reqOrder,
602  double cutoffFrequency,
603  double gainDb,
604  double rippleDb) {
605  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
606  HighShelfBase::setup (reqOrder,
607  cutoffFrequency,
608  gainDb,
609  rippleDb);
610  }
611 
612 };
613 
619 template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
620  struct DllExport BandShelf : PoleFilter <BandShelfBase, StateType, FilterOrder, FilterOrder*2>
621  {
630  void setup (double sampleRate,
631  double centerFrequency,
632  double widthFrequency,
633  double gainDb,
634  double rippleDb) {
635  BandShelfBase::setup (FilterOrder,
636  centerFrequency / sampleRate,
637  widthFrequency / sampleRate,
638  gainDb,
639  rippleDb);
640 
641  }
642 
652  void setup (int reqOrder,
653  double sampleRate,
654  double centerFrequency,
655  double widthFrequency,
656  double gainDb,
657  double rippleDb) {
658  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
659  BandShelfBase::setup (reqOrder,
660  centerFrequency / sampleRate,
661  widthFrequency / sampleRate,
662  gainDb,
663  rippleDb);
664 
665  }
666 
667 
668 
669 
677  void setupN(double centerFrequency,
678  double widthFrequency,
679  double gainDb,
680  double rippleDb) {
681  BandShelfBase::setup (FilterOrder,
682  centerFrequency,
683  widthFrequency,
684  gainDb,
685  rippleDb);
686 
687  }
688 
697  void setupN(int reqOrder,
698  double centerFrequency,
699  double widthFrequency,
700  double gainDb,
701  double rippleDb) {
702  if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
703  BandShelfBase::setup (reqOrder,
704  centerFrequency,
705  widthFrequency,
706  gainDb,
707  rippleDb);
708 
709  }
710 
711  };
712 
713 }
714 
715 }
716 
717 #endif
Definition: ChebyshevI.h:56
Definition: ChebyshevI.h:72
Definition: Layout.h:63
Definition: PoleFilter.h:95
Definition: Biquad.cpp:40
Definition: ChebyshevI.h:103
Definition: ChebyshevI.h:294
void setupN(int reqOrder, double centerFrequency, double widthFrequency, double rippleDb)
Definition: ChebyshevI.h:356
void setupN(double centerFrequency, double widthFrequency, double rippleDb)
Definition: ChebyshevI.h:340
void setup(double sampleRate, double centerFrequency, double widthFrequency, double rippleDb)
Definition: ChebyshevI.h:302
void setup(int reqOrder, double sampleRate, double centerFrequency, double widthFrequency, double rippleDb)
Definition: ChebyshevI.h:320
Definition: ChebyshevI.h:135
Definition: ChebyshevI.h:621
void setupN(int reqOrder, double centerFrequency, double widthFrequency, double gainDb, double rippleDb)
Definition: ChebyshevI.h:697
void setup(double sampleRate, double centerFrequency, double widthFrequency, double gainDb, double rippleDb)
Definition: ChebyshevI.h:630
void setup(int reqOrder, double sampleRate, double centerFrequency, double widthFrequency, double gainDb, double rippleDb)
Definition: ChebyshevI.h:652
void setupN(double centerFrequency, double widthFrequency, double gainDb, double rippleDb)
Definition: ChebyshevI.h:677
Definition: ChebyshevI.h:111
Definition: ChebyshevI.h:375
void setupN(double centerFrequency, double widthFrequency, double rippleDb)
Definition: ChebyshevI.h:421
void setup(int reqOrder, double sampleRate, double centerFrequency, double widthFrequency, double rippleDb)
Definition: ChebyshevI.h:401
void setupN(int reqOrder, double centerFrequency, double widthFrequency, double rippleDb)
Definition: ChebyshevI.h:437
void setup(double sampleRate, double centerFrequency, double widthFrequency, double rippleDb)
Definition: ChebyshevI.h:383
Definition: ChebyshevI.h:96
Definition: ChebyshevI.h:225
void setup(double sampleRate, double cutoffFrequency, double rippleDb)
Definition: ChebyshevI.h:232
void setup(int reqOrder, double sampleRate, double cutoffFrequency, double rippleDb)
Definition: ChebyshevI.h:247
void setupN(int reqOrder, double cutoffFrequency, double rippleDb)
Definition: ChebyshevI.h:277
void setupN(double cutoffFrequency, double rippleDb)
Definition: ChebyshevI.h:264
Definition: ChebyshevI.h:127
Definition: ChebyshevI.h:538
void setup(int reqOrder, double sampleRate, double cutoffFrequency, double gainDb, double rippleDb)
Definition: ChebyshevI.h:564
void setup(double sampleRate, double cutoffFrequency, double gainDb, double rippleDb)
Definition: ChebyshevI.h:546
void setupN(double cutoffFrequency, double gainDb, double rippleDb)
Definition: ChebyshevI.h:585
void setupN(int reqOrder, double cutoffFrequency, double gainDb, double rippleDb)
Definition: ChebyshevI.h:601
Definition: ChebyshevI.h:89
Definition: ChebyshevI.h:156
void setupN(int reqOrder, double cutoffFrequency, double rippleDb)
Definition: ChebyshevI.h:208
void setupN(double cutoffFrequency, double rippleDb)
Definition: ChebyshevI.h:195
void setup(int reqOrder, double sampleRate, double cutoffFrequency, double rippleDb)
Definition: ChebyshevI.h:178
void setup(double sampleRate, double cutoffFrequency, double rippleDb)
Definition: ChebyshevI.h:163
Definition: ChebyshevI.h:119
Definition: ChebyshevI.h:457
void setup(double sampleRate, double cutoffFrequency, double gainDb, double rippleDb)
Definition: ChebyshevI.h:465
void setupN(double cutoffFrequency, double gainDb, double rippleDb)
Definition: ChebyshevI.h:503
void setupN(int reqOrder, double cutoffFrequency, double gainDb, double rippleDb)
Definition: ChebyshevI.h:519
void setup(int reqOrder, double sampleRate, double cutoffFrequency, double gainDb, double rippleDb)
Definition: ChebyshevI.h:483
Definition: PoleFilter.h:119