speechbrain.utils.filter_analysis 模块

实现了用于建模和组合滤波器属性的实用工具,例如计算窗口大小、步长等如何作用,这对于流式传输等特定用例可能很有用。

作者
  • Sylvain de Langen 2024

摘要

FilterProperties

模拟随时间推移表现得像滤波器(例如卷积、fbanks 等)的事物的属性。

函数

stack_filter_properties

返回一系列堆叠滤波器的滤波器属性。

参考

class speechbrain.utils.filter_analysis.FilterProperties(window_size: int, stride: int = 1, dilation: int = 1, causal: bool = False)[source]

基类:object

模拟随时间推移表现得像滤波器(例如卷积、fbanks 等)的事物的属性。

window_size: int

滤波器的大小,即单个输出所依赖的输入帧数。除了扩张之外,假定窗口在连续的帧块上操作。

示例:

size = 3, stride = 3

out  <-a-> <-b-> <-c->
in   1 2 3 4 5 6 7 8 9
stride: int = 1

滤波器的步长,即从一个输出帧到下一个输出帧跳过的输入帧数(与窗口大小或扩张无关)。

示例:

size = 3, stride = 2

     <-a->
         <-b->   <-d->
out          <-c->
in   1 2 3 4 5 6 7 8 9
dilation: int = 1

滤波器的扩张率。窗口将考虑每 n 个(n=扩张率)输入帧。通过扩张,滤波器仍将观察 size 个输入帧,但窗口将跨越更多帧。

扩张主要与“带孔”卷积相关。默认扩张率为 1,实际上不执行扩张。

示例:

size = 3, stride = 1, dilation = 3

    <-------> dilation - 1 == 2 skips
    a        a        a
    |  b     |  b     |  b
    |  |  c  |  |  c  |  |  c
    |  |  |  d  |  |  d  |  |  d
    |  |  |  |  e  |  |  e  |  |  ..
in  1  2  3  4  5  6  7  8  9  10 ..
    <-> stride == 1
causal: bool = False

滤波器是否是因果的,即输出帧是否只依赖于过去的输入帧(索引较低或相等)。

在某些情况下,例如 1D 卷积,这可以通过在将滤波器应用于输入张量之前,简单地在滤波器左侧插入填充来实现。

示例:

size = 3, stride = 1, causal = true
         <-e->
       <-d->
     <-c->
     b->
     a
in   1 2 3 4 5
static pointwise_filter() FilterProperties[source]

返回一个简单滤波器的滤波器属性,其输出帧仅依赖于各自的输入帧。

get_effective_size()[source]

跨越窗口的输入帧数,包括被扩张忽略的帧。

get_convolution_padding()[source]

对于典型卷积需要在每一端插入的帧数。

get_noncausal_equivalent()[source]

从因果滤波器的定义中,获取一个兼容的非因果滤波器定义,其中每个输出帧依赖于相同的输入帧,外加一些虚假依赖。

with_on_top(other, allow_approximate=True)[source]

考虑滤波器链 other(self(x)),返回所得滤波器的重新计算属性。

参数:
  • other (FilterProperties | any) – 要与 self 结合的滤波器。

  • allow_approximate (bool, optional) – 如果为 True (默认值),结果属性可能“悲观”,并在无法确定精确属性时表达虚假依赖,而不是出错。在堆叠非因果和因果滤波器时可能会出现这种情况。根据用例,这可能没问题,但像 has_overlap 这样的函数可能会错误地开始返回 True

返回值:

组合滤波器的属性。

返回类型:

FilterProperties

speechbrain.utils.filter_analysis.stack_filter_properties(filters, allow_approximate=True)[source]

返回一系列堆叠滤波器的滤波器属性。如果序列为空,则返回一个空操作滤波器(大小和步长为 1)。

参数:
  • filters (FilterProperties | any) – 要组合的滤波器,例如建模 c(b(a(x)))[a, b, c]。如果一个项目不是 FilterProperties 的实例,则尝试在其上调用 .get_filter_properties()

  • allow_approximate (bool, optional) – 参阅 FilterProperties.with_on_top

返回值:

ret – 滤波器序列的属性

返回类型:

FilterProperties