|
9 | 9 | Alternatively you can use scipy.signal.butter, which should yield the same results.
|
10 | 10 | """
|
11 | 11 |
|
12 |
| - |
| 12 | +# All calls to filter creators must have keyword arguments |
| 13 | +def safe_checks(filter_creator): |
| 14 | + def safe_filter_creator(**kwargs): |
| 15 | + if not isinstance(kwargs['frequency'], int) or kwargs['frequency'] <= 0: |
| 16 | + raise ValueError('Frequency must be a positive integer.') |
| 17 | + if not isinstance(kwargs['samplerate'], int) or kwargs['samplerate'] <= 0: |
| 18 | + raise ValueError('Samplerate must be a positive integer.') |
| 19 | + if not (0 < kwargs['frequency'] < kwargs['samplerate'] / 2): |
| 20 | + raise ValueError('Frequency must be less than half of the samplerate.') |
| 21 | + if kwargs['q_factor'] <= 0: |
| 22 | + raise ValueError('Q factor must be positive.') |
| 23 | + return filter_creator(**kwargs) |
| 24 | + return safe_filter_creator |
| 25 | + |
| 26 | + |
| 27 | +@safe_checks |
13 | 28 | def make_lowpass(
|
14 | 29 | frequency: int,
|
15 | 30 | samplerate: int,
|
@@ -40,6 +55,7 @@ def make_lowpass(
|
40 | 55 | return filt
|
41 | 56 |
|
42 | 57 |
|
| 58 | +@safe_checks |
43 | 59 | def make_highpass(
|
44 | 60 | frequency: int,
|
45 | 61 | samplerate: int,
|
@@ -70,6 +86,7 @@ def make_highpass(
|
70 | 86 | return filt
|
71 | 87 |
|
72 | 88 |
|
| 89 | +@safe_checks |
73 | 90 | def make_bandpass(
|
74 | 91 | frequency: int,
|
75 | 92 | samplerate: int,
|
@@ -101,6 +118,7 @@ def make_bandpass(
|
101 | 118 | return filt
|
102 | 119 |
|
103 | 120 |
|
| 121 | +@safe_checks |
104 | 122 | def make_allpass(
|
105 | 123 | frequency: int,
|
106 | 124 | samplerate: int,
|
@@ -128,6 +146,7 @@ def make_allpass(
|
128 | 146 | return filt
|
129 | 147 |
|
130 | 148 |
|
| 149 | +@safe_checks |
131 | 150 | def make_peak(
|
132 | 151 | frequency: int,
|
133 | 152 | samplerate: int,
|
@@ -160,6 +179,7 @@ def make_peak(
|
160 | 179 | return filt
|
161 | 180 |
|
162 | 181 |
|
| 182 | +@safe_checks |
163 | 183 | def make_lowshelf(
|
164 | 184 | frequency: int,
|
165 | 185 | samplerate: int,
|
@@ -197,6 +217,7 @@ def make_lowshelf(
|
197 | 217 | return filt
|
198 | 218 |
|
199 | 219 |
|
| 220 | +@safe_checks |
200 | 221 | def make_highshelf(
|
201 | 222 | frequency: int,
|
202 | 223 | samplerate: int,
|
|
0 commit comments