source: src/fvec.h @ 986e4b7

feature/crepe
Last change on this file since 986e4b7 was 567727d, checked in by Paul Brossier <piem@piem.org>, 3 years ago

[fvec] add fvec_vecadd

  • Property mode set to 100644
File size: 3.8 KB
Line 
1/*
2  Copyright (C) 2003-2015 Paul Brossier <piem@aubio.org>
3
4  This file is part of aubio.
5
6  aubio is free software: you can redistribute it and/or modify
7  it under the terms of the GNU General Public License as published by
8  the Free Software Foundation, either version 3 of the License, or
9  (at your option) any later version.
10
11  aubio is distributed in the hope that it will be useful,
12  but WITHOUT ANY WARRANTY; without even the implied warranty of
13  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  GNU General Public License for more details.
15
16  You should have received a copy of the GNU General Public License
17  along with aubio.  If not, see <http://www.gnu.org/licenses/>.
18
19*/
20
21#ifndef AUBIO_FVEC_H
22#define AUBIO_FVEC_H
23
24#ifdef __cplusplus
25extern "C" {
26#endif
27
28/** \file
29
30  Vector of real-valued data
31
32  This file specifies the ::fvec_t buffer type, which is used throughout aubio
33  to store vector of real-valued ::smpl_t.
34
35  \example test-fvec.c
36
37*/
38
39/** Buffer for real data
40
41  Vector of real-valued data
42
43  ::fvec_t is is the structure used to store vector of real-valued data, ::smpl_t .
44
45  \code
46
47  uint_t buffer_size = 1024;
48
49  // create a vector of 512 values
50  fvec_t * input = new_fvec (buffer_size);
51
52  // set some values of the vector
53  input->data[23] = 2.;
54  // ..
55
56  // compute the mean of the vector
57  mean = fvec_mean(a_vector);
58
59  // destroy the vector
60  del_fvec(a_vector);
61
62  \endcode
63
64  See `examples/` and `tests/src` directories for more examples.
65
66 */
67typedef struct {
68  uint_t length;  /**< length of buffer */
69  smpl_t *data;   /**< data vector of length ::fvec_t.length */
70} fvec_t;
71
72/** fvec_t buffer creation function
73
74  \param length the length of the buffer to create
75
76*/
77fvec_t * new_fvec(uint_t length);
78
79/** fvec_t buffer deletion function
80
81  \param s buffer to delete as returned by new_fvec()
82
83*/
84void del_fvec(fvec_t *s);
85
86/** read sample value in a buffer
87
88  \param s vector to read from
89  \param position sample position to read from
90
91*/
92smpl_t fvec_get_sample(const fvec_t *s, uint_t position);
93
94/** write sample value in a buffer
95
96  \param s vector to write to
97  \param data value to write in s->data[position]
98  \param position sample position to write to
99
100*/
101void  fvec_set_sample(fvec_t *s, smpl_t data, uint_t position);
102
103/** read data from a buffer
104
105  \param s vector to read from
106
107*/
108smpl_t * fvec_get_data(const fvec_t *s);
109
110/** print out fvec data
111
112  \param s vector to print out
113
114*/
115void fvec_print(const fvec_t *s);
116
117/** set all elements to a given value
118
119  \param s vector to modify
120  \param val value to set elements to
121
122*/
123void fvec_set_all (fvec_t *s, smpl_t val);
124
125/** set all elements to zero
126
127  \param s vector to modify
128
129*/
130void fvec_zeros(fvec_t *s);
131
132/** set all elements to ones
133
134  \param s vector to modify
135
136*/
137void fvec_ones(fvec_t *s);
138
139/** revert order of vector elements
140
141  \param s vector to revert
142
143*/
144void fvec_rev(fvec_t *s);
145
146/** add a vector b to vector a, modifying a
147
148  \param a  input vector to add b to
149  \param b  input vector of the values to be added to a
150
151  Upon return, he content of a[i] will be set to a[i] + b[i].
152
153*/
154void fvec_vecadd(fvec_t *a, const fvec_t *b);
155
156/** apply weight to vector
157
158  If the weight vector is longer than s, only the first elements are used. If
159  the weight vector is shorter than s, the last elements of s are not weighted.
160
161  \param s vector to weight
162  \param weight weighting coefficients
163
164*/
165void fvec_weight(fvec_t *s, const fvec_t *weight);
166
167/** make a copy of a vector
168
169  \param s source vector
170  \param t vector to copy to
171
172*/
173void fvec_copy(const fvec_t *s, fvec_t *t);
174
175/** make a copy of a vector, applying weights to each element
176
177  \param in input vector
178  \param weight weights vector
179  \param out output vector
180
181*/
182void fvec_weighted_copy(const fvec_t *in, const fvec_t *weight, fvec_t *out);
183
184#ifdef __cplusplus
185}
186#endif
187
188#endif /* AUBIO_FVEC_H */
Note: See TracBrowser for help on using the repository browser.