blob: 02bbc59325f9d3d4e4f20c0bc7b691f933e9c395 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
// Gator Oscillator
//
// gator_oscillator
//
// Gator Oscillator from Alligator lines
//
// Histogram of Alligator Teeth-Lips and Jaw-Teeth
//
// Inputs: 1
// Outputs: 2
// Constants: 0
#include <math.h>
#include "ts.h"
ts_parameter_t const ts_gator_oscillator_p = { .n_inputs = 1, .n_outputs = 2, .n_constants = 0, .params_size = 0 };
uint_t ts_gator_oscillator_offset( ts_constant_t const *c )
{
( void )c;
return ( 12 );
}
int ts_gator_oscillator(
fp_t * const *y, uint_t y_n,
fp_t const * const *x, uint_t x_n,
uint_t n, ts_constant_t const *c
)
{
TS_PROLOGUE( ts_gator_oscillator_p );
(void)c;
/* Gator Oscillator uses Alligator lines:
* Lips = SMA(5), Teeth = SMA(8), Jaw = SMA(13)
* Upper = |Lips - Teeth|, Lower = |Jaw - Teeth|
* Offset 12 because Jaw (SMA13) starts at index 12
*/
for (uint_t j = 0; j < n && j < 12; ++j) { y[0][j] = 0; y[1][j] = 0; }
for (uint_t i = 12; i < n; ++i)
{
/* SMA(5) - Lips */
fp_t lips = 0;
for (uint_t j = i - 4; j <= i; ++j) lips += x[0][j];
lips /= 5;
/* SMA(8) - Teeth */
fp_t teeth = 0;
for (uint_t j = i - 7; j <= i; ++j) teeth += x[0][j];
teeth /= 8;
/* SMA(13) - Jaw */
fp_t jaw = 0;
for (uint_t j = i - 12; j <= i; ++j) jaw += x[0][j];
jaw /= 13;
y[0][i] = fabs(lips - teeth);
y[1][i] = fabs(jaw - teeth);
}
return 0;
}
|