Calculate PCA using SVD.
    
    Parameters
    ----------
    x : ndarray, shape (channels, samples)
        Two-dimensional input data.
        
    Returns
    -------
    w : ndarray, shape (channels, channels)
        Eigenvectors (principal components) (in columns).
    s : ndarray, shape (channels,)
        Eigenvalues.

def pca_svd(x):
    """Calculate PCA using SVD.
    
    Parameters
    ----------
    x : ndarray, shape (channels, samples)
        Two-dimensional input data.
        
    Returns
    -------
    w : ndarray, shape (channels, channels)
        Eigenvectors (principal components) (in columns).
    s : ndarray, shape (channels,)
        Eigenvalues.
    """
    w, s, _ = np.linalg.svd(x, full_matrices=False)
    return w, s ** 2