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@2
|
41 * \param *argv: a pointer to NULL
|
jamie@2
|
42 * \param *result: the magnitude spectrum of N values from the array pointed to by *data
|
jamie@2
|
43 */
|
jamie@1
|
44 int xtract_magnitude_spectrum(float *data, int N, void *argv, float *result);
|
jamie@1
|
45
|
jamie@1
|
46
|
jamie@2
|
47 /** \brief Extract autocorrelation from time domain signal using time-domain autocorrelation technique
|
jamie@2
|
48 *
|
jamie@2
|
49 * \param *data: a pointer to the first element in an array of floats representing an audio vector
|
jamie@2
|
50 * \param N: the number of array elements to be considered
|
jamie@2
|
51 * \param *argv: a pointer to NULL
|
jamie@2
|
52 * \param *result: the autocorrelation of N values from the array pointed to by *data
|
jamie@2
|
53 */
|
jamie@1
|
54 int xtract_autocorrelation(float *data, int N, void *argv, float *result);
|
jamie@1
|
55
|
jamie@2
|
56 /** \brief Extract autocorrelation from time domain signal using FFT based method
|
jamie@2
|
57 *
|
jamie@2
|
58 * \param *data: a pointer to the first element in an array of floats representing an audio vector
|
jamie@2
|
59 * \param N: the number of array elements to be considered
|
jamie@2
|
60 * \param *argv: a pointer to NULL
|
jamie@2
|
61 * \param *result: the autocorrelation of N values from the array pointed to by *data
|
jamie@2
|
62 */
|
jamie@1
|
63 int xtract_autocorrelation_fft(float *data, int N, void *argv, float *result);
|
jamie@1
|
64
|
jamie@2
|
65 /** \brief Extract Average Magnitude Difference Function from time domain signal
|
jamie@2
|
66 *
|
jamie@2
|
67 * \param *data: a pointer to the first element in an array of floats
|
jamie@2
|
68 * \param N: the number of array elements to be considered
|
jamie@2
|
69 * \param *argv: a pointer to NULL
|
jamie@2
|
70 * \param *result: the AMDF of N values from the array pointed to by *data
|
jamie@2
|
71 */
|
jamie@1
|
72 int xtract_amdf(float *data, int N, void *argv, float *result);
|
jamie@1
|
73
|
jamie@2
|
74 /** \brief Extract Average Squared Difference Function from time domain signal
|
jamie@2
|
75 *
|
jamie@2
|
76 * \param *data: a pointer to the first element in an array of floats representing an audio vector
|
jamie@2
|
77 * \param N: the number of array elements to be considered
|
jamie@2
|
78 * \param *argv: a pointer to NULL
|
jamie@2
|
79 * \param *result: the ASDF of N values from the array pointed to by *data
|
jamie@2
|
80 */
|
jamie@1
|
81 int xtract_asdf(float *data, int N, void *argv, float *result);
|
jamie@1
|
82
|
jamie@2
|
83 /** \brief Extract Mel Frequency Cepstral Coefficients based on a method described by Rabiner
|
jamie@2
|
84 *
|
jamie@2
|
85 * \param *data: a pointer to the first element in an array of floats
|
jamie@2
|
86 * \param N: the number of array elements to be considered
|
jamie@2
|
87 * \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@2
|
88 * \param *result: a pointer to an array containing the resultant MFCC
|
jamie@2
|
89 *
|
jamie@2
|
90 * The data structure pointed to by *argv must be obtained by first calling xtract_init_mfcc
|
jamie@2
|
91 */
|
jamie@1
|
92 int xtract_mfcc(float *data, int N, void *argv, float *result);
|
jamie@1
|
93
|
jamie@2
|
94 /** \brief Extract Bark band coefficients based on a method
|
jamie@2
|
95 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
|
jamie@2
|
96 * \param N: the number of array elements to be considered
|
jamie@2
|
97 * \param *argv: a pointer to an array of ints representing the limits of each bark band
|
jamie@2
|
98 * \param *result: a pointer to an array containing resultant bark coefficients
|
jamie@2
|
99 *
|
jamie@2
|
100 * The limits array pointed to by *argv must be obtained by first calling xtract_init_bark
|
jamie@2
|
101 *
|
jamie@2
|
102 */
|
jamie@1
|
103 int xtract_bark_coefficients(float *data, int N, void *argv, float *result);
|
jamie@1
|
104
|
jamie@2
|
105 /** \brief Extract the Discrete Cosine transform of a time domain signal
|
jamie@2
|
106 * \param *data: a pointer to the first element in an array of floats representing an audio vector
|
jamie@2
|
107 * \param N: the number of array elements to be considered
|
jamie@2
|
108 * \param *argv: a pointer to NULL
|
jamie@2
|
109 * \param *result: a pointer to an array containing resultant dct coefficients
|
jamie@2
|
110 */
|
jamie@1
|
111 int xtract_dct(float *data, int N, void *argv, float *result);
|
jamie@1
|
112
|
jamie@2
|
113 /** \brief Extract the frequency and amplitude of spectral peaks from a of a magnitude spectrum
|
jamie@2
|
114 * \param *data: a pointer to the first element in an array of floats representing the magnitude spectrum of an audio vector
|
jamie@2
|
115 * \param N: the number of array elements to be considered
|
jamie@2
|
116 * \param *argv: a pointer to an array containing peak threshold as percentage below max peak, and sample rate
|
jamie@2
|
117 * \param *result: a pointer to an array of size N, containing N/2 freqs and N/2 amplitudes, amplitudes are on a decibel scale with dbFS = 0
|
jamie@2
|
118 */
|
jamie@1
|
119 int xtract_peaks(float *data, int N, void *argv, float *result);
|
jamie@20
|
120
|
jamie@20
|
121 /** @} */
|
jamie@20
|
122
|
jamie@1
|
123 #ifdef __cplusplus
|
jamie@1
|
124 }
|
jamie@1
|
125 #endif
|
jamie@1
|
126
|
jamie@1
|
127 #endif
|