dsp-collection
Version:
A collection of JavaScript modules for digital signal processing (written in TypeScript)
27 lines • 1.67 kB
JavaScript
import * as AdaptiveStft from "./AdaptiveStft.js";
export function instFreqSingle_relWindow(samples, position, roughtMeasuringFrequency, shiftFactor, relWindowWidth, windowFunction) {
const shiftDistance = Math.max(1, shiftFactor / roughtMeasuringFrequency);
const pos1 = position - shiftDistance / 2;
const pos2 = position + shiftDistance / 2;
const r1 = AdaptiveStft.getSingle_relWindow(samples, roughtMeasuringFrequency, pos1, relWindowWidth, windowFunction);
const r2 = AdaptiveStft.getSingle_relWindow(samples, roughtMeasuringFrequency, pos2, relWindowWidth, windowFunction);
if (!r1 || !r2) {
return;
}
if (r1.frequency != r2.frequency || r1.windowStartPosition >= r2.windowStartPosition || r1.windowWidth != r2.windowWidth) {
throw new Error();
}
const measuringFrequency = r1.frequency;
const realShiftDistance = r2.windowStartPosition - r1.windowStartPosition;
const phase1 = r1.component.arg();
const phase2 = r2.component.arg();
const phaseDelta = (phase2 + 2 * Math.PI - phase1) % (2 * Math.PI);
const instFrequency = phaseDelta / (2 * Math.PI) / realShiftDistance;
const amplitude = (r1.component.abs() + r2.component.abs()) / 2;
return { instFrequency, measuringFrequency, amplitude };
}
export function instFreqSingle_maxWindow(samples, position, roughtMeasuringFrequency, shiftFactor, maxWindowWidth, windowFunction) {
const relWindowWidth = Math.floor(maxWindowWidth * roughtMeasuringFrequency);
return instFreqSingle_relWindow(samples, position, roughtMeasuringFrequency, shiftFactor, relWindowWidth, windowFunction);
}
//# sourceMappingURL=InstFreq.js.map