Framing and windowing¶
Contents
Frames extraction¶
Provides the Frames class to extract frames from raw signals
Extracts overlapping frames from raw (sampled) signals:
array ---> Frames ---> array
Examples
>>> import numpy as np
>>> from shennong.frames import Frames
Build a discrete signal
>>> a = np.arange(10)
>>> a
array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])
Computes frames of 3s with a shift of 1s (here we assume fs=1Hz for simplicity)
>>> f = Frames(sample_rate=1, frame_shift=1, frame_length=3)
>>> b = f.make_frames(a)
>>> b
array([[0, 1, 2],
[1, 2, 3],
[2, 3, 4],
[3, 4, 5],
[4, 5, 6],
[5, 6, 7],
[6, 7, 8],
[7, 8, 9]])
-
class
shennong.frames.
Frames
(sample_rate=16000, frame_shift=0.01, frame_length=0.025, snip_edges=True)[source]¶ Bases:
shennong.base.BaseProcessor
Extract frames from raw signals
-
property
sample_rate
¶ Waveform sample frequency in Hertz
Must match the sample rate of the signal specified in process
-
property
frame_shift
¶ Frame shift in seconds
-
property
frame_length
¶ Frame length in seconds
-
property
snip_edges
¶ If true, output only frames that completely fit in the file
When True the number of frames depends on the frame_length. If False, the number of frames depends only on the frame_shift, and we reflect the data at the ends.
-
property
samples_per_frame
¶ The number of samples in one frame
-
property
samples_per_shift
¶ The number of samples between two shifts
-
get_params
(deep=True)¶ Get parameters for this processor.
- Parameters
deep (boolean, optional) – If True, will return the parameters for this processor and contained subobjects that are processors. Default to True.
- Returns
params (mapping of string to any) – Parameter names mapped to their values.
-
property
log
¶ Processor logger
-
abstract property
name
¶ Processor name
-
nframes
(nsamples)[source]¶ Returns the number of frames extracted from nsamples
This function returns the number of frames that we can extract from a wave file with the given number of samples in it (assumed to have the same sampling rate as specified in init).
- Parameters
nsamples (int) – The number of samples in the input
- Returns
nframes (int) – The number of frames extracted from nsamples
- Raises
ValueError – If
samples_per_shift == 0
, meaning the sample rate is to low w.r.t the frame shift.
-
set_logger
(level, formatter='%(levelname)s - %(name)s - %(message)s')¶ Change level and/or format of the processor’s logger
- Parameters
level (str) – The minimum log level handled by the logger (any message above this level will be ignored). Must be ‘debug’, ‘info’, ‘warning’ or ‘error’.
formatter (str, optional) – A string to format the log messages, see https://docs.python.org/3/library/logging.html#formatter-objects. By default display level and message. Use ‘%(asctime)s - %(levelname)s - %(name)s - %(message)s’ to display time, level, name and message.
-
set_params
(**params)¶ Set the parameters of this processor.
- Returns
self
- Raises
ValueError – If any given parameter in
params
is invalid for the processor.
-
times
(nsamples)[source]¶ Returns an array of (tstart, tstop) times of each frames of a signal
- Parameters
nsamples (int) – The number of frames of the considered signal
- Returns
times (array, shape = [nframes, 2]) – The start and stop times of each frame extracted from nsamples samples.
-
boundaries
(nframes)[source]¶ Returns an array of (istart, istop) index boundaries of frames
- Parameters
nframes (int) – The number of frames to generate
- Returns
boundaries (array, shape = [nframes, 2]) – The start and stop indices of each frame extracted from nsamples samples.
-
make_frames
(array, writeable=False)[source]¶ Returns an array divided in frames
- Parameters
array (array, shape = [x, ..]) – The array to be divided in frames
writeable (bool, optional) – Default to False. When True, the returned array is writable but the frames are made of copies of the original array. When False, the result is read-only but this optimizes the process: no explicit copy is made of the orignal array, only views are used. (see https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/ numpy.lib.stride_tricks.as_strided.html)
- Returns
frames (array, shape = [nframes(x), samples_per_frame, …]) – The frames computed from the original array
-
property
Windows functions¶
Implementation of different types of window functions
This is usefull when computing frames for features extraction. Uses the kaldi implementation.
The implemented window functions are, with length noted :
rectangular:
hanning:
hamming:
povey (like hamming but goes to zero at edges):
blackman, with blackman_coeff noted as :
Examples
>>> from shennong.window import window
>>> window(5, type='hamming')
array([0.08, 0.54, 1. , 0.54, 0.08], dtype=float32)
>>> window(5, type='rectangular')
array([1., 1., 1., 1., 1.], dtype=float32)
>>> window(5, type='povey').tolist()
[0.0, 0.5547847151756287, 1.0, 0.5547847151756287, 0.0]
-
shennong.window.
window
(length, type='povey', blackman_coeff=0.42)[source]¶ Returns a window of the given type and length
- Parameters
length (int) – The size of the window, in number of samples
type ({'povey', 'hanning', 'hamming', 'rectangular', 'blackman'}) – The type of the window, default is ‘povey’ (like hamming but goes to zero at edges)
blackman_coeff (float, optional) – The constant coefficient for generalized Blackman window, used only when type is ‘blackman’
- Returns
window (array, shape = [length, 1]) – The window with the given type and length
- Raises
ValueError – If the type is not valid or length <= 1