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