Package org.vocvark.AudioFeatures

Source Code of org.vocvark.AudioFeatures.FFTBinFrequencies

/*
* @(#)FFTBinFrequencies.java  1.0  April 5, 2005.
*
* McGill Univarsity
*/

package org.vocvark.AudioFeatures;

import org.vocvark.DataTypes.FeatureDefinition;


/**
* A "feature extractor" that calculates the bin labels, in Hz, of power spectrum
* or magnitude spectrum bins that would be produced by the FFT of a window of the
* size of that provided to the feature extractor.
* <p/>
* <p>Although this is not a useful feature for the purposes of classifying,
* it can be useful for calculating other features.
* <p/>
* <p>Daniel McEnnis  05-07-05  Added clone
*
* @author Cory McKay
*/
public class FFTBinFrequencies
        extends FeatureExtractorBaseImpl {
    /* CONSTRUCTOR **************************************************************/


    /**
     * Basic constructor that sets the definition and dependencies (and their
     * offsets) of this feature.
     */
    public FFTBinFrequencies() {
        String name = "FFT Bin Frequency Labels";
        String description = "The bin label, in Hz, of each power spectrum or " +
                "magnitude spectrum bin. Not useful as a feature in " +
                "itself, but useful for calculating other features " +
                "from the magnitude spectrum and power spectrum.";
        boolean is_sequential = true;
        int dimensions = 0;
        definition = new FeatureDefinition(name,
                description,
                is_sequential,
                dimensions);

        dependencies = null;

        offsets = null;
    }


    /* PUBLIC METHODS **********************************************************/


    /**
     * Extracts this feature from the given samples at the given sampling
     * rate and given the other feature values.
     * <p/>
     * <p>In the case of this feature, the sampling_rate and
     * other_feature_values parameters are ignored.
     *
     * @param samples              The samples to extract the feature from.
     * @param sampling_rate        The sampling rate that the samples are
     *                             encoded with.
     * @param other_feature_values The values of other features that are
     *                             needed to calculate this value. The
     *                             order and offsets of these features
     *                             must be the same as those returned by
     *                             this class's getDependencies and
     *                             getDependencyOffsets methods respectively.
     *                             The first indice indicates the feature/window
     *                             and the second indicates the value.
     * @throws Exception Throws an informative exception if
     *                   the feature cannot be calculated.
     * @return The extracted feature value(s).
     */
    public double[] extractFeature(double[] samples,
                                   double sampling_rate,
                                   double[][] other_feature_values)
            throws Exception {
        // Find the size that an FFT window would be. This is the size
        // of the given samples, or the next highes power of 2 if it
        // is not a power of 2.
        int fft_size = org.vocvark.GeneralTools.Statistics.ensureIsPowerOfN(samples.length, 2);

        // Find the width in Hz of each bin
        int number_bins = fft_size;
        double bin_width = sampling_rate / (double) number_bins;
        double offset = bin_width / 2.0;

        // Find the number of bins in the power or magnitude spectrum
        int number_unfolded_bins = fft_size / 2;
        double[] labels = new double[number_unfolded_bins];
        for (int bin = 0; bin < labels.length; bin++)
            labels[bin] = (bin * bin_width) + offset;

        // Return the result
        return labels;
    }

    /**
     * Create an identical copy of this feature. This permits FeatureExtractor
     * to use the prototype pattern to create new composite features using
     * metafeatures.
     */
    public Object clone() {
        return new FFTBinFrequencies();
    }
}
TOP

Related Classes of org.vocvark.AudioFeatures.FFTBinFrequencies

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.