コード例 #1
0
def aggregate_entropy(args):
    psd = get_psd(args)

    # Entropy of energy in each frequency bin over whole time
    ebin = np.sum(psd, axis=1)
    ebin /= np.sum(ebin)
    return np.sum(-ebin * np.log2(ebin))
コード例 #2
0
def spectral_decrease(args):
    """
    Compute index vector
    k       = [0:size(X,1)-1]
    k(1)    = 1
    kinv    = 1./k

    % compute slope
    vsd     = (kinv*(X-repmat(X(1,:),size(X,1),1)))./sum(X(2:end,:),1)

    % avoid NaN for silence frames
    vsd (sum(X(2:end,:),1) == 0) = 0

    :param args:
    :return:
    """
    psd = get_psd(args)

    k = np.arange(0, psd.shape[0])
    k[0] = 1
    kinv = 1 / k
    kinv = kinv.reshape((1, psd.shape[0]))

    sdecrease = np.matmul(kinv, (psd - psd[0, :])) / np.sum(psd[1:, :], axis=0)
    return sdecrease
コード例 #3
0
def spectral_flatness(args):
    psd = get_psd(args)
    nfft, noverlap = unroll_args(args, ['nfft', 'noverlap'])
    hopsize = nfft - noverlap
    return rosaft.spectral_flatness(y=None,
                                    S=psd,
                                    n_fft=nfft,
                                    hop_length=hopsize)
コード例 #4
0
def total_energy(args):
    fs, nfft = unroll_args(args, ['fs', 'nfft'])
    psd = get_psd(args)

    # This is a little bit unclear. Eq (6.1) of Raven is the calculation below, but then it says it is in decibels,
    # which this is not!
    energy = np.sum(psd) * (fs / nfft)
    return energy
コード例 #5
0
    def test_get_psd(self):
        psd1, _ = _spectrogram(y=self.sig,
                               S=None,
                               n_fft=nfft,
                               hop_length=stepsize)
        psd2 = get_psd(self.args)

        self.assertTrue(np.allclose(psd1, psd2))
コード例 #6
0
def spectral_crest(args):
    """
    a.k.a. spectral crest factor: ratio of max freq power over mean spectrum power
    :param args:
    :return:
    """
    psd = get_psd(args)
    sc = np.max(psd, axis=0) / np.mean(psd, axis=0)
    return sc
コード例 #7
0
def spectral_rolloff(args):
    psd = get_psd(args)
    fs, nfft, noverlap = unroll_args(args, ['fs', 'nfft', 'noverlap'])
    hopsize = nfft - noverlap
    return rosaft.spectral_rolloff(y=None,
                                   sr=fs,
                                   S=psd,
                                   n_fft=nfft,
                                   hop_length=hopsize)
コード例 #8
0
def average_entropy(args):
    psd = get_psd(args)

    # Entropy of each frame (time slice) averaged
    newsg = (psd.T / np.sum(psd)).T
    averaged_entropy = np.sum(-newsg * np.log2(newsg), axis=0)
    averaged_entropy = np.mean(averaged_entropy)

    return averaged_entropy
コード例 #9
0
def chroma_stft(args):
    psd = get_psd(args)
    fs, nfft, noverlap = unroll_args(args, ['fs', 'nfft', 'noverlap'])
    hopsize = nfft - noverlap
    return rosaft.chroma_stft(y=None,
                              sr=fs,
                              S=psd,
                              n_fft=nfft,
                              hop_length=hopsize)
コード例 #10
0
def spectral_contrast(args):
    psd = get_psd(args)
    fs, nfft, noverlap = unroll_args(args, ['fs', 'nfft', 'noverlap'])
    hopsize = nfft - noverlap
    if fs < 12800:
        n_bands = 6
        fmin = int(fs / 2.0**(n_bands))
    else:
        fmin = 200
    return rosaft.spectral_contrast(y=None,
                                    sr=fs,
                                    S=psd,
                                    n_fft=nfft,
                                    hop_length=hopsize,
                                    fmin=fmin)
コード例 #11
0
def mfc(args):
    psd = get_psd(args)**2
    fs, nfft, ncep, fmin, fmax = unroll_args(
        args, ['fs', 'nfft', ('ncep', 20), ('fmin', 0.0), ('fmax', None)])
    if fmax is None:
        fmax = fs // 2

    # Build a Mel filter
    mel_basis = _cached_get_mel_filter(sr=fs,
                                       n_fft=nfft,
                                       n_mels=ncep * 2,
                                       fmin=fmin,
                                       fmax=fmax)
    melspect = np.dot(mel_basis, psd)
    return power_to_db(melspect)
コード例 #12
0
def spectral_flux(args):
    psd = get_psd(args)
    diff = np.pad(np.diff(psd), ((0, 0), (1, 0)),
                  'constant',
                  constant_values=0)
    return np.linalg.norm(diff, axis=0)
コード例 #13
0
def spectrum(args):
    psd = get_psd(args)
    return psd
コード例 #14
0
def spectral_kurtosis(args):
    psd = get_psd(args)
    return kurtosis(psd, axis=0)
コード例 #15
0
def spectral_skewness(args):
    psd = get_psd(args)
    return skew(psd, axis=0)
コード例 #16
0
def frame_entropy(args):
    psd = get_psd(args)

    # Entropy of each frame (time slice) averaged
    newsg = (psd.T / np.sum(psd)).T
    return np.sum(-newsg * np.log2(newsg), axis=0)