@jtarrio/signals 0.9.7 → 0.9.8

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.
@@ -1 +1 @@
1
- {"version":3,"file":"demod-wbfm.d.ts","sourceRoot":"","sources":["../../src/demod/demod-wbfm.ts"],"names":[],"mappings":"AA8BA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,gCAAgC;AAChC,MAAM,MAAM,QAAQ,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3D,6BAA6B;AAC7B,MAAM,MAAM,WAAW,GAAG;IACxB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wFAAwF;IACxF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,6CAA6C;AAC7C,qBAAa,SAAU,YAAW,KAAK,CAAC,QAAQ,CAAC;IAU7C,OAAO,CAAC,IAAI;IATd;;;;;OAKG;gBAED,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACP,IAAI,EAAE,QAAQ,EACtB,OAAO,CAAC,EAAE,WAAW;IAOvB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO,IAAI,QAAQ;IAInB,OAAO,CAAC,IAAI,EAAE,QAAQ;IAMtB;;;;;;OAMG;IACH,UAAU,CACR,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,MAAM,GACjB,WAAW;CAOf;AAED;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,KAAK,CAAC,QAAQ,CAAC;IASnD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IATd;;;;;OAKG;gBAED,MAAM,EAAE,MAAM,EACN,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,QAAQ,EACtB,OAAO,CAAC,EAAE,WAAW;IAoBvB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,WAAW,CAAC,CAAqB;IACzC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,WAAW,CAAgB;IAEnC,OAAO,IAAI,QAAQ;IAInB,OAAO,CAAC,IAAI,EAAE,QAAQ;IAItB;;;;;;OAMG;IACH,UAAU,CACR,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,MAAM,GACjB,WAAW;CAgBf;AAED;;;;KAIK;AACL,qBAAa,eAAgB,YAAW,KAAK,CAAC,QAAQ,CAAC;IAUnD,OAAO,CAAC,IAAI;IATd;;;;;OAKG;gBAED,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACP,IAAI,EAAE,QAAQ,EACtB,OAAO,CAAC,EAAE,WAAW;IAiBvB,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,aAAa,CAAkB;IACvC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,OAAO,CAAc;IAE7B,OAAO,IAAI,QAAQ;IAInB,OAAO,CAAC,IAAI,EAAE,QAAQ;IAItB;;;;OAIG;IACH,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW;CAkChD;AAED,sCAAsC;AACtC,qBAAa,UAAW,SAAQ,YAAY,CAAC,QAAQ,CAAC;gBACxC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAGnC,SAAS,CAAC,MAAM,IAAI,QAAQ;IAG5B,SAAS,IAAI,OAAO;IAGpB,SAAS,IAAI,OAAO;IAGpB,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU;IAItC,YAAY,IAAI,MAAM;CAGvB"}
1
+ {"version":3,"file":"demod-wbfm.d.ts","sourceRoot":"","sources":["../../src/demod/demod-wbfm.ts"],"names":[],"mappings":"AAmCA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9D,gCAAgC;AAChC,MAAM,MAAM,QAAQ,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3D,6BAA6B;AAC7B,MAAM,MAAM,WAAW,GAAG;IACxB;;;;OAIG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,wFAAwF;IACxF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wFAAwF;IACxF,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,CAAC;AAEF,6CAA6C;AAC7C,qBAAa,SAAU,YAAW,KAAK,CAAC,QAAQ,CAAC;IAU7C,OAAO,CAAC,IAAI;IATd;;;;;OAKG;gBAED,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACP,IAAI,EAAE,QAAQ,EACtB,OAAO,CAAC,EAAE,WAAW;IAOvB,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,MAAM,CAAkB;IAEhC,OAAO,IAAI,QAAQ;IAInB,OAAO,CAAC,IAAI,EAAE,QAAQ;IAMtB;;;;;;OAMG;IACH,UAAU,CACR,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,MAAM,GACjB,WAAW;CAOf;AAED;;;;GAIG;AACH,qBAAa,eAAgB,YAAW,KAAK,CAAC,QAAQ,CAAC;IASnD,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IATd;;;;;OAKG;gBAED,MAAM,EAAE,MAAM,EACN,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,QAAQ,EACtB,OAAO,CAAC,EAAE,WAAW;IAoBvB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,WAAW,CAAC,CAAqB;IACzC,OAAO,CAAC,MAAM,CAAW;IACzB,OAAO,CAAC,WAAW,CAAgB;IAEnC,OAAO,IAAI,QAAQ;IAInB,OAAO,CAAC,IAAI,EAAE,QAAQ;IAItB;;;;;;OAMG;IACH,UAAU,CACR,QAAQ,EAAE,YAAY,EACtB,QAAQ,EAAE,YAAY,EACtB,UAAU,EAAE,MAAM,GACjB,WAAW;CAgBf;AAED;;;;KAIK;AACL,qBAAa,eAAgB,YAAW,KAAK,CAAC,QAAQ,CAAC;IAUnD,OAAO,CAAC,IAAI;IATd;;;;;OAKG;gBAED,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACP,IAAI,EAAE,QAAQ,EACtB,OAAO,CAAC,EAAE,WAAW;IAoBvB,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,WAAW,CAAa;IAChC,OAAO,CAAC,OAAO,CAAc;IAE7B,OAAO,IAAI,QAAQ;IAInB,OAAO,CAAC,IAAI,EAAE,QAAQ;IAItB;;;;OAIG;IACH,UAAU,CAAC,QAAQ,EAAE,YAAY,GAAG,WAAW;CAkChD;AAED,sCAAsC;AACtC,qBAAa,UAAW,SAAQ,YAAY,CAAC,QAAQ,CAAC;gBACxC,IAAI,EAAE,QAAQ,GAAG,MAAM;IAGnC,SAAS,CAAC,MAAM,IAAI,QAAQ;IAG5B,SAAS,IAAI,OAAO;IAGpB,SAAS,IAAI,OAAO;IAGpB,SAAS,CAAC,MAAM,EAAE,OAAO,GAAG,UAAU;IAItC,YAAY,IAAI,MAAM;CAGvB"}
@@ -17,7 +17,7 @@ import { makeLowPassKernel } from "../dsp/coefficients.js";
17
17
  import { FMDemodulator, StereoSeparator } from "../dsp/demodulators.js";
