speechbrain.processing.decomposition 模块

广义特征值分解。

该库包含不同的方法来调整复杂厄米特矩阵的格式并找到它们的特征向量和特征值。

Authors
  • 威廉·阿里斯 2020

  • 弗朗索瓦·格隆丹 2020

摘要

函数:

f

转换 1.

finv

逆变换 1

g

转换 2.

gevd

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

ginv

逆变换2。

inv

逆埃尔米特矩阵。

pos_def

对角线修改。

svdl

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

参考

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

该方法计算复Hermitian矩阵的特征向量和特征值。该方法找到问题AV = BVD的解,其中V是特征向量,D是特征值。

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

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

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

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

Returns:

  • vs (torch.Tensor)

  • ds (torch.Tensor)

Example

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

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)的特征值和特征向量。

The function will return (in this order):
  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)

Parameters:

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

Returns:

wsh

Return type:

torch.Tensor

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

逆变换 1

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

Parameters:

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

Returns:

ws

Return type:

torch.Tensor

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

转换 2。

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

Parameters:

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

Returns:

wsh

Return type:

torch.Tensor

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

逆变换 2。

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

Parameters:

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

Returns:

ws

Return type:

torch.Tensor

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

对角线修改。

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

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

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

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

Returns:

ws_pf

Return type:

torch.Tensor

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

逆埃尔米特矩阵。

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

Parameters:

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

Returns:

x_inv

Return type:

torch.Tensor

Example

>>> 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)