dsp-collection 0.2.5 → 0.2.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -2
- package/filter/FirFilterWin.d.ts +8 -0
- package/filter/FirFilterWin.d.ts.map +1 -0
- package/filter/FirFilterWin.js +55 -0
- package/filter/FirFilterWin.js.map +1 -0
- package/filter/SpecFilt.d.ts +11 -10
- package/filter/SpecFilt.d.ts.map +1 -0
- package/filter/SpecFilt.js +98 -98
- package/filter/SpecFilt.js.map +1 -1
- package/math/Complex.d.ts +43 -42
- package/math/Complex.d.ts.map +1 -0
- package/math/Complex.js +130 -129
- package/math/Complex.js.map +1 -1
- package/math/ComplexArray.d.ts +37 -36
- package/math/ComplexArray.d.ts.map +1 -0
- package/math/ComplexArray.js +170 -170
- package/math/ComplexArray.js.map +1 -1
- package/math/MathUtils.d.ts +10 -7
- package/math/MathUtils.d.ts.map +1 -0
- package/math/MathUtils.js +116 -81
- package/math/MathUtils.js.map +1 -1
- package/math/MutableComplex.d.ts +24 -22
- package/math/MutableComplex.d.ts.map +1 -0
- package/math/MutableComplex.js +68 -64
- package/math/MutableComplex.js.map +1 -1
- package/math/NumApprox.d.ts +4 -3
- package/math/NumApprox.d.ts.map +1 -0
- package/math/NumApprox.js +67 -67
- package/math/NumApprox.js.map +1 -1
- package/math/PolyReal.d.ts +14 -13
- package/math/PolyReal.d.ts.map +1 -0
- package/math/PolyReal.js +226 -226
- package/math/PolyReal.js.map +1 -1
- package/package.json +11 -3
- package/signal/AdaptiveStft.d.ts +13 -12
- package/signal/AdaptiveStft.d.ts.map +1 -0
- package/signal/AdaptiveStft.js +57 -57
- package/signal/AdaptiveStft.js.map +1 -1
- package/signal/Autocorrelation.d.ts +6 -5
- package/signal/Autocorrelation.d.ts.map +1 -0
- package/signal/Autocorrelation.js +53 -53
- package/signal/Autocorrelation.js.map +1 -1
- package/signal/Dft.d.ts +10 -9
- package/signal/Dft.d.ts.map +1 -0
- package/signal/Dft.js +87 -87
- package/signal/Dft.js.map +1 -1
- package/signal/EnvelopeDetection.d.ts +2 -1
- package/signal/EnvelopeDetection.d.ts.map +1 -0
- package/signal/EnvelopeDetection.js +9 -9
- package/signal/EnvelopeDetection.js.map +1 -1
- package/signal/Fft.d.ts +10 -9
- package/signal/Fft.d.ts.map +1 -0
- package/signal/Fft.js +275 -275
- package/signal/Fft.js.map +1 -1
- package/signal/Goertzel.d.ts +6 -5
- package/signal/Goertzel.d.ts.map +1 -0
- package/signal/Goertzel.js +48 -48
- package/signal/Goertzel.js.map +1 -1
- package/signal/InstFreq.d.ts +9 -8
- package/signal/InstFreq.d.ts.map +1 -0
- package/signal/InstFreq.js +26 -26
- package/signal/InstFreq.js.map +1 -1
- package/signal/PitchDetectionHarm.d.ts +27 -26
- package/signal/PitchDetectionHarm.d.ts.map +1 -0
- package/signal/PitchDetectionHarm.js +72 -68
- package/signal/PitchDetectionHarm.js.map +1 -1
- package/signal/Resampling.d.ts +8 -7
- package/signal/Resampling.d.ts.map +1 -0
- package/signal/Resampling.js +218 -218
- package/signal/Resampling.js.map +1 -1
- package/signal/WindowFunctions.d.ts +42 -40
- package/signal/WindowFunctions.d.ts.map +1 -0
- package/signal/WindowFunctions.js +194 -194
- package/signal/WindowFunctions.js.map +1 -1
- package/utils/ArrayUtils.d.ts +10 -9
- package/utils/ArrayUtils.d.ts.map +1 -0
- package/utils/ArrayUtils.js +68 -68
- package/utils/ArrayUtils.js.map +1 -1
- package/utils/DspUtils.d.ts +5 -2
- package/utils/DspUtils.d.ts.map +1 -0
- package/utils/DspUtils.js +12 -6
- package/utils/DspUtils.js.map +1 -1
- package/utils/MiscUtils.d.ts +7 -6
- package/utils/MiscUtils.d.ts.map +1 -0
- package/utils/MiscUtils.js +20 -20
- package/utils/MiscUtils.js.map +1 -1
package/math/ComplexArray.js
CHANGED
|
@@ -1,171 +1,171 @@
|
|
|
1
|
-
import Complex from "./Complex.js";
|
|
2
|
-
import MutableComplex from "./MutableComplex.js";
|
|
3
|
-
import { assert } from "../utils/MiscUtils.js";
|
|
4
|
-
const emptyFloat64Array = new Float64Array(0);
|
|
5
|
-
export default class ComplexArray {
|
|
6
|
-
constructor(x = 0) {
|
|
7
|
-
if (typeof x == "number") {
|
|
8
|
-
this.constructByLength(x);
|
|
9
|
-
}
|
|
10
|
-
else if (Array.isArray(x) && x[0] instanceof Complex) {
|
|
11
|
-
this.constructByArrayOfComplex(x);
|
|
12
|
-
}
|
|
13
|
-
else if (x instanceof Object && x.length !== undefined) {
|
|
14
|
-
this.constructByArrayOfNumber(x);
|
|
15
|
-
}
|
|
16
|
-
else {
|
|
17
|
-
throw new Error("Invalid constructor argument.");
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
constructByLength(length) {
|
|
21
|
-
this.length = length;
|
|
22
|
-
if (length) {
|
|
23
|
-
this.re = new Float64Array(length);
|
|
24
|
-
this.im = new Float64Array(length);
|
|
25
|
-
}
|
|
26
|
-
else {
|
|
27
|
-
this.re = emptyFloat64Array;
|
|
28
|
-
this.im = emptyFloat64Array;
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
constructByArrayOfComplex(a) {
|
|
32
|
-
this.length = a.length;
|
|
33
|
-
this.re = new Float64Array(a.length);
|
|
34
|
-
this.im = new Float64Array(a.length);
|
|
35
|
-
for (let i = 0; i < a.length; i++) {
|
|
36
|
-
this.re[i] = a[i].re;
|
|
37
|
-
this.im[i] = a[i].im;
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
constructByArrayOfNumber(a) {
|
|
41
|
-
this.length = a.length;
|
|
42
|
-
this.re = new Float64Array(a);
|
|
43
|
-
this.im = new Float64Array(a.length);
|
|
44
|
-
}
|
|
45
|
-
static fromPolar(absArray, argArray) {
|
|
46
|
-
const n = absArray.length;
|
|
47
|
-
assert(n == argArray.length);
|
|
48
|
-
const a = new ComplexArray(n);
|
|
49
|
-
for (let i = 0; i < n; i++) {
|
|
50
|
-
a.setPolar(i, absArray[i], argArray[i]);
|
|
51
|
-
}
|
|
52
|
-
return a;
|
|
53
|
-
}
|
|
54
|
-
slice(begin, end) {
|
|
55
|
-
const a2 = new ComplexArray();
|
|
56
|
-
a2.re = this.re.slice(begin, end);
|
|
57
|
-
a2.im = this.im.slice(begin, end);
|
|
58
|
-
a2.length = a2.re.length;
|
|
59
|
-
return a2;
|
|
60
|
-
}
|
|
61
|
-
subarray(begin, end) {
|
|
62
|
-
const a2 = new ComplexArray();
|
|
63
|
-
a2.re = this.re.subarray(begin, end);
|
|
64
|
-
a2.im = this.im.subarray(begin, end);
|
|
65
|
-
a2.length = end - begin;
|
|
66
|
-
return a2;
|
|
67
|
-
}
|
|
68
|
-
set(i, c) {
|
|
69
|
-
this.re[i] = c.re;
|
|
70
|
-
this.im[i] = c.im;
|
|
71
|
-
}
|
|
72
|
-
setReIm(i, re, im) {
|
|
73
|
-
this.re[i] = re;
|
|
74
|
-
this.im[i] = im;
|
|
75
|
-
}
|
|
76
|
-
setPolar(i, abs, arg) {
|
|
77
|
-
this.re[i] = abs * Math.cos(arg);
|
|
78
|
-
this.im[i] = abs * Math.sin(arg);
|
|
79
|
-
}
|
|
80
|
-
static copy1(a1, i1, a2, i2) {
|
|
81
|
-
a2.re[i2] = a1.re[i1];
|
|
82
|
-
a2.im[i2] = a1.im[i1];
|
|
83
|
-
}
|
|
84
|
-
get(i) {
|
|
85
|
-
return new MutableComplex(this.re[i], this.im[i]);
|
|
86
|
-
}
|
|
87
|
-
getAbs(i) {
|
|
88
|
-
return Math.hypot(this.re[i], this.im[i]);
|
|
89
|
-
}
|
|
90
|
-
getArg(i) {
|
|
91
|
-
return Math.atan2(this.im[i], this.re[i]);
|
|
92
|
-
}
|
|
93
|
-
toString() {
|
|
94
|
-
let s = "[";
|
|
95
|
-
for (let i = 0; i < this.length; i++) {
|
|
96
|
-
if (i > 0) {
|
|
97
|
-
s += ", ";
|
|
98
|
-
}
|
|
99
|
-
s += "(" + this.re[i] + ", " + this.im[i] + ")";
|
|
100
|
-
}
|
|
101
|
-
s += "]";
|
|
102
|
-
return s;
|
|
103
|
-
}
|
|
104
|
-
getAbsArray() {
|
|
105
|
-
const n = this.length;
|
|
106
|
-
const a = new Float64Array(n);
|
|
107
|
-
for (let i = 0; i < n; i++) {
|
|
108
|
-
a[i] = this.getAbs(i);
|
|
109
|
-
}
|
|
110
|
-
return a;
|
|
111
|
-
}
|
|
112
|
-
getArgArray() {
|
|
113
|
-
const n = this.length;
|
|
114
|
-
const a = new Float64Array(n);
|
|
115
|
-
for (let i = 0; i < n; i++) {
|
|
116
|
-
a[i] = this.getArg(i);
|
|
117
|
-
}
|
|
118
|
-
return a;
|
|
119
|
-
}
|
|
120
|
-
addRealTo(i, x) {
|
|
121
|
-
this.re[i] += x;
|
|
122
|
-
}
|
|
123
|
-
addTo(i, x) {
|
|
124
|
-
this.re[i] += x.re;
|
|
125
|
-
this.im[i] += x.im;
|
|
126
|
-
}
|
|
127
|
-
subRealFrom(i, x) {
|
|
128
|
-
this.re[i] -= x;
|
|
129
|
-
}
|
|
130
|
-
subFrom(i, x) {
|
|
131
|
-
this.re[i] -= x.re;
|
|
132
|
-
this.im[i] -= x.im;
|
|
133
|
-
}
|
|
134
|
-
mulByReal(i, x) {
|
|
135
|
-
this.re[i] *= x;
|
|
136
|
-
this.im[i] *= x;
|
|
137
|
-
}
|
|
138
|
-
mulBy(i, x) {
|
|
139
|
-
this.setMul(i, this.re[i], this.im[i], x.re, x.im);
|
|
140
|
-
}
|
|
141
|
-
divByReal(i, x) {
|
|
142
|
-
this.re[i] /= x;
|
|
143
|
-
this.im[i] /= x;
|
|
144
|
-
}
|
|
145
|
-
divBy(i, x) {
|
|
146
|
-
this.setDiv(i, this.re[i], this.im[i], x.re, x.im);
|
|
147
|
-
}
|
|
148
|
-
mulByArray(a2) {
|
|
149
|
-
const n = this.length;
|
|
150
|
-
assert(a2.length == n);
|
|
151
|
-
for (let i = 0; i < n; i++) {
|
|
152
|
-
this.setMul(i, this.re[i], this.im[i], a2.re[i], a2.im[i]);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
mulAllByReal(x) {
|
|
156
|
-
const n = this.length;
|
|
157
|
-
for (let i = 0; i < n; i++) {
|
|
158
|
-
this.mulByReal(i, x);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
setMul(i, re1, im1, re2, im2) {
|
|
162
|
-
this.re[i] = re1 * re2 - im1 * im2;
|
|
163
|
-
this.im[i] = re1 * im2 + im1 * re2;
|
|
164
|
-
}
|
|
165
|
-
setDiv(i, re1, im1, re2, im2) {
|
|
166
|
-
const m = re1 * re1 + im1 * im1;
|
|
167
|
-
this.re[i] = (re1 * re2 + im1 * im2) / m;
|
|
168
|
-
this.im[i] = (im1 * re2 - re1 * im2) / m;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
1
|
+
import Complex from "./Complex.js";
|
|
2
|
+
import MutableComplex from "./MutableComplex.js";
|
|
3
|
+
import { assert } from "../utils/MiscUtils.js";
|
|
4
|
+
const emptyFloat64Array = new Float64Array(0);
|
|
5
|
+
export default class ComplexArray {
|
|
6
|
+
constructor(x = 0) {
|
|
7
|
+
if (typeof x == "number") {
|
|
8
|
+
this.constructByLength(x);
|
|
9
|
+
}
|
|
10
|
+
else if (Array.isArray(x) && x[0] instanceof Complex) {
|
|
11
|
+
this.constructByArrayOfComplex(x);
|
|
12
|
+
}
|
|
13
|
+
else if (x instanceof Object && x.length !== undefined) {
|
|
14
|
+
this.constructByArrayOfNumber(x);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
throw new Error("Invalid constructor argument.");
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
constructByLength(length) {
|
|
21
|
+
this.length = length;
|
|
22
|
+
if (length) {
|
|
23
|
+
this.re = new Float64Array(length);
|
|
24
|
+
this.im = new Float64Array(length);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
this.re = emptyFloat64Array;
|
|
28
|
+
this.im = emptyFloat64Array;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
constructByArrayOfComplex(a) {
|
|
32
|
+
this.length = a.length;
|
|
33
|
+
this.re = new Float64Array(a.length);
|
|
34
|
+
this.im = new Float64Array(a.length);
|
|
35
|
+
for (let i = 0; i < a.length; i++) {
|
|
36
|
+
this.re[i] = a[i].re;
|
|
37
|
+
this.im[i] = a[i].im;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
constructByArrayOfNumber(a) {
|
|
41
|
+
this.length = a.length;
|
|
42
|
+
this.re = new Float64Array(a);
|
|
43
|
+
this.im = new Float64Array(a.length);
|
|
44
|
+
}
|
|
45
|
+
static fromPolar(absArray, argArray) {
|
|
46
|
+
const n = absArray.length;
|
|
47
|
+
assert(n == argArray.length);
|
|
48
|
+
const a = new ComplexArray(n);
|
|
49
|
+
for (let i = 0; i < n; i++) {
|
|
50
|
+
a.setPolar(i, absArray[i], argArray[i]);
|
|
51
|
+
}
|
|
52
|
+
return a;
|
|
53
|
+
}
|
|
54
|
+
slice(begin, end) {
|
|
55
|
+
const a2 = new ComplexArray();
|
|
56
|
+
a2.re = this.re.slice(begin, end);
|
|
57
|
+
a2.im = this.im.slice(begin, end);
|
|
58
|
+
a2.length = a2.re.length;
|
|
59
|
+
return a2;
|
|
60
|
+
}
|
|
61
|
+
subarray(begin, end) {
|
|
62
|
+
const a2 = new ComplexArray();
|
|
63
|
+
a2.re = this.re.subarray(begin, end);
|
|
64
|
+
a2.im = this.im.subarray(begin, end);
|
|
65
|
+
a2.length = end - begin;
|
|
66
|
+
return a2;
|
|
67
|
+
}
|
|
68
|
+
set(i, c) {
|
|
69
|
+
this.re[i] = c.re;
|
|
70
|
+
this.im[i] = c.im;
|
|
71
|
+
}
|
|
72
|
+
setReIm(i, re, im) {
|
|
73
|
+
this.re[i] = re;
|
|
74
|
+
this.im[i] = im;
|
|
75
|
+
}
|
|
76
|
+
setPolar(i, abs, arg) {
|
|
77
|
+
this.re[i] = abs * Math.cos(arg);
|
|
78
|
+
this.im[i] = abs * Math.sin(arg);
|
|
79
|
+
}
|
|
80
|
+
static copy1(a1, i1, a2, i2) {
|
|
81
|
+
a2.re[i2] = a1.re[i1];
|
|
82
|
+
a2.im[i2] = a1.im[i1];
|
|
83
|
+
}
|
|
84
|
+
get(i) {
|
|
85
|
+
return new MutableComplex(this.re[i], this.im[i]);
|
|
86
|
+
}
|
|
87
|
+
getAbs(i) {
|
|
88
|
+
return Math.hypot(this.re[i], this.im[i]);
|
|
89
|
+
}
|
|
90
|
+
getArg(i) {
|
|
91
|
+
return Math.atan2(this.im[i], this.re[i]);
|
|
92
|
+
}
|
|
93
|
+
toString() {
|
|
94
|
+
let s = "[";
|
|
95
|
+
for (let i = 0; i < this.length; i++) {
|
|
96
|
+
if (i > 0) {
|
|
97
|
+
s += ", ";
|
|
98
|
+
}
|
|
99
|
+
s += "(" + this.re[i] + ", " + this.im[i] + ")";
|
|
100
|
+
}
|
|
101
|
+
s += "]";
|
|
102
|
+
return s;
|
|
103
|
+
}
|
|
104
|
+
getAbsArray() {
|
|
105
|
+
const n = this.length;
|
|
106
|
+
const a = new Float64Array(n);
|
|
107
|
+
for (let i = 0; i < n; i++) {
|
|
108
|
+
a[i] = this.getAbs(i);
|
|
109
|
+
}
|
|
110
|
+
return a;
|
|
111
|
+
}
|
|
112
|
+
getArgArray() {
|
|
113
|
+
const n = this.length;
|
|
114
|
+
const a = new Float64Array(n);
|
|
115
|
+
for (let i = 0; i < n; i++) {
|
|
116
|
+
a[i] = this.getArg(i);
|
|
117
|
+
}
|
|
118
|
+
return a;
|
|
119
|
+
}
|
|
120
|
+
addRealTo(i, x) {
|
|
121
|
+
this.re[i] += x;
|
|
122
|
+
}
|
|
123
|
+
addTo(i, x) {
|
|
124
|
+
this.re[i] += x.re;
|
|
125
|
+
this.im[i] += x.im;
|
|
126
|
+
}
|
|
127
|
+
subRealFrom(i, x) {
|
|
128
|
+
this.re[i] -= x;
|
|
129
|
+
}
|
|
130
|
+
subFrom(i, x) {
|
|
131
|
+
this.re[i] -= x.re;
|
|
132
|
+
this.im[i] -= x.im;
|
|
133
|
+
}
|
|
134
|
+
mulByReal(i, x) {
|
|
135
|
+
this.re[i] *= x;
|
|
136
|
+
this.im[i] *= x;
|
|
137
|
+
}
|
|
138
|
+
mulBy(i, x) {
|
|
139
|
+
this.setMul(i, this.re[i], this.im[i], x.re, x.im);
|
|
140
|
+
}
|
|
141
|
+
divByReal(i, x) {
|
|
142
|
+
this.re[i] /= x;
|
|
143
|
+
this.im[i] /= x;
|
|
144
|
+
}
|
|
145
|
+
divBy(i, x) {
|
|
146
|
+
this.setDiv(i, this.re[i], this.im[i], x.re, x.im);
|
|
147
|
+
}
|
|
148
|
+
mulByArray(a2) {
|
|
149
|
+
const n = this.length;
|
|
150
|
+
assert(a2.length == n);
|
|
151
|
+
for (let i = 0; i < n; i++) {
|
|
152
|
+
this.setMul(i, this.re[i], this.im[i], a2.re[i], a2.im[i]);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
mulAllByReal(x) {
|
|
156
|
+
const n = this.length;
|
|
157
|
+
for (let i = 0; i < n; i++) {
|
|
158
|
+
this.mulByReal(i, x);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
setMul(i, re1, im1, re2, im2) {
|
|
162
|
+
this.re[i] = re1 * re2 - im1 * im2;
|
|
163
|
+
this.im[i] = re1 * im2 + im1 * re2;
|
|
164
|
+
}
|
|
165
|
+
setDiv(i, re1, im1, re2, im2) {
|
|
166
|
+
const m = re1 * re1 + im1 * im1;
|
|
167
|
+
this.re[i] = (re1 * re2 + im1 * im2) / m;
|
|
168
|
+
this.im[i] = (im1 * re2 - re1 * im2) / m;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
171
|
//# sourceMappingURL=ComplexArray.js.map
|
package/math/ComplexArray.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ComplexArray.js","sourceRoot":"","sources":["../../src/math/ComplexArray.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,cAAc,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAE7C,MAAM,iBAAiB,GAAG,IAAI,YAAY,CAAC,CAAC,CAAC,CAAC;AAO9C,MAAM,CAAC,OAAO,OAAO,YAAY;IAM9B,YAAoB,IAA4C,CAAC;QAC9D,IAAI,OAAO,CAAC,IAAI,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"ComplexArray.js","sourceRoot":"","sources":["../../src/math/ComplexArray.ts"],"names":[],"mappings":"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"}
|
package/math/MathUtils.d.ts
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
|
-
export declare function fuzzyEquals(a: number, b: number, eps: number): boolean;
|
|
2
|
-
export declare function isFuzzyInteger(i: number, eps: number): boolean;
|
|
3
|
-
export declare function isPowerOf2(i: number): boolean;
|
|
4
|
-
export declare function getNextPowerOf2(x: number): number;
|
|
5
|
-
export declare function floorLog2(x: number): number;
|
|
6
|
-
export declare function hyperbolicDecline(t: number, a: number, b: number): number;
|
|
7
|
-
export declare function
|
|
1
|
+
export declare function fuzzyEquals(a: number, b: number, eps: number): boolean;
|
|
2
|
+
export declare function isFuzzyInteger(i: number, eps: number): boolean;
|
|
3
|
+
export declare function isPowerOf2(i: number): boolean;
|
|
4
|
+
export declare function getNextPowerOf2(x: number): number;
|
|
5
|
+
export declare function floorLog2(x: number): number;
|
|
6
|
+
export declare function hyperbolicDecline(t: number, a: number, b: number): number;
|
|
7
|
+
export declare function simpleMovingAverage(a: ArrayLike<number>, windowWidth: number, shift?: boolean): Float64Array;
|
|
8
|
+
export declare function triangularMovingAverage(a: ArrayLike<number>, windowWidth: number): Float64Array;
|
|
9
|
+
export declare function triangularMovingAverageRef(a: ArrayLike<number>, windowWidth: number): Float64Array;
|
|
10
|
+
//# sourceMappingURL=MathUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MathUtils.d.ts","sourceRoot":"","sources":["../../src/math/MathUtils.ts"],"names":[],"mappings":"AAAA,wBAAgB,WAAW,CAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAI,OAAO,CAS3C;AAE9B,wBAAgB,cAAc,CAAE,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAI,OAAO,CAClB;AAK/C,wBAAgB,UAAU,CAAE,CAAC,EAAE,MAAM,GAAI,OAAO,CAGjB;AAK/B,wBAAgB,eAAe,CAAE,CAAC,EAAE,MAAM,GAAI,MAAM,CAMtC;AAMd,wBAAgB,SAAS,CAAE,CAAC,EAAE,MAAM,GAAI,MAAM,CAGf;AAqB/B,wBAAgB,iBAAiB,CAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAI,MAAM,CASzB;AASnD,wBAAgB,mBAAmB,CAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAI,YAAY,CAoB9F;AAUf,wBAAgB,uBAAuB,CAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,GAAI,YAAY,CAQnF;AAQf,wBAAgB,0BAA0B,CAAE,CAAC,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,MAAM,GAAI,YAAY,CAOtF"}
|
package/math/MathUtils.js
CHANGED
|
@@ -1,82 +1,117 @@
|
|
|
1
|
-
export function fuzzyEquals(a, b, eps) {
|
|
2
|
-
if (!isFinite(a) || !isFinite(b)) {
|
|
3
|
-
return false;
|
|
4
|
-
}
|
|
5
|
-
if (a == b) {
|
|
6
|
-
return true;
|
|
7
|
-
}
|
|
8
|
-
const diff = Math.abs(a - b);
|
|
9
|
-
if (diff <= eps) {
|
|
10
|
-
return true;
|
|
11
|
-
}
|
|
12
|
-
const mag = Math.max(Math.abs(a), Math.abs(b));
|
|
13
|
-
return diff <= mag * eps;
|
|
14
|
-
}
|
|
15
|
-
export function isFuzzyInteger(i, eps) {
|
|
16
|
-
return Math.abs(i - Math.round(i)) <= eps;
|
|
17
|
-
}
|
|
18
|
-
export function isPowerOf2(i) {
|
|
19
|
-
if (!Number.isSafeInteger(i) || i < 1 || i > 0x40000000) {
|
|
20
|
-
return false;
|
|
21
|
-
}
|
|
22
|
-
return (i & (i - 1)) == 0;
|
|
23
|
-
}
|
|
24
|
-
export function getNextPowerOf2(x) {
|
|
25
|
-
if (!isFinite(x)) {
|
|
26
|
-
return NaN;
|
|
27
|
-
}
|
|
28
|
-
let n = 1;
|
|
29
|
-
while (n <= x) {
|
|
30
|
-
n *= 2;
|
|
31
|
-
}
|
|
32
|
-
return n;
|
|
33
|
-
}
|
|
34
|
-
export function floorLog2(x) {
|
|
35
|
-
if (x > 0x7FFFFFFF || x < 1) {
|
|
36
|
-
throw new Error("Argument is not a valid integer.");
|
|
37
|
-
}
|
|
38
|
-
return 31 - Math.clz32(x);
|
|
39
|
-
}
|
|
40
|
-
export function hyperbolicDecline(t, a, b) {
|
|
41
|
-
switch (b) {
|
|
42
|
-
case 1: {
|
|
43
|
-
return 1 / (1 + a * t);
|
|
44
|
-
}
|
|
45
|
-
case 0: {
|
|
46
|
-
return Math.exp(-a * t);
|
|
47
|
-
}
|
|
48
|
-
case -1: {
|
|
49
|
-
return Math.max(0, 1 - a * t);
|
|
50
|
-
}
|
|
51
|
-
default: {
|
|
52
|
-
return 1 / (1 + b * a * t) ** (1 / b);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
export function
|
|
57
|
-
if (windowWidth < 2 || !Number.isSafeInteger(windowWidth)) {
|
|
58
|
-
throw new Error("Specified window width is not
|
|
59
|
-
}
|
|
60
|
-
const len = a.length;
|
|
61
|
-
const a2 = new Float64Array(len);
|
|
62
|
-
const halfWindowWidth = Math.floor(windowWidth / 2);
|
|
63
|
-
const
|
|
64
|
-
|
|
65
|
-
let
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
1
|
+
export function fuzzyEquals(a, b, eps) {
|
|
2
|
+
if (!isFinite(a) || !isFinite(b)) {
|
|
3
|
+
return false;
|
|
4
|
+
}
|
|
5
|
+
if (a == b) {
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
const diff = Math.abs(a - b);
|
|
9
|
+
if (diff <= eps) {
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
const mag = Math.max(Math.abs(a), Math.abs(b));
|
|
13
|
+
return diff <= mag * eps;
|
|
14
|
+
}
|
|
15
|
+
export function isFuzzyInteger(i, eps) {
|
|
16
|
+
return Math.abs(i - Math.round(i)) <= eps;
|
|
17
|
+
}
|
|
18
|
+
export function isPowerOf2(i) {
|
|
19
|
+
if (!Number.isSafeInteger(i) || i < 1 || i > 0x40000000) {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
return (i & (i - 1)) == 0;
|
|
23
|
+
}
|
|
24
|
+
export function getNextPowerOf2(x) {
|
|
25
|
+
if (!isFinite(x)) {
|
|
26
|
+
return NaN;
|
|
27
|
+
}
|
|
28
|
+
let n = 1;
|
|
29
|
+
while (n <= x) {
|
|
30
|
+
n *= 2;
|
|
31
|
+
}
|
|
32
|
+
return n;
|
|
33
|
+
}
|
|
34
|
+
export function floorLog2(x) {
|
|
35
|
+
if (x > 0x7FFFFFFF || x < 1) {
|
|
36
|
+
throw new Error("Argument is not a valid integer.");
|
|
37
|
+
}
|
|
38
|
+
return 31 - Math.clz32(x);
|
|
39
|
+
}
|
|
40
|
+
export function hyperbolicDecline(t, a, b) {
|
|
41
|
+
switch (b) {
|
|
42
|
+
case 1: {
|
|
43
|
+
return 1 / (1 + a * t);
|
|
44
|
+
}
|
|
45
|
+
case 0: {
|
|
46
|
+
return Math.exp(-a * t);
|
|
47
|
+
}
|
|
48
|
+
case -1: {
|
|
49
|
+
return Math.max(0, 1 - a * t);
|
|
50
|
+
}
|
|
51
|
+
default: {
|
|
52
|
+
return 1 / (1 + b * a * t) ** (1 / b);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
export function simpleMovingAverage(a, windowWidth, shift = false) {
|
|
57
|
+
if (windowWidth < 2 || !Number.isSafeInteger(windowWidth)) {
|
|
58
|
+
throw new Error("Specified window width is not valid for SMA.");
|
|
59
|
+
}
|
|
60
|
+
const len = a.length;
|
|
61
|
+
const a2 = new Float64Array(len);
|
|
62
|
+
const halfWindowWidth = Math.floor(windowWidth / 2);
|
|
63
|
+
const posShift = (shift && windowWidth % 2 == 0) ? 1 : 0;
|
|
64
|
+
const extendedLen = len + halfWindowWidth;
|
|
65
|
+
let movingSum = 0;
|
|
66
|
+
let n = 0;
|
|
67
|
+
for (let p = 0; p < extendedLen; p++) {
|
|
68
|
+
if (p >= windowWidth) {
|
|
69
|
+
movingSum -= a[p - windowWidth];
|
|
70
|
+
n--;
|
|
71
|
+
}
|
|
72
|
+
if (p < len) {
|
|
73
|
+
movingSum += a[p];
|
|
74
|
+
n++;
|
|
75
|
+
}
|
|
76
|
+
const p2 = p - halfWindowWidth + posShift;
|
|
77
|
+
if (p2 >= 0 && p2 < len) {
|
|
78
|
+
a2[p2] = movingSum / n;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
return a2;
|
|
82
|
+
}
|
|
83
|
+
export function triangularMovingAverage(a, windowWidth) {
|
|
84
|
+
if (windowWidth < 4 || !Number.isSafeInteger(windowWidth)) {
|
|
85
|
+
throw new Error("Specified window width is not valid for TMA.");
|
|
86
|
+
}
|
|
87
|
+
const w1 = Math.floor(windowWidth / 2);
|
|
88
|
+
const w2 = windowWidth - w1;
|
|
89
|
+
const a1 = simpleMovingAverage(a, w1);
|
|
90
|
+
const a2 = simpleMovingAverage(a1, w2, true);
|
|
91
|
+
return a2;
|
|
92
|
+
}
|
|
93
|
+
export function triangularMovingAverageRef(a, windowWidth) {
|
|
94
|
+
if (windowWidth < 4 || !Number.isSafeInteger(windowWidth)) {
|
|
95
|
+
throw new Error("Specified window width is not valid for TMA.");
|
|
96
|
+
}
|
|
97
|
+
const len = a.length;
|
|
98
|
+
const a2 = new Float64Array(len);
|
|
99
|
+
for (let p = 0; p < len; p++) {
|
|
100
|
+
a2[p] = computeTriangularAverageAt(a, p, windowWidth);
|
|
101
|
+
}
|
|
102
|
+
return a2;
|
|
103
|
+
}
|
|
104
|
+
function computeTriangularAverageAt(a, p, windowWidth) {
|
|
105
|
+
const len = a.length;
|
|
106
|
+
const p1 = Math.max(0, Math.ceil(p - windowWidth / 2 + 0.1));
|
|
107
|
+
const p2 = Math.min(len - 1, Math.floor(p + windowWidth / 2 - 0.1));
|
|
108
|
+
let sum = 0;
|
|
109
|
+
let weightSum = 0;
|
|
110
|
+
for (let i = p1; i <= p2; i++) {
|
|
111
|
+
const weight = 1 - Math.abs(i - p) / (windowWidth / 2);
|
|
112
|
+
sum += a[i] * weight;
|
|
113
|
+
weightSum += weight;
|
|
114
|
+
}
|
|
115
|
+
return sum / weightSum;
|
|
116
|
+
}
|
|
82
117
|
//# sourceMappingURL=MathUtils.js.map
|
package/math/MathUtils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MathUtils.js","sourceRoot":"","sources":["../../src/math/MathUtils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAE,CAAS,EAAE,CAAS,EAAE,GAAW;IAC3D,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;
|
|
1
|
+
{"version":3,"file":"MathUtils.js","sourceRoot":"","sources":["../../src/math/MathUtils.ts"],"names":[],"mappings":"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"}
|