annotate xtract/xtract_vector.h @ 49:4e931b464278

Added xtract_sharpness()
author Jamie Bullock <jamie@postlude.co.uk>
date Thu, 21 Dec 2006 13:23:12 +0000
parents c20e91e86f08
children 45c585bb7996
rev   line source
jamie@1 1 /* libxtract feature extraction library
jamie@1 2 *
jamie@1 3 * Copyright (C) 2006 Jamie Bullock
jamie@1 4 *
jamie@1 5 * This program is free software; you can redistribute it and/or modify
jamie@1 6 * it under the terms of the GNU General Public License as published by
jamie@1 7 * the Free Software Foundation; either version 2 of the License, or
jamie@1 8 * (at your option) any later version.
jamie@1 9 *
jamie@1 10 * This program is distributed in the hope that it will be useful,
jamie@1 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
jamie@1 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
jamie@1 13 * GNU General Public License for more details.
jamie@1 14 *
jamie@1 15 * You should have received a copy of the GNU General Public License
jamie@1 16 * along with this program; if not, write to the Free Software
jamie@1 17 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
jamie@1 18 * USA.
jamie@1 19 */
jamie@1 20
jamie@1 21 /* xtract_scalar.h: declares functions that extract a feature as a vector from an input vector */
jamie@1 22
jamie@1 23 #ifndef XTRACT_VECTOR
jamie@1 24 #define XTRACT_VECTOR
jamie@1 25
jamie@1 26 #ifdef __cplusplus
jamie@1 27 extern "C" {
jamie@1 28 #endif
jamie@20 29
jamie@20 30 /**
jamie@20 31 * \defgroup vector extraction functions
jamie@20 32 *
jamie@20 33 * Defines vectorr extraction functions, and their parameters.
jamie@20 34 * @{
jamie@20 35 */
jamie@1 36
jamie@2 37 /** \brief Extract normalized (0-1) frequency domain magnitude spectrum from time domain signal
jamie@2 38 *
jamie@2 39 * \param *data: a pointer to the first element in an array of floats representing an audio vector
jamie@2 40 * \param N: the number of array elements to be considered
jamie@47 41 * \param *argv: a pointer to a float representing the sample rate of the audio
jamie@47 42 * \param *result: a pointer to an array containing N/2 bin frequencies, and N/2
jamie@47 43 * magnitude coefficients.
jamie@2 44 */
jamie@43 45 int xtract_magnitude_spectrum(const float *data, const int N, const void *argv, float *result);
jamie@1 46
jamie@30 47 /** \brief Extract autocorrelation from time domain signal using FFT based method
jamie@30 48 *
jamie@30 49 * \param *data: a pointer to the first element in an array of floats representing an audio vector
jamie@30 50 * \param N: the number of array elements to be considered
jamie@30 51 * \param *argv: a pointer to NULL
jamie@30 52 * \param *result: the autocorrelation of N values from the array pointed to by *data
jamie@30 53 */
jamie@43 54 int xtract_autocorrelation_fft(const float *data, const int N, const void *argv, float *result);
jamie@30 55
jamie@30 56 /** \brief Extract Mel Frequency Cepstral Coefficients based on a method described by Rabiner
jamie@30 57 *
jamie@47 58 * \param *data: a pointer to the first element in an array of floats representing an audio vector
jamie@30 59 * \param N: the number of array elements to be considered
jamie@30 60 * \param *argv: a pointer to a data structure of type xtract_mel_filter, containing n_filters coefficient tables to make up a mel-spaced filterbank
jamie@30 61 * \param *result: a pointer to an array containing the resultant MFCC
jamie@30 62 *
jamie@30 63 * The data structure pointed to by *argv must be obtained by first calling xtract_init_mfcc
jamie@30 64 */
jamie@43 65 int xtract_mfcc(const float *data, const int N, const void *argv, float *result);
jamie@30 66
jamie@30 67 /** \brief Extract the Discrete Cosine transform of a time domain signal
jamie@30 68 * \param *data: a pointer to the first element in an array of floats representing an audio vector
jamie@30 69 * \param N: the number of array elements to be considered
jamie@30 70 * \param *argv: a pointer to NULL
jamie@30 71 * \param *result: a pointer to an array containing resultant dct coefficients
jamie@30 72 */
jamie@43 73 int xtract_dct(const float *data, const int N, const void *argv, float *result);
jamie@1 74
jamie@2 75 /** \brief Extract autocorrelation from time domain signal using time-domain autocorrelation technique
jamie@2 76 *
jamie@2 77 * \param *data: a pointer to the first element in an array of floats representing an audio vector
jamie@2 78 * \param N: the number of array elements to be considered
jamie@2 79 * \param *argv: a pointer to NULL
jamie@2 80 * \param *result: the autocorrelation of N values from the array pointed to by *data
jamie@2 81 */
jamie@43 82 int xtract_autocorrelation(const float *data, const int N, const void *argv, float *result);
jamie@1 83
jamie@2 84 /** \brief Extract Average Magnitude Difference Function from time domain signal
jamie@2 85 *
jamie@47 86 * \param *data: a pointer to the first element in an array of floats representing an audio vector
jamie@2 87 * \param N: the number of array elements to be considered
jamie@2 88 * \param *argv: a pointer to NULL
jamie@2 89 * \param *result: the AMDF of N values from the array pointed to by *data
jamie@2 90 */
jamie@43 91 int xtract_amdf(const float *data, const int N, const void *argv, float *result);
jamie@1 92
jamie@2 93 /** \brief Extract Average Squared Difference Function from time domain signal
jamie@2 94 *
jamie@2 95 * \param *data: a pointer to the first element in an array of floats representing an audio vector
jamie@2 96 * \param N: the number of array elements to be considered
jamie@2 97 * \param *argv: a pointer to NULL
jamie@2 98 * \param *result: the ASDF of N values from the array pointed to by *data
jamie@2 99 */
jamie@43 100 int xtract_asdf(const float *data, const int N, const void *argv, float *result);
jamie@1 101
jamie@2 102 /** \brief Extract Bark band coefficients based on a method
jamie@47 103 * \param *data: a pointer to the first element in an array of floats representing the magnitude coefficients from the magnitude spectrum of an audio vector, (e.g. the second half of the array pointed to by *result from xtract_magnitude_spectrum().
jamie@2 104 * \param N: the number of array elements to be considered
jamie@42 105 * \param *argv: a pointer to an array of ints representing the limits of each bark band. This can be obtained by calling xtract_init_bark.
jamie@2 106 * \param *result: a pointer to an array containing resultant bark coefficients
jamie@2 107 *
jamie@2 108 * The limits array pointed to by *argv must be obtained by first calling xtract_init_bark
jamie@2 109 *
jamie@2 110 */
jamie@43 111 int xtract_bark_coefficients(const float *data, const int N, const void *argv, float *result);
jamie@1 112
jamie@38 113 /** \brief Extract the frequency and amplitude of spectral peaks from a magnitude spectrum
jamie@47 114 * \param *data: a pointer to the first element in an array of floats representing the magnitude coefficients from the magnitude spectrum of an audio vector, (e.g. the second half of the array pointed to by *result from xtract_magnitude_spectrum().
jamie@2 115 * \param N: the number of array elements to be considered
jamie@45 116 * \param *argv: a pointer to an array containing the peak threshold as percentage of the magnitude of the maximum peak found, and the sample rate in Hz.
jamie@45 117 * \param *result: a pointer to an array of size N, containing N/2 freqs and N/2 amplitudes
jamie@45 118 *
jamie@2 119 */
jamie@45 120
jamie@43 121 int xtract_peaks(const float *data, const int N, const void *argv, float *result);
jamie@20 122
jamie@38 123 /** \brief Extract the harmonic spectrum of from a of a peak spectrum
jamie@38 124 * \param *data: a pointer to the first element in an array of floats representing the peak spectrum of an audio vector (e.g. *result from xtract_peaks). It is expected that the first half of the array pointed to by *data will contain frequencies for each peak considered, and the the second half will contain the respective amplitudes
jamie@38 125 * \param N: the size of the array pointed to by *data
jamie@38 126 * \param *argv: a pointer to an array containing the fundamental (f0) of the spectrum, and a threshold (t) where 0<=t<=1.0, and t determines the distance from the nearest harmonic number within which a partial can be considered harmonic.
jamie@45 127 * \param *result: a pointer to an array of size N containing N/2 freqs and N/2 amplitudes.
jamie@38 128 */
jamie@43 129 int xtract_harmonics(const float *data, const int N, const void *argv, float *result);
jamie@38 130
jamie@20 131 /** @} */
jamie@20 132
jamie@1 133 #ifdef __cplusplus
jamie@1 134 }
jamie@1 135 #endif
jamie@1 136
jamie@1 137 #endif