@jtarrio/signals 0.9.1 → 0.9.3
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 +5 -5
- package/dist/dsp/demodulators.d.ts +1 -1
- package/dist/dsp/demodulators.d.ts.map +1 -1
- package/dist/dsp/demodulators.js +8 -6
- package/dist/dsp/demodulators.js.map +1 -1
- package/dist/dsp/filters.d.ts +47 -58
- package/dist/dsp/filters.d.ts.map +1 -1
- package/dist/dsp/filters.js +197 -183
- package/dist/dsp/filters.js.map +1 -1
- package/dist/radio/signal_source.d.ts +4 -1
- package/dist/radio/signal_source.d.ts.map +1 -1
- package/dist/sources/generated.d.ts +17 -0
- package/dist/sources/generated.d.ts.map +1 -0
- package/dist/sources/generated.js +26 -0
- package/dist/sources/generated.js.map +1 -0
- package/dist/sources/generators.d.ts +1 -1
- package/dist/sources/generators.d.ts.map +1 -1
- package/dist/sources/realtime.d.ts +12 -17
- package/dist/sources/realtime.d.ts.map +1 -1
- package/dist/sources/realtime.js +14 -8
- package/dist/sources/realtime.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -16,9 +16,9 @@ npm install @jtarrio/signals
|
|
|
16
16
|
|
|
17
17
|
## How to use
|
|
18
18
|
|
|
19
|
-
See [the `docs` directory](docs/README.md) for the documentation, or check out the following
|
|
19
|
+
See [the `docs` directory](docs/README.md) for the documentation, or check out the following example.
|
|
20
20
|
|
|
21
|
-
###
|
|
21
|
+
### Demodulate and play through the computer's speakers
|
|
22
22
|
|
|
23
23
|
This program generates an AM signal, demodulates it, and plays it through the computer's speakers.
|
|
24
24
|
|
|
@@ -28,10 +28,10 @@ import { getMode } from "@jtarrio/signals/demod/modes.js";
|
|
|
28
28
|
import { Radio } from "@jtarrio/signals/radio.js";
|
|
29
29
|
import { modulateAM, tone } from "@jtarrio/signals/sources/generators.js";
|
|
30
30
|
import { SimpleProvider } from "@jtarrio/signals/sources/provider.js";
|
|
31
|
-
import {
|
|
31
|
+
import { GeneratedSource } from "@jtarrio/signals/sources/generated.js";
|
|
32
32
|
|
|
33
33
|
// Create the source, demodulator, and radio and connect them.
|
|
34
|
-
let source = new
|
|
34
|
+
let source = new GeneratedSource(modulateAM(810000, 0.1, tone(600, 0.5)));
|
|
35
35
|
let demodulator = new Demodulator();
|
|
36
36
|
let radio = new Radio(new SimpleProvider(source), demodulator);
|
|
37
37
|
|
|
@@ -47,7 +47,7 @@ document
|
|
|
47
47
|
.addEventListener("click", () => radio.stop());
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
-
You can also see a full example at [`examples/
|
|
50
|
+
You can also see a full example at [`examples/radio`](examples/radio/script.js).
|
|
51
51
|
|
|
52
52
|
## Acknowledgements
|
|
53
53
|
|
|
@@ -51,7 +51,7 @@ export declare class StereoSeparator {
|
|
|
51
51
|
*/
|
|
52
52
|
constructor(sampleRate: number, pilotFreq: number);
|
|
53
53
|
private pool;
|
|
54
|
-
private
|
|
54
|
+
private detector;
|
|
55
55
|
/**
|
|
56
56
|
* Locks on to the pilot tone and uses it to demodulate the stereo audio.
|
|
57
57
|
* @param samples The original audio stream.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demodulators.d.ts","sourceRoot":"","sources":["../../src/dsp/demodulators.ts"],"names":[],"mappings":"AAoBA,kCAAkC;AAClC,oBAAY,QAAQ;IAClB,KAAK,IAAA;IACL,KAAK,IAAA;CACN;AAED,iDAAiD;AACjD,qBAAa,cAAc;IACzB;;;OAGG;gBACS,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM;IAOjD,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,UAAU,CAAS;IAE3B,sDAAsD;IACtD,WAAW,CAAC,QAAQ,EAAE,QAAQ;IAI9B,8DAA8D;IAC9D,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY;CAU/D;AAED,0CAA0C;AAC1C,qBAAa,aAAa;IACxB;;OAEG;gBACS,UAAU,EAAE,MAAM;IAK9B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,gBAAgB,CAAS;IAEjC,8DAA8D;IAC9D,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY;CAa/D;AAED,0CAA0C;AAC1C,qBAAa,aAAa;IACxB;;OAEG;gBACS,YAAY,EAAE,MAAM;IAMhC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,EAAE,CAAS;IAEnB,qCAAqC;IACrC,eAAe,CAAC,YAAY,EAAE,MAAM;IAIpC,8DAA8D;IAC9D,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY;CAe/D;AAED,0EAA0E;AAC1E,qBAAa,eAAe;IAC1B;;;OAGG;gBACS,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKjD,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"demodulators.d.ts","sourceRoot":"","sources":["../../src/dsp/demodulators.ts"],"names":[],"mappings":"AAoBA,kCAAkC;AAClC,oBAAY,QAAQ;IAClB,KAAK,IAAA;IACL,KAAK,IAAA;CACN;AAED,iDAAiD;AACjD,qBAAa,cAAc;IACzB;;;OAGG;gBACS,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM;IAOjD,OAAO,CAAC,WAAW,CAAY;IAC/B,OAAO,CAAC,aAAa,CAAY;IACjC,OAAO,CAAC,UAAU,CAAS;IAE3B,sDAAsD;IACtD,WAAW,CAAC,QAAQ,EAAE,QAAQ;IAI9B,8DAA8D;IAC9D,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY;CAU/D;AAED,0CAA0C;AAC1C,qBAAa,aAAa;IACxB;;OAEG;gBACS,UAAU,EAAE,MAAM;IAK9B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,gBAAgB,CAAS;IAEjC,8DAA8D;IAC9D,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY;CAa/D;AAED,0CAA0C;AAC1C,qBAAa,aAAa;IACxB;;OAEG;gBACS,YAAY,EAAE,MAAM;IAMhC,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,EAAE,CAAS;IAEnB,qCAAqC;IACrC,eAAe,CAAC,YAAY,EAAE,MAAM;IAIpC,8DAA8D;IAC9D,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,YAAY;CAe/D;AAED,0EAA0E;AAC1E,qBAAa,eAAe;IAC1B;;;OAGG;gBACS,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAKjD,OAAO,CAAC,IAAI,CAAc;IAC1B,OAAO,CAAC,QAAQ,CAAgB;IAEhC;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG;QAAE,KAAK,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,YAAY,CAAA;KAAE;CAexE"}
|
package/dist/dsp/demodulators.js
CHANGED
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
// See the License for the specific language governing permissions and
|
|
14
14
|
// limitations under the License.
|
|
15
15
|
import { makeHilbertKernel } from "./coefficients.js";
|
|
16
|
-
import { decay, FIRFilter,
|
|
16
|
+
import { decay, FIRFilter, PilotDetector } from "./filters.js";
|
|
17
17
|
import { Float32Pool } from "./buffers.js";
|
|
18
18
|
import { atan2 } from "./math.js";
|
|
19
19
|
/** The sideband to demodulate. */
|
|
@@ -121,10 +121,10 @@ export class StereoSeparator {
|
|
|
121
121
|
*/
|
|
122
122
|
constructor(sampleRate, pilotFreq) {
|
|
123
123
|
this.pool = new Float32Pool(4);
|
|
124
|
-
this.
|
|
124
|
+
this.detector = new PilotDetector(sampleRate, pilotFreq, 2);
|
|
125
125
|
}
|
|
126
126
|
pool;
|
|
127
|
-
|
|
127
|
+
detector;
|
|
128
128
|
/**
|
|
129
129
|
* Locks on to the pilot tone and uses it to demodulate the stereo audio.
|
|
130
130
|
* @param samples The original audio stream.
|
|
@@ -135,13 +135,15 @@ export class StereoSeparator {
|
|
|
135
135
|
*/
|
|
136
136
|
separate(samples) {
|
|
137
137
|
let out = this.pool.get(samples.length);
|
|
138
|
+
const pilot = this.detector.extract(samples);
|
|
139
|
+
const I = pilot[0];
|
|
140
|
+
const Q = pilot[1];
|
|
138
141
|
for (let i = 0; i < samples.length; ++i) {
|
|
139
|
-
this.pll.add(samples[i]);
|
|
140
142
|
// Multiply by 4 instead of 2 so 'out' has the same level as the input samples.
|
|
141
|
-
out[i] = samples[i] *
|
|
143
|
+
out[i] = samples[i] * I[i] * Q[i] * 4;
|
|
142
144
|
}
|
|
143
145
|
return {
|
|
144
|
-
found: this.
|
|
146
|
+
found: this.detector.locked,
|
|
145
147
|
diff: out,
|
|
146
148
|
};
|
|
147
149
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"demodulators.js","sourceRoot":"","sources":["../../src/dsp/demodulators.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,kDAAkD;AAClD,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,
|
|
1
|
+
{"version":3,"file":"demodulators.js","sourceRoot":"","sources":["../../src/dsp/demodulators.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,kDAAkD;AAClD,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,kCAAkC;AAClC,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,yCAAK,CAAA;IACL,yCAAK,CAAA;AACP,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AAED,iDAAiD;AACjD,MAAM,OAAO,cAAc;IACzB;;;OAGG;IACH,YAAY,QAAkB,EAAE,SAAiB;QAC/C,IAAI,OAAO,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC3C,IAAI,CAAC,WAAW,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;QAC1C,IAAI,CAAC,aAAa,GAAG,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC;QAC5C,IAAI,CAAC,UAAU,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAEO,WAAW,CAAY;IACvB,aAAa,CAAY;IACzB,UAAU,CAAS;IAE3B,sDAAsD;IACtD,WAAW,CAAC,QAAkB;QAC5B,IAAI,CAAC,UAAU,GAAG,QAAQ,IAAI,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,CAAC;IAED,8DAA8D;IAC9D,UAAU,CAAC,CAAe,EAAE,CAAe,EAAE,GAAiB;QAC5D,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;QAClC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACpC,GAAG,CAAC,CAAC,CAAC;gBACJ,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC;oBAC7B,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,UAAU,CAAC;oBAC9C,CAAC,CAAC;QACN,CAAC;IACH,CAAC;CACF;AAED,0CAA0C;AAC1C,MAAM,OAAO,aAAa;IACxB;;OAEG;IACH,YAAY,UAAkB;QAC5B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;QACpC,IAAI,CAAC,gBAAgB,GAAG,CAAC,CAAC;IAC5B,CAAC;IAEO,KAAK,CAAS;IACd,gBAAgB,CAAS;IAEjC,8DAA8D;IAC9D,UAAU,CAAC,CAAe,EAAE,CAAe,EAAE,GAAiB;QAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QACzB,IAAI,gBAAgB,GAAG,IAAI,CAAC,gBAAgB,CAAC;QAC7C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACpC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAChB,MAAM,KAAK,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;YAChC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACnC,gBAAgB,IAAI,KAAK,GAAG,CAAC,SAAS,GAAG,gBAAgB,CAAC,CAAC;YAC3D,GAAG,CAAC,CAAC,CAAC,GAAG,gBAAgB,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,GAAG,gBAAgB,GAAG,CAAC,CAAC;QACxE,CAAC;QACD,IAAI,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAC3C,CAAC;CACF;AAED,0CAA0C;AAC1C,MAAM,OAAO,aAAa;IACxB;;OAEG;IACH,YAAY,YAAoB;QAC9B,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,YAAY,CAAC,CAAC;QAC5C,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;QACZ,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;IACd,CAAC;IAEO,GAAG,CAAS;IACZ,EAAE,CAAS;IACX,EAAE,CAAS;IAEnB,qCAAqC;IACrC,eAAe,CAAC,YAAoB;QAClC,IAAI,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,YAAY,CAAC,CAAC;IAC9C,CAAC;IAED,8DAA8D;IAC9D,UAAU,CAAC,CAAe,EAAE,CAAe,EAAE,GAAiB;QAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;QACrB,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACjB,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,CAAC;QACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YAClC,kBAAkB;YAClB,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACjC,IAAI,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;YACjC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACV,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACV,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC;QACnC,CAAC;QACD,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;IACf,CAAC;CACF;AAED,0EAA0E;AAC1E,MAAM,OAAO,eAAe;IAC1B;;;OAGG;IACH,YAAY,UAAkB,EAAE,SAAiB;QAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,IAAI,aAAa,CAAC,UAAU,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IAC9D,CAAC;IAEO,IAAI,CAAc;IAClB,QAAQ,CAAgB;IAEhC;;;;;;;OAOG;IACH,QAAQ,CAAC,OAAqB;QAC5B,IAAI,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC7C,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;YACxC,+EAA+E;YAC/E,GAAG,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACxC,CAAC;QAED,OAAO;YACL,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM;YAC3B,IAAI,EAAE,GAAG;SACV,CAAC;IACJ,CAAC;CACF"}
|
package/dist/dsp/filters.d.ts
CHANGED
|
@@ -13,6 +13,7 @@ export declare class FIRFilter implements Filter {
|
|
|
13
13
|
constructor(coefs: Float32Array);
|
|
14
14
|
private offset;
|
|
15
15
|
private center;
|
|
16
|
+
private pool;
|
|
16
17
|
private curSamples;
|
|
17
18
|
setCoefficients(coefs: Float32Array): void;
|
|
18
19
|
clone(): FIRFilter;
|
|
@@ -81,12 +82,30 @@ export interface IIRFilter extends Filter {
|
|
|
81
82
|
/** IIR filter with two 'b' coefficients and one 'a' coefficient. */
|
|
82
83
|
declare class IIRFilter21 implements IIRFilter {
|
|
83
84
|
private sampleRate;
|
|
84
|
-
private b0;
|
|
85
|
-
private b1;
|
|
86
|
-
private a1;
|
|
87
85
|
constructor(sampleRate: number, b0: number, b1: number, a1: number);
|
|
88
|
-
private
|
|
89
|
-
private
|
|
86
|
+
private q;
|
|
87
|
+
private v;
|
|
88
|
+
/** Returns a copy of this filter. */
|
|
89
|
+
clone(): IIRFilter;
|
|
90
|
+
getDelay(): number;
|
|
91
|
+
/**
|
|
92
|
+
* Filters the given samples in place.
|
|
93
|
+
* @param samples The samples to filter.
|
|
94
|
+
*/
|
|
95
|
+
inPlace(samples: Float32Array): void;
|
|
96
|
+
/** Filters an individual sample. */
|
|
97
|
+
add(sample: number): number;
|
|
98
|
+
/** Returns the value currently held by the filter. */
|
|
99
|
+
get value(): number;
|
|
100
|
+
/** Returns the phase shift at the given angular frequency. */
|
|
101
|
+
phaseShift(freq: number): number;
|
|
102
|
+
}
|
|
103
|
+
/** IIR filter with three 'b' coefficients and two 'a' coefficient. */
|
|
104
|
+
declare class IIRFilter32 implements IIRFilter {
|
|
105
|
+
private sampleRate;
|
|
106
|
+
constructor(sampleRate: number, b0: number, b1: number, b2: number, a1: number, a2: number);
|
|
107
|
+
private q;
|
|
108
|
+
private v;
|
|
90
109
|
/** Returns a copy of this filter. */
|
|
91
110
|
clone(): IIRFilter;
|
|
92
111
|
getDelay(): number;
|
|
@@ -118,40 +137,22 @@ export declare class Preemphasis extends IIRFilter21 {
|
|
|
118
137
|
*/
|
|
119
138
|
constructor(sampleRate: number, timeConstant: number);
|
|
120
139
|
}
|
|
121
|
-
/** A
|
|
122
|
-
export declare class IIRLowPass extends
|
|
140
|
+
/** A first-order IIR low-pass filter. */
|
|
141
|
+
export declare class IIRLowPass extends IIRFilter21 {
|
|
123
142
|
/**
|
|
124
143
|
* @param sampleRate The signal's sample rate.
|
|
125
144
|
* @param freq The filter's corner frequency.
|
|
126
145
|
*/
|
|
127
146
|
constructor(sampleRate: number, freq: number);
|
|
128
147
|
}
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
constructor(filters: IIRFilter[]);
|
|
132
|
-
/** Returns a copy of this filter. */
|
|
133
|
-
clone(): IIRFilter;
|
|
134
|
-
getDelay(): number;
|
|
135
|
-
/**
|
|
136
|
-
* Filters the given samples in place.
|
|
137
|
-
* @param samples The samples to filter.
|
|
138
|
-
*/
|
|
139
|
-
inPlace(samples: Float32Array): void;
|
|
140
|
-
/** Filters an individual sample. */
|
|
141
|
-
add(sample: number): number;
|
|
142
|
-
/** Returns the value currently held by the filter. */
|
|
143
|
-
get value(): number;
|
|
144
|
-
/** Returns the phase shift at the given frequency. */
|
|
145
|
-
phaseShift(freq: number): number;
|
|
146
|
-
}
|
|
147
|
-
/** A chain of single-pole IIR low-pass filters. */
|
|
148
|
-
export declare class IIRLowPassChain extends IIRFilterChain {
|
|
148
|
+
/** A second-order IIR low-pass filter. */
|
|
149
|
+
export declare class IIRLowPass2 extends IIRFilter32 {
|
|
149
150
|
/**
|
|
150
|
-
* @param count Number of filters in the chain.
|
|
151
151
|
* @param sampleRate The signal's sample rate.
|
|
152
|
-
* @param freq The corner frequency
|
|
152
|
+
* @param freq The filter's corner frequency.
|
|
153
|
+
* @param Q The filter's Q factor.
|
|
153
154
|
*/
|
|
154
|
-
constructor(
|
|
155
|
+
constructor(sampleRate: number, freq: number, Q: number);
|
|
155
156
|
}
|
|
156
157
|
/**
|
|
157
158
|
* Shifts IQ samples by a given frequency.
|
|
@@ -163,35 +164,23 @@ export declare class FrequencyShifter {
|
|
|
163
164
|
private sine;
|
|
164
165
|
inPlace(I: Float32Array, Q: Float32Array, freq: number): void;
|
|
165
166
|
}
|
|
166
|
-
/**
|
|
167
|
-
export declare class
|
|
167
|
+
/** Detects a pilot tone and returns its cosine and sine as an IQ signal. */
|
|
168
|
+
export declare class PilotDetector {
|
|
168
169
|
private sampleRate;
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
private
|
|
176
|
-
private
|
|
177
|
-
private
|
|
178
|
-
private
|
|
179
|
-
private
|
|
180
|
-
private
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
private sqFlt;
|
|
184
|
-
private piFlt;
|
|
185
|
-
private pqFlt;
|
|
186
|
-
private lbI;
|
|
187
|
-
private lbQ;
|
|
188
|
-
private iMagFlt;
|
|
189
|
-
private bMagFlt;
|
|
190
|
-
cos: number;
|
|
191
|
-
sin: number;
|
|
192
|
-
locked: boolean;
|
|
193
|
-
add(sample: number): void;
|
|
194
|
-
addRemaining(sample: number): void;
|
|
170
|
+
private targetFreq;
|
|
171
|
+
constructor(sampleRate: number, targetFreq: number, tolerance: number);
|
|
172
|
+
private iqPool;
|
|
173
|
+
private downShifter;
|
|
174
|
+
private upShifter;
|
|
175
|
+
private filterI;
|
|
176
|
+
private filterQ;
|
|
177
|
+
private prev;
|
|
178
|
+
private tolerance;
|
|
179
|
+
private speedEstimate;
|
|
180
|
+
private speedDecay;
|
|
181
|
+
private isLocked;
|
|
182
|
+
get locked(): boolean;
|
|
183
|
+
extract(input: Float32Array): [Float32Array, Float32Array];
|
|
195
184
|
}
|
|
196
185
|
export {};
|
|
197
186
|
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -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,6 +12,7 @@
|
|
|
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 { Float32Pool, IqPool } from "./buffers.js";
|
|
15
16
|
import { atan2 } from "./math.js";
|
|
16
17
|
/** A class to apply a FIR filter to a sequence of samples. */
|
|
17
18
|
export class FIRFilter {
|
|
@@ -21,17 +22,19 @@ export class FIRFilter {
|
|
|
21
22
|
this.coefs = coefs;
|
|
22
23
|
this.offset = this.coefs.length - 1;
|
|
23
24
|
this.center = Math.floor(this.coefs.length / 2);
|
|
24
|
-
this.
|
|
25
|
+
this.pool = new Float32Pool(2, 2 * this.offset);
|
|
26
|
+
this.curSamples = this.pool.get(this.offset);
|
|
25
27
|
}
|
|
26
28
|
offset;
|
|
27
29
|
center;
|
|
30
|
+
pool;
|
|
28
31
|
curSamples;
|
|
29
32
|
setCoefficients(coefs) {
|
|
30
33
|
const oldSamples = this.curSamples;
|
|
31
34
|
this.coefs = coefs;
|
|
32
35
|
this.offset = this.coefs.length - 1;
|
|
33
36
|
this.center = Math.floor(this.coefs.length / 2);
|
|
34
|
-
this.curSamples =
|
|
37
|
+
this.curSamples = this.pool.get(this.offset);
|
|
35
38
|
this.loadSamples(oldSamples);
|
|
36
39
|
}
|
|
37
40
|
clone() {
|
|
@@ -59,7 +62,7 @@ export class FIRFilter {
|
|
|
59
62
|
loadSamples(samples) {
|
|
60
63
|
const len = samples.length + this.offset;
|
|
61
64
|
if (this.curSamples.length != len) {
|
|
62
|
-
let newSamples =
|
|
65
|
+
let newSamples = this.pool.get(len);
|
|
63
66
|
newSamples.set(this.curSamples.subarray(this.curSamples.length - this.offset));
|
|
64
67
|
this.curSamples = newSamples;
|
|
65
68
|
}
|
|
@@ -201,22 +204,16 @@ export function frequencyToTimeConstant(freq) {
|
|
|
201
204
|
/** IIR filter with two 'b' coefficients and one 'a' coefficient. */
|
|
202
205
|
class IIRFilter21 {
|
|
203
206
|
sampleRate;
|
|
204
|
-
b0;
|
|
205
|
-
b1;
|
|
206
|
-
a1;
|
|
207
207
|
constructor(sampleRate, b0, b1, a1) {
|
|
208
208
|
this.sampleRate = sampleRate;
|
|
209
|
-
this.
|
|
210
|
-
this.
|
|
211
|
-
this.a1 = a1;
|
|
212
|
-
this.prev = 0;
|
|
213
|
-
this.val = 0;
|
|
209
|
+
this.q = [b0, b1, a1];
|
|
210
|
+
this.v = [0, 0];
|
|
214
211
|
}
|
|
215
|
-
|
|
216
|
-
|
|
212
|
+
q;
|
|
213
|
+
v;
|
|
217
214
|
/** Returns a copy of this filter. */
|
|
218
215
|
clone() {
|
|
219
|
-
return new IIRFilter21(this.sampleRate, this.
|
|
216
|
+
return new IIRFilter21(this.sampleRate, ...this.q);
|
|
220
217
|
}
|
|
221
218
|
getDelay() {
|
|
222
219
|
return 0;
|
|
@@ -226,34 +223,133 @@ class IIRFilter21 {
|
|
|
226
223
|
* @param samples The samples to filter.
|
|
227
224
|
*/
|
|
228
225
|
inPlace(samples) {
|
|
229
|
-
let
|
|
230
|
-
let
|
|
226
|
+
let q = this.q;
|
|
227
|
+
let x1 = this.v[0];
|
|
228
|
+
let y1 = this.v[1];
|
|
231
229
|
for (let i = 0; i < samples.length; ++i) {
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
230
|
+
const x0 = samples[i];
|
|
231
|
+
samples[i] = y1 = q[0] * x0 + q[1] * x1 + q[2] * y1;
|
|
232
|
+
x1 = x0;
|
|
235
233
|
}
|
|
236
|
-
this.
|
|
237
|
-
this.
|
|
234
|
+
this.v[0] = x1;
|
|
235
|
+
this.v[1] = y1;
|
|
238
236
|
}
|
|
239
237
|
/** Filters an individual sample. */
|
|
240
238
|
add(sample) {
|
|
241
|
-
this.
|
|
242
|
-
|
|
243
|
-
|
|
239
|
+
this.v[1] =
|
|
240
|
+
this.q[0] * sample + this.q[1] * this.v[0] + this.q[2] * this.v[1];
|
|
241
|
+
this.v[0] = sample;
|
|
242
|
+
return this.v[1];
|
|
244
243
|
}
|
|
245
244
|
/** Returns the value currently held by the filter. */
|
|
246
245
|
get value() {
|
|
247
|
-
return this.
|
|
246
|
+
return this.v[1];
|
|
248
247
|
}
|
|
249
248
|
/** Returns the phase shift at the given angular frequency. */
|
|
250
249
|
phaseShift(freq) {
|
|
251
250
|
const w = (2 * Math.PI * freq) / this.sampleRate;
|
|
252
|
-
const real = Math.cos(w) * (this.
|
|
253
|
-
|
|
251
|
+
const real = Math.cos(w) * (this.q[1] - this.q[0] * this.q[2]) +
|
|
252
|
+
this.q[0] -
|
|
253
|
+
this.q[1] * this.q[2];
|
|
254
|
+
const imag = Math.sin(w) * (this.q[1] + this.q[0] * this.q[2]);
|
|
254
255
|
return atan2(imag, real);
|
|
255
256
|
}
|
|
256
257
|
}
|
|
258
|
+
/** IIR filter with three 'b' coefficients and two 'a' coefficient. */
|
|
259
|
+
class IIRFilter32 {
|
|
260
|
+
sampleRate;
|
|
261
|
+
constructor(sampleRate, b0, b1, b2, a1, a2) {
|
|
262
|
+
this.sampleRate = sampleRate;
|
|
263
|
+
this.q = [b0, b1, b2, a1, a2];
|
|
264
|
+
this.v = [0, 0, 0, 0];
|
|
265
|
+
}
|
|
266
|
+
q;
|
|
267
|
+
v;
|
|
268
|
+
/** Returns a copy of this filter. */
|
|
269
|
+
clone() {
|
|
270
|
+
return new IIRFilter32(this.sampleRate, ...this.q);
|
|
271
|
+
}
|
|
272
|
+
getDelay() {
|
|
273
|
+
return 0;
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Filters the given samples in place.
|
|
277
|
+
* @param samples The samples to filter.
|
|
278
|
+
*/
|
|
279
|
+
inPlace(samples) {
|
|
280
|
+
let q = this.q;
|
|
281
|
+
let x1 = this.v[0];
|
|
282
|
+
let x2 = this.v[1];
|
|
283
|
+
let y1 = this.v[2];
|
|
284
|
+
let y2 = this.v[3];
|
|
285
|
+
for (let i = 0; i < samples.length; ++i) {
|
|
286
|
+
let x0 = samples[i];
|
|
287
|
+
let y0 = (samples[i] =
|
|
288
|
+
q[0] * x0 + q[1] * x1 + q[2] * x2 + q[3] * y1 + q[4] * y2);
|
|
289
|
+
y2 = y1;
|
|
290
|
+
y1 = y0;
|
|
291
|
+
x2 = x1;
|
|
292
|
+
x1 = x0;
|
|
293
|
+
}
|
|
294
|
+
this.v[0] = x1;
|
|
295
|
+
this.v[1] = x2;
|
|
296
|
+
this.v[2] = y1;
|
|
297
|
+
this.v[3] = y2;
|
|
298
|
+
}
|
|
299
|
+
/** Filters an individual sample. */
|
|
300
|
+
add(sample) {
|
|
301
|
+
// b0*x0+b1*x1+b2*x2+a1*y1+a2*y2
|
|
302
|
+
let y0 = this.q[0] * sample +
|
|
303
|
+
this.q[1] * this.v[0] +
|
|
304
|
+
this.q[2] * this.v[1] +
|
|
305
|
+
this.q[3] * this.v[2] +
|
|
306
|
+
this.q[4] * this.v[3];
|
|
307
|
+
this.v[3] = this.v[2];
|
|
308
|
+
this.v[2] = y0;
|
|
309
|
+
this.v[1] = this.v[0];
|
|
310
|
+
this.v[0] = sample;
|
|
311
|
+
return y0;
|
|
312
|
+
}
|
|
313
|
+
/** Returns the value currently held by the filter. */
|
|
314
|
+
get value() {
|
|
315
|
+
return this.v[1];
|
|
316
|
+
}
|
|
317
|
+
/** Returns the phase shift at the given angular frequency. */
|
|
318
|
+
phaseShift(freq) {
|
|
319
|
+
const w = (2 * Math.PI * freq) / this.sampleRate;
|
|
320
|
+
const real = Math.cos(w) * (this.q[1] - this.q[0] * this.q[2]) +
|
|
321
|
+
this.q[0] -
|
|
322
|
+
this.q[1] * this.q[2];
|
|
323
|
+
const imag = Math.sin(w) * (this.q[1] + this.q[0] * this.q[2]);
|
|
324
|
+
return atan2(imag, real);
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
/** Returns the coefficients for a first-order low-pass IIR filter. */
|
|
328
|
+
function lowPassCoeffs21(sampleRate, timeConstant) {
|
|
329
|
+
const wd = 1 / (timeConstant * sampleRate);
|
|
330
|
+
const wa = 2 * sampleRate * Math.tan(wd / 2);
|
|
331
|
+
const tau = 1 / wa;
|
|
332
|
+
let a = 1 + 2 * tau * sampleRate;
|
|
333
|
+
let b = 1 - 2 * tau * sampleRate;
|
|
334
|
+
return [1 / a, 1 / a, -b / a];
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Returns the coefficients for a second-order low-pass IIR filter.
|
|
338
|
+
*
|
|
339
|
+
* From https://webaudio.github.io/Audio-EQ-Cookbook/Audio-EQ-Cookbook.txt
|
|
340
|
+
*/
|
|
341
|
+
function lowPassCoeffs32(sampleRate, frequency, Q) {
|
|
342
|
+
let w = (2 * Math.PI * frequency) / sampleRate;
|
|
343
|
+
let alpha = Math.sin(w) / (2 * Q);
|
|
344
|
+
let b0 = (1 - Math.cos(w)) / 2;
|
|
345
|
+
let b1 = 1 - Math.cos(w);
|
|
346
|
+
let b2 = (1 - Math.cos(w)) / 2;
|
|
347
|
+
;
|
|
348
|
+
let a0 = 1 + alpha;
|
|
349
|
+
let a1 = -2 * Math.cos(w);
|
|
350
|
+
let a2 = 1 - alpha;
|
|
351
|
+
return [b0 / a0, b1 / a0, b2 / a0, -a1 / a0, -a2 / a0];
|
|
352
|
+
}
|
|
257
353
|
/** A FM de-emphasis filter. */
|
|
258
354
|
export class Deemphasis extends IIRFilter21 {
|
|
259
355
|
/**
|
|
@@ -261,12 +357,7 @@ export class Deemphasis extends IIRFilter21 {
|
|
|
261
357
|
* @param timeConstant The filter's time constant, in seconds.
|
|
262
358
|
*/
|
|
263
359
|
constructor(sampleRate, timeConstant) {
|
|
264
|
-
|
|
265
|
-
const wa = 2 * sampleRate * Math.tan(wd / 2);
|
|
266
|
-
const tau = 1 / wa;
|
|
267
|
-
let a = 1 + 2 * tau * sampleRate;
|
|
268
|
-
let b = 1 - 2 * tau * sampleRate;
|
|
269
|
-
super(sampleRate, 1 / a, 1 / a, -b / a);
|
|
360
|
+
super(sampleRate, ...lowPassCoeffs21(sampleRate, timeConstant));
|
|
270
361
|
}
|
|
271
362
|
}
|
|
272
363
|
/** A FM pre-emphasis filter. */
|
|
@@ -288,68 +379,25 @@ export class Preemphasis extends IIRFilter21 {
|
|
|
288
379
|
super(sampleRate, a / (c * zg), b / (c * zg), -d / c);
|
|
289
380
|
}
|
|
290
381
|
}
|
|
291
|
-
/** A
|
|
292
|
-
export class IIRLowPass extends
|
|
382
|
+
/** A first-order IIR low-pass filter. */
|
|
383
|
+
export class IIRLowPass extends IIRFilter21 {
|
|
293
384
|
/**
|
|
294
385
|
* @param sampleRate The signal's sample rate.
|
|
295
386
|
* @param freq The filter's corner frequency.
|
|
296
387
|
*/
|
|
297
388
|
constructor(sampleRate, freq) {
|
|
298
|
-
super(sampleRate, frequencyToTimeConstant(freq));
|
|
299
|
-
}
|
|
300
|
-
}
|
|
301
|
-
class IIRFilterChain {
|
|
302
|
-
filters;
|
|
303
|
-
constructor(filters) {
|
|
304
|
-
this.filters = filters;
|
|
305
|
-
}
|
|
306
|
-
/** Returns a copy of this filter. */
|
|
307
|
-
clone() {
|
|
308
|
-
return new IIRFilterChain(this.filters.map((f) => f.clone()));
|
|
309
|
-
}
|
|
310
|
-
getDelay() {
|
|
311
|
-
return 0;
|
|
312
|
-
}
|
|
313
|
-
/**
|
|
314
|
-
* Filters the given samples in place.
|
|
315
|
-
* @param samples The samples to filter.
|
|
316
|
-
*/
|
|
317
|
-
inPlace(samples) {
|
|
318
|
-
for (let f of this.filters) {
|
|
319
|
-
f.inPlace(samples);
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
/** Filters an individual sample. */
|
|
323
|
-
add(sample) {
|
|
324
|
-
for (let f of this.filters) {
|
|
325
|
-
sample = f.add(sample);
|
|
326
|
-
}
|
|
327
|
-
return sample;
|
|
328
|
-
}
|
|
329
|
-
/** Returns the value currently held by the filter. */
|
|
330
|
-
get value() {
|
|
331
|
-
return this.filters[this.filters.length - 1].value;
|
|
332
|
-
}
|
|
333
|
-
/** Returns the phase shift at the given frequency. */
|
|
334
|
-
phaseShift(freq) {
|
|
335
|
-
let lag = 0;
|
|
336
|
-
for (let f of this.filters) {
|
|
337
|
-
lag += f.phaseShift(freq);
|
|
338
|
-
}
|
|
339
|
-
return ((lag + Math.PI) % (2 * Math.PI)) - Math.PI;
|
|
389
|
+
super(sampleRate, ...lowPassCoeffs21(sampleRate, frequencyToTimeConstant(freq)));
|
|
340
390
|
}
|
|
341
391
|
}
|
|
342
|
-
/** A
|
|
343
|
-
export class
|
|
392
|
+
/** A second-order IIR low-pass filter. */
|
|
393
|
+
export class IIRLowPass2 extends IIRFilter32 {
|
|
344
394
|
/**
|
|
345
|
-
* @param count Number of filters in the chain.
|
|
346
395
|
* @param sampleRate The signal's sample rate.
|
|
347
|
-
* @param freq The corner frequency
|
|
396
|
+
* @param freq The filter's corner frequency.
|
|
397
|
+
* @param Q The filter's Q factor.
|
|
348
398
|
*/
|
|
349
|
-
constructor(
|
|
350
|
-
|
|
351
|
-
let filters = Array.from({ length: count }).map((_) => new IIRLowPass(sampleRate, cf));
|
|
352
|
-
super(filters);
|
|
399
|
+
constructor(sampleRate, freq, Q) {
|
|
400
|
+
super(sampleRate, ...lowPassCoeffs32(sampleRate, freq, Q));
|
|
353
401
|
}
|
|
354
402
|
}
|
|
355
403
|
/**
|
|
@@ -381,106 +429,72 @@ export class FrequencyShifter {
|
|
|
381
429
|
this.sine = sine;
|
|
382
430
|
}
|
|
383
431
|
}
|
|
384
|
-
/**
|
|
385
|
-
export class
|
|
432
|
+
/** Detects a pilot tone and returns its cosine and sine as an IQ signal. */
|
|
433
|
+
export class PilotDetector {
|
|
386
434
|
sampleRate;
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
* @param freq The frequency of the signal to detect, in Hz.
|
|
390
|
-
* @param tolerance The frequency tolerance for the signal, in Hz.
|
|
391
|
-
*/
|
|
392
|
-
constructor(sampleRate, freq, tolerance) {
|
|
435
|
+
targetFreq;
|
|
436
|
+
constructor(sampleRate, targetFreq, tolerance) {
|
|
393
437
|
this.sampleRate = sampleRate;
|
|
394
|
-
this.
|
|
395
|
-
this.
|
|
396
|
-
this.
|
|
397
|
-
this.
|
|
398
|
-
this.
|
|
399
|
-
this.
|
|
400
|
-
this.
|
|
401
|
-
this.
|
|
402
|
-
this.
|
|
403
|
-
this.
|
|
404
|
-
this.
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
let
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
this.
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
// The beat is going to lag or advance wrt the input because of the input filter chain
|
|
455
|
-
// Compute (sI, sQ), the average phase speed of (bI, bQ). That's the difference in frequency.
|
|
456
|
-
// rs = b * conj(lb)
|
|
457
|
-
const rsI = this.lbI * bI + this.lbQ * bQ;
|
|
458
|
-
const rsQ = this.lbI * bQ - bI * this.lbQ;
|
|
459
|
-
const sI = this.siFlt.add(rsI);
|
|
460
|
-
const sQ = this.sqFlt.add(rsQ);
|
|
461
|
-
this.lbI = bI;
|
|
462
|
-
this.lbQ = bQ;
|
|
463
|
-
const beatSpeed = atan2(sQ, sI);
|
|
464
|
-
const speedCorr = Math.max(-this.maxSpeedCorr, Math.min(beatSpeed, this.maxSpeedCorr));
|
|
465
|
-
this.speedCorrection += speedCorr;
|
|
466
|
-
// Compute (dI, dQ), the difference between the beat (bI, bQ) and our speed correction (cI, cQ)
|
|
467
|
-
// That's the difference in phase.
|
|
468
|
-
const cI = Math.cos(this.speedCorrection);
|
|
469
|
-
const cQ = Math.sin(this.speedCorrection);
|
|
470
|
-
// rd = b * conj(c)
|
|
471
|
-
const rdI = bI * cI + bQ * cQ;
|
|
472
|
-
const rdQ = cI * bQ - bI * cQ;
|
|
473
|
-
const dI = this.piFlt.add(rdI);
|
|
474
|
-
const dQ = this.pqFlt.add(rdQ);
|
|
475
|
-
// But the biFlt/bqFlt are going to shift the phase of (bI, bQ), so compensate for that.
|
|
476
|
-
const freqCorrectionHz = (speedCorr * this.sampleRate) / (2 * Math.PI);
|
|
477
|
-
const shift = this.biFlt.phaseShift(freqCorrectionHz);
|
|
478
|
-
const phaseDiff = atan2(dQ, dI) + shift;
|
|
479
|
-
this.phaseCorrection = phaseDiff;
|
|
480
|
-
// Check if we are locked
|
|
481
|
-
let mag = this.iMagFlt.add(Math.abs(sample));
|
|
482
|
-
let bimag = this.bMagFlt.add(Math.hypot(bI, bQ) * 2);
|
|
483
|
-
this.locked = bimag > mag / 15;
|
|
438
|
+
this.targetFreq = targetFreq;
|
|
439
|
+
this.iqPool = new IqPool(2);
|
|
440
|
+
this.downShifter = new FrequencyShifter(sampleRate);
|
|
441
|
+
this.upShifter = new FrequencyShifter(sampleRate);
|
|
442
|
+
this.filterI = new IIRLowPass2(sampleRate, tolerance * 100, 1);
|
|
443
|
+
this.filterQ = this.filterI.clone();
|
|
444
|
+
this.prev = [1, 0];
|
|
445
|
+
this.tolerance = (2 * Math.PI * tolerance) / sampleRate;
|
|
446
|
+
this.speedEstimate = 0;
|
|
447
|
+
this.speedDecay = decay(sampleRate, 0.25);
|
|
448
|
+
this.isLocked = false;
|
|
449
|
+
}
|
|
450
|
+
iqPool;
|
|
451
|
+
downShifter;
|
|
452
|
+
upShifter;
|
|
453
|
+
filterI;
|
|
454
|
+
filterQ;
|
|
455
|
+
prev;
|
|
456
|
+
tolerance;
|
|
457
|
+
speedEstimate;
|
|
458
|
+
speedDecay;
|
|
459
|
+
isLocked;
|
|
460
|
+
get locked() {
|
|
461
|
+
return this.isLocked;
|
|
462
|
+
}
|
|
463
|
+
extract(input) {
|
|
464
|
+
const speedDecay = this.speedDecay;
|
|
465
|
+
let lI = this.prev[0];
|
|
466
|
+
let lQ = this.prev[1];
|
|
467
|
+
let speedEstimate = this.speedEstimate;
|
|
468
|
+
let out = this.iqPool.get(input.length);
|
|
469
|
+
const I = out[0];
|
|
470
|
+
const Q = out[1];
|
|
471
|
+
I.set(input);
|
|
472
|
+
Q.fill(0);
|
|
473
|
+
this.downShifter.inPlace(I, Q, -this.targetFreq);
|
|
474
|
+
this.filterI.inPlace(I);
|
|
475
|
+
this.filterQ.inPlace(Q);
|
|
476
|
+
for (let i = 0; i < I.length; ++i) {
|
|
477
|
+
const m = Math.hypot(I[i], Q[i]);
|
|
478
|
+
if (m > 0) {
|
|
479
|
+
I[i] /= m;
|
|
480
|
+
Q[i] /= m;
|
|
481
|
+
speedEstimate +=
|
|
482
|
+
speedDecay *
|
|
483
|
+
(atan2(Q[i] * lI - I[i] * lQ, I[i] * lI + Q[i] * lQ) - speedEstimate);
|
|
484
|
+
}
|
|
485
|
+
else {
|
|
486
|
+
speedEstimate += speedDecay * (2 * this.tolerance - speedEstimate);
|
|
487
|
+
}
|
|
488
|
+
lI = I[i];
|
|
489
|
+
lQ = Q[i];
|
|
490
|
+
}
|
|
491
|
+
this.upShifter.inPlace(I, Q, this.targetFreq);
|
|
492
|
+
this.prev[0] = lI;
|
|
493
|
+
this.prev[1] = lQ;
|
|
494
|
+
this.speedEstimate = speedEstimate;
|
|
495
|
+
this.isLocked =
|
|
496
|
+
speedEstimate >= -this.tolerance && speedEstimate <= this.tolerance;
|
|
497
|
+
return out;
|
|
484
498
|
}
|
|
485
499
|
}
|
|
486
500
|
//# sourceMappingURL=filters.js.map
|
package/dist/dsp/filters.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/dsp/filters.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"filters.js","sourceRoot":"","sources":["../../src/dsp/filters.ts"],"names":[],"mappings":"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"}
|
|
@@ -12,7 +12,10 @@ export interface SignalSource<ParameterKey extends string = string> {
|
|
|
12
12
|
* Returns the actual center frequency, which may differ.
|
|
13
13
|
*/
|
|
14
14
|
setCenterFrequency(freq: number): Promise<number>;
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Sets the value of a parameter.
|
|
17
|
+
* Returns the actual value, or void if the parameter does not exist.
|
|
18
|
+
*/
|
|
16
19
|
setParameter<V>(parameter: ParameterKey, value: V): Promise<V | void>;
|
|
17
20
|
/**
|
|
18
21
|
* Prepares the source to start streaming samples.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"signal_source.d.ts","sourceRoot":"","sources":["../../src/radio/signal_source.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qCAAqC;AACrC,MAAM,WAAW,YAAY,CAAC,YAAY,SAAS,MAAM,GAAG,MAAM;IAChE;;;;OAIG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD
|
|
1
|
+
{"version":3,"file":"signal_source.d.ts","sourceRoot":"","sources":["../../src/radio/signal_source.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,qCAAqC;AACrC,MAAM,WAAW,YAAY,CAAC,YAAY,SAAS,MAAM,GAAG,MAAM;IAChE;;;;OAIG;IACH,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IACnD;;;OAGG;IACH,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAClD;;;OAGG;IACH,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IACtE;;;OAGG;IACH,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAChC;;;;;OAKG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAClD,oCAAoC;IACpC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,gEAAgE;AAChE,MAAM,WAAW,oBAAoB;IACnC,+BAA+B;IAC/B,GAAG,IAAI,OAAO,CAAC,YAAY,CAAC,CAAC;CAC9B"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { RealTimeSource } from "./realtime.js";
|
|
2
|
+
/**
|
|
3
|
+
* A function that generates samples.
|
|
4
|
+
* @param firstSample The first sample's number.
|
|
5
|
+
* @param sampleRate The sample rate.
|
|
6
|
+
* @param centerFrequency The signal's center frequency.
|
|
7
|
+
* @param I An array to be populated with the I component values.
|
|
8
|
+
* @param Q An array to be populated with the Q component values.
|
|
9
|
+
*/
|
|
10
|
+
export type SampleGenerator = (firstSample: number, sampleRate: number, centerFrequency: number, I: Float32Array, Q: Float32Array) => void;
|
|
11
|
+
/** A SignalSource that gets samples from a SampleGenerator function in real time. */
|
|
12
|
+
export declare class GeneratedSource extends RealTimeSource {
|
|
13
|
+
private generator;
|
|
14
|
+
constructor(generator: SampleGenerator);
|
|
15
|
+
protected getSamples(firstSample: number, I: Float32Array, Q: Float32Array): void;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated.d.ts","sourceRoot":"","sources":["../../src/sources/generated.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,WAAW,EAAE,MAAM,EACnB,UAAU,EAAE,MAAM,EAClB,eAAe,EAAE,MAAM,EACvB,CAAC,EAAE,YAAY,EACf,CAAC,EAAE,YAAY,KACZ,IAAI,CAAC;AAEV,qFAAqF;AACrF,qBAAa,eAAgB,SAAQ,cAAc;IACrC,OAAO,CAAC,SAAS;gBAAT,SAAS,EAAE,eAAe;IAI9C,SAAS,CAAC,UAAU,CAClB,WAAW,EAAE,MAAM,EACnB,CAAC,EAAE,YAAY,EACf,CAAC,EAAE,YAAY,GACd,IAAI;CAGR"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
// Copyright 2025 Jacobo Tarrio Barreiro. All rights reserved.
|
|
2
|
+
//
|
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
// you may not use this file except in compliance with the License.
|
|
5
|
+
// You may obtain a copy of the License at
|
|
6
|
+
//
|
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
//
|
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
// See the License for the specific language governing permissions and
|
|
13
|
+
// limitations under the License.
|
|
14
|
+
import { RealTimeSource } from "./realtime.js";
|
|
15
|
+
/** A SignalSource that gets samples from a SampleGenerator function in real time. */
|
|
16
|
+
export class GeneratedSource extends RealTimeSource {
|
|
17
|
+
generator;
|
|
18
|
+
constructor(generator) {
|
|
19
|
+
super();
|
|
20
|
+
this.generator = generator;
|
|
21
|
+
}
|
|
22
|
+
getSamples(firstSample, I, Q) {
|
|
23
|
+
this.generator(firstSample, this.sampleRate, this.centerFrequency, I, Q);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generated.js","sourceRoot":"","sources":["../../src/sources/generated.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAkB/C,qFAAqF;AACrF,MAAM,OAAO,eAAgB,SAAQ,cAAc;IAC7B;IAApB,YAAoB,SAA0B;QAC5C,KAAK,EAAE,CAAC;QADU,cAAS,GAAT,SAAS,CAAiB;IAE9C,CAAC;IAES,UAAU,CAClB,WAAmB,EACnB,CAAe,EACf,CAAe;QAEf,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3E,CAAC;CACF"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { SampleGenerator } from "./
|
|
1
|
+
import { SampleGenerator } from "./generated.js";
|
|
2
2
|
/** Returns a generator for a tone at the given frequency with the given amplitude. */
|
|
3
3
|
export declare function tone(freq: number, amplitude: number, phase?: number): SampleGenerator;
|
|
4
4
|
/** Returns a generator for noise with a given maximum amplitude. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../src/sources/generators.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"generators.d.ts","sourceRoot":"","sources":["../../src/sources/generators.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,sFAAsF;AACtF,wBAAgB,IAAI,CAClB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,EACjB,KAAK,CAAC,EAAE,MAAM,GACb,eAAe,CA8BjB;AAED,oEAAoE;AACpE,wBAAgB,KAAK,CACnB,SAAS,EAAE,MAAM,EACjB,MAAM,CAAC,EAAE,MAAM,MAAM,GACpB,eAAe,CAgBjB;AAED,yFAAyF;AACzF,wBAAgB,GAAG,CAAC,GAAG,UAAU,EAAE,eAAe,EAAE,GAAG,eAAe,CAoBrE;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CACrB,OAAO,EAAE,eAAe,EACxB,MAAM,EAAE,eAAe,GACtB,eAAe,CAqBjB;AAED;;GAEG;AACH,wBAAgB,OAAO,CACrB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,eAAe,GACtB,eAAe,CAcjB;AAED,2DAA2D;AAC3D,wBAAgB,IAAI,CAAC,MAAM,EAAE,eAAe,GAAG,eAAe,CAW7D;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,eAAe,CAyBjB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CACxB,WAAW,EAAE,MAAM,EACnB,gBAAgB,EAAE,MAAM,EACxB,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,eAAe,CAgCjB;AAqED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,eAAe,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,CAAC;AACnB,wBAAgB,UAAU,CACxB,IAAI,EAAE,eAAe,EACrB,KAAK,EAAE,eAAe,EACtB,QAAQ,CAAC,EAAE,MAAM,GAChB,eAAe,CAAC"}
|
|
@@ -1,26 +1,18 @@
|
|
|
1
1
|
import { SampleBlock } from "../radio/sample_block.js";
|
|
2
2
|
import { SignalSource } from "../radio/signal_source.js";
|
|
3
3
|
/**
|
|
4
|
-
* A
|
|
5
|
-
* @param startSample The first sample's number.
|
|
6
|
-
* @param sampleRate The sample rate.
|
|
7
|
-
* @param centerFrequency The signal's center frequency.
|
|
8
|
-
* @param I An array to be populated with the I component values.
|
|
9
|
-
* @param Q An array to be populated with the Q component values.
|
|
10
|
-
*/
|
|
11
|
-
export type SampleGenerator = (startSample: number, sampleRate: number, centerFrequency: number, I: Float32Array, Q: Float32Array) => void;
|
|
12
|
-
/**
|
|
13
|
-
* A SignalSource that gets samples from a SampleGenerator function in real time.
|
|
4
|
+
* A SignalSource that outputs samples in real time.
|
|
14
5
|
*
|
|
15
|
-
* This source holds a small buffer that it feeds by calling the
|
|
16
|
-
*
|
|
17
|
-
*
|
|
6
|
+
* This source holds a small buffer that it feeds by calling the getSamples() method.
|
|
7
|
+
* Then, at periodic intervals, it checks if there are any pending reads and resolves
|
|
8
|
+
* them with the contents of the buffer, refilling it as needed.
|
|
18
9
|
*/
|
|
19
10
|
export declare class RealTimeSource implements SignalSource {
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
11
|
+
constructor();
|
|
12
|
+
/** The source's sample rate. */
|
|
13
|
+
protected sampleRate: number;
|
|
14
|
+
/** The source's center frequency. */
|
|
15
|
+
protected centerFrequency: number;
|
|
24
16
|
private I;
|
|
25
17
|
private Q;
|
|
26
18
|
private lastSampleInBuffer;
|
|
@@ -29,6 +21,9 @@ export declare class RealTimeSource implements SignalSource {
|
|
|
29
21
|
private pendingReads;
|
|
30
22
|
private running;
|
|
31
23
|
private firstTs;
|
|
24
|
+
/**
|
|
25
|
+
* Fills the provided I and Q arrays with samples starting at the given firstSample number. */
|
|
26
|
+
protected getSamples(firstSample: number, I: Float32Array, Q: Float32Array): void;
|
|
32
27
|
setParameter<V>(_property: string, _value: V): Promise<void | V>;
|
|
33
28
|
setSampleRate(sampleRate: number): Promise<number>;
|
|
34
29
|
setCenterFrequency(freq: number): Promise<number>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/sources/realtime.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD
|
|
1
|
+
{"version":3,"file":"realtime.d.ts","sourceRoot":"","sources":["../../src/sources/realtime.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,YAAY;;IAcjD,gCAAgC;IAChC,SAAS,CAAC,UAAU,EAAE,MAAM,CAAC;IAC7B,qCAAqC;IACrC,SAAS,CAAC,eAAe,EAAE,MAAM,CAAC;IAElC,OAAO,CAAC,CAAC,CAAoB;IAC7B,OAAO,CAAC,CAAC,CAAoB;IAC7B,OAAO,CAAC,kBAAkB,CAAS;IACnC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAAkB;IACtC,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,OAAO,CAAgB;IAE/B;kGAC8F;IAC9F,SAAS,CAAC,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY;IAKpE,YAAY,CAAC,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,GAAG,CAAC,CAAC;IAEhE,aAAa,CAAC,UAAU,EAAE,MAAM;IAOhC,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKjD,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC;IAOrC,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAK5B,gCAAgC;IAChC,OAAO,CAAC,QAAQ;IAIhB,8FAA8F;IAC9F,OAAO,CAAC,KAAK;IAuCb,6DAA6D;IAC7D,OAAO,CAAC,UAAU;CAyBnB"}
|
package/dist/sources/realtime.js
CHANGED
|
@@ -14,16 +14,14 @@
|
|
|
14
14
|
import { Float32RingBuffer, IqPool } from "../dsp/buffers.js";
|
|
15
15
|
import { PendingReadRing } from "./read_ring.js";
|
|
16
16
|
/**
|
|
17
|
-
* A SignalSource that
|
|
17
|
+
* A SignalSource that outputs samples in real time.
|
|
18
18
|
*
|
|
19
|
-
* This source holds a small buffer that it feeds by calling the
|
|
20
|
-
*
|
|
21
|
-
*
|
|
19
|
+
* This source holds a small buffer that it feeds by calling the getSamples() method.
|
|
20
|
+
* Then, at periodic intervals, it checks if there are any pending reads and resolves
|
|
21
|
+
* them with the contents of the buffer, refilling it as needed.
|
|
22
22
|
*/
|
|
23
23
|
export class RealTimeSource {
|
|
24
|
-
|
|
25
|
-
constructor(generator) {
|
|
26
|
-
this.generator = generator;
|
|
24
|
+
constructor() {
|
|
27
25
|
this.sampleRate = 1024000;
|
|
28
26
|
this.centerFrequency = 0;
|
|
29
27
|
this.I = new Float32RingBuffer(Math.max(65536, this.sampleRate / 10));
|
|
@@ -35,7 +33,9 @@ export class RealTimeSource {
|
|
|
35
33
|
this.running = false;
|
|
36
34
|
this.firstTs = null;
|
|
37
35
|
}
|
|
36
|
+
/** The source's sample rate. */
|
|
38
37
|
sampleRate;
|
|
38
|
+
/** The source's center frequency. */
|
|
39
39
|
centerFrequency;
|
|
40
40
|
I;
|
|
41
41
|
Q;
|
|
@@ -45,6 +45,12 @@ export class RealTimeSource {
|
|
|
45
45
|
pendingReads;
|
|
46
46
|
running;
|
|
47
47
|
firstTs;
|
|
48
|
+
/**
|
|
49
|
+
* Fills the provided I and Q arrays with samples starting at the given firstSample number. */
|
|
50
|
+
getSamples(firstSample, I, Q) {
|
|
51
|
+
I.fill(0);
|
|
52
|
+
Q.fill(0);
|
|
53
|
+
}
|
|
48
54
|
async setParameter(_property, _value) { }
|
|
49
55
|
async setSampleRate(sampleRate) {
|
|
50
56
|
this.sampleRate = sampleRate;
|
|
@@ -127,7 +133,7 @@ export class RealTimeSource {
|
|
|
127
133
|
if (fillCount == 0)
|
|
128
134
|
return;
|
|
129
135
|
let [I, Q] = this.inPool.get(fillCount);
|
|
130
|
-
this.
|
|
136
|
+
this.getSamples(fillStart, I, Q);
|
|
131
137
|
this.I.store(I);
|
|
132
138
|
this.Q.store(Q);
|
|
133
139
|
this.lastSampleInBuffer = fillStart + fillCount;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../src/sources/realtime.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAG9D,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"realtime.js","sourceRoot":"","sources":["../../src/sources/realtime.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED