def demix(observations, demix_filter):
    """
    Perform the demixing filter into observations.

    Parameters
    ----------
    observations : ndarray of shape (n_frame, n_freq, n_src)
    demix_filter : ndarray of shape (n_freq, n_src, n_src)

    Returns
    -------
    Estimated source
        ndarray of shape (n_frame, n_freq, n_src)
    """
    # shape: (n_freq, n_src, n_frame)
    y = demix_filter @ observations.transpose([1, 2, 0])
    return y.transpose([2, 0, 1])