Exemplo n.º 1
0
 def test_spectral_flux(self):
     for fs, data in self.__database:
         _, data = scipy.signal.periodogram(data, fs)
         data = (data + utility.epsilon) * 100
         generated = spectral.spectral_flux(data, data)
         reference = extractor.stSpectralFlux(data, data)
         self.assertAlmostEqual(generated, reference.item(), 5)
Exemplo n.º 2
0
 def _function(self, recording):
     time_frames = recording.shape[0]
     features = np.zeros([time_frames, 14], np.float32)
     for time in range(time_frames):
         frame = recording[time, :]
         X_new = np.abs(np.fft.rfft(frame))
         X_prev = X if time else np.zeros_like(np.fft.rfft)
         X = X_new
         features[time, 0] = aF.stZCR(frame)
         features[time, 1] = aF.stEnergy(frame)
         features[time, 2] = aF.stEnergyEntropy(frame)
         features[time, 3:5] = aF.stSpectralCentroidAndSpread(X + 2e-12, self.sr)
         features[time, 5] = aF.stSpectralEntropy(X)
         features[time, 6] = aF.stSpectralRollOff(X, 0.85, self.sr)
         features[time, 7] = aF.stSpectralFlux(X, X_prev)
         features[time, 8:14] = HandCrafted.formants(frame) / 1000 # division for normalization (results in kHz)
     return features
Exemplo n.º 3
0
    def spectral_flux(self):
        # Create some random tuple samples
        frame_pairs = []
        for i in range(100):
            frame_index = random.randint(1, len(self.section_fft) - 1)
            frame_pairs.append([
                self.section_fft[frame_index],
                self.section_fft[frame_index - 1]
            ])

        # Computes the average spectral flux given paris of sample frames
        flux_values = [
            audioFeatureExtraction.stSpectralFlux(frame, prev)
            for frame, prev in frame_pairs
        ]

        # Returns the mean spectral flux across all frames
        return mean(flux_values), stdev(flux_values)
