一些基本概念

  • 盲源方法是在对源信号和传递函数未知的情况下仅仅通过输出信号来估计源信号的方法,其指导准则是认为源信号统计独立,而分离思路是通过分离矩阵输入为混合信号最大化输出的统计独立性。

  • 根据中心极限定理:独立随机变量之和趋向与高斯分布,那么最大化统计独立也就是最大化非高斯。

  • 互信息是信息论中依赖性的自然度量,互信息的近似可以用负熵近似相同的方法,也可以用似然度近似相同的方法;最终我们可以得到与极大化非高斯性和极大化似然度十分相似的目标函数和算法,同样的其对应的优化方法(梯度,不动点,辅助函数)均可用于优化互信息。
    ICA_IVA的基本问题_传递函数

  • 开始堆公式:$X_{:k}=H_{::k}s_{:k}$,s,H,X分别是源信号,混合矩阵,混合信号;$y_{:k}=G_{::k}X_{:k}$,y为估计的信号x向量,G为解混矩阵;K_L散度的公式为:

    $I_{v}=KL{P(Y)|\prod_{i=1}^n p(y_{i})}\
    =const. +\sum_{k=1}{log|G_{::k}|}-\sum_{i=1}E[P(y_i)]$

ICA_IVA的基本问题_github_02
ICA_IVA的基本问题_传递函数_03
ICA_IVA的基本问题_时域_04

  1. (11)可以理解为对于一段时域源信号,其频率域上的向量具有幅度依赖性,这个是可以理解的;不过zero mean and identity covariance matrix需要再深入。
  2. 如上可以关注这一句话:while $I_{il}$ is only when $i=l$,每个频点的解混矩阵仍然只和这个频点的输入向量$X$有关,不过解混矩阵的系数推导和其它频点有关[通过其体现,$\varphi{(k)}(y_{i}{(1)},y
    _{i}{(2)},y_{i}{(k)})$]。
  • super-Guassian distribution的解读:

ICA_IVA的基本问题_github_05
ICA_IVA的基本问题_传递函数_06

  1. 语音信号是否就是如上的分布???如上的假设是否存在不合理。
  2. 0均值,单位协方差的假设物理意义理解。
  • 如下是开源代码跑出来的结果:
    ICA_IVA的基本问题_传递函数_07
    ICA_IVA的基本问题_时域_08
    ICA_IVA的基本问题_辅助函数_09

https://github.com/teradepth/iva
https://github.com/ltcxjtu/bss
https://www.funcwj.cn/2018/10/10/auxiva-algorithm/

需要关注的几个参数,从这里可以看到loss的变化
$$
loss_es[kk] += np.log(np.abs(scipy.linalg.det(w[k, :, :])))
$$

从结果上看$\sum_{k=1}{log|G_{::k}|}$这个loss在迭代过程中变化比较明显

aux_IVA的推导和理解

ICA_IVA的基本问题_github_10

$\frac{\partial{n-1}log(detW)}{\partial{n-1}w_{k}}=\frac{W{-t}detW}{detW}=W{-t}$

projection back 的原理和实现

def projection_back(Y, ref, clip_up=None, clip_down=None):
    """
    This function computes the frequency-domain filter that minimizes
    the squared error to a reference signal. This is commonly used
    to solve the scale ambiguity in BSS.
    Here is the derivation of the projection.
    The optimal filter `z` minimizes the squared error.
    .. math::
        \min E[|z^* y - x|^2]
    It should thus satsify the orthogonality condition
    and can be derived as follows
    .. math::
        0 & = E[y^*\\, (z^* y - x)]
        0 & = z^*\\, E[|y|^2] - E[y^* x]
        z^* & = \\frac{E[y^* x]}{E[|y|^2]}
        z & = \\frac{E[y x^*]}{E[|y|^2]}
    In practice, the expectations are replaced by the sample
    mean.
    Parameters
    ----------
    Y: array_like (n_frames, n_bins, n_channels)
        The STFT data to project back on the reference signal
    ref: array_like (n_frames, n_bins)
        The reference signal
    clip_up: float, optional
        Limits the maximum value of the gain (default no limit)
    clip_down: float, optional
        Limits the minimum value of the gain (default no limit)
    """
    num = np.sum(np.conj(ref[:, :, None]) * Y, axis=0)
    denom = np.sum(np.abs(Y) ** 2, axis=0)
    c = np.ones(num.shape, dtype=np.complex)
    I = denom > 0.0
    c[I] = num[I] / denom[I]
    if clip_up is not None:
        I = np.logical_and(np.abs(c) > clip_up, np.abs(c) > 0)
        c[I] *= clip_up / np.abs(c[I])
    if clip_down is not None:
        I = np.logical_and(np.abs(c) < clip_down, np.abs(c) > 0)
        c[I] *= clip_down / np.abs(c[I])
    return c
  • 我们看原始论文是说根据最小失真原则来对解混矩阵进行归一(Minimal Distortion Principle for Blind Source Separation):
    ICA_IVA的基本问题_互信息_11

其中$s$是信号,$A$是传递函数,$W$是解混矩阵,到这里其实就是最小二乘了;
$$||W(z)A(z)S-A(z)S||=||Y-X||$$

结果讨论

  • 目前可以得到offline和online版本的auxIVA,感觉低频部分的处理泄漏较大。

C:\Users\longt\source\bss\data\data_iva

  • 我需要完成在不同混响程度下进行算法的测试

问题讨论

  • $frame_size$的设置一般在4096,2048,1024;从别人的经验是1024已经是足够小了,其原因在于需要包含信号的冲激响应$H(x)$,那么需要找到如此做法的解释。如时域卷积和频域相乘。