dspx 1.0.1 → 1.1.0
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 +1 -1
- package/dist/bindings.d.ts +272 -1
- package/dist/bindings.d.ts.map +1 -1
- package/dist/bindings.js +418 -0
- package/dist/bindings.js.map +1 -1
- package/dist/types.d.ts +235 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/native/DspPipeline.cc +105 -0
- package/src/native/adapters/MelSpectrogramStage.h +211 -0
- package/src/native/adapters/MfccStage.h +220 -0
- package/src/native/adapters/StftStage.h +466 -0
- package/src/native/core/DctEngine.h +172 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# dspx
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/dspx)
|
|
4
|
-
[](#-quick-start)
|
|
5
5
|
[](https://www.typescriptlang.org/)
|
|
6
6
|
[](./LICENSE)
|
|
7
7
|
|
package/dist/bindings.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { ProcessOptions, RedisConfig, MovingAverageParams, RmsParams, RectifyParams, VarianceParams, ZScoreNormalizeParams, MeanAbsoluteValueParams, WaveformLengthParams, SlopeSignChangeParams, WillisonAmplitudeParams, LinearRegressionParams, LmsFilterParams, InterpolateParams, DecimateParams, ResampleParams, ConvolutionParams, WaveletTransformParams, HilbertEnvelopeParams, PipelineCallbacks, RlsFilterParams, TapCallback, PipelineStateSummary, BeamformerWeightsResult, CspResult, GscPreprocessorParams, ChannelSelectorParams, ChannelSelectParams, ChannelMergeParams, ClipDetectionParams, PeakDetectionParams, CspTransformParams } from "./types.js";
|
|
1
|
+
import type { ProcessOptions, RedisConfig, MovingAverageParams, RmsParams, RectifyParams, VarianceParams, ZScoreNormalizeParams, MeanAbsoluteValueParams, WaveformLengthParams, SlopeSignChangeParams, WillisonAmplitudeParams, LinearRegressionParams, LmsFilterParams, InterpolateParams, DecimateParams, ResampleParams, ConvolutionParams, WaveletTransformParams, HilbertEnvelopeParams, PipelineCallbacks, RlsFilterParams, TapCallback, PipelineStateSummary, BeamformerWeightsResult, CspResult, GscPreprocessorParams, ChannelSelectorParams, ChannelSelectParams, ChannelMergeParams, ClipDetectionParams, PeakDetectionParams, CspTransformParams, fftParams, stftParams, MelSpectrogramParams, MfccParams } from "./types.js";
|
|
2
2
|
import { type FilterOptions } from "./filters.js";
|
|
3
3
|
/**
|
|
4
4
|
* DSP Processor class that wraps the native C++ DspPipeline
|
|
@@ -1032,6 +1032,277 @@ declare class DspProcessor {
|
|
|
1032
1032
|
* .MovingAverage({ mode: "moving", windowSize: 10 });
|
|
1033
1033
|
*/
|
|
1034
1034
|
HilbertEnvelope(params: HilbertEnvelopeParams): this;
|
|
1035
|
+
/**
|
|
1036
|
+
* Add FFT (Fast Fourier Transform) stage to the pipeline
|
|
1037
|
+
*
|
|
1038
|
+
* Transforms time-domain signal to frequency domain or vice versa.
|
|
1039
|
+
* Supports both fast (radix-2) and direct (any size) transforms.
|
|
1040
|
+
*
|
|
1041
|
+
* **Transform Types:**
|
|
1042
|
+
* - `fft`: Complex FFT (O(N log N), requires power-of-2 size)
|
|
1043
|
+
* - `dft`: Complex DFT (O(N²), works with any size)
|
|
1044
|
+
* - `rfft`: Real FFT for real signals (O(N log N), outputs N/2+1 bins)
|
|
1045
|
+
* - `rdft`: Real DFT for real signals (O(N²), outputs N/2+1 bins)
|
|
1046
|
+
*
|
|
1047
|
+
* **Output Formats:**
|
|
1048
|
+
* - `complex`: Returns interleaved [real0, imag0, real1, imag1, ...]
|
|
1049
|
+
* - `magnitude`: Returns |X[k]| = sqrt(real² + imag²)
|
|
1050
|
+
* - `power`: Returns |X[k]|² = real² + imag²
|
|
1051
|
+
* - `phase`: Returns ∠X[k] = atan2(imag, real)
|
|
1052
|
+
*
|
|
1053
|
+
* @param params - FFT configuration
|
|
1054
|
+
* @param params.size - FFT size (power of 2 for FFT/RFFT, any size for DFT/RDFT)
|
|
1055
|
+
* @param params.type - Transform type (default: 'rfft' for real signals)
|
|
1056
|
+
* @param params.forward - Forward (time→freq) or inverse (freq→time) (default: true)
|
|
1057
|
+
* @param params.output - Output format (default: 'magnitude')
|
|
1058
|
+
* @returns this instance for method chaining
|
|
1059
|
+
*
|
|
1060
|
+
* @example
|
|
1061
|
+
* // Spectral analysis with magnitude output
|
|
1062
|
+
* pipeline.fft({
|
|
1063
|
+
* size: 1024,
|
|
1064
|
+
* type: 'rfft',
|
|
1065
|
+
* output: 'magnitude'
|
|
1066
|
+
* });
|
|
1067
|
+
*
|
|
1068
|
+
* @example
|
|
1069
|
+
* // Power spectrum for energy analysis
|
|
1070
|
+
* pipeline.fft({
|
|
1071
|
+
* size: 2048,
|
|
1072
|
+
* output: 'power'
|
|
1073
|
+
* });
|
|
1074
|
+
*
|
|
1075
|
+
* @example
|
|
1076
|
+
* // Complex FFT for phase information
|
|
1077
|
+
* pipeline.fft({
|
|
1078
|
+
* size: 512,
|
|
1079
|
+
* type: 'fft',
|
|
1080
|
+
* output: 'complex'
|
|
1081
|
+
* });
|
|
1082
|
+
*
|
|
1083
|
+
* @example
|
|
1084
|
+
* // DFT for non-power-of-2 sizes
|
|
1085
|
+
* pipeline.fft({
|
|
1086
|
+
* size: 1000, // Not a power of 2
|
|
1087
|
+
* type: 'rdft',
|
|
1088
|
+
* output: 'magnitude'
|
|
1089
|
+
* });
|
|
1090
|
+
*/
|
|
1091
|
+
fft(params: fftParams): this;
|
|
1092
|
+
/**
|
|
1093
|
+
* Helper to check if a number is a power of 2
|
|
1094
|
+
*/
|
|
1095
|
+
private isPowerOfTwo;
|
|
1096
|
+
/**
|
|
1097
|
+
* Add STFT (Short-Time Fourier Transform) stage to the pipeline
|
|
1098
|
+
*
|
|
1099
|
+
* Computes time-frequency representation by applying FFT/DFT to overlapping windows.
|
|
1100
|
+
* Produces a spectrogram showing how frequency content evolves over time.
|
|
1101
|
+
*
|
|
1102
|
+
* **Use Cases:**
|
|
1103
|
+
* - Audio spectrograms for music/speech analysis
|
|
1104
|
+
* - Non-stationary signal analysis (EEG, vibration)
|
|
1105
|
+
* - Feature extraction for machine learning
|
|
1106
|
+
* - Time-varying frequency detection
|
|
1107
|
+
*
|
|
1108
|
+
* **Time-Frequency Resolution Trade-off:**
|
|
1109
|
+
* - Larger window → Better frequency resolution, worse time resolution
|
|
1110
|
+
* - Smaller window → Better time resolution, worse frequency resolution
|
|
1111
|
+
*
|
|
1112
|
+
* **Output Format:**
|
|
1113
|
+
* The output is a flattened 2D array: [window0_bin0, window0_bin1, ..., window1_bin0, ...]
|
|
1114
|
+
* - Rows: Time windows (numWindows)
|
|
1115
|
+
* - Cols: Frequency bins (windowSize/2+1 for real, windowSize for complex)
|
|
1116
|
+
*
|
|
1117
|
+
* @param params - STFT configuration
|
|
1118
|
+
* @param params.windowSize - FFT window size (power of 2 for FFT, any size for DFT)
|
|
1119
|
+
* @param params.hopSize - Stride between windows (default: windowSize/2, i.e., 50% overlap)
|
|
1120
|
+
* @param params.method - 'fft' or 'dft' (default: auto-detect based on windowSize)
|
|
1121
|
+
* @param params.type - 'real' or 'complex' input (default: 'real')
|
|
1122
|
+
* @param params.forward - true for forward STFT, false for inverse (default: true)
|
|
1123
|
+
* @param params.output - 'complex', 'magnitude', 'power', or 'phase' (default: 'magnitude')
|
|
1124
|
+
* @param params.window - Window function: 'none', 'hann', 'hamming', 'blackman', 'bartlett' (default: 'hann')
|
|
1125
|
+
* @returns this instance for method chaining
|
|
1126
|
+
*
|
|
1127
|
+
* @example
|
|
1128
|
+
* // Audio spectrogram with default settings
|
|
1129
|
+
* pipeline.stft({
|
|
1130
|
+
* windowSize: 1024,
|
|
1131
|
+
* hopSize: 512, // 50% overlap
|
|
1132
|
+
* output: 'magnitude'
|
|
1133
|
+
* });
|
|
1134
|
+
*
|
|
1135
|
+
* @example
|
|
1136
|
+
* // High time resolution for transient detection
|
|
1137
|
+
* pipeline.stft({
|
|
1138
|
+
* windowSize: 256, // Small window
|
|
1139
|
+
* hopSize: 64, // 75% overlap
|
|
1140
|
+
* window: 'hann'
|
|
1141
|
+
* });
|
|
1142
|
+
*
|
|
1143
|
+
* @example
|
|
1144
|
+
* // High frequency resolution for harmonic analysis
|
|
1145
|
+
* pipeline.stft({
|
|
1146
|
+
* windowSize: 4096, // Large window
|
|
1147
|
+
* hopSize: 2048,
|
|
1148
|
+
* output: 'power',
|
|
1149
|
+
* window: 'blackman'
|
|
1150
|
+
* });
|
|
1151
|
+
*
|
|
1152
|
+
* @example
|
|
1153
|
+
* // Complex output for phase vocoding
|
|
1154
|
+
* pipeline.stft({
|
|
1155
|
+
* windowSize: 2048,
|
|
1156
|
+
* hopSize: 512,
|
|
1157
|
+
* output: 'complex'
|
|
1158
|
+
* });
|
|
1159
|
+
*
|
|
1160
|
+
* @example
|
|
1161
|
+
* // Non-power-of-2 with DFT
|
|
1162
|
+
* pipeline.stft({
|
|
1163
|
+
* windowSize: 1000,
|
|
1164
|
+
* method: 'dft',
|
|
1165
|
+
* output: 'magnitude'
|
|
1166
|
+
* });
|
|
1167
|
+
*/
|
|
1168
|
+
stft(params: stftParams): this;
|
|
1169
|
+
/**
|
|
1170
|
+
* Apply Mel Spectrogram conversion to power spectrum
|
|
1171
|
+
*
|
|
1172
|
+
* Converts linear frequency spectrum to Mel-scale representation using a pre-computed
|
|
1173
|
+
* filterbank matrix. The Mel scale is perceptually motivated and better matches human
|
|
1174
|
+
* hearing's frequency resolution.
|
|
1175
|
+
*
|
|
1176
|
+
* **Typical Pipeline:**
|
|
1177
|
+
* ```
|
|
1178
|
+
* STFT → Power → MelSpectrogram → Log → MFCC
|
|
1179
|
+
* ```
|
|
1180
|
+
*
|
|
1181
|
+
* **What it does:**
|
|
1182
|
+
* - Matrix multiplication: mel_energies = filterbank × power_spectrum
|
|
1183
|
+
* - Groups frequency bins into perceptually-meaningful Mel bands
|
|
1184
|
+
* - High-performance C++ implementation using Eigen
|
|
1185
|
+
*
|
|
1186
|
+
* @param params - Mel spectrogram configuration (filterbank, numBins, numMelBands)
|
|
1187
|
+
* @returns this instance for method chaining
|
|
1188
|
+
*
|
|
1189
|
+
* @example
|
|
1190
|
+
* // Create Mel filterbank (helper function needed)
|
|
1191
|
+
* const filterbank = createMelFilterbank({
|
|
1192
|
+
* sampleRate: 16000,
|
|
1193
|
+
* numBins: 257, // from FFT size 512
|
|
1194
|
+
* numMelBands: 40,
|
|
1195
|
+
* fMin: 0,
|
|
1196
|
+
* fMax: 8000
|
|
1197
|
+
* });
|
|
1198
|
+
*
|
|
1199
|
+
* pipeline
|
|
1200
|
+
* .stft({ windowSize: 512, output: 'power' })
|
|
1201
|
+
* .melSpectrogram({
|
|
1202
|
+
* filterbankMatrix: filterbank,
|
|
1203
|
+
* numBins: 257,
|
|
1204
|
+
* numMelBands: 40
|
|
1205
|
+
* });
|
|
1206
|
+
*
|
|
1207
|
+
* @example
|
|
1208
|
+
* // Speech recognition pipeline
|
|
1209
|
+
* const filterbank = createMelFilterbank({
|
|
1210
|
+
* sampleRate: 16000,
|
|
1211
|
+
* numBins: 513,
|
|
1212
|
+
* numMelBands: 26,
|
|
1213
|
+
* fMin: 20,
|
|
1214
|
+
* fMax: 8000
|
|
1215
|
+
* });
|
|
1216
|
+
*
|
|
1217
|
+
* pipeline
|
|
1218
|
+
* .stft({ windowSize: 1024, output: 'power' })
|
|
1219
|
+
* .melSpectrogram({
|
|
1220
|
+
* filterbankMatrix: filterbank,
|
|
1221
|
+
* numBins: 513,
|
|
1222
|
+
* numMelBands: 26
|
|
1223
|
+
* })
|
|
1224
|
+
* .mfcc({ numMelBands: 26, numCoefficients: 13 });
|
|
1225
|
+
*/
|
|
1226
|
+
melSpectrogram(params: MelSpectrogramParams): this;
|
|
1227
|
+
/**
|
|
1228
|
+
* Extract MFCC (Mel-Frequency Cepstral Coefficients) features
|
|
1229
|
+
*
|
|
1230
|
+
* Applies Discrete Cosine Transform (DCT) to log Mel energies to produce MFCCs.
|
|
1231
|
+
* MFCCs are the standard features for speech recognition, speaker identification,
|
|
1232
|
+
* and audio classification because they:
|
|
1233
|
+
* - Decorrelate Mel energies
|
|
1234
|
+
* - Compress information into lower-order coefficients
|
|
1235
|
+
* - Mimic human auditory perception
|
|
1236
|
+
* - Provide compact representation for ML models
|
|
1237
|
+
*
|
|
1238
|
+
* **Typical Pipeline:**
|
|
1239
|
+
* ```
|
|
1240
|
+
* STFT → Power → MelSpectrogram → Log → MFCC
|
|
1241
|
+
* ```
|
|
1242
|
+
*
|
|
1243
|
+
* **What it does:**
|
|
1244
|
+
* - Applies DCT-II to (log) Mel energies
|
|
1245
|
+
* - Keeps first N coefficients (typically 13-20)
|
|
1246
|
+
* - Optional cepstral liftering for improved recognition
|
|
1247
|
+
* - High-performance C++ implementation with pre-computed cosine tables
|
|
1248
|
+
*
|
|
1249
|
+
* @param params - MFCC configuration (numMelBands, numCoefficients, options)
|
|
1250
|
+
* @returns this instance for method chaining
|
|
1251
|
+
*
|
|
1252
|
+
* @example
|
|
1253
|
+
* // Standard speech recognition pipeline
|
|
1254
|
+
* const filterbank = createMelFilterbank({
|
|
1255
|
+
* sampleRate: 16000,
|
|
1256
|
+
* numBins: 257,
|
|
1257
|
+
* numMelBands: 26
|
|
1258
|
+
* });
|
|
1259
|
+
*
|
|
1260
|
+
* pipeline
|
|
1261
|
+
* .stft({ windowSize: 512, output: 'power' })
|
|
1262
|
+
* .melSpectrogram({
|
|
1263
|
+
* filterbankMatrix: filterbank,
|
|
1264
|
+
* numBins: 257,
|
|
1265
|
+
* numMelBands: 26
|
|
1266
|
+
* })
|
|
1267
|
+
* .mfcc({
|
|
1268
|
+
* numMelBands: 26,
|
|
1269
|
+
* numCoefficients: 13,
|
|
1270
|
+
* useLogEnergy: true,
|
|
1271
|
+
* lifterCoefficient: 22
|
|
1272
|
+
* });
|
|
1273
|
+
*
|
|
1274
|
+
* @example
|
|
1275
|
+
* // Music classification with more coefficients
|
|
1276
|
+
* pipeline
|
|
1277
|
+
* .stft({ windowSize: 2048, output: 'power' })
|
|
1278
|
+
* .melSpectrogram({
|
|
1279
|
+
* filterbankMatrix: musicFilterbank,
|
|
1280
|
+
* numBins: 1025,
|
|
1281
|
+
* numMelBands: 40
|
|
1282
|
+
* })
|
|
1283
|
+
* .mfcc({
|
|
1284
|
+
* numMelBands: 40,
|
|
1285
|
+
* numCoefficients: 20
|
|
1286
|
+
* });
|
|
1287
|
+
*
|
|
1288
|
+
* @example
|
|
1289
|
+
* // Skip log if input is already in log domain
|
|
1290
|
+
* pipeline
|
|
1291
|
+
* .stft({ windowSize: 512, output: 'power' })
|
|
1292
|
+
* .melSpectrogram({ filterbankMatrix, numBins: 257, numMelBands: 26 })
|
|
1293
|
+
* .tap((samples) => {
|
|
1294
|
+
* // Apply log manually
|
|
1295
|
+
* for (let i = 0; i < samples.length; i++) {
|
|
1296
|
+
* samples[i] = Math.log(samples[i] + 1e-10);
|
|
1297
|
+
* }
|
|
1298
|
+
* })
|
|
1299
|
+
* .mfcc({
|
|
1300
|
+
* numMelBands: 26,
|
|
1301
|
+
* numCoefficients: 13,
|
|
1302
|
+
* useLogEnergy: false // Skip log since we already applied it
|
|
1303
|
+
* });
|
|
1304
|
+
*/
|
|
1305
|
+
mfcc(params: MfccParams): this;
|
|
1035
1306
|
/**
|
|
1036
1307
|
* Tap into the pipeline for debugging and inspection
|
|
1037
1308
|
* The callback is executed synchronously after processing, allowing you to inspect
|
package/dist/bindings.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../src/ts/bindings.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,SAAS,EACT,aAAa,EACb,cAAc,EACd,qBAAqB,EACrB,uBAAuB,EACvB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,sBAAsB,EACtB,qBAAqB,EACrB,iBAAiB,EACjB,eAAe,EAGf,WAAW,EACX,oBAAoB,EACpB,uBAAuB,EACvB,SAAS,EACT,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,kBAAkB,
|
|
1
|
+
{"version":3,"file":"bindings.d.ts","sourceRoot":"","sources":["../src/ts/bindings.ts"],"names":[],"mappings":"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"}
|