Exemplo n.º 4
0
def stFeatureExtraction(signal, fs, win, step, feats):
    """
    This function implements the shor-term windowing process. For each short-term window a set of features is extracted.
    This results to a sequence of feature vectors, stored in a numpy matrix.

    ARGUMENTS
        signal:       the input signal samples
        fs:           the sampling freq (in Hz)
        win:          the short-term window size (in samples)
        step:         the short-term window step (in samples)
        steps:        list of main features to compute ("mfcc" and/or "gfcc")
    RETURNS
        st_features:   a numpy array (n_feats x numOfShortTermWindows)
    """
    if "gfcc" in feats:
        ngfcc = 22
        gfcc = getGfcc.GFCCFeature(fs)
    else:
        ngfcc = 0

    if "mfcc" in feats:
        n_mfcc_feats = 13
    else:
        n_mfcc_feats = 0

    win = int(win)
    step = int(step)

    # Signal normalization
    signal = numpy.double(signal)

    signal = signal / (2.0**15)
    DC = signal.mean()
    MAX = (numpy.abs(signal)).max()
    signal = (signal - DC) / (MAX + 0.0000000001)

    N = len(signal)  # total number of samples
    cur_p = 0
    count_fr = 0
    nFFT = int(win / 2)

    [fbank, freqs] = mfccInitFilterBanks(
        fs, nFFT
    )  # compute the triangular filter banks used in the mfcc calculation

    n_harmonic_feats = 0

    feature_names = []
    if "spectral" in feats:
        n_time_spectral_feats = 8
        feature_names.append("zcr")
        feature_names.append("energy")
        feature_names.append("energy_entropy")
        feature_names += ["spectral_centroid", "spectral_spread"]
        feature_names.append("spectral_entropy")
        feature_names.append("spectral_flux")
        feature_names.append("spectral_rolloff")
    else:
        n_time_spectral_feats = 0
    if "mfcc" in feats:
        feature_names += [
            "mfcc_{0:d}".format(mfcc_i)
            for mfcc_i in range(1, n_mfcc_feats + 1)
        ]
    if "gfcc" in feats:
        feature_names += [
            "gfcc_{0:d}".format(gfcc_i) for gfcc_i in range(1, ngfcc + 1)
        ]
    if "chroma" in feats:
        nChroma, nFreqsPerChroma = stChromaFeaturesInit(nFFT, fs)
        n_chroma_feats = 13
        feature_names += [
            "chroma_{0:d}".format(chroma_i)
            for chroma_i in range(1, n_chroma_feats)
        ]
        feature_names.append("chroma_std")
    else:
        n_chroma_feats = 0
    n_total_feats = n_time_spectral_feats + n_mfcc_feats + n_harmonic_feats + n_chroma_feats + ngfcc
    st_features = []
    while (cur_p + win - 1 <
           N):  # for each short-term window until the end of signal
        count_fr += 1
        x = signal[cur_p:cur_p + win]  # get current window
        cur_p = cur_p + step  # update window position
        X = abs(fft(x))  # get fft magnitude
        X = X[0:nFFT]  # normalize fft
        X = X / len(X)
        if count_fr == 1:
            X_prev = X.copy()  # keep previous fft mag (used in spectral flux)
        curFV = numpy.zeros((n_total_feats, 1))
        if "spectral" in feats:
            curFV[0] = stZCR(x)  # zero crossing rate
            curFV[1] = stEnergy(x)  # short-term energy
            curFV[2] = stEnergyEntropy(x)  # short-term entropy of energy
            [curFV[3], curFV[4]] = stSpectralCentroidAndSpread(
                X, fs)  # spectral centroid and spread
            curFV[5] = stSpectralEntropy(X)  # spectral entropy
            curFV[6] = stSpectralFlux(X, X_prev)  # spectral flux
            curFV[7] = stSpectralRollOff(X, 0.90, fs)  # spectral rolloff
        if "mfcc" in feats:
            curFV[n_time_spectral_feats:n_time_spectral_feats+n_mfcc_feats, 0] = \
            stMFCC(X, fbank, n_mfcc_feats).copy()    # MFCCs
        if "gfcc" in feats:
            curFV[n_time_spectral_feats + n_mfcc_feats:n_time_spectral_feats +
                  n_mfcc_feats + ngfcc, 0] = gfcc.get_gfcc(x)
        if "chroma" in feats:
            chromaNames, chromaF = stChromaFeatures(X, fs, nChroma,
                                                    nFreqsPerChroma)
            curFV[n_time_spectral_feats + n_mfcc_feats + ngfcc:
                  n_time_spectral_feats + n_mfcc_feats + n_chroma_feats + ngfcc - 1] = \
                chromaF
            curFV[n_time_spectral_feats + n_mfcc_feats + n_chroma_feats + ngfcc - 1] = \
                chromaF.std()
        st_features.append(curFV)
        X_prev = X.copy()

    st_features = numpy.concatenate(st_features, 1)
    return st_features, feature_names
Exemplo n.º 5
0
 def test_flux(self):
     for fs, data in self.__database:
         generated = statistics.flux(data, data)
         reference = extractor.stSpectralFlux(data, data)
         self.assertAlmostEqual(generated, reference)
