mirror of
https://github.com/TheAlgorithms/Python.git
synced 2025-03-12 17:49:50 +00:00
Added safety checks for filter stability
This commit is contained in:
parent
e59d819d09
commit
358a6473b5
@ -9,7 +9,22 @@ Code based on https://webaudio.github.io/Audio-EQ-Cookbook/audio-eq-cookbook.htm
|
|||||||
Alternatively you can use scipy.signal.butter, which should yield the same results.
|
Alternatively you can use scipy.signal.butter, which should yield the same results.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
# All calls to filter creators must have keyword arguments
|
||||||
|
def safe_checks(filter_creator):
|
||||||
|
def safe_filter_creator(**kwargs):
|
||||||
|
if not isinstance(kwargs['frequency'], int) or kwargs['frequency'] <= 0:
|
||||||
|
raise ValueError('Frequency must be a positive integer.')
|
||||||
|
if not isinstance(kwargs['samplerate'], int) or kwargs['samplerate'] <= 0:
|
||||||
|
raise ValueError('Samplerate must be a positive integer.')
|
||||||
|
if not (0 < kwargs['frequency'] < kwargs['samplerate'] / 2):
|
||||||
|
raise ValueError('Frequency must be less than half of the samplerate.')
|
||||||
|
if kwargs['q_factor'] <= 0:
|
||||||
|
raise ValueError('Q factor must be positive.')
|
||||||
|
return filter_creator(**kwargs)
|
||||||
|
return safe_filter_creator
|
||||||
|
|
||||||
|
|
||||||
|
@safe_checks
|
||||||
def make_lowpass(
|
def make_lowpass(
|
||||||
frequency: int,
|
frequency: int,
|
||||||
samplerate: int,
|
samplerate: int,
|
||||||
@ -40,6 +55,7 @@ def make_lowpass(
|
|||||||
return filt
|
return filt
|
||||||
|
|
||||||
|
|
||||||
|
@safe_checks
|
||||||
def make_highpass(
|
def make_highpass(
|
||||||
frequency: int,
|
frequency: int,
|
||||||
samplerate: int,
|
samplerate: int,
|
||||||
@ -70,6 +86,7 @@ def make_highpass(
|
|||||||
return filt
|
return filt
|
||||||
|
|
||||||
|
|
||||||
|
@safe_checks
|
||||||
def make_bandpass(
|
def make_bandpass(
|
||||||
frequency: int,
|
frequency: int,
|
||||||
samplerate: int,
|
samplerate: int,
|
||||||
@ -101,6 +118,7 @@ def make_bandpass(
|
|||||||
return filt
|
return filt
|
||||||
|
|
||||||
|
|
||||||
|
@safe_checks
|
||||||
def make_allpass(
|
def make_allpass(
|
||||||
frequency: int,
|
frequency: int,
|
||||||
samplerate: int,
|
samplerate: int,
|
||||||
@ -128,6 +146,7 @@ def make_allpass(
|
|||||||
return filt
|
return filt
|
||||||
|
|
||||||
|
|
||||||
|
@safe_checks
|
||||||
def make_peak(
|
def make_peak(
|
||||||
frequency: int,
|
frequency: int,
|
||||||
samplerate: int,
|
samplerate: int,
|
||||||
@ -160,6 +179,7 @@ def make_peak(
|
|||||||
return filt
|
return filt
|
||||||
|
|
||||||
|
|
||||||
|
@safe_checks
|
||||||
def make_lowshelf(
|
def make_lowshelf(
|
||||||
frequency: int,
|
frequency: int,
|
||||||
samplerate: int,
|
samplerate: int,
|
||||||
@ -197,6 +217,7 @@ def make_lowshelf(
|
|||||||
return filt
|
return filt
|
||||||
|
|
||||||
|
|
||||||
|
@safe_checks
|
||||||
def make_highshelf(
|
def make_highshelf(
|
||||||
frequency: int,
|
frequency: int,
|
||||||
samplerate: int,
|
samplerate: int,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user