00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 package com.meapsoft.featextractors;
00024
00025 import com.meapsoft.STFT;
00026
00034 public class TimeFreqCentroid extends FeatureExtractor
00035 {
00036
00037 public double[] features(STFT stft, long startFrame, int length)
00038 {
00039 double[] curFrame;
00040 double[] TimeFreqCentroid = new double[2];
00041 double num0 = 0;
00042 double num1 = 0;
00043 double den = 0;
00044
00045 for(int frame=0; frame<length; frame++)
00046 {
00047 curFrame = stft.getFrame(startFrame+frame);
00048 double timeCenter = stft.fr2Seconds(frame);
00049
00050 for(int band=0; band<stft.getRows(); band++)
00051 {
00052 double freqCenter = band*(stft.samplingRate/2)/(stft.getRows()-1);
00053
00054 double p = Math.pow(10,curFrame[band]/10);
00055
00056 num0 += timeCenter*p;
00057 num1 += freqCenter*p;
00058 den += p;
00059 }
00060 }
00061
00062 TimeFreqCentroid[0] = num0/den;
00063 TimeFreqCentroid[1] = num1/den;
00064
00065 return TimeFreqCentroid;
00066 }
00067
00068 public String description()
00069 {
00070 return "Computes the center of mass in the time/frequency plane of each chunk's spectrogram.";
00071 }
00072 }