18
18
  import { Deemphasis, FrequencyShifter, IqFFTFilter, IqFIRFilter, } from "../dsp/filters.js";
19
19
  import { getPower } from "../dsp/power.js";
20
- import { ComplexDownsampler, RealDownsampler } from "../dsp/resamplers.js";
20
+ import { ComplexDownsampler, getRealResampler, } from "../dsp/resamplers.js";
21
21
  import { Configurator } from "./modes.js";
22
22
  /** A demodulator for wideband FM signals. */
23
23
  export class DemodWBFM {
@@ -142,9 +142,12 @@ export class DemodWBFMStage2 {
142
142
  1e6;
143
143
  const audioTaps = options?.audioTaps || 41;
144
144
  const filterF = Math.min(15000, outRate / 2);
145
- const kernel = makeLowPassKernel(inRate, filterF, audioTaps, 1 / 0.9);
146
- this.monoSampler = new RealDownsampler(inRate, outRate, kernel);
147
- this.stereoSampler = new RealDownsampler(inRate, outRate, kernel);
145
+ this.monoSampler = getRealResampler(inRate, outRate, {
146
+ lowPassFrequency: filterF,
147
+ taps: audioTaps,
148
+ gain: 1 / 0.9,
149
+ });
150
+ this.stereoSampler = this.monoSampler.clone();
148
151
  this.stereoSeparator = new StereoSeparator(inRate, pilotF);
149
152
  this.leftDeemph = new Deemphasis(outRate, deemphTc);
150
153
  this.rightDeemph = new Deemphasis(outRate, deemphTc);
@@ -168,11 +171,11 @@ export class DemodWBFMStage2 {
168
171
  * @returns The demodulated audio signal.
169
172
  */
170
173
  demodulate(samplesI) {
171
- let audio = this.monoSampler.downsample(samplesI);
174
+ let audio = this.monoSampler.resample(samplesI);
172
175
  if (this.mode.stereo) {
173
176
  const stereo = this.stereoSeparator.separate(samplesI);
174
177
  if (stereo.found) {
175
- const diffAudio = this.stereoSampler.downsample(stereo.diff);
178
+ const diffAudio = this.stereoSampler.resample(stereo.diff);
176
179
  let leftAudio = this.outPool.get(audio.length);
177
180
  let rightAudio = audio;
178
181
  for (let i = 0; i < diffAudio.length; ++i) {
@@ -1 +1 @@
1
- {"version":3,"file":"demod-wbfm.js","sourceRoot":"","sources":["../../src/demod/demod-wbfm.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"demod-wbfm.js","sourceRoot":"","sources":["../../src/demod/demod-wbfm.ts"],"names":[],"mappings":"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"}
@@ -1,41 +1,74 @@
1
- /** A class to convert a real input to a lower sample rate. */
2
- export declare class RealDownsampler {
1
+ /** Interface for classes that convert real signals between sample rates. */
2
+ export interface RealResampler {
3
+ resample(samples: Float32Array): Float32Array;
4
+ getDelay(): number;
5
+ clone(): RealResampler;
6
+ }
7
+ /** Interface for classes that convert I/Q signals between sample rates. */
8
+ export interface IqResampler {
9
+ resample(I: Float32Array, Q: Float32Array): [Float32Array, Float32Array];
10
+ getDelay(): number;
11
+ clone(): IqResampler;
12
+ }
13
+ /** Options for getRealResampler() and getIqResampler() */
14
+ export type ResamplerOptions = {
3
15
  /**
4
- * @param inRate The input sample rate.
5
- * @param outRate The output sample rate.
6
- * @param filterLen The size of the low-pass filter.
16
+ * The low-pass cut-off frequency for the filter.
17
+ * If unspecified, the lower of half the input or output sample rate is used.
18
+ */
19
+ lowPassFrequency?: number;
20
+ /**
21
+ * The number of taps for the filter.
22
+ * If unspecified, 101 taps are used.
7
23
  */
8
- constructor(inRate: number, outRate: number, filterLen: number);
24
+ taps?: number;
25
+ /**
26
+ * A gain for the filter.
27
+ * If unspecified, 1 is used.
28
+ */
29
+ gain?: number;
30
+ /**
31
+ * A FIR kernel to use for the filter.
32
+ * If unspecified, a suitable kernel for the low pass frequency and number of pass is used.
33
+ */
34
+ kernel?: Float32Array;
35
+ };
36
+ /** Returns a RealResampler that converts signals from the input rate to the output rate. */
37
+ export declare function getRealResampler(inRate: number, outRate: number, options?: ResamplerOptions): RealResampler;
38
+ /** Returns an IqResampler that converts signals from the input rate to the output rate. */
39
+ export declare function getIqResampler(inRate: number, outRate: number, options?: ResamplerOptions): IqResampler;
40
+ /**
41
+ * A class to convert the input to a lower sample rate.
42
+ * @deprecated Use getRealResampler() instead.
43
+ */
44
+ export declare class RealDownsampler {
9
45
  /**
10
46
  * @param inRate The input sample rate.
11
47
  * @param outRate The output sample rate.
12
- * @param kernel The kernel to apply to the signal before downsampling.
48
+ * @param filterSpec The size or kernel of the low-pass filter to apply to the signal before downsampling.
13
49
  */
14
- constructor(inRate: number, outRate: number, kernel: Float32Array);
15
- private downsampler;
50
+ constructor(inRate: number, outRate: number, filterSpec: number | Float32Array);
51
+ private resampler;
16
52
  /**
17
- * @param input The signal in the original sample rate.
18
- * @returns The resampled signal.
53
+ * Returns a downsampled version of the given samples.
54
+ * @param samples The sample block to downsample.
55
+ * @returns The downsampled block.
19
56
  */
20
- downsample(input: Float32Array): Float32Array;
57
+ downsample(samples: Float32Array): Float32Array;
21
58
  getDelay(): number;
22
59
  }
23
- /** A class to convert a complex input to a lower sample rate. */
60
+ /**
61
+ * A class to convert a complex input to a lower sample rate.
62
+ * @deprecated Use getIqResampler() instead.
63
+ */
24
64
  export declare class ComplexDownsampler {
25
65
  /**
26
66
  * @param inRate The input sample rate.
27
67
  * @param outRate The output sample rate.
28
- * @param filterLen The size of the low-pass filter.
29
- */
30
- constructor(inRate: number, outRate: number, filterLen: number);
31
- /**
32
- * @param inRate The input sample rate.
33
- * @param outRate The output sample rate.
34
- * @param kernel The kernel to apply to the signal before downsampling.
68
+ * @param filterSpec The size or kernel of the low-pass filter to apply to the signal before downsampling.
35
69
  */
36
- constructor(inRate: number, outRate: number, kernel: Float32Array);
37
- private downsamplerI;
38
- private downsamplerQ;
70
+ constructor(inRate: number, outRate: number, filterSpec: number | Float32Array);
71
+ private resampler;
39
72
  /**
40
73
  * @param I The signal's real component.
41
74
  * @param Q The signal's imaginary component.
@@ -1 +1 @@
1
- {"version":3,"file":"resamplers.d.ts","sourceRoot":"","sources":["../../src/dsp/resamplers.ts"],"names":[],"mappings":"AAyEA,8DAA8D;AAC9D,qBAAa,eAAe;IAC1B;;;;OAIG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAC9D;;;;OAIG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;IASjE,OAAO,CAAC,WAAW,CAAc;IAEjC;;;OAGG;IACH,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY;IAI7C,QAAQ,IAAI,MAAM;CAGnB;AAED,iEAAiE;AACjE,qBAAa,kBAAkB;IAC7B;;;;OAIG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;IAC9D;;;;OAIG;gBACS,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY;IAUjE,OAAO,CAAC,YAAY,CAAc;IAClC,OAAO,CAAC,YAAY,CAAc;IAElC;;;;OAIG;IACH,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC;IAI1E,QAAQ,IAAI,MAAM;CAGnB"}
1
+ {"version":3,"file":"resamplers.d.ts","sourceRoot":"","sources":["../../src/dsp/resamplers.ts"],"names":[],"mappings":"AAoBA,4EAA4E;AAC5E,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,CAAC;IAC9C,QAAQ,IAAI,MAAM,CAAC;IACnB,KAAK,IAAI,aAAa,CAAC;CACxB;AAED,2EAA2E;AAC3E,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACzE,QAAQ,IAAI,MAAM,CAAC;IACnB,KAAK,IAAI,WAAW,CAAC;CACtB;AAgND,0DAA0D;AAC1D,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;OAGG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,MAAM,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,4FAA4F;AAC5F,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,gBAAgB,GACzB,aAAa,CA4Bf;AAED,2FAA2F;AAC3F,wBAAgB,cAAc,CAC5B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE,gBAAgB,GACzB,WAAW,CAEb;AAED;;;GAGG;AACH,qBAAa,eAAe;IAC1B;;;;OAIG;gBAED,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,YAAY;IASnC,OAAO,CAAC,SAAS,CAAgB;IAEjC;;;;OAIG;IACH,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY;IAI/C,QAAQ,IAAI,MAAM;CAGnB;AAED;;;GAGG;AACH,qBAAa,kBAAkB;IAC7B;;;;OAIG;gBAED,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,GAAG,YAAY;IASnC,OAAO,CAAC,SAAS,CAAc;IAE/B;;;;OAIG;IACH,UAAU,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC;IAI1E,QAAQ,IAAI,MAAM;CAGnB"}
@@ -12,87 +12,271 @@
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 { RadioError, RadioErrorType } from "../errors.js";
15
16
  import { Float32Pool } from "./buffers.js";
16
17
  import { makeLowPassKernel } from "./coefficients.js";
17
18
  import { FIRFilter } from "./filters.js";
18
- /** A class to convert the input to a lower sample rate using a FIR filter. */
19
- class Downsampler {
19
+ class PureRealDownsampler {
20
20
  ratio;
21
- /**
22
- * @param ratio The ratio of input/output sample rates.
23
- * @param kernel The coefficients for the low-pass filter.
24
- */
25
- constructor(ratio, filter) {
21
+ constructor(ratio, kernel) {
26
22
  this.ratio = ratio;
27
- this.filter = filter.clone();
23
+ if (ratio != Math.floor(ratio))
24
+ throw new RadioError(`Non-integer downsample ratio: ${ratio}`, RadioErrorType.DemodulationError);
25
+ this.filter = new FIRFilter(kernel);
28
26
  this.pool = new Float32Pool(2);
27
+ this.residual = 0;
29
28
  }
30
29
  filter;
31
30
  pool;
32
- /**
33
- * Returns a downsampled version of the given samples.
34
- * @param samples The sample block to downsample.
35
- * @returns The downsampled block.
36
- */
37
- downsample(samples) {
31
+ residual;
32
+ resample(samples) {
38
33
  const ratio = this.ratio;
39
- const len = Math.floor(samples.length / ratio);
40
- let output = this.pool.get(len);
34
+ const skip = (ratio - this.residual) % ratio;
35
+ const outLen = Math.floor((this.residual + samples.length - 1) / ratio) -
36
+ Math.floor((this.residual - 1) / ratio);
37
+ let output = this.pool.get(outLen);
41
38
  this.filter.loadSamples(samples);
42
- for (let i = 0; i < len; ++i) {
43
- output[i] = this.filter.get(Math.floor(i * ratio));
39
+ for (let i = 0; i < outLen; ++i) {
40
+ output[i] = this.filter.get(skip + i * ratio);
44
41
  }
42
+ this.residual = (this.residual + samples.length) % ratio;
45
43
  return output;
46
44
  }
47
45
  getDelay() {
48
46
  return this.filter.getDelay() / this.ratio;
49
47
  }
50
48
  clone() {
51
- return new Downsampler(this.ratio, this.filter);
49
+ let out = new PureRealDownsampler(this.ratio, new Float32Array(1));
50
+ out.filter = this.filter.clone();
51
+ return out;
52
52
  }
53
53
  }
54
- function getDownsampler(inRate, outRate, filterSpec) {
55
- let ratio = inRate / outRate;
56
- let filter = filterSpec;
57
- if (typeof filter === "number")
58
- filter = makeLowPassKernel(inRate, outRate / 2, filter);
59
- return new Downsampler(ratio, new FIRFilter(filter));
54
+ class PureRealUpsampler {
55
+ ratio;
56
+ constructor(ratio, kernel) {
57
+ this.ratio = ratio;
58
+ if (ratio != Math.floor(ratio))
59
+ throw new RadioError(`Non-integer upsample ratio: ${ratio}`, RadioErrorType.DemodulationError);
60
+ this.delay = new FIRFilter(kernel).getDelay();
61
+ if (kernel.length % ratio != 0) {
62
+ const wantedLen = ratio * Math.ceil(kernel.length / ratio);
63
+ const newKernel = new Float32Array(wantedLen);
64
+ newKernel.subarray(wantedLen - kernel.length, wantedLen).set(kernel);
65
+ kernel = newKernel;
66
+ }
67
+ this.filters = [];
68
+ for (let i = 0; i < ratio; ++i) {
69
+ const filterKernel = new Float32Array(kernel.length / ratio);
70
+ for (let j = 0; j < filterKernel.length; ++j) {
71
+ filterKernel[j] = kernel[(j + 1) * ratio - i - 1] * ratio;
72
+ }
73
+ this.filters[i] = new FIRFilter(filterKernel);
74
+ }
75
+ this.pool = new Float32Pool(2);
76
+ }
77
+ delay;
78
+ filters;
79
+ pool;
80
+ resample(samples) {
81
+ const ratio = this.ratio;
82
+ const outLen = samples.length * ratio;
83
+ let output = this.pool.get(outLen);
84
+ for (let j = 0; j < ratio; ++j) {
85
+ this.filters[j].loadSamples(samples);
86
+ }
87
+ for (let i = 0; i < samples.length; ++i) {
88
+ for (let j = 0; j < ratio; ++j) {
89
+ output[i * ratio + j] = this.filters[j].get(i);
90
+ }
91
+ }
92
+ return output;
93
+ }
94
+ getDelay() {
95
+ return this.delay;
96
+ }
97
+ clone() {
98
+ let out = new PureRealUpsampler(1, new Float32Array(1));
99
+ out.ratio = this.ratio;
100
+ out.filters = this.filters.map((f) => f.clone());
101
+ out.delay = this.delay;
102
+ return out;
103
+ }
60
104
  }
61
- /** A class to convert a real input to a lower sample rate. */
105
+ class RealUpDownsampler {
106
+ upRatio;
107
+ downRatio;
108
+ constructor(upRatio, downRatio, kernel) {
109
+ this.upRatio = upRatio;
110
+ this.downRatio = downRatio;
111
+ if (upRatio != Math.floor(upRatio))
112
+ throw new RadioError(`Non-integer upsample ratio: ${upRatio}`, RadioErrorType.DemodulationError);
113
+ if (downRatio != Math.floor(downRatio))
114
+ throw new RadioError(`Non-integer downsample ratio: ${downRatio}`, RadioErrorType.DemodulationError);
115
+ this.delay = new FIRFilter(kernel).getDelay();
116
+ if (kernel.length % upRatio != 0) {
117
+ const wantedLen = upRatio * Math.ceil(kernel.length / upRatio);
118
+ const newKernel = new Float32Array(wantedLen);
119
+ newKernel.subarray(wantedLen - kernel.length, wantedLen).set(kernel);
120
+ kernel = newKernel;
121
+ }
122
+ this.filters = [];
123
+ for (let i = 0; i < upRatio; ++i) {
124
+ const filterKernel = new Float32Array(kernel.length / upRatio);
125
+ for (let j = 0; j < filterKernel.length; ++j) {
126
+ filterKernel[j] = kernel[(j + 1) * upRatio - i - 1] * upRatio;
127
+ }
128
+ this.filters[i] = new FIRFilter(filterKernel);
129
+ }
130
+ this.pool = new Float32Pool(4);
131
+ this.residual = 0;
132
+ }
133
+ delay;
134
+ filters;
135
+ pool;
136
+ residual;
137
+ resample(samples) {
138
+ const upRatio = this.upRatio;
139
+ const midLen = samples.length * upRatio;
140
+ for (let j = 0; j < upRatio; ++j) {
141
+ this.filters[j].loadSamples(samples);
142
+ }
143
+ const downRatio = this.downRatio;
144
+ const skip = (downRatio - this.residual) % downRatio;
145
+ const outLen = Math.floor((this.residual + midLen - 1) / downRatio) -
146
+ Math.floor((this.residual - 1) / downRatio);
147
+ let output = this.pool.get(outLen);
148
+ for (let k = 0; k < outLen; ++k) {
149
+ const ij = skip + k * downRatio;
150
+ const i = Math.floor(ij / upRatio);
151
+ const j = ij % upRatio;
152
+ output[k] = this.filters[j].get(i);
153
+ }
154
+ this.residual = (this.residual + midLen) % downRatio;
155
+ return output;
156
+ }
157
+ getDelay() {
158
+ return this.delay / this.downRatio;
159
+ }
160
+ clone() {
161
+ let out = new RealUpDownsampler(this.upRatio, this.downRatio, new Float32Array(1));
162
+ out.delay = this.delay;
163
+ out.filters = this.filters.map((f) => f.clone());
164
+ return out;
165
+ }
166
+ }
167
+ class GenericIqResampler {
168
+ constructor(realResampler) {
169
+ this.resampleI = realResampler.clone();
170
+ this.resampleQ = realResampler.clone();
171
+ }
172
+ resampleI;
173
+ resampleQ;
174
+ resample(I, Q) {
175
+ return [this.resampleI.resample(I), this.resampleQ.resample(Q)];
176
+ }
177
+ getDelay() {
178
+ return this.resampleI.getDelay();
179
+ }
180
+ clone() {
181
+ return new GenericIqResampler(this.resampleI);
182
+ }
183
+ }
184
+ /** Returns a RealResampler that converts signals from the input rate to the output rate. */
185
+ export function getRealResampler(inRate, outRate, options) {
186
+ if (inRate > outRate && inRate % outRate == 0) {
187
+ // Pure downsampler
188
+ let corner = options?.lowPassFrequency || outRate / 2;
189
+ let taps = options?.taps || 101;
190
+ let gain = options?.gain;
191
+ let kernel = options?.kernel || makeLowPassKernel(inRate, corner, taps, gain);
192
+ return new PureRealDownsampler(inRate / outRate, kernel);
193
+ }
194
+ if (inRate < outRate && outRate % inRate == 0) {
195
+ // Pure upsampler
196
+ let corner = options?.lowPassFrequency || inRate / 2;
197
+ let taps = options?.taps || 101;
198
+ let gain = options?.gain;
199
+ let kernel = options?.kernel || makeLowPassKernel(outRate, corner, taps, gain);
200
+ return new PureRealUpsampler(outRate / inRate, kernel);
201
+ }
202
+ // Resampler
203
+ let gcd = greatestCommonDivisor(inRate, outRate);
204
+ let corner = options?.lowPassFrequency || Math.min(inRate, outRate) / 2;
205
+ let taps = options?.taps || 101;
206
+ let gain = options?.gain;
207
+ let kernel = options?.kernel ||
208
+ makeLowPassKernel((inRate * outRate) / gcd, corner, taps, gain);
209
+ return new RealUpDownsampler(outRate / gcd, inRate / gcd, kernel);
210
+ }
211
+ /** Returns an IqResampler that converts signals from the input rate to the output rate. */
212
+ export function getIqResampler(inRate, outRate, options) {
213
+ return new GenericIqResampler(getRealResampler(inRate, outRate, options));
214
+ }
215
+ /**
216
+ * A class to convert the input to a lower sample rate.
217
+ * @deprecated Use getRealResampler() instead.
218
+ */
62
219
  export class RealDownsampler {
220
+ /**
221
+ * @param inRate The input sample rate.
222
+ * @param outRate The output sample rate.
223
+ * @param filterSpec The size or kernel of the low-pass filter to apply to the signal before downsampling.
224
+ */
63
225
  constructor(inRate, outRate, filterSpec) {
64
- this.downsampler = getDownsampler(inRate, outRate, filterSpec);
226
+ let options = typeof filterSpec === "number"
227
+ ? { taps: filterSpec }
228
+ : { kernel: filterSpec };
229
+ this.resampler = getRealResampler(inRate, outRate, options);
65
230
  }
66
- downsampler;
231
+ resampler;
67
232
  /**
68
- * @param input The signal in the original sample rate.
69
- * @returns The resampled signal.
233
+ * Returns a downsampled version of the given samples.
234
+ * @param samples The sample block to downsample.
235
+ * @returns The downsampled block.
70
236
  */
71
- downsample(input) {
72
- return this.downsampler.downsample(input);
237
+ downsample(samples) {
238
+ return this.resampler.resample(samples);
73
239
  }
74
240
  getDelay() {
75
- return this.downsampler.getDelay();
241
+ return this.resampler.getDelay();
76
242
  }
77
243
  }
78
- /** A class to convert a complex input to a lower sample rate. */
244
+ /**
245
+ * A class to convert a complex input to a lower sample rate.
246
+ * @deprecated Use getIqResampler() instead.
247
+ */
79
248
  export class ComplexDownsampler {
249
+ /**
250
+ * @param inRate The input sample rate.
251
+ * @param outRate The output sample rate.
252
+ * @param filterSpec The size or kernel of the low-pass filter to apply to the signal before downsampling.
253
+ */
80
254
  constructor(inRate, outRate, filterSpec) {
81
- this.downsamplerI = getDownsampler(inRate, outRate, filterSpec);
82
- this.downsamplerQ = this.downsamplerI.clone();
255
+ let options = typeof filterSpec === "number"
256
+ ? { taps: filterSpec }
257
+ : { kernel: filterSpec };
258
+ this.resampler = getIqResampler(inRate, outRate, options);
83
259
  }
84
- downsamplerI;
85
- downsamplerQ;
260
+ resampler;
86
261
  /**
87
262
  * @param I The signal's real component.
88
263
  * @param Q The signal's imaginary component.
89
264
  * @returns An array with the output's real and imaginary components.
90
265
  */
91
266
  downsample(I, Q) {
92
- return [this.downsamplerI.downsample(I), this.downsamplerQ.downsample(Q)];
267
+ return this.resampler.resample(I, Q);
93
268
  }
94
269
  getDelay() {
95
- return this.downsamplerI.getDelay();
270
+ return this.resampler.getDelay();
271
+ }
272
+ }
273
+ function greatestCommonDivisor(a, b) {
274
+ if (a < b) {
275
+ [a, b] = [b, a];
276
+ }
277
+ while (b != 0) {
278
+ [a, b] = [b, a % b];
96
279
  }
280
+ return a;
97
281
  }
98
282
  //# sourceMappingURL=resamplers.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"resamplers.js","sourceRoot":"","sources":["../../src/dsp/resamplers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resamplers.js","sourceRoot":"","sources":["../../src/dsp/resamplers.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@jtarrio/signals",
3
3
  "description": "Demodulate radio signals in your JavaScript or TypeScript application",
4
- "version": "0.9.7",
4
+ "version": "0.9.8",
5
5
  "author": "Jacobo Tarrio <jtarrio@gmail.com>",
6
6
  "license": "Apache-2.0",
7
7
  "repository": {