Skip to content

Commit 358a647

Browse files
committed
Added safety checks for filter stability
1 parent e59d819 commit 358a647

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

audio_filters/butterworth_filter.py

+22-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,22 @@
99
Alternatively you can use scipy.signal.butter, which should yield the same results.
1010
"""
1111

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
1328
def make_lowpass(
1429
frequency: int,
1530
samplerate: int,
@@ -40,6 +55,7 @@ def make_lowpass(
4055
return filt
4156

4257

58+
@safe_checks
4359
def make_highpass(
4460
frequency: int,
4561
samplerate: int,
@@ -70,6 +86,7 @@ def make_highpass(
7086
return filt
7187

7288

89+
@safe_checks
7390
def make_bandpass(
7491
frequency: int,
7592
samplerate: int,
@@ -101,6 +118,7 @@ def make_bandpass(
101118
return filt
102119

103120

121+
@safe_checks
104122
def make_allpass(
105123
frequency: int,
106124
samplerate: int,
@@ -128,6 +146,7 @@ def make_allpass(
128146
return filt
129147

130148

149+
@safe_checks
131150
def make_peak(
132151
frequency: int,
133152
samplerate: int,
@@ -160,6 +179,7 @@ def make_peak(
160179
return filt
161180

162181

182+
@safe_checks
163183
def make_lowshelf(
164184
frequency: int,
165185
samplerate: int,
@@ -197,6 +217,7 @@ def make_lowshelf(
197217
return filt
198218

199219

220+
@safe_checks
200221
def make_highshelf(
201222
frequency: int,
202223
samplerate: int,

0 commit comments

Comments
 (0)