import numpy as np
from scipy.signal.windows import hann
[docs]def half_hann_window(length, half_percent=None, hann_window_length=None):
"""
Produce a half-Hann window. This is the Hann window from SciPY with ones inserted in the middle to make the window
`length` long. Note that this is different from a Hamming window.
Parameters
----------
length : int
The desired total length of the window
half_percent : float, default=None
The percentage of `length` at the beginning **and** end that should correspond to half of the Hann window
hann_window_length : int, default=None
The length of the half the Hann window. If `half_percent` is set, this value will be overwritten by it.
"""
if half_percent is not None:
hann_window_length = int(length * half_percent)
elif hann_window_length is None:
raise ValueError("Either half_percent or half_window_length should be set!")
hann_window = hann(2 * hann_window_length)
half_hann_widow = np.ones(length, dtype=np.double)
half_hann_widow[:hann_window_length] = hann_window[:hann_window_length]
half_hann_widow[-hann_window_length:] = hann_window[hann_window_length:]
return half_hann_widow