Exemplo n.º 6
0
def F_find(x, sr):
    #x, sr=librosa.load(file_name1,sr=44100,mono=True)
    #print sr
    sound = x
    samplerate = sr
    '''spec=Spectrum()
	w=Windowing(type='hann')
	if np.size(sound)%2!=0:
		x=sound[:-1]
	spc=spec(w(x))'''
    #print spc
    y = es.array(sound)
    l = LogAttackTime()
    lat, astrt, astp = l(y)
    #print lat
    #flu=Flux()
    #s_flux=flu(spc)
    #print s_flux
    spec_bw = librosa.feature.spectral_bandwidth(y=x, sr=sr)
    mspec_bw = np.mean(spec_bw)
    #print mspec_bw
    sdspec_bw = np.std(spec_bw)
    #print sdspec_bw
    #print mspec_bw,sdspec_bw
    mfcc = librosa.feature.mfcc(y=sound, sr=samplerate, n_mfcc=11)
    #print mfcc
    mfcc_1 = mfcc[0]
    mfcc_2 = mfcc[1]
    mfcc_3 = mfcc[2]
    mfcc_4 = mfcc[3]
    mfcc_5 = mfcc[4]
    mfcc_6 = mfcc[5]
    mfcc_7 = mfcc[6]
    mfcc_8 = mfcc[7]
    mfcc_10 = mfcc[9]
    mfcc_11 = mfcc[10]

    mmfcc_1 = np.mean(mfcc_1)
    mmfcc_2 = np.mean(mfcc_2)
    mmfcc_3 = np.mean(mfcc_3)
    mmfcc_4 = np.mean(mfcc_4)
    mmfcc_5 = np.mean(mfcc_5)
    mmfcc_6 = np.mean(mfcc_6)
    mmfcc_7 = np.mean(mfcc_7)
    mmfcc_10 = np.mean(mfcc_10)

    sdmfcc_1 = np.std(mfcc_1)

    sdmfcc_3 = np.std(mfcc_3)

    sdmfcc_4 = np.std(mfcc_4)

    sdmfcc_6 = np.std(mfcc_6)

    sdmfcc_7 = np.std(mfcc_7)

    sdmfcc_8 = np.std(mfcc_8)

    sdmfcc_10 = np.std(mfcc_10)

    sdmfcc_11 = np.std(mfcc_11)
    #print sdmfcc_1,sdmfcc_3,sdmfcc_4,sdmfcc_6,sdmfcc_7,sdmfcc_8,sdmfcc_10,sdmfcc_11

    #print mmfcc_1,mmfcc_2,mmfcc_3,mmfcc_4,mmfcc_5,mmfcc_6,mmfcc_7,mmfcc_10
    #print mmfcc_4,mmfcc_10
    '''rms=librosa.feature.rmse(y=sound)
	mrms=np.mean(rms)
	print mrms'''
    r = RMS()
    rms_e = r(y)
    mrms = np.mean(rms_e)

    zcr = librosa.feature.zero_crossing_rate(y=sound)
    mzcr = np.mean(zcr)
    sdzcr = np.std(zcr)
    #print  mzcr,sdzcr

    cent = librosa.feature.spectral_centroid(y=sound, sr=samplerate)
    mcent = np.mean(cent)
    sdcent = np.std(cent)
    #print mcent,sdcent

    f, t, Zxx = signal.stft(sound,
                            44100,
                            window='hann',
                            nperseg=441,
                            noverlap=0)
    stf = np.zeros(np.size(t))
    for i in range(1, np.size(t)):
        X = abs(Zxx[:, [i]])
        X_prev = abs(Zxx[:, [i - 1]])
        stf[i - 1] = pya.stSpectralFlux(X, X_prev)
    sdsf = np.std(stf)
    msf = np.mean(stf)
    #print sdsf

    harmo = harmonics(sound, 441)
    HC = harmonicCentroid(harmo)
    #print HC,'-'
    HD = harmonicDeviation(harmo)
    #print HD,'--'
    HS = harmonicSpead(harmo)
    #print HS
    rawdata = {
        'LogAttackTime': lat,
        'RMSM': mrms,
        'mfcc_1D': sdmfcc_1,
        'mfcc_3D': sdmfcc_3,
        'mfcc_4D': sdmfcc_4,
        'mfcc_6D': sdmfcc_6,
        'mfcc_7D': sdmfcc_7,
        'mfcc_8D': sdmfcc_8,
        'mfcc_10D': sdmfcc_10,
        'mfcc_11D': sdmfcc_11,
        'spectral_centroidM': mcent,
        'spectral_centroidD': sdcent,
        'mfcc_1M': mmfcc_1,
        'mfcc_2M': mmfcc_2,
        'mfcc_3M': mmfcc_3,
        'mfcc_4M': mmfcc_4,
        'mfcc_5M': mmfcc_5,
        'mfcc_6M': mmfcc_6,
        'mfcc_7M': mmfcc_7,
        'mfcc_10M': mmfcc_10,
        'ZCRM': mzcr,
        'ZCRD': sdzcr,
        'HC': HC,
        'HD': HD,
        'HS': HS,
        'FluxM': msf,
        'FluxD': sdsf,
        'spectral_bandwidthM': mspec_bw,
        'spectral_bandwidthD': sdspec_bw,
    }
    df3 = pd.DataFrame(
        data=rawdata,
        columns=[
            'LogAttackTime', 'RMSM', 'mfcc_1D', 'mfcc_3D', 'mfcc_4D',
            'mfcc_6D', 'mfcc_7D', 'mfcc_8D', 'mfcc_10D', 'mfcc_11D',
            'spectral_centroidM', 'spectral_centroidD', 'mfcc_1M', 'mfcc_2M',
            'mfcc_3M', 'mfcc_4M', 'mfcc_5M', 'mfcc_6M', 'mfcc_7M', 'mfcc_10M',
            'ZCRM', 'ZCRD', 'HC', 'HD', 'HS', 'FluxM', 'FluxD',
            'spectral_bandwidthM', 'spectral_bandwidthD'
        ],
        index=[0])
    '''print df
	'''
    rawdata = {
        'LogAttackTime': lat,
        'HD': HD,
        'FluxD': sdsf,
        'spectral_bandwidthM': mspec_bw,
        'mfcc_1D': sdmfcc_1,
        'mfcc_3D': sdmfcc_3,
        'RMSM': mrms,
        'spectral_bandwidthD': sdspec_bw,
        'mfcc_4M': mmfcc_4,
        'mfcc_11D': sdmfcc_11,
        'ZCRD': sdzcr,
        'spectral_centroidD': sdcent,
        'mfcc_8D': sdmfcc_8,
        'mfcc_6D': sdmfcc_6,
        'mfcc_7D': sdmfcc_7,
        'mfcc_4D': sdmfcc_4,
        'spectral_centroidM': mcent,
        'mfcc_10M': mmfcc_10,
        'mfcc_10D': sdmfcc_10,
    }
    df1 = pd.DataFrame(data=rawdata,
                       columns=[
                           'LogAttackTime', 'HD', 'FluxD',
                           'spectral_bandwidthM', 'mfcc_1D', 'mfcc_3D', 'RMSM',
                           'spectral_bandwidthD', 'mfcc_4M', 'mfcc_11D',
                           'ZCRD', 'spectral_centroidD', 'mfcc_8D', 'mfcc_6D',
                           'mfcc_7D', 'mfcc_4D', 'spectral_centroidM',
                           'mfcc_10M', 'mfcc_10D'
                       ],
                       index=[0])
    rawdata = {
        'spectral_centroidM': mcent,
        'mfcc_2M': mmfcc_2,
        'HC': HC,
        'ZCRM': mzcr,
        'mfcc_3M': mmfcc_3,
        'HD': HD,
        'ZCRD': sdzcr,
        'HS': HS,
        'mfcc_4M': mmfcc_4,
        'mfcc_1M': mmfcc_1,
        'mfcc_10M': mmfcc_10,
        'FluxM': msf,
        'FluxD': sdsf,
        'mfcc_5M': mmfcc_5,
        'mfcc_7M': mmfcc_7,
        'spectral_bandwidthM': mspec_bw,
        'spectral_centroidD': sdspec_bw,
        'mfcc_6M': mmfcc_6,
    }
    df2 = pd.DataFrame(data=rawdata,
                       columns=[
                           'spectral_centroidM', 'mfcc_2M', 'HC', 'ZCRM',
                           'mfcc_3M', 'HD', 'ZCRD', 'HS', 'mfcc_4M', 'mfcc_1M',
                           'mfcc_10M', 'FluxM', 'FluxD', 'mfcc_5M', 'mfcc_7M',
                           'spectral_bandwidthM', 'spectral_centroidD',
                           'mfcc_6M'
                       ],
                       index=[0])
    #print df1,df2,df3
    '''
	f = open("dataset153.csv", 'a') 
	df.to_csv(f, header = False,index=False)
	f.close()'''
    return df1, df2, df3