Source code for pywddff.filters

from pywddff.utils import insert_zeros_between
from pywddff.datasets import get_scaling_dict, get_wavelet_dict
import numpy as np

# Level 1 scaling and wavelet filters

[docs]def scaling_filter(filter, modwt = False): """ Level 1 scaling filter. Args: filter (str): A string indicating the desired filter. There are 128 options, see the README on this package's github page to see the list of filters available. modwt (bool): If True, the level 1 scaling filter is divided by 2^(1/2). Returns: np.ndarray: A 1D numpy array. """ scaling_dict = get_scaling_dict() if modwt: return scaling_dict[filter] / np.sqrt(2) elif not modwt: return scaling_dict[filter] else: raise TypeError
[docs]def wavelet_filter(filter, modwt = False): """ Level 1 wavelet filter. Args: filter (str): A string indicating the desired filter. There are 128 options, see the README on this package's github page to see the list of filters available. modwt (bool): If True, the level 1 wavelet filter is divided by 2^(1/2). Returns: np.ndarray: A 1D numpy array. """ wavelet_dict = get_wavelet_dict() if modwt: return wavelet_dict[filter] / np.sqrt(2) elif not modwt: return wavelet_dict[filter] else: raise TypeError
# Level j scaling and wavelet filters
[docs]def equiv_scaling_filter(filter, j): """ Level j equivalent scaling filter. Args: filter (str): A string indicating the desired filter. There are 128 options, see the README on this package's github page to see the list of filters available. j (int): Decomposition level. Returns: np.ndarray: A 1D numpy array of length (2^j -1)*(L-1)+1, where L is the length of the level 1 scaling/wavelet filter. """ prev_filter = scaling_filter(filter) running_filter = prev_filter.copy() for i in range(j-1): next_filter = insert_zeros_between(prev_filter, 1) running_filter = np.convolve(next_filter, running_filter) prev_filter = next_filter return running_filter
[docs]def equiv_wavelet_filter(filter, j): """ Level j equivalent wavelet filter. Args: filter (str): A string indicating the desired filter. There are 128 options, see the README on this package's github page to see the list of filters available. j (int): Decomposition level. Returns: np.ndarray: A 1D numpy array of length (2^j -1)*(L-1)+1, where L is the length of the level 1 scaling/wavelet filter. """ prev_filter = scaling_filter(filter) running_filter = prev_filter.copy() for i in range(j-2): next_filter = insert_zeros_between(prev_filter, 1) running_filter = np.convolve(next_filter, running_filter) prev_filter = next_filter prev_filter = wavelet_filter(filter) next_filter = insert_zeros_between(prev_filter, (2**(j-1))-1) running_filter = np.convolve(next_filter, running_filter) return running_filter