iir1
Loading...
Searching...
No Matches
ChebyshevII.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
52namespace ChebyshevII {
53
57class IIR_EXPORT AnalogLowPass : public LayoutBase
58{
59public:
60 AnalogLowPass ();
61
62 void design (const int numPoles,
63 double stopBandDb);
64
65private:
66 int m_numPoles = 0;
67 double m_stopBandDb = 0.0;
68};
69
70
74class IIR_EXPORT AnalogLowShelf : public LayoutBase
75{
76public:
77 AnalogLowShelf ();
78
79 void design (int numPoles,
80 double gainDb,
81 double stopBandDb);
82
83private:
84 int m_numPoles = 0;
85 double m_stopBandDb = 0.0;
86 double m_gainDb = 0.0;
87};
88
89//------------------------------------------------------------------------------
90
91struct IIR_EXPORT LowPassBase : PoleFilterBase <AnalogLowPass>
92{
93 void setup (int order,
94 double cutoffFrequency,
95 double stopBandDb);
96};
97
98struct IIR_EXPORT HighPassBase : PoleFilterBase <AnalogLowPass>
99{
100 void setup (int order,
101 double cutoffFrequency,
102 double stopBandDb);
103};
104
105struct IIR_EXPORT BandPassBase : PoleFilterBase <AnalogLowPass>
106{
107 void setup (int order,
108 double centerFrequency,
109 double widthFrequency,
110 double stopBandDb);
111};
112
113struct IIR_EXPORT BandStopBase : PoleFilterBase <AnalogLowPass>
114{
115 void setup (int order,
116 double centerFrequency,
117 double widthFrequency,
118 double stopBandDb);
119};
120
121struct IIR_EXPORT LowShelfBase : PoleFilterBase <AnalogLowShelf>
122{
123 void setup (int order,
124 double cutoffFrequency,
125 double gainDb,
126 double stopBandDb);
127};
128
129struct IIR_EXPORT HighShelfBase : PoleFilterBase <AnalogLowShelf>
130{
131 void setup (int order,
132 double cutoffFrequency,
133 double gainDb,
134 double stopBandDb);
135};
136
137struct IIR_EXPORT BandShelfBase : PoleFilterBase <AnalogLowShelf>
138{
139 void setup (int order,
140 double centerFrequency,
141 double widthFrequency,
142 double gainDb,
143 double stopBandDb);
144};
145
146//------------------------------------------------------------------------------
147
148//
149// Userland filters
150//
151
157template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
158struct LowPass : PoleFilter <LowPassBase, StateType, FilterOrder>
159{
166 void setup (double sampleRate,
167 double cutoffFrequency,
168 double stopBandDb) {
169 LowPassBase::setup (FilterOrder,
170 cutoffFrequency / sampleRate,
171 stopBandDb);
172 }
173
181 void setup (int reqOrder,
182 double sampleRate,
183 double cutoffFrequency,
184 double stopBandDb) {
185 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
186 LowPassBase::setup (reqOrder,
187 cutoffFrequency / sampleRate,
188 stopBandDb);
189 }
190
191
192
193
194
200 void setupN(double cutoffFrequency,
201 double stopBandDb) {
202 LowPassBase::setup (FilterOrder,
203 cutoffFrequency,
204 stopBandDb);
205 }
206
213 void setupN(int reqOrder,
214 double cutoffFrequency,
215 double stopBandDb) {
216 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
217 LowPassBase::setup (reqOrder,
218 cutoffFrequency,
219 stopBandDb);
220 }
221
222};
223
229template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
230struct HighPass : PoleFilter <HighPassBase, StateType, FilterOrder>
231{
238 void setup (double sampleRate,
239 double cutoffFrequency,
240 double stopBandDb) {
241 HighPassBase::setup (FilterOrder,
242 cutoffFrequency / sampleRate,
243 stopBandDb);
244 }
245
253 void setup (int reqOrder,
254 double sampleRate,
255 double cutoffFrequency,
256 double stopBandDb) {
257 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
258 HighPassBase::setup (reqOrder,
259 cutoffFrequency / sampleRate,
260 stopBandDb);
261 }
262
263
264
265
271 void setupN(double cutoffFrequency,
272 double stopBandDb) {
273 HighPassBase::setup (FilterOrder,
274 cutoffFrequency,
275 stopBandDb);
276 }
277
284 void setupN(int reqOrder,
285 double cutoffFrequency,
286 double stopBandDb) {
287 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
288 HighPassBase::setup (reqOrder,
289 cutoffFrequency,
290 stopBandDb);
291 }
292
293};
294
300template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
301struct BandPass : PoleFilter <BandPassBase, StateType, FilterOrder, FilterOrder*2>
302{
310 void setup (double sampleRate,
311 double centerFrequency,
312 double widthFrequency,
313 double stopBandDb) {
314 BandPassBase::setup (FilterOrder,
315 centerFrequency / sampleRate,
316 widthFrequency / sampleRate,
317 stopBandDb);
318 }
319
328 void setup (int reqOrder,
329 double sampleRate,
330 double centerFrequency,
331 double widthFrequency,
332 double stopBandDb) {
333 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
334 BandPassBase::setup (reqOrder,
335 centerFrequency / sampleRate,
336 widthFrequency / sampleRate,
337 stopBandDb);
338 }
339
340
341
342
349 void setupN(double centerFrequency,
350 double widthFrequency,
351 double stopBandDb) {
352 BandPassBase::setup (FilterOrder,
353 centerFrequency,
354 widthFrequency,
355 stopBandDb);
356 }
357
365 void setupN(int reqOrder,
366 double centerFrequency,
367 double widthFrequency,
368 double stopBandDb) {
369 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
370 BandPassBase::setup (reqOrder,
371 centerFrequency,
372 widthFrequency,
373 stopBandDb);
374 }
375};
376
382template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
383struct BandStop : PoleFilter <BandStopBase, StateType, FilterOrder, FilterOrder*2>
384{
392 void setup (double sampleRate,
393 double centerFrequency,
394 double widthFrequency,
395 double stopBandDb) {
396 BandStopBase::setup (FilterOrder,
397 centerFrequency / sampleRate,
398 widthFrequency / sampleRate,
399 stopBandDb);
400 }
401
410 void setup (int reqOrder,
411 double sampleRate,
412 double centerFrequency,
413 double widthFrequency,
414 double stopBandDb) {
415 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
416 BandStopBase::setup (reqOrder,
417 centerFrequency / sampleRate,
418 widthFrequency / sampleRate,
419 stopBandDb);
420 }
421
422
423
424
431 void setupN(double centerFrequency,
432 double widthFrequency,
433 double stopBandDb) {
434 BandStopBase::setup (FilterOrder,
435 centerFrequency,
436 widthFrequency,
437 stopBandDb);
438 }
439
447 void setupN(int reqOrder,
448 double centerFrequency,
449 double widthFrequency,
450 double stopBandDb) {
451 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
452 BandStopBase::setup (reqOrder,
453 centerFrequency,
454 widthFrequency,
455 stopBandDb);
456 }
457};
458
464template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
465struct LowShelf : PoleFilter <LowShelfBase, StateType, FilterOrder>
466{
474 void setup (double sampleRate,
475 double cutoffFrequency,
476 double gainDb,
477 double stopBandDb) {
478 LowShelfBase::setup (FilterOrder,
479 cutoffFrequency / sampleRate,
480 gainDb,
481 stopBandDb);
482 }
483
492 void setup (int reqOrder,
493 double sampleRate,
494 double cutoffFrequency,
495 double gainDb,
496 double stopBandDb) {
497 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
498 LowShelfBase::setup (reqOrder,
499 cutoffFrequency / sampleRate,
500 gainDb,
501 stopBandDb);
502 }
503
504
505
506
507
514 void setupN(double cutoffFrequency,
515 double gainDb,
516 double stopBandDb) {
517 LowShelfBase::setup (FilterOrder,
518 cutoffFrequency,
519 gainDb,
520 stopBandDb);
521 }
522
530 void setupN(int reqOrder,
531 double cutoffFrequency,
532 double gainDb,
533 double stopBandDb) {
534 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
535 LowShelfBase::setup (reqOrder,
536 cutoffFrequency,
537 gainDb,
538 stopBandDb);
539 }
540
541};
542
548template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
549struct HighShelf : PoleFilter <HighShelfBase, StateType, FilterOrder>
550{
558 void setup (double sampleRate,
559 double cutoffFrequency,
560 double gainDb,
561 double stopBandDb) {
562 HighShelfBase::setup (FilterOrder,
563 cutoffFrequency / sampleRate,
564 gainDb,
565 stopBandDb);
566 }
567
576 void setup (int reqOrder,
577 double sampleRate,
578 double cutoffFrequency,
579 double gainDb,
580 double stopBandDb) {
581 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
582 HighShelfBase::setup (reqOrder,
583 cutoffFrequency / sampleRate,
584 gainDb,
585 stopBandDb);
586 }
587
588
589
590
591
592
599 void setupN(double cutoffFrequency,
600 double gainDb,
601 double stopBandDb) {
602 HighShelfBase::setup (FilterOrder,
603 cutoffFrequency,
604 gainDb,
605 stopBandDb);
606 }
607
615 void setupN(int reqOrder,
616 double cutoffFrequency,
617 double gainDb,
618 double stopBandDb) {
619 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
620 HighShelfBase::setup (reqOrder,
621 cutoffFrequency,
622 gainDb,
623 stopBandDb);
624 }
625
626};
627
633template <int FilterOrder = DEFAULT_FILTER_ORDER, class StateType = DEFAULT_STATE>
634struct BandShelf : PoleFilter <BandShelfBase, StateType, FilterOrder, FilterOrder*2>
635{
644 void setup (double sampleRate,
645 double centerFrequency,
646 double widthFrequency,
647 double gainDb,
648 double stopBandDb) {
649 BandShelfBase::setup (FilterOrder,
650 centerFrequency / sampleRate,
651 widthFrequency / sampleRate,
652 gainDb,
653 stopBandDb);
654 }
655
656
666 void setup (int reqOrder,
667 double sampleRate,
668 double centerFrequency,
669 double widthFrequency,
670 double gainDb,
671 double stopBandDb) {
672 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
673 BandShelfBase::setup (reqOrder,
674 centerFrequency / sampleRate,
675 widthFrequency / sampleRate,
676 gainDb,
677 stopBandDb);
678 }
679
680
681
682
683
684
685
693 void setupN(double centerFrequency,
694 double widthFrequency,
695 double gainDb,
696 double stopBandDb) {
697 BandShelfBase::setup (FilterOrder,
698 centerFrequency,
699 widthFrequency,
700 gainDb,
701 stopBandDb);
702 }
703
704
713 void setupN(int reqOrder,
714 double centerFrequency,
715 double widthFrequency,
716 double gainDb,
717 double stopBandDb) {
718 if (reqOrder > FilterOrder) throw_invalid_argument(orderTooHigh);
719 BandShelfBase::setup (reqOrder,
720 centerFrequency,
721 widthFrequency,
722 gainDb,
723 stopBandDb);
724 }
725
726
727};
728
729}
730
731}
Definition PoleFilter.h:90
Definition ChebyshevII.cpp:41
Definition Biquad.cpp:40
Definition ChebyshevII.h:106
Definition ChebyshevII.h:302
void setup(int reqOrder, double sampleRate, double centerFrequency, double widthFrequency, double stopBandDb)
Definition ChebyshevII.h:328
void setupN(double centerFrequency, double widthFrequency, double stopBandDb)
Definition ChebyshevII.h:349
void setup(double sampleRate, double centerFrequency, double widthFrequency, double stopBandDb)
Definition ChebyshevII.h:310
void setupN(int reqOrder, double centerFrequency, double widthFrequency, double stopBandDb)
Definition ChebyshevII.h:365
Definition ChebyshevII.h:138
Definition ChebyshevII.h:635
void setup(int reqOrder, double sampleRate, double centerFrequency, double widthFrequency, double gainDb, double stopBandDb)
Definition ChebyshevII.h:666
void setupN(int reqOrder, double centerFrequency, double widthFrequency, double gainDb, double stopBandDb)
Definition ChebyshevII.h:713
void setupN(double centerFrequency, double widthFrequency, double gainDb, double stopBandDb)
Definition ChebyshevII.h:693
void setup(double sampleRate, double centerFrequency, double widthFrequency, double gainDb, double stopBandDb)
Definition ChebyshevII.h:644
Definition ChebyshevII.h:114
Definition ChebyshevII.h:384
void setup(double sampleRate, double centerFrequency, double widthFrequency, double stopBandDb)
Definition ChebyshevII.h:392
void setupN(int reqOrder, double centerFrequency, double widthFrequency, double stopBandDb)
Definition ChebyshevII.h:447
void setupN(double centerFrequency, double widthFrequency, double stopBandDb)
Definition ChebyshevII.h:431
void setup(int reqOrder, double sampleRate, double centerFrequency, double widthFrequency, double stopBandDb)
Definition ChebyshevII.h:410
Definition ChebyshevII.h:99
Definition ChebyshevII.h:231
void setup(int reqOrder, double sampleRate, double cutoffFrequency, double stopBandDb)
Definition ChebyshevII.h:253
void setup(double sampleRate, double cutoffFrequency, double stopBandDb)
Definition ChebyshevII.h:238
void setupN(int reqOrder, double cutoffFrequency, double stopBandDb)
Definition ChebyshevII.h:284
void setupN(double cutoffFrequency, double stopBandDb)
Definition ChebyshevII.h:271
Definition ChebyshevII.h:130
Definition ChebyshevII.h:550
void setupN(double cutoffFrequency, double gainDb, double stopBandDb)
Definition ChebyshevII.h:599
void setup(int reqOrder, double sampleRate, double cutoffFrequency, double gainDb, double stopBandDb)
Definition ChebyshevII.h:576
void setupN(int reqOrder, double cutoffFrequency, double gainDb, double stopBandDb)
Definition ChebyshevII.h:615
void setup(double sampleRate, double cutoffFrequency, double gainDb, double stopBandDb)
Definition ChebyshevII.h:558
Definition ChebyshevII.h:92
Definition ChebyshevII.h:159
void setupN(int reqOrder, double cutoffFrequency, double stopBandDb)
Definition ChebyshevII.h:213
void setup(double sampleRate, double cutoffFrequency, double stopBandDb)
Definition ChebyshevII.h:166
void setupN(double cutoffFrequency, double stopBandDb)
Definition ChebyshevII.h:200
void setup(int reqOrder, double sampleRate, double cutoffFrequency, double stopBandDb)
Definition ChebyshevII.h:181
Definition ChebyshevII.h:122
Definition ChebyshevII.h:466
void setup(int reqOrder, double sampleRate, double cutoffFrequency, double gainDb, double stopBandDb)
Definition ChebyshevII.h:492
void setupN(int reqOrder, double cutoffFrequency, double gainDb, double stopBandDb)
Definition ChebyshevII.h:530
void setup(double sampleRate, double cutoffFrequency, double gainDb, double stopBandDb)
Definition ChebyshevII.h:474
void setupN(double cutoffFrequency, double gainDb, double stopBandDb)
Definition ChebyshevII.h:514