annotate xtract/xtract_scalar.h @ 20:8b8d4f1c5fb6

Improved doxygen documentation
author Jamie Bullock <jamie@postlude.co.uk>
date Tue, 10 Oct 2006 12:29:39 +0000
parents 1aec087ddfca
children bc44e56e6c81
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@2 21 /** \file xtract_scalar.h: declares functions that extract a feature as a single value from an input vector */
jamie@1 22
jamie@1 23 #ifndef XTRACT_SCALAR
jamie@1 24 #define XTRACT_SCALAR
jamie@1 25
jamie@1 26 #ifdef __cplusplus
jamie@1 27 extern "C" {
jamie@1 28 #endif
jamie@1 29
jamie@20 30 /**
jamie@20 31 * \defgroup scalar extraction functions
jamie@20 32 *
jamie@20 33 * Defines scalar extraction functions, and their parameters.
jamie@20 34 * @{
jamie@20 35 */
jamie@1 36
jamie@2 37 /** \brief Extract the mean of an input vector
jamie@2 38 *
jamie@2 39 * \param *data: a pointer to the first element in an array of floats
jamie@2 40 * \param N: the number of array elements to be considered
jamie@2 41 * \param *argv: a pointer to NULL
jamie@2 42 * \param *result: the mean of N values from the array pointed to by *data
jamie@2 43 */
jamie@2 44 int xtract_mean(float *data, int N, void *argv, float *result);
jamie@1 45
jamie@2 46 /** \brief Extract the variance of an input vector
jamie@2 47 *
jamie@2 48 * \param *data: a pointer to the first element in an array of floats
jamie@2 49 * \param N: the number of elements to be considered
jamie@2 50 * \param *argv: a pointer to a value representing the mean of the input vector
jamie@2 51 * \param *result: the variance of N values from the array pointed to by *data
jamie@2 52 */
jamie@1 53 int xtract_variance(float *data, int N, void *argv, float *result);
jamie@2 54
jamie@2 55 /** \brief Extract the deviation of an input vector
jamie@2 56 *
jamie@2 57 * \param *data: a pointer to the first element in an array of floats
jamie@2 58 * \param N: the number of elements to be considered
jamie@2 59 * \param *argv: a pointer to a value representing the variance of the input vector
jamie@2 60 * \param *result: the deviation of N values from the array pointed to by *data
jamie@2 61 */
jamie@1 62 int xtract_standard_deviation(float *data, int N, void *argv, float *result);
jamie@2 63
jamie@2 64 /** \brief Extract the average deviation of an input vector
jamie@2 65 *
jamie@2 66 * \param *data: a pointer to the first element in an array of floats
jamie@2 67 * \param N: the number of elements to be considered
jamie@2 68 * \param *argv: a pointer to a value representing the mean of the input vector
jamie@2 69 * \param *result: the average deviation of N values from the array pointed to by *data
jamie@2 70 */
jamie@1 71 int xtract_average_deviation(float *data, int N, void *argv, float *result);
jamie@2 72
jamie@2 73 /** \brief Extract the skewness of an input vector
jamie@2 74 *
jamie@2 75 * \param *data: a pointer to the first element in an array of floats
jamie@2 76 * \param N: the number of elements to be considered
jamie@2 77 * \param *argv: a pointer to an array of values representing the mean and standard deviation of the input vector
jamie@2 78 * \param *result: the skewness of N values from the array pointed to by *data
jamie@2 79 */
jamie@1 80 int xtract_skewness(float *data, int N, void *argv, float *result);
jamie@2 81
jamie@2 82 /** \brief Extract the kurtosis of an input vector
jamie@2 83 *
jamie@2 84 * \param *data: a pointer to the first element in an array of floats
jamie@2 85 * \param N: the number of elements to be considered
jamie@2 86 * \param *argv: a pointer to an array of values representing the mean and standard deviation of the input vector
jamie@2 87 * \param *result: the kurtosis of N values from the array pointed to by *data
jamie@2 88 */
jamie@1 89 int xtract_kurtosis(float *data, int N, void *argv, float *result);
jamie@1 90
jamie@11 91 /** \brief Extract the kurtosis of an input vector
jamie@11 92 *
jamie@11 93 * \param *data: a pointer to the first element in an array of floats represeting a frequency spectrum of size N/2 and a magnitude peak spectrum of size N/2 (This is the output format of xtract_peaks)
jamie@11 94 * \param N: the number of elements to be considered
jamie@11 95 * \param *argv: a pointer to NULL
jamie@11 96 * \param *result: the centroid of the values pointed to by *data
jamie@11 97 */
jamie@11 98 int xtract_centroid(float *data, int N, void *argv, float *result);
jamie@11 99
jamie@2 100 /** \brief Calculate the Irregularity of an input vector using a method described by Krimphoff (1994)
jamie@2 101 *
jamie@2 102 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
jamie@2 103 * \param N: the number of elements to be considered
jamie@2 104 * \param *argv: a pointer to NULL
jamie@2 105 * \param *result: the irregularity of N values from the array pointed to by *data
jamie@2 106 */
jamie@2 107 int xtract_irregularity_k(float *data, int N, void *argv, float *result);
jamie@1 108
jamie@2 109 /** \brief Calculate the Irregularity of an input vector using a method described by Jensen (1999)
jamie@2 110 *
jamie@2 111 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
jamie@2 112 * \param N: the number of elements to be considered
jamie@2 113 * \param *argv: a pointer to NULL
jamie@2 114 * \param *result: the irregularity of N values from the array pointed to by *data
jamie@2 115 */
jamie@1 116 int xtract_irregularity_j(float *data, int N, void *argv, float *result);
jamie@1 117
jamie@2 118 /** \brief Calculate the Tristimulus of an input vector using a method described by Pollard and Jansson (1982)
jamie@2 119 *
jamie@2 120 * \param *data: a pointer to the first element in an array of floats representing the amplitudes of the harmonic spectrum of an audio vector
jamie@2 121 * \param N: the number of elements to be considered
jamie@2 122 * \param *argv: a pointer to NULL
jamie@2 123 * \param *result: the tristimulus of N values from the array pointed to by *data
jamie@2 124 *
jamie@2 125 * These three functions provide the first, second and third order tristimulus formulae
jamie@2 126 *
jamie@2 127 */
jamie@1 128 int xtract_tristimulus_1(float *data, int N, void *argv, float *result);
jamie@1 129 int xtract_tristimulus_2(float *data, int N, void *argv, float *result);
jamie@1 130 int xtract_tristimulus_3(float *data, int N, void *argv, float *result);
jamie@1 131
jamie@2 132 /** \brief Extract the smoothness of an input vector using a method described by McAdams (1999)
jamie@2 133 *
jamie@2 134 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
jamie@2 135 * \param N: the number of elements to be considered
jamie@2 136 * \param *argv: a pointer to NULL
jamie@2 137 * \param *result: the smoothness of N values from the array pointed to by *data
jamie@2 138 */
jamie@1 139 int xtract_smoothness(float *data, int N, void *argv, float *result);
jamie@1 140
jamie@2 141 /** \brief Extract the spectral spread of an input vector using a method described by Casagrande(2005)
jamie@2 142 *
jamie@2 143 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
jamie@2 144 * \param N: the number of elements to be considered
jamie@2 145 * \param *argv: a pointer to NULL
jamie@2 146 * \param *result: the spectral spread of N values from the array pointed to by *data
jamie@2 147 */
jamie@1 148 int xtract_spread(float *data, int N, void *argv, float *result);
jamie@1 149
jamie@1 150 /* Zero crossing rate */
jamie@1 151
jamie@2 152 /** \brief Extract the zero crossing rate of an input vector
jamie@2 153 *
jamie@2 154 * \param *data: a pointer to the first element in an array of floats
jamie@2 155 * \param N: the number of elements to be considered
jamie@2 156 * \param *argv: a pointer to NULL
jamie@2 157 * \param *result: the zero crossing rate of N values from the array pointed to by *data
jamie@2 158 */
jamie@1 159 int xtract_zcr(float *data, int N, void *argv, float *result);
jamie@1 160
jamie@2 161 /** \brief Extract the spectral rolloff of an input vector using a method described by Bee Suan Ong (2005)
jamie@2 162 *
jamie@2 163 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
jamie@2 164 * \param N: the number of elements to be considered
jamie@2 165 * \param *argv: a pointer to a floating point value representing the threshold for rolloff, i.e. the percentile at which the rolloff is determined
jamie@2 166 * \param *result: the spectral rolloff of N values from the array pointed to by *data
jamie@2 167 */
jamie@1 168 int xtract_rolloff(float *data, int N, void *argv, float *result);
jamie@1 169
jamie@1 170 /* Loudness */
jamie@1 171 /* A set of BARK_BANDS bark coefficients must be passed in, the loudness is calculated approximately according to Moore, Glasberg et al, 1997 */
jamie@1 172
jamie@2 173 /** \brief Extract the loudness of an input vector using a method described by Moore, Glasberg et al (2005)
jamie@2 174 *
jamie@2 175 * \param *data: a pointer to the first element in an array of floats representing a set of BARK_BANDS bark coefficients
jamie@2 176 * \param N: the number of coefficients to be considered
jamie@2 177 * \param *argv: a pointer to NULL
jamie@2 178 * \param *result: the loudness of N values from the array pointed to by *data
jamie@2 179 */
jamie@1 180 int xtract_loudness(float *data, int N, void *argv, float *result);
jamie@1 181
jamie@2 182 /** \brief Extract the spectral flatness measure of an input vector using a method described by Tristan Jehan (2005)
jamie@2 183 *
jamie@2 184 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
jamie@2 185 * \param N: the number of elements to be considered
jamie@2 186 * \param *argv: a pointer to NULL
jamie@2 187 * \param *result: the spectral flatness of N values from the array pointed to by *data
jamie@2 188 */
jamie@1 189 int xtract_flatness(float *data, int N, void *argv, float *result);
jamie@1 190
jamie@1 191
jamie@2 192 /** \brief Extract the tonality factor of an input vector using a method described by Tristan Jehan (2005)
jamie@2 193 *
jamie@2 194 * \param *data: a pointer to the first element in an array of floats representing the spectral peaks of an audio vector
jamie@2 195 * \param N: the number of elements to be considered
jamie@2 196 * \param *argv: a pointer to NULL
jamie@2 197 * \param *result: the tonality factor of N values from the array pointed to by *data
jamie@2 198 */
jamie@1 199 int xtract_tonality(float *data, int N, void *argv, float *result);
jamie@1 200
jamie@2 201 /** \brief Extract the noisiness of an input vector using a method described by Tae Hong Park (2000)
jamie@2 202 *
jamie@2 203 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
jamie@2 204 * \param N: the number of elements to be considered
jamie@2 205 * \param *argv: a pointer to NULL
jamie@2 206 * \param *result: the noisiness of N values from the array pointed to by *data
jamie@2 207 */
jamie@1 208 int xtract_noisiness(float *data, int N, void *argv, float *result);
jamie@1 209
jamie@2 210 /** \brief Extract the RMS amplitude of an input vector using a method described by Tae Hong Park (2000)
jamie@2 211 *
jamie@2 212 * \param *data: a pointer to the first element in an array of floats
jamie@2 213 * \param N: the number of elements to be considered
jamie@2 214 * \param *argv: a pointer to NULL
jamie@2 215 * \param *result: the RMS amplitude of N values from the array pointed to by *data
jamie@2 216 */
jamie@1 217 int xtract_rms_amplitude(float *data, int N, void *argv, float *result);
jamie@1 218
jamie@2 219 /** \brief Extract the Inharmonicity of an input vector
jamie@2 220 *
jamie@2 221 * \param *data: a pointer to the first element in an array of floats representing the amplitudes of the spectral peaks in an audio vector
jamie@2 222 * \param N: the number of elements to be considered
jamie@2 223 * \param *argv: a pointer to a multidimensional array containing the fundamental frequency of the input vector in the first element of the first dimension, and the frequencies of the spectral peaks in the second dimension
jamie@2 224 * \param *result: the inharmonicity of N values from the array pointed to by *data
jamie@2 225 */
jamie@1 226 int xtract_inharmonicity(float *data, int N, void *argv, float *result);
jamie@1 227
jamie@2 228 /** \brief Extract the spectral crest of an input vector using a method described by Peeters (2003)
jamie@2 229 *
jamie@2 230 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
jamie@2 231 * \param N: the number of elements to be considered
jamie@2 232 * \param *argv: a pointer to NULL
jamie@2 233 * \param *result: the spectral crest of N values from the array pointed to by *data
jamie@2 234 */
jamie@1 235 int xtract_crest(float *data, int N, void *argv, float *result);
jamie@1 236
jamie@2 237 /** \brief Extract the Spectral Power of an input vector using a method described by Bee Suan Ong (2005)
jamie@2 238 *
jamie@2 239 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
jamie@2 240 * \param N: the number of elements to be considered
jamie@2 241 * \param *argv: a pointer to NULL
jamie@2 242 * \param *result: the spectral power of N values from the array pointed to by *data
jamie@2 243 */
jamie@1 244 int xtract_power(float *data, int N, void *argv, float *result);
jamie@1 245
jamie@1 246 /* Odd to even harmonic ratio */
jamie@2 247 /** \brief Extract the Odd to even harmonic ratio of an input vector
jamie@2 248 *
jamie@2 249 * \param *data: a pointer to the first element in an array of floats representing the harmonic spectrum of an audio vector
jamie@2 250 * \param N: the number of elements to be considered
jamie@2 251 * \param *argv: a pointer to NULL
jamie@2 252 * \param *result: the odd/even harmonic ratio of N values from the array pointed to by *data
jamie@2 253 */
jamie@1 254 int xtract_odd_even_ratio(float *data, int N, void *argv, float *result);
jamie@1 255
jamie@2 256 /** \brief Extract the Sharpness of an input vector
jamie@2 257 *
jamie@2 258 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
jamie@2 259 * \param N: the number of elements to be considered
jamie@2 260 * \param *argv: a pointer to NULL
jamie@2 261 * \param *result: the Sharpness of N values from the array pointed to by *data
jamie@2 262 */
jamie@1 263 int xtract_sharpness(float *data, int N, void *argv, float *result);
jamie@1 264
jamie@2 265 /** \brief Extract the Slope of an input vector
jamie@2 266 *
jamie@2 267 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
jamie@2 268 * \param N: the number of elements to be considered
jamie@2 269 * \param *argv: a pointer to NULL
jamie@2 270 * \param *result: the Slope of N values from the array pointed to by *data
jamie@2 271 */
jamie@1 272 int xtract_slope(float *data, int N, void *argv, float *result);
jamie@1 273
jamie@5 274 /** \brief Extract the value of the first partial in an input vector that closely matches a certain 'guess'
jamie@2 275 *
jamie@2 276 * \param *data: a pointer to the first element in an array of floats that represents the frequencies of the spectral peaks of an audio vector
jamie@2 277 * \param N: the number of elements to be considered
jamie@5 278 * \param *argv: a pointer to a float value representing the guess
jamie@2 279 * \param *result: the F0 of N values from the array pointed to by *data
jamie@2 280 *
jamie@2 281 * This method takes a guess which can come from taking the ZCR of an autocorrelation function, and then finds the spectral peak that most closely matches the gess */
jamie@5 282 int xtract_lowest_match(float *data, int N, void *argv, float *result);
jamie@1 283
jamie@2 284 /** \brief Extract the Pitch of an input vector using Harmonic Product Spectrum (HPS) analysis
jamie@2 285 *
jamie@2 286 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
jamie@2 287 * \param N: the number of elements to be considered
jamie@2 288 * \param *argv: a pointer to NULL
jamie@2 289 * \param *result: the pitch of N values from the array pointed to by *data
jamie@2 290 */
jamie@1 291 int xtract_hps(float *data, int N, void *argv, float *result);
jamie@1 292
jamie@5 293 /** \brief Extract the fundamental frequency of an input vector
jamie@5 294 *
jamie@5 295 * \param *data: a pointer to the first element in an array of floats representing an audio vector
jamie@5 296 * \param N: the number of elements to be considered
jamie@12 297 * \param *argv: a pointer to a float representing the sample rate of the vector
jamie@5 298 * \param *result: the pitch of N values from the array pointed to by *data
jamie@12 299 *
jamie@12 300 * This algorithm is based on the AMDF and would benefit from further refinement
jamie@12 301 *
jamie@5 302 */
jamie@5 303 int xtract_f0(float *data, int N, void *argv, float *result);
jamie@5 304
jamie@20 305 /** @} */
jamie@20 306
jamie@1 307 #ifdef __cplusplus
jamie@1 308 }
jamie@1 309 #endif
jamie@1 310
jamie@1 311 #endif
jamie@1 312
jamie@1 313
jamie@1 314