speechbrain.processing.decomposition 模块

广义特征值分解。

此库包含不同的方法来调整复共轭 Hermitian 矩阵的格式,并找到它们的特征向量和特征值。

作者
  • William Aris 2020

  • Francois Grondin 2020

摘要

函数

f

变换 1。

finv

逆变换 1

g

变换 2。

gevd

此方法计算复共轭 Hermitian 矩阵的特征向量和特征值。

ginv

逆变换 2。

inv

逆 Hermitian 矩阵。

pos_def

对角线修改。

svdl

奇异值分解(左奇异向量)。

参考

speechbrain.processing.decomposition.gevd(a, b=None)[source]

此方法计算复共轭 Hermitian 矩阵的特征向量和特征值。该方法寻找方程 AV = BVD 的解,其中 V 是特征向量,D 是特征值。

此方法返回的特征向量 (vs) 存储在以下格式的张量中 (*,C,C,2)。

此方法返回的特征值 (ds) 存储在以下格式的张量中 (*,C,C,2)。

参数:
  • a (torch.Tensor) – 第一个输入矩阵。它等同于上述描述中方程里的矩阵 A。张量必须具有以下格式:(*,2,C+P)。

  • b (torch.Tensor) – 第二个输入矩阵。它等同于上述描述中方程里的矩阵 B。张量必须具有以下格式:(*,2,C+P)。此参数是可选的,其默认值为 None。如果 b == None,则在计算中将 b 替换为单位矩阵。

返回:

  • vs (torch.Tensor)

  • ds (torch.Tensor)

示例

假设我们想计算以下复共轭 Hermitian 矩阵的特征值/特征向量

A = [ 52 34 + 37j 16 + j28 ;

34 - 37j 125 41 + j3 ; 16 - 28j 41 - j3 62 ]

>>> a = torch.FloatTensor([[52,34,16,125,41,62],[0,37,28,0,3,0]])
>>> vs, ds = gevd(a)

这对应于

D = [ 20.9513 0 0 ;

0 43.9420 0 ; 0 0 174.1067 ]

V = [ 0.085976 - 0.85184j -0.24620 + 0.12244j -0.24868 - 0.35991j ;

-0.16006 + 0.20244j 0.37084 + 0.40173j -0.79175 - 0.087312j ; -0.43990 + 0.082884j -0.36724 - 0.70045j -0.41728 + 0 j ]

其中

A = VDV^-1

speechbrain.processing.decomposition.svdl(a)[source]

奇异值分解(左奇异向量)。

此函数计算输入矩阵与其转置 (a x a.T) 相乘结果的特征值和特征向量。

此函数将返回(按此顺序)
  1. 特征值,格式为 (*,C,C,2) 的张量

  2. 特征向量,格式为 (*,C,C,2) 的张量

参数:

atorch.Tensor

要处理的复数输入矩阵。张量必须具有以下格式:(*,2,C+P)。

示例:

>>> import torch
>>> from speechbrain.processing.features import STFT
>>> from speechbrain.processing.multi_mic import Covariance
>>> from speechbrain.processing.decomposition import svdl
>>> from speechbrain.dataio.dataio import read_audio_multichannel
>>> xs_speech = read_audio_multichannel(
...    'tests/samples/multi-mic/speech_-0.82918_0.55279_-0.082918.flac'
... )
>>> xs_noise = read_audio_multichannel('tests/samples/multi-mic/noise_diffuse.flac')
>>> xs = xs_speech + 0.05 * xs_noise
>>> xs = xs.unsqueeze(0).float()
>>>
>>> stft = STFT(sample_rate=16000)
>>> cov = Covariance()
>>>
>>> Xs = stft(xs)
>>> XXs = cov(Xs)
>>> us, ds = svdl(XXs)
speechbrain.processing.decomposition.f(ws)[source]

变换 1。

此方法接受一个由其上三角部分表示的复共轭 Hermitian 矩阵,并将其转换为表示由实数组成的完整原始矩阵的块矩阵。输出张量将具有以下格式:(*,2C,2C)

参数:

ws (torch.Tensor) – 输入矩阵。张量必须具有以下格式:(*,2,C+P)

返回:

wsh

返回类型:

torch.Tensor

speechbrain.processing.decomposition.finv(wsh)[source]

逆变换 1

此方法接受表示复共轭 Hermitian 矩阵的块矩阵,并将其转换为由其上三角部分表示的复数矩阵。结果将具有以下格式:(*,2,C+P)

参数:

wsh (torch.Tensor) – 输入矩阵。张量必须具有以下格式:(*,2C,2C)

返回:

ws

返回类型:

torch.Tensor

speechbrain.processing.decomposition.g(ws)[source]

变换 2。

此方法接受一个完整的复数矩阵,并将其转换为块矩阵。结果将具有以下格式:(*,2C,2C)。

参数:

ws (torch.Tensor) – 输入矩阵。张量必须具有以下格式:(*,C,C,2)

返回:

wsh

返回类型:

torch.Tensor

speechbrain.processing.decomposition.ginv(wsh)[source]

逆变换 2。

此方法接受由块矩阵表示的复共轭 Hermitian 矩阵,并将其转换为完整的复数矩阵。结果将具有以下格式:(*,C,C,2)

参数:

wsh (torch.Tensor) – 输入矩阵。张量必须具有以下格式:(*,2C,2C)

返回:

ws

返回类型:

torch.Tensor

speechbrain.processing.decomposition.pos_def(ws, alpha=0.001, eps=1e-20)[source]

对角线修改。

此方法接受一个由其上三角部分表示的复共轭 Hermitian 矩阵,并将其迹乘以 alpha 的值加到其对角线的实部。输出将具有以下格式:(*,2,C+P)

参数:
  • ws (torch.Tensor) – 输入矩阵。张量必须具有以下格式:(*,2,C+P)

  • alpha (float) – 乘以迹的系数。默认值为 0.001。

  • eps (float) – 用于增加对角线实部的小值。默认值为 1e-20。

返回:

ws_pf

返回类型:

torch.Tensor

speechbrain.processing.decomposition.inv(x)[source]

逆 Hermitian 矩阵。

此方法寻找由其上三角部分表示的复共轭 Hermitian 矩阵的逆。结果将具有以下格式:(*, C, C, 2)。

参数:

x (torch.Tensor) – 要处理的输入矩阵。张量必须具有以下格式:(*, 2, C+P)

返回:

x_inv

返回类型:

torch.Tensor

示例

>>> import torch
>>>
>>> from speechbrain.dataio.dataio import read_audio
>>> from speechbrain.processing.features import STFT
>>> from speechbrain.processing.multi_mic import Covariance
>>> from speechbrain.processing.decomposition import inv
>>>
>>> xs_speech = read_audio(
...    'tests/samples/multi-mic/speech_-0.82918_0.55279_-0.082918.flac'
... )
>>> xs_noise = read_audio('tests/samples/multi-mic/noise_0.70225_-0.70225_0.11704.flac')
>>> xs = xs_speech + 0.05 * xs_noise
>>> xs = xs.unsqueeze(0).float()
>>>
>>> stft = STFT(sample_rate=16000)
>>> cov = Covariance()
>>>
>>> Xs = stft(xs)
>>> XXs = cov(Xs)
>>> XXs_inv = inv(XXs)