@jtarrio/signals 0.9.9 → 0.10.1
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/dist/demod/demod-am.d.ts.map +1 -1
- package/dist/demod/demod-am.js +5 -3
- package/dist/demod/demod-am.js.map +1 -1
- package/dist/demod/demod-cw.d.ts.map +1 -1
- package/dist/demod/demod-cw.js +5 -3
- package/dist/demod/demod-cw.js.map +1 -1
- package/dist/demod/demod-nbfm.d.ts.map +1 -1
- package/dist/demod/demod-nbfm.js +5 -3
- package/dist/demod/demod-nbfm.js.map +1 -1
- package/dist/demod/demod-ssb.d.ts.map +1 -1
- package/dist/demod/demod-ssb.js +9 -7
- package/dist/demod/demod-ssb.js.map +1 -1
- package/dist/demod/demod-wbfm.d.ts.map +1 -1
- package/dist/demod/demod-wbfm.js +12 -7
- package/dist/demod/demod-wbfm.js.map +1 -1
- package/dist/demod/spectrum.d.ts +2 -0
- package/dist/demod/spectrum.d.ts.map +1 -1
- package/dist/demod/spectrum.js +14 -4
- package/dist/demod/spectrum.js.map +1 -1
- package/dist/dsp/demodulators.d.ts.map +1 -1
- package/dist/dsp/demodulators.js +4 -2
- package/dist/dsp/demodulators.js.map +1 -1
- package/dist/dsp/fft.d.ts +3 -10
- package/dist/dsp/fft.d.ts.map +1 -1
- package/dist/dsp/fft.js +71 -184
- package/dist/dsp/fft.js.map +1 -1
- package/dist/dsp/filters.d.ts +19 -25
- package/dist/dsp/filters.d.ts.map +1 -1
- package/dist/dsp/filters.js +37 -109
- package/dist/dsp/filters.js.map +1 -1
- package/dist/dsp/resamplers.d.ts +10 -45
- package/dist/dsp/resamplers.d.ts.map +1 -1
- package/dist/dsp/resamplers.js +87 -185
- package/dist/dsp/resamplers.js.map +1 -1
- package/dist/players/audioplayer.js.map +1 -1
- package/dist/radio/single_thread.d.ts.map +1 -1
- package/dist/radio/single_thread.js +13 -0
- package/dist/radio/single_thread.js.map +1 -1
- package/dist/sources/generated.d.ts.map +1 -1
- package/dist/sources/generated.js.map +1 -1
- package/dist/sources/realtime.d.ts.map +1 -1
- package/dist/sources/realtime.js.map +1 -1
- package/dist/wasm/convolver.d.ts +22 -0
- package/dist/wasm/convolver.d.ts.map +1 -0
- package/dist/wasm/convolver.js +70 -0
- package/dist/wasm/convolver.js.map +1 -0
- package/dist/wasm/fft.d.ts +27 -0
- package/dist/wasm/fft.d.ts.map +1 -0
- package/dist/wasm/fft.js +75 -0
- package/dist/wasm/fft.js.map +1 -0
- package/dist/wasm/wasm-bytes.d.ts +3 -0
- package/dist/wasm/wasm-bytes.d.ts.map +1 -0
- package/dist/wasm/wasm-bytes.js +18 -0
- package/dist/wasm/wasm-bytes.js.map +1 -0
- package/package.json +6 -3
package/dist/dsp/fft.js
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
// See the License for the specific language governing permissions and
|
|
13
13
|
// limitations under the License.
|
|
14
|
+
import { getWasmFft } from "../wasm/fft.js";
|
|
14
15
|
import { Float32Pool, IqPool } from "./buffers.js";
|
|
15
16
|
/** Fast Fourier Transform implementation. */
|
|
16
17
|
/**
|
|
@@ -44,21 +45,13 @@ export class FFT {
|
|
|
44
45
|
constructor(length) {
|
|
45
46
|
this.length = length;
|
|
46
47
|
this.revIndex = reversedBitIndices(length);
|
|
47
|
-
this.
|
|
48
|
-
this.
|
|
48
|
+
this.wasmFft = getWasmFft();
|
|
49
|
+
this.wasmFft.setCoefs(makeFftCoefficients(length));
|
|
49
50
|
this.out = new IqPool(4, length);
|
|
50
|
-
this.window = new Float32Array(length);
|
|
51
|
-
this.window.fill(1);
|
|
52
51
|
}
|
|
53
52
|
revIndex;
|
|
54
|
-
|
|
55
|
-
copy;
|
|
53
|
+
wasmFft;
|
|
56
54
|
out;
|
|
57
|
-
window;
|
|
58
|
-
/** Sets the window function for this FFT. */
|
|
59
|
-
setWindow(window) {
|
|
60
|
-
this.window.set(window);
|
|
61
|
-
}
|
|
62
55
|
transform(real, imag) {
|
|
63
56
|
const length = this.length;
|
|
64
57
|
let [outReal, outImag] = this.out.get(length);
|
|
@@ -67,26 +60,21 @@ export class FFT {
|
|
|
67
60
|
if (imag === undefined) {
|
|
68
61
|
for (let i = 0; i < length && i < real.length; ++i) {
|
|
69
62
|
const ri = this.revIndex[i];
|
|
70
|
-
outReal[ri] =
|
|
63
|
+
outReal[ri] = real[i] / length;
|
|
71
64
|
}
|
|
72
65
|
}
|
|
73
66
|
else {
|
|
74
67
|
for (let i = 0; i < length && i < real.length && i < imag.length; ++i) {
|
|
75
68
|
const ri = this.revIndex[i];
|
|
76
|
-
outReal[ri] =
|
|
77
|
-
outImag[ri] =
|
|
69
|
+
outReal[ri] = real[i] / length;
|
|
70
|
+
outImag[ri] = imag[i] / length;
|
|
78
71
|
}
|
|
79
72
|
}
|
|
80
|
-
|
|
73
|
+
let res = this.wasmFft.fft(outReal, outImag, false);
|
|
74
|
+
outReal.set(res[0]);
|
|
75
|
+
outImag.set(res[1]);
|
|
81
76
|
return [outReal, outImag];
|
|
82
77
|
}
|
|
83
|
-
transformCircularBuffers(real, imag) {
|
|
84
|
-
const length = this.length;
|
|
85
|
-
let [copyReal, copyImag] = this.copy.get(length);
|
|
86
|
-
real.copyTo(copyReal);
|
|
87
|
-
imag.copyTo(copyImag);
|
|
88
|
-
return this.transform(copyReal, copyImag);
|
|
89
|
-
}
|
|
90
78
|
reverse(real, imag) {
|
|
91
79
|
const length = this.length;
|
|
92
80
|
let [outReal, outImag] = this.out.get(length);
|
|
@@ -97,102 +85,12 @@ export class FFT {
|
|
|
97
85
|
outReal[ri] = real[i];
|
|
98
86
|
outImag[ri] = imag[i];
|
|
99
87
|
}
|
|
100
|
-
|
|
88
|
+
let res = this.wasmFft.fft(outReal, outImag, true);
|
|
89
|
+
outReal.set(res[0]);
|
|
90
|
+
outImag.set(res[1]);
|
|
101
91
|
return [outReal, outImag];
|
|
102
92
|
}
|
|
103
93
|
}
|
|
104
|
-
/** Performs a fast direct or reverse transform in place. */
|
|
105
|
-
function doFastTransform(length, reverse, coefs, real, imag) {
|
|
106
|
-
const s = reverse ? -1 : 1;
|
|
107
|
-
for (let dftStart = 0; dftStart < length; dftStart += 4) {
|
|
108
|
-
const n0 = dftStart;
|
|
109
|
-
const n1 = dftStart + 1;
|
|
110
|
-
const n2 = dftStart + 2;
|
|
111
|
-
const n3 = dftStart + 3;
|
|
112
|
-
const a0 = real[n0];
|
|
113
|
-
const a1 = real[n1];
|
|
114
|
-
const a2 = real[n2];
|
|
115
|
-
const a3 = real[n3];
|
|
116
|
-
const b0 = imag[n0];
|
|
117
|
-
const b1 = imag[n1];
|
|
118
|
-
const b2 = imag[n2];
|
|
119
|
-
const b3 = imag[n3];
|
|
120
|
-
real[n0] = a0 + a1 + a2 + a3;
|
|
121
|
-
real[n1] = a0 - a1 - s * (b3 - b2);
|
|
122
|
-
real[n2] = a0 + a1 - a2 - a3;
|
|
123
|
-
real[n3] = a0 - a1 + s * (b3 - b2);
|
|
124
|
-
imag[n0] = b0 + b1 + b2 + b3;
|
|
125
|
-
imag[n1] = b0 - b1 - s * (a2 - a3);
|
|
126
|
-
imag[n2] = b0 + b1 - b2 - b3;
|
|
127
|
-
imag[n3] = b0 - b1 + s * (a2 - a3);
|
|
128
|
-
}
|
|
129
|
-
for (let dftSize = 8, coeffBin = 0; dftSize <= length; dftSize *= 2, ++coeffBin) {
|
|
130
|
-
const binCoefficients = coefs[coeffBin];
|
|
131
|
-
const halfDftSize = dftSize / 2;
|
|
132
|
-
for (let dftStart = 0; dftStart < length; dftStart += dftSize) {
|
|
133
|
-
for (let i = 0; i < halfDftSize; i += 4) {
|
|
134
|
-
{
|
|
135
|
-
const cr0 = binCoefficients.real[i];
|
|
136
|
-
const ci0 = binCoefficients.imag[i] * s;
|
|
137
|
-
const cr1 = binCoefficients.real[i + 1];
|
|
138
|
-
const ci1 = binCoefficients.imag[i + 1] * s;
|
|
139
|
-
const cr2 = binCoefficients.real[i + 2];
|
|
140
|
-
const ci2 = binCoefficients.imag[i + 2] * s;
|
|
141
|
-
const cr3 = binCoefficients.real[i + 3];
|
|
142
|
-
const ci3 = binCoefficients.imag[i + 3] * s;
|
|
143
|
-
const near0 = dftStart + i;
|
|
144
|
-
const far0 = near0 + halfDftSize;
|
|
145
|
-
const evenReal0 = real[near0];
|
|
146
|
-
const or0 = real[far0];
|
|
147
|
-
const evenImag0 = imag[near0];
|
|
148
|
-
const oi0 = imag[far0];
|
|
149
|
-
const oddReal0 = cr0 * or0 - ci0 * oi0;
|
|
150
|
-
const oddImag0 = cr0 * oi0 + ci0 * or0;
|
|
151
|
-
real[near0] = evenReal0 + oddReal0;
|
|
152
|
-
real[far0] = evenReal0 - oddReal0;
|
|
153
|
-
imag[near0] = evenImag0 + oddImag0;
|
|
154
|
-
imag[far0] = evenImag0 - oddImag0;
|
|
155
|
-
const near1 = dftStart + i + 1;
|
|
156
|
-
const far1 = near1 + halfDftSize;
|
|
157
|
-
const evenReal1 = real[near1];
|
|
158
|
-
const or1 = real[far1];
|
|
159
|
-
const evenImag1 = imag[near1];
|
|
160
|
-
const oi1 = imag[far1];
|
|
161
|
-
const oddReal1 = cr1 * or1 - ci1 * oi1;
|
|
162
|
-
const oddImag1 = cr1 * oi1 + ci1 * or1;
|
|
163
|
-
real[near1] = evenReal1 + oddReal1;
|
|
164
|
-
real[far1] = evenReal1 - oddReal1;
|
|
165
|
-
imag[near1] = evenImag1 + oddImag1;
|
|
166
|
-
imag[far1] = evenImag1 - oddImag1;
|
|
167
|
-
const near2 = dftStart + i + 2;
|
|
168
|
-
const far2 = near2 + halfDftSize;
|
|
169
|
-
const evenReal2 = real[near2];
|
|
170
|
-
const or2 = real[far2];
|
|
171
|
-
const evenImag2 = imag[near2];
|
|
172
|
-
const oi2 = imag[far2];
|
|
173
|
-
const oddReal2 = cr2 * or2 - ci2 * oi2;
|
|
174
|
-
const oddImag2 = cr2 * oi2 + ci2 * or2;
|
|
175
|
-
real[near2] = evenReal2 + oddReal2;
|
|
176
|
-
real[far2] = evenReal2 - oddReal2;
|
|
177
|
-
imag[near2] = evenImag2 + oddImag2;
|
|
178
|
-
imag[far2] = evenImag2 - oddImag2;
|
|
179
|
-
const near3 = dftStart + i + 3;
|
|
180
|
-
const far3 = near3 + halfDftSize;
|
|
181
|
-
const evenReal3 = real[near3];
|
|
182
|
-
const or3 = real[far3];
|
|
183
|
-
const evenImag3 = imag[near3];
|
|
184
|
-
const oi3 = imag[far3];
|
|
185
|
-
const oddReal3 = cr3 * or3 - ci3 * oi3;
|
|
186
|
-
const oddImag3 = cr3 * oi3 + ci3 * or3;
|
|
187
|
-
real[near3] = evenReal3 + oddReal3;
|
|
188
|
-
real[far3] = evenReal3 - oddReal3;
|
|
189
|
-
imag[near3] = evenImag3 + oddImag3;
|
|
190
|
-
imag[far3] = evenImag3 - oddImag3;
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
94
|
/** Fast Fourier Transform and reverse transform for real signals. */
|
|
197
95
|
export class RealFFT {
|
|
198
96
|
length;
|
|
@@ -201,24 +99,20 @@ export class RealFFT {
|
|
|
201
99
|
}
|
|
202
100
|
constructor(length) {
|
|
203
101
|
this.length = length;
|
|
204
|
-
|
|
205
|
-
this.
|
|
206
|
-
this.
|
|
207
|
-
this.
|
|
208
|
-
this.
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
}
|
|
214
|
-
this.copyEven = new Float32Array(length / 2);
|
|
215
|
-
this.copyOdd = new Float32Array(length / 2);
|
|
102
|
+
const halfLen = length / 2;
|
|
103
|
+
this.revIndex = reversedBitIndices(halfLen);
|
|
104
|
+
this.wasmFft = getWasmFft();
|
|
105
|
+
this.wasmFft.setCoefs(makeFftCoefficients(halfLen));
|
|
106
|
+
this.wasmFft.setExpnCoefs(makeExpnFftCoefficients(halfLen));
|
|
107
|
+
this.copyEven = new Float32Array(halfLen);
|
|
108
|
+
this.copyOdd = new Float32Array(halfLen);
|
|
109
|
+
this.out = new IqPool(2, halfLen);
|
|
110
|
+
this.outReal = new Float32Pool(2, length);
|
|
216
111
|
}
|
|
217
|
-
|
|
112
|
+
revIndex;
|
|
113
|
+
wasmFft;
|
|
218
114
|
out;
|
|
219
115
|
outReal;
|
|
220
|
-
coefReal;
|
|
221
|
-
coefImag;
|
|
222
116
|
copyEven;
|
|
223
117
|
copyOdd;
|
|
224
118
|
/**
|
|
@@ -227,38 +121,20 @@ export class RealFFT {
|
|
|
227
121
|
* @return The output of the transform.
|
|
228
122
|
*/
|
|
229
123
|
transform(real) {
|
|
230
|
-
const coefReal = this.coefReal;
|
|
231
|
-
const coefImag = this.coefImag;
|
|
232
|
-
const even = this.copyEven;
|
|
233
|
-
const odd = this.copyOdd;
|
|
234
124
|
const len = this.length;
|
|
235
|
-
const hlen =
|
|
125
|
+
const hlen = len / 2;
|
|
126
|
+
this.copyEven.fill(0);
|
|
127
|
+
this.copyOdd.fill(0);
|
|
236
128
|
for (let i = 0; i < hlen; ++i) {
|
|
237
|
-
|
|
238
|
-
|
|
129
|
+
const ri = this.revIndex[i];
|
|
130
|
+
this.copyEven[ri] = real[2 * i] / hlen;
|
|
131
|
+
this.copyOdd[ri] = real[2 * i + 1] / hlen;
|
|
239
132
|
}
|
|
240
|
-
|
|
133
|
+
this.wasmFft.fft(this.copyEven, this.copyOdd, false);
|
|
134
|
+
const res = this.wasmFft.realFftPost();
|
|
241
135
|
const out = this.out.get(len);
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
outReal[0] = (fftReal[0] + fftImag[0]) * 0.5;
|
|
245
|
-
outImag[0] = 0;
|
|
246
|
-
outReal[hlen] = (fftReal[0] - fftImag[0]) * 0.5;
|
|
247
|
-
outImag[hlen] = 0;
|
|
248
|
-
for (let i = 1; i < hlen; ++i) {
|
|
249
|
-
const cr = coefReal[i];
|
|
250
|
-
const ci = coefImag[i];
|
|
251
|
-
const sr = fftReal[i] + fftReal[hlen - i];
|
|
252
|
-
const si = fftImag[i] - fftImag[hlen - i];
|
|
253
|
-
const dr = fftReal[i] - fftReal[hlen - i];
|
|
254
|
-
const di = fftImag[i] + fftImag[hlen - i];
|
|
255
|
-
const xr = (sr + cr * di + ci * dr) * 0.25;
|
|
256
|
-
const xi = (si - cr * dr + ci * di) * 0.25;
|
|
257
|
-
outReal[i] = xr;
|
|
258
|
-
outImag[i] = xi;
|
|
259
|
-
outReal[len - i] = xr;
|
|
260
|
-
outImag[len - i] = -xi;
|
|
261
|
-
}
|
|
136
|
+
out[0].set(res[0]);
|
|
137
|
+
out[1].set(res[1]);
|
|
262
138
|
return out;
|
|
263
139
|
}
|
|
264
140
|
/**
|
|
@@ -269,25 +145,15 @@ export class RealFFT {
|
|
|
269
145
|
* @return The real output of the reverse transform.
|
|
270
146
|
*/
|
|
271
147
|
reverse(real, imag) {
|
|
272
|
-
const coefReal = this.coefReal;
|
|
273
|
-
const coefImag = this.coefImag;
|
|
274
|
-
const fftReal = this.copyEven;
|
|
275
|
-
const fftImag = this.copyOdd;
|
|
276
148
|
const len = this.length;
|
|
277
149
|
const hlen = len / 2;
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
const sr = real[i] + real[hlen - i];
|
|
284
|
-
const si = imag[i] - imag[hlen - i];
|
|
285
|
-
const dr = real[i] - real[hlen - i];
|
|
286
|
-
const di = imag[i] + imag[hlen - i];
|
|
287
|
-
fftReal[i] = sr - cr * di + ci * dr;
|
|
288
|
-
fftImag[i] = si + cr * dr + ci * di;
|
|
150
|
+
const [preEven, preOdd] = this.wasmFft.reverseRealFftPre(real, imag);
|
|
151
|
+
for (let i = 0; i < hlen; ++i) {
|
|
152
|
+
const ri = this.revIndex[i];
|
|
153
|
+
this.copyEven[ri] = preEven[i];
|
|
154
|
+
this.copyOdd[ri] = preOdd[i];
|
|
289
155
|
}
|
|
290
|
-
const [outEven, outOdd] = this.
|
|
156
|
+
const [outEven, outOdd] = this.wasmFft.fft(this.copyEven, this.copyOdd, true);
|
|
291
157
|
const out = this.outReal.get(len);
|
|
292
158
|
for (let i = 0; i < hlen; ++i) {
|
|
293
159
|
out[2 * i] = outEven[i];
|
|
@@ -296,20 +162,41 @@ export class RealFFT {
|
|
|
296
162
|
return out;
|
|
297
163
|
}
|
|
298
164
|
}
|
|
299
|
-
/**
|
|
165
|
+
/**
|
|
166
|
+
* Builds a triangle of direct and reverse FFT coefficients for the given length.
|
|
167
|
+
*
|
|
168
|
+
* The coefficients are organized like this:
|
|
169
|
+
*
|
|
170
|
+
* - 4 real coefficients, 4 imaginary coefficients (8 so far) for the length=8 FFTs
|
|
171
|
+
* - 8 real coefficients, 8 imaginary coefficients (24 so far) for the length=16 FFTs
|
|
172
|
+
* - 16 real coefficients, 16 imaginary coefficients (32 so far) for the length=32 FFTs
|
|
173
|
+
* - ...
|
|
174
|
+
* - fftLength/2 real coefficients, fftLength/2 imaginary coefficients (2 * fftLength - 8 in total)
|
|
175
|
+
*/
|
|
300
176
|
function makeFftCoefficients(length) {
|
|
301
177
|
let numBits = getNumBits(length);
|
|
302
|
-
let
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
imag: new Float32Array(halfSize),
|
|
307
|
-
});
|
|
178
|
+
let coefsLen = 2 * length - 8;
|
|
179
|
+
let coefs = new Float32Array(coefsLen);
|
|
180
|
+
let offset = 0;
|
|
181
|
+
for (let bin = 0, halfSize = 4; bin < numBits - 2; ++bin, halfSize *= 2) {
|
|
308
182
|
for (let i = 0; i < halfSize; ++i) {
|
|
309
|
-
|
|
310
|
-
coefs[bin].real[i] = Math.cos(fwdAngle);
|
|
311
|
-
coefs[bin].imag[i] = Math.sin(fwdAngle);
|
|
183
|
+
coefs[offset++] = Math.cos((-Math.PI * i) / halfSize);
|
|
312
184
|
}
|
|
185
|
+
for (let i = 0; i < halfSize; ++i) {
|
|
186
|
+
coefs[offset++] = Math.sin((-Math.PI * i) / halfSize);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return coefs;
|
|
190
|
+
}
|
|
191
|
+
/** Builds an array of expanding/collapsing coefficients for the real FFT. */
|
|
192
|
+
function makeExpnFftCoefficients(halfLen) {
|
|
193
|
+
let coefs = new Float32Array(2 * (halfLen + 1));
|
|
194
|
+
let offset = 0;
|
|
195
|
+
for (let k = 0; k < halfLen; ++k) {
|
|
196
|
+
coefs[offset++] = Math.cos((-Math.PI * k) / halfLen);
|
|
197
|
+
}
|
|
198
|
+
for (let k = 0; k < halfLen; ++k) {
|
|
199
|
+
coefs[offset++] = Math.sin((-Math.PI * k) / halfLen);
|
|
313
200
|
}
|
|
314
201
|
return coefs;
|
|
315
202
|
}
|
package/dist/dsp/fft.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fft.js","sourceRoot":"","sources":["../../src/dsp/fft.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fft.js","sourceRoot":"","sources":["../../src/dsp/fft.ts"],"names":[],"mappings":"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"}
|
package/dist/dsp/filters.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { Convolver } from "../wasm/convolver.js";
|
|
2
|
+
import { Float32Pool } from "./buffers.js";
|
|
1
3
|
export interface Filter {
|
|
2
4
|
/** Returns a newly initialized clone of this filter. */
|
|
3
5
|
clone(): Filter;
|
|
@@ -6,39 +8,31 @@ export interface Filter {
|
|
|
6
8
|
/** Applies the filter to the input samples, in place. */
|
|
7
9
|
inPlace(samples: Float32Array): void;
|
|
8
10
|
}
|
|
11
|
+
/** A base implementation for FIR filters that uses WASM for convolution. */
|
|
12
|
+
export declare class BaseWasmFirFilter {
|
|
13
|
+
protected offset: number;
|
|
14
|
+
protected delay: number;
|
|
15
|
+
/** @param coefs The coefficients of the filter to apply. */
|
|
16
|
+
constructor(offset: number, delay: number);
|
|
17
|
+
protected pool: Float32Pool;
|
|
18
|
+
protected curSamples: Float32Array;
|
|
19
|
+
protected convolver: Convolver;
|
|
20
|
+
getDelay(): number;
|
|
21
|
+
/**
|
|
22
|
+
* Loads a new block of samples to filter.
|
|
23
|
+
* @param samples The samples to load.
|
|
24
|
+
*/
|
|
25
|
+
protected loadSamples(samples: Float32Array): void;
|
|
26
|
+
}
|
|
9
27
|
/** A class to apply a FIR filter to a sequence of samples. */
|
|
10
|
-
export declare class FIRFilter implements Filter {
|
|
28
|
+
export declare class FIRFilter extends BaseWasmFirFilter implements Filter {
|
|
11
29
|
private coefs;
|
|
12
30
|
/** @param coefs The coefficients of the filter to apply. */
|
|
13
31
|
constructor(coefs: Float32Array);
|
|
14
|
-
private offset;
|
|
15
|
-
private center;
|
|
16
|
-
private pool;
|
|
17
|
-
private curSamples;
|
|
18
32
|
setCoefficients(coefs: Float32Array): void;
|
|
19
33
|
clone(): FIRFilter;
|
|
20
34
|
getDelay(): number;
|
|
21
35
|
inPlace(samples: Float32Array): void;
|
|
22
|
-
/**
|
|
23
|
-
* Loads a new block of samples to filter.
|
|
24
|
-
* @param samples The samples to load.
|
|
25
|
-
*/
|
|
26
|
-
loadSamples(samples: Float32Array): void;
|
|
27
|
-
/**
|
|
28
|
-
* Returns a filtered sample.
|
|
29
|
-
* @param index The index of the sample to return, corresponding
|
|
30
|
-
* to the same index in the latest sample block loaded via loadSamples().
|
|
31
|
-
*/
|
|
32
|
-
get: (index: number) => number;
|
|
33
|
-
/**
|
|
34
|
-
* Version of get() for non-symmetrical coefficients.
|
|
35
|
-
* Be very careful when you modify this function. About 85% of the total execution
|
|
36
|
-
* time is spent here, so performance is critical.
|
|
37
|
-
*/
|
|
38
|
-
private getNS;
|
|
39
|
-
/** Version of get() for symmetric coefficients. */
|
|
40
|
-
private getS;
|
|
41
|
-
private isSymmetric;
|
|
42
36
|
}
|
|
43
37
|
/**
|
|
44
38
|
* A class that applies a FIR filter using successive Fourier transforms (overlap-save.)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/dsp/filters.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../src/dsp/filters.ts"],"names":[],"mappings":"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"}
|
package/dist/dsp/filters.js
CHANGED
|
@@ -12,45 +12,27 @@
|
|
|
12
12
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
13
|
// See the License for the specific language governing permissions and
|
|
14
14
|
// limitations under the License.
|
|
15
|
+
import { getConvolver } from "../wasm/convolver.js";
|
|
15
16
|
import { Float32Pool, Float32RingBuffer, IqPool, IqRingBuffer, } from "./buffers.js";
|
|
16
17
|
import { actualLength, FFT, RealFFT } from "./fft.js";
|
|
17
18
|
import { atan2 } from "./math.js";
|
|
18
|
-
/** A
|
|
19
|
-
export class
|
|
20
|
-
|
|
19
|
+
/** A base implementation for FIR filters that uses WASM for convolution. */
|
|
20
|
+
export class BaseWasmFirFilter {
|
|
21
|
+
offset;
|
|
22
|
+
delay;
|
|
21
23
|
/** @param coefs The coefficients of the filter to apply. */
|
|
22
|
-
constructor(
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
25
|
-
this.center = Math.floor(this.coefs.length / 2);
|
|
24
|
+
constructor(offset, delay) {
|
|
25
|
+
this.offset = offset;
|
|
26
|
+
this.delay = delay;
|
|
26
27
|
this.pool = new Float32Pool(2, 2 * this.offset);
|
|
27
28
|
this.curSamples = this.pool.get(this.offset);
|
|
28
|
-
this.
|
|
29
|
+
this.convolver = getConvolver();
|
|
29
30
|
}
|
|
30
|
-
offset;
|
|
31
|
-
center;
|
|
32
31
|
pool;
|
|
33
32
|
curSamples;
|
|
34
|
-
|
|
35
|
-
const oldSamples = this.curSamples;
|
|
36
|
-
this.coefs = coefs;
|
|
37
|
-
this.offset = this.coefs.length - 1;
|
|
38
|
-
this.center = Math.floor(this.coefs.length / 2);
|
|
39
|
-
this.curSamples = this.pool.get(this.offset);
|
|
40
|
-
this.get = this.isSymmetric() ? this.getS : this.getNS;
|
|
41
|
-
this.loadSamples(oldSamples);
|
|
42
|
-
}
|
|
43
|
-
clone() {
|
|
44
|
-
return new FIRFilter(this.coefs);
|
|
45
|
-
}
|
|
33
|
+
convolver;
|
|
46
34
|
getDelay() {
|
|
47
|
-
return this.
|
|
48
|
-
}
|
|
49
|
-
inPlace(samples) {
|
|
50
|
-
this.loadSamples(samples);
|
|
51
|
-
for (let i = 0; i < samples.length; ++i) {
|
|
52
|
-
samples[i] = this.get(i);
|
|
53
|
-
}
|
|
35
|
+
return this.delay;
|
|
54
36
|
}
|
|
55
37
|
/**
|
|
56
38
|
* Loads a new block of samples to filter.
|
|
@@ -68,88 +50,34 @@ export class FIRFilter {
|
|
|
68
50
|
}
|
|
69
51
|
this.curSamples.set(samples, this.offset);
|
|
70
52
|
}
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
* time is spent here, so performance is critical.
|
|
81
|
-
*/
|
|
82
|
-
getNS(index) {
|
|
83
|
-
let i = 0;
|
|
84
|
-
let out = 0;
|
|
85
|
-
let len = this.coefs.length;
|
|
86
|
-
let len4 = 4 * Math.floor(len / 4);
|
|
87
|
-
while (i < len4) {
|
|
88
|
-
out +=
|
|
89
|
-
this.coefs[i++] * this.curSamples[index++] +
|
|
90
|
-
this.coefs[i++] * this.curSamples[index++] +
|
|
91
|
-
this.coefs[i++] * this.curSamples[index++] +
|
|
92
|
-
this.coefs[i++] * this.curSamples[index++];
|
|
93
|
-
}
|
|
94
|
-
let len2 = 2 * Math.floor(len / 2);
|
|
95
|
-
while (i < len2) {
|
|
96
|
-
out +=
|
|
97
|
-
this.coefs[i++] * this.curSamples[index++] +
|
|
98
|
-
this.coefs[i++] * this.curSamples[index++];
|
|
99
|
-
}
|
|
100
|
-
while (i < len) {
|
|
101
|
-
out += this.coefs[i++] * this.curSamples[index++];
|
|
102
|
-
}
|
|
103
|
-
return out;
|
|
53
|
+
}
|
|
54
|
+
/** A class to apply a FIR filter to a sequence of samples. */
|
|
55
|
+
export class FIRFilter extends BaseWasmFirFilter {
|
|
56
|
+
coefs;
|
|
57
|
+
/** @param coefs The coefficients of the filter to apply. */
|
|
58
|
+
constructor(coefs) {
|
|
59
|
+
super(coefs.length - 1, Math.floor(coefs.length / 2));
|
|
60
|
+
this.coefs = coefs;
|
|
61
|
+
this.convolver.setCoefs(coefs);
|
|
104
62
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
let hlen4 = 4 * Math.floor(hlen / 4);
|
|
114
|
-
while (i < hlen4) {
|
|
115
|
-
out +=
|
|
116
|
-
this.coefs[i + 0] *
|
|
117
|
-
(this.curSamples[lo + 0] + this.curSamples[hi - 0]) +
|
|
118
|
-
this.coefs[i + 1] *
|
|
119
|
-
(this.curSamples[lo + 1] + this.curSamples[hi - 1]) +
|
|
120
|
-
this.coefs[i + 2] *
|
|
121
|
-
(this.curSamples[lo + 2] + this.curSamples[hi - 2]) +
|
|
122
|
-
this.coefs[i + 3] * (this.curSamples[lo + 3] + this.curSamples[hi - 3]);
|
|
123
|
-
i += 4;
|
|
124
|
-
lo += 4;
|
|
125
|
-
hi -= 4;
|
|
126
|
-
}
|
|
127
|
-
let hlen2 = 2 * Math.floor(hlen / 2);
|
|
128
|
-
while (i < hlen2) {
|
|
129
|
-
out +=
|
|
130
|
-
this.coefs[i + 0] *
|
|
131
|
-
(this.curSamples[lo + 0] + this.curSamples[hi - 0]) +
|
|
132
|
-
this.coefs[i + 1] * (this.curSamples[lo + 1] + this.curSamples[hi - 1]);
|
|
133
|
-
i += 2;
|
|
134
|
-
lo += 2;
|
|
135
|
-
hi -= 2;
|
|
136
|
-
}
|
|
137
|
-
while (i < fhlen) {
|
|
138
|
-
out += this.coefs[i++] * (this.curSamples[lo++] + this.curSamples[hi--]);
|
|
139
|
-
}
|
|
140
|
-
if (fhlen != hlen) {
|
|
141
|
-
out += this.coefs[i++] * this.curSamples[lo++];
|
|
142
|
-
}
|
|
143
|
-
return out;
|
|
63
|
+
setCoefficients(coefs) {
|
|
64
|
+
this.convolver.setCoefs(coefs);
|
|
65
|
+
const oldSamples = this.curSamples;
|
|
66
|
+
this.coefs = coefs;
|
|
67
|
+
this.offset = this.coefs.length - 1;
|
|
68
|
+
this.delay = Math.floor(this.coefs.length / 2);
|
|
69
|
+
this.curSamples = this.pool.get(this.offset);
|
|
70
|
+
this.loadSamples(oldSamples);
|
|
144
71
|
}
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
72
|
+
clone() {
|
|
73
|
+
return new FIRFilter(this.coefs);
|
|
74
|
+
}
|
|
75
|
+
getDelay() {
|
|
76
|
+
return this.delay;
|
|
77
|
+
}
|
|
78
|
+
inPlace(samples) {
|
|
79
|
+
this.loadSamples(samples);
|
|
80
|
+
samples.set(this.convolver.convolve(this.curSamples, samples.length));
|
|
153
81
|
}
|
|
154
82
|
}
|
|
155
83
|
/**
|