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/dist/types.d.ts
CHANGED
|
@@ -1090,4 +1090,239 @@ export interface AutocorrelationOptions {
|
|
|
1090
1090
|
*/
|
|
1091
1091
|
export interface CrossCorrelationOptions {
|
|
1092
1092
|
}
|
|
1093
|
+
/**
|
|
1094
|
+
* Parameters for FFT processing in pipeline
|
|
1095
|
+
*/
|
|
1096
|
+
export interface fftParams {
|
|
1097
|
+
/** FFT size (must be power of 2 for FFT, any size for DFT) */
|
|
1098
|
+
size: number;
|
|
1099
|
+
/**
|
|
1100
|
+
* Transform type
|
|
1101
|
+
* - 'fft': Fast Fourier Transform (O(N log N), requires power of 2)
|
|
1102
|
+
* - 'dft': Discrete Fourier Transform (O(N²), works with any size)
|
|
1103
|
+
* - 'rfft': Real FFT (O(N log N), for real-valued signals)
|
|
1104
|
+
* - 'rdft': Real DFT (O(N²), for real-valued signals)
|
|
1105
|
+
*/
|
|
1106
|
+
type?: "fft" | "dft" | "rfft" | "rdft";
|
|
1107
|
+
/**
|
|
1108
|
+
* Forward or inverse transform
|
|
1109
|
+
* - true: Forward transform (time -> frequency)
|
|
1110
|
+
* - false: Inverse transform (frequency -> time)
|
|
1111
|
+
*/
|
|
1112
|
+
forward?: boolean;
|
|
1113
|
+
/**
|
|
1114
|
+
* Output format
|
|
1115
|
+
* - 'complex': Return {real, imag} arrays
|
|
1116
|
+
* - 'magnitude': Return magnitude spectrum
|
|
1117
|
+
* - 'power': Return power spectrum (magnitude squared)
|
|
1118
|
+
* - 'phase': Return phase spectrum
|
|
1119
|
+
*/
|
|
1120
|
+
output?: "complex" | "magnitude" | "power" | "phase";
|
|
1121
|
+
}
|
|
1122
|
+
/**
|
|
1123
|
+
* Parameters for STFT (Short-Time Fourier Transform) processing in pipeline
|
|
1124
|
+
*
|
|
1125
|
+
* STFT computes the Fourier transform over sliding windows, producing a time-frequency
|
|
1126
|
+
* representation (spectrogram). Useful for analyzing non-stationary signals where
|
|
1127
|
+
* frequency content changes over time.
|
|
1128
|
+
*
|
|
1129
|
+
* **Window Size vs Hop Size Trade-offs:**
|
|
1130
|
+
* - Larger window: Better frequency resolution, worse time resolution
|
|
1131
|
+
* - Smaller window: Better time resolution, worse frequency resolution
|
|
1132
|
+
* - Larger hop: Faster processing, less overlap
|
|
1133
|
+
* - Smaller hop: Smoother spectrogram, more overlap
|
|
1134
|
+
*
|
|
1135
|
+
* **Common Overlap Settings:**
|
|
1136
|
+
* - 50% overlap: hopSize = windowSize / 2 (standard)
|
|
1137
|
+
* - 75% overlap: hopSize = windowSize / 4 (high quality)
|
|
1138
|
+
* - No overlap: hopSize = windowSize (fast, blocky)
|
|
1139
|
+
*/
|
|
1140
|
+
export interface stftParams {
|
|
1141
|
+
/**
|
|
1142
|
+
* Window size (FFT size) in samples
|
|
1143
|
+
* - For FFT/RFFT: Must be power of 2 (e.g., 256, 512, 1024, 2048)
|
|
1144
|
+
* - For DFT/RDFT: Can be any positive integer
|
|
1145
|
+
*
|
|
1146
|
+
* Typical values:
|
|
1147
|
+
* - Audio analysis: 1024-4096 samples
|
|
1148
|
+
* - Speech: 256-512 samples
|
|
1149
|
+
* - Vibration: 512-2048 samples
|
|
1150
|
+
*/
|
|
1151
|
+
windowSize: number;
|
|
1152
|
+
/**
|
|
1153
|
+
* Hop size (stride) in samples between consecutive windows
|
|
1154
|
+
*
|
|
1155
|
+
* Default: windowSize / 2 (50% overlap)
|
|
1156
|
+
*
|
|
1157
|
+
* Examples:
|
|
1158
|
+
* - windowSize=1024, hopSize=512 → 50% overlap
|
|
1159
|
+
* - windowSize=1024, hopSize=256 → 75% overlap
|
|
1160
|
+
* - windowSize=1024, hopSize=1024 → No overlap
|
|
1161
|
+
*/
|
|
1162
|
+
hopSize?: number;
|
|
1163
|
+
/**
|
|
1164
|
+
* Transform method
|
|
1165
|
+
* - 'fft': Fast transform (O(N log N), requires power-of-2 windowSize)
|
|
1166
|
+
* - 'dft': Direct transform (O(N²), works with any windowSize)
|
|
1167
|
+
*
|
|
1168
|
+
* Default: 'fft' if windowSize is power of 2, else 'dft'
|
|
1169
|
+
*/
|
|
1170
|
+
method?: "fft" | "dft";
|
|
1171
|
+
/**
|
|
1172
|
+
* Input signal type
|
|
1173
|
+
* - 'real': Real-valued input (uses RFFT/RDFT, outputs N/2+1 bins)
|
|
1174
|
+
* - 'complex': Complex-valued input (uses FFT/DFT, outputs N bins)
|
|
1175
|
+
*
|
|
1176
|
+
* Default: 'real' (most common for audio/sensor data)
|
|
1177
|
+
*/
|
|
1178
|
+
type?: "real" | "complex";
|
|
1179
|
+
/**
|
|
1180
|
+
* Transform direction
|
|
1181
|
+
* - true: Forward STFT (time → time-frequency)
|
|
1182
|
+
* - false: Inverse STFT (time-frequency → time)
|
|
1183
|
+
*
|
|
1184
|
+
* Default: true (forward)
|
|
1185
|
+
*/
|
|
1186
|
+
forward?: boolean;
|
|
1187
|
+
/**
|
|
1188
|
+
* Output format for each time window
|
|
1189
|
+
* - 'complex': Complex spectrum {real, imag}
|
|
1190
|
+
* - 'magnitude': Magnitude spectrum |X[k]|
|
|
1191
|
+
* - 'power': Power spectrum |X[k]|²
|
|
1192
|
+
* - 'phase': Phase spectrum ∠X[k]
|
|
1193
|
+
*
|
|
1194
|
+
* Default: 'magnitude'
|
|
1195
|
+
*
|
|
1196
|
+
* Output shape: [numWindows, numFreqBins] flattened
|
|
1197
|
+
*/
|
|
1198
|
+
output?: "complex" | "magnitude" | "power" | "phase";
|
|
1199
|
+
/**
|
|
1200
|
+
* Window function to reduce spectral leakage
|
|
1201
|
+
* - 'none': Rectangular window (no tapering)
|
|
1202
|
+
* - 'hann': Hann window (smooth, general purpose)
|
|
1203
|
+
* - 'hamming': Hamming window (better frequency resolution)
|
|
1204
|
+
* - 'blackman': Blackman window (best sidelobe suppression)
|
|
1205
|
+
* - 'bartlett': Triangular window
|
|
1206
|
+
*
|
|
1207
|
+
* Default: 'hann'
|
|
1208
|
+
*/
|
|
1209
|
+
window?: "none" | "hann" | "hamming" | "blackman" | "bartlett";
|
|
1210
|
+
}
|
|
1211
|
+
/**
|
|
1212
|
+
* Parameters for Mel Spectrogram processing in pipeline
|
|
1213
|
+
*
|
|
1214
|
+
* Converts power spectrum to Mel-scale representation using filterbank matrix multiplication.
|
|
1215
|
+
* The Mel scale is a perceptual scale of pitches judged by listeners to be equal in distance.
|
|
1216
|
+
*
|
|
1217
|
+
* **Pipeline Position:**
|
|
1218
|
+
* Typically used after STFT + Power: STFT → Power → MelSpectrogram → Log → MFCC
|
|
1219
|
+
*
|
|
1220
|
+
* **Filterbank Creation:**
|
|
1221
|
+
* The filterbank matrix must be pre-computed in TypeScript using a helper function
|
|
1222
|
+
* that creates triangular filters distributed along the Mel scale.
|
|
1223
|
+
*
|
|
1224
|
+
* **What it does:**
|
|
1225
|
+
* Applies matrix multiplication: mel_energies = filterbank × power_spectrum
|
|
1226
|
+
* This groups frequency bins into perceptually-meaningful Mel bands.
|
|
1227
|
+
*/
|
|
1228
|
+
export interface MelSpectrogramParams {
|
|
1229
|
+
/**
|
|
1230
|
+
* Pre-computed Mel filterbank matrix (numMelBands × numBins)
|
|
1231
|
+
*
|
|
1232
|
+
* This matrix contains triangular filters that convert linear frequency bins
|
|
1233
|
+
* to Mel-scale bands. Must be pre-computed using a Mel filterbank generator.
|
|
1234
|
+
*
|
|
1235
|
+
* Shape: Float32Array of length (numMelBands * numBins), row-major order
|
|
1236
|
+
*/
|
|
1237
|
+
filterbankMatrix: Float32Array;
|
|
1238
|
+
/**
|
|
1239
|
+
* Number of input frequency bins (from STFT/FFT)
|
|
1240
|
+
*
|
|
1241
|
+
* For real signals: numBins = fftSize / 2 + 1
|
|
1242
|
+
* For complex signals: numBins = fftSize
|
|
1243
|
+
*
|
|
1244
|
+
* Example: FFT size 512 → 257 bins (real)
|
|
1245
|
+
*/
|
|
1246
|
+
numBins: number;
|
|
1247
|
+
/**
|
|
1248
|
+
* Number of output Mel frequency bands
|
|
1249
|
+
*
|
|
1250
|
+
* Common values:
|
|
1251
|
+
* - Speech: 20-40 bands
|
|
1252
|
+
* - Music: 40-128 bands
|
|
1253
|
+
* - MFCC: 20-40 bands (13-20 MFCCs extracted from these)
|
|
1254
|
+
*
|
|
1255
|
+
* More bands = finer frequency resolution but higher computational cost
|
|
1256
|
+
*/
|
|
1257
|
+
numMelBands: number;
|
|
1258
|
+
}
|
|
1259
|
+
/**
|
|
1260
|
+
* Parameters for MFCC (Mel-Frequency Cepstral Coefficients) processing in pipeline
|
|
1261
|
+
*
|
|
1262
|
+
* Applies Discrete Cosine Transform (DCT) to log Mel energies to produce MFCCs.
|
|
1263
|
+
* MFCCs are widely used in speech recognition, audio classification, and speaker
|
|
1264
|
+
* identification because they:
|
|
1265
|
+
* - Decorrelate Mel energies
|
|
1266
|
+
* - Compress information into lower-order coefficients
|
|
1267
|
+
* - Mimic human auditory perception
|
|
1268
|
+
* - Provide compact representation suitable for ML models
|
|
1269
|
+
*
|
|
1270
|
+
* **Pipeline Position:**
|
|
1271
|
+
* Final stage: STFT → Power → MelSpectrogram → Log → MFCC
|
|
1272
|
+
*
|
|
1273
|
+
* **Typical Output:**
|
|
1274
|
+
* 13-20 MFCC coefficients per frame, representing the spectral envelope shape.
|
|
1275
|
+
* Often the first coefficient (C0) represents energy and may be discarded.
|
|
1276
|
+
*/
|
|
1277
|
+
export interface MfccParams {
|
|
1278
|
+
/**
|
|
1279
|
+
* Number of input Mel frequency bands (from MelSpectrogram)
|
|
1280
|
+
*
|
|
1281
|
+
* Must match the numMelBands from the preceding MelSpectrogram stage.
|
|
1282
|
+
*
|
|
1283
|
+
* Typical values: 20-40 bands
|
|
1284
|
+
*/
|
|
1285
|
+
numMelBands: number;
|
|
1286
|
+
/**
|
|
1287
|
+
* Number of MFCC coefficients to output
|
|
1288
|
+
*
|
|
1289
|
+
* Common values:
|
|
1290
|
+
* - Speech recognition: 13 coefficients
|
|
1291
|
+
* - Speaker recognition: 20 coefficients
|
|
1292
|
+
* - Music: 13-20 coefficients
|
|
1293
|
+
*
|
|
1294
|
+
* Must be ≤ numMelBands. Lower coefficients capture envelope,
|
|
1295
|
+
* higher coefficients capture fine spectral detail.
|
|
1296
|
+
*
|
|
1297
|
+
* Default: 13
|
|
1298
|
+
*/
|
|
1299
|
+
numCoefficients?: number;
|
|
1300
|
+
/**
|
|
1301
|
+
* Apply logarithm to input energies before DCT
|
|
1302
|
+
*
|
|
1303
|
+
* - true: Apply log (standard for MFCCs, matches human perception)
|
|
1304
|
+
* - false: Skip log (use when input is already in log domain)
|
|
1305
|
+
*
|
|
1306
|
+
* Default: true
|
|
1307
|
+
*
|
|
1308
|
+
* The log compression mimics human hearing's logarithmic loudness perception.
|
|
1309
|
+
*/
|
|
1310
|
+
useLogEnergy?: boolean;
|
|
1311
|
+
/**
|
|
1312
|
+
* Cepstral liftering coefficient
|
|
1313
|
+
*
|
|
1314
|
+
* Liftering weights lower-order coefficients more than higher-order ones,
|
|
1315
|
+
* improving recognition performance by emphasizing the spectral envelope.
|
|
1316
|
+
*
|
|
1317
|
+
* - 0: No liftering (disabled)
|
|
1318
|
+
* - 22: Common value for speech (HTK standard)
|
|
1319
|
+
* - Higher values: Stronger emphasis on lower coefficients
|
|
1320
|
+
*
|
|
1321
|
+
* Default: 0 (disabled)
|
|
1322
|
+
*
|
|
1323
|
+
* Lifter formula: L[n] = 1 + (Q/2) * sin(πn/Q)
|
|
1324
|
+
* where Q is the liftering coefficient.
|
|
1325
|
+
*/
|
|
1326
|
+
lifterCoefficient?: number;
|
|
1327
|
+
}
|
|
1093
1328
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/ts/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/ts/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -18,6 +18,9 @@
|
|
|
18
18
|
#include "adapters/RlsStage.h" // RLS Adaptive Filter stage
|
|
19
19
|
#include "adapters/WaveletTransformStage.h" // Wavelet Transform stage
|
|
20
20
|
#include "adapters/HilbertEnvelopeStage.h" // Hilbert Envelope stage
|
|
21
|
+
#include "adapters/StftStage.h" // STFT (Short-Time Fourier Transform) stage
|
|
22
|
+
#include "adapters/MelSpectrogramStage.h" // Mel Spectrogram stage
|
|
23
|
+
#include "adapters/MfccStage.h" // MFCC (Mel-Frequency Cepstral Coefficients) stage
|
|
21
24
|
#include "adapters/MatrixTransformStage.h" // Matrix Transform stage (PCA/ICA/Whitening)
|
|
22
25
|
#include "adapters/GscPreprocessorStage.h" // GSC Preprocessor for adaptive beamforming
|
|
23
26
|
#include "adapters/ChannelSelectorStage.h" // Channel selector for reducing channel count
|
|
@@ -574,6 +577,108 @@ namespace dsp
|
|
|
574
577
|
return std::make_unique<dsp::adapters::HilbertEnvelopeStage>(windowSize, hopSize);
|
|
575
578
|
};
|
|
576
579
|
|
|
580
|
+
// Factory for STFT (Short-Time Fourier Transform) stage
|
|
581
|
+
m_stageFactories["stft"] = [](const Napi::Object ¶ms)
|
|
582
|
+
{
|
|
583
|
+
if (!params.Has("windowSize"))
|
|
584
|
+
{
|
|
585
|
+
throw std::invalid_argument("STFT: 'windowSize' is required");
|
|
586
|
+
}
|
|
587
|
+
size_t windowSize = params.Get("windowSize").As<Napi::Number>().Uint32Value();
|
|
588
|
+
|
|
589
|
+
// Get optional parameters with defaults
|
|
590
|
+
size_t hopSize = windowSize / 2; // Default: 50% overlap
|
|
591
|
+
if (params.Has("hopSize"))
|
|
592
|
+
{
|
|
593
|
+
hopSize = params.Get("hopSize").As<Napi::Number>().Uint32Value();
|
|
594
|
+
}
|
|
595
|
+
|
|
596
|
+
std::string method = "fft"; // Default: fft
|
|
597
|
+
if (params.Has("method"))
|
|
598
|
+
{
|
|
599
|
+
method = params.Get("method").As<Napi::String>().Utf8Value();
|
|
600
|
+
}
|
|
601
|
+
|
|
602
|
+
std::string type = "real"; // Default: real
|
|
603
|
+
if (params.Has("type"))
|
|
604
|
+
{
|
|
605
|
+
type = params.Get("type").As<Napi::String>().Utf8Value();
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
bool forward = true; // Default: forward transform
|
|
609
|
+
if (params.Has("forward"))
|
|
610
|
+
{
|
|
611
|
+
forward = params.Get("forward").As<Napi::Boolean>().Value();
|
|
612
|
+
}
|
|
613
|
+
|
|
614
|
+
std::string output = "magnitude"; // Default: magnitude
|
|
615
|
+
if (params.Has("output"))
|
|
616
|
+
{
|
|
617
|
+
output = params.Get("output").As<Napi::String>().Utf8Value();
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
std::string window = "hann"; // Default: hann window
|
|
621
|
+
if (params.Has("window"))
|
|
622
|
+
{
|
|
623
|
+
window = params.Get("window").As<Napi::String>().Utf8Value();
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
return std::make_unique<dsp::adapters::StftStage>(
|
|
627
|
+
windowSize, hopSize, method, type, forward, output, window);
|
|
628
|
+
};
|
|
629
|
+
|
|
630
|
+
// Factory for Mel Spectrogram stage
|
|
631
|
+
m_stageFactories["melSpectrogram"] = [](const Napi::Object ¶ms)
|
|
632
|
+
{
|
|
633
|
+
if (!params.Has("filterbankMatrix") || !params.Has("numBins") || !params.Has("numMelBands"))
|
|
634
|
+
{
|
|
635
|
+
throw std::invalid_argument("MelSpectrogram: requires 'filterbankMatrix', 'numBins', 'numMelBands'");
|
|
636
|
+
}
|
|
637
|
+
|
|
638
|
+
Napi::Float32Array filterbankArray = params.Get("filterbankMatrix").As<Napi::Float32Array>();
|
|
639
|
+
size_t numBins = params.Get("numBins").As<Napi::Number>().Uint32Value();
|
|
640
|
+
size_t numMelBands = params.Get("numMelBands").As<Napi::Number>().Uint32Value();
|
|
641
|
+
|
|
642
|
+
std::vector<float> filterbank(filterbankArray.Data(),
|
|
643
|
+
filterbankArray.Data() + filterbankArray.ElementLength());
|
|
644
|
+
|
|
645
|
+
return std::make_unique<dsp::adapters::MelSpectrogramStage>(
|
|
646
|
+
filterbank, numBins, numMelBands);
|
|
647
|
+
};
|
|
648
|
+
|
|
649
|
+
// Factory for MFCC stage
|
|
650
|
+
m_stageFactories["mfcc"] = [](const Napi::Object ¶ms)
|
|
651
|
+
{
|
|
652
|
+
if (!params.Has("numMelBands"))
|
|
653
|
+
{
|
|
654
|
+
throw std::invalid_argument("MFCC: 'numMelBands' is required");
|
|
655
|
+
}
|
|
656
|
+
|
|
657
|
+
size_t numMelBands = params.Get("numMelBands").As<Napi::Number>().Uint32Value();
|
|
658
|
+
|
|
659
|
+
// Optional parameters with defaults
|
|
660
|
+
size_t numCoefficients = 13; // Default: 13 MFCCs
|
|
661
|
+
if (params.Has("numCoefficients"))
|
|
662
|
+
{
|
|
663
|
+
numCoefficients = params.Get("numCoefficients").As<Napi::Number>().Uint32Value();
|
|
664
|
+
}
|
|
665
|
+
|
|
666
|
+
bool useLogEnergy = true; // Default: apply log
|
|
667
|
+
if (params.Has("useLogEnergy"))
|
|
668
|
+
{
|
|
669
|
+
useLogEnergy = params.Get("useLogEnergy").As<Napi::Boolean>().Value();
|
|
670
|
+
}
|
|
671
|
+
|
|
672
|
+
float lifterCoefficient = 0.0f; // Default: no liftering
|
|
673
|
+
if (params.Has("lifterCoefficient"))
|
|
674
|
+
{
|
|
675
|
+
lifterCoefficient = params.Get("lifterCoefficient").As<Napi::Number>().FloatValue();
|
|
676
|
+
}
|
|
677
|
+
|
|
678
|
+
return std::make_unique<dsp::adapters::MfccStage>(
|
|
679
|
+
numMelBands, numCoefficients, useLogEnergy, lifterCoefficient);
|
|
680
|
+
};
|
|
681
|
+
|
|
577
682
|
// Factory for PCA Transform stage
|
|
578
683
|
m_stageFactories["pcaTransform"] = [](const Napi::Object ¶ms)
|
|
579
684
|
{
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mel Spectrogram Pipeline Stage
|
|
3
|
+
*
|
|
4
|
+
* Converts power spectrum to Mel-scale representation using filterbank matrix multiplication.
|
|
5
|
+
* This is a STATELESS operation that applies the Mel filterbank to incoming power spectra.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - High-performance matrix multiplication using Eigen
|
|
9
|
+
* - Pre-computed Mel filterbank (passed from TypeScript)
|
|
10
|
+
* - Processes power spectrum bins → Mel frequency bins
|
|
11
|
+
* - Multi-channel support (each channel processed independently)
|
|
12
|
+
*
|
|
13
|
+
* Mathematical Operation:
|
|
14
|
+
* mel_energies = filterbank × power_spectrum
|
|
15
|
+
* where:
|
|
16
|
+
* - power_spectrum is (numBins × 1) vector
|
|
17
|
+
* - filterbank is (numMelBands × numBins) matrix
|
|
18
|
+
* - mel_energies is (numMelBands × 1) vector
|
|
19
|
+
*
|
|
20
|
+
* Typical Pipeline:
|
|
21
|
+
* STFT → Power → MelSpectrogram → Log → MFCC
|
|
22
|
+
*
|
|
23
|
+
* Parameters:
|
|
24
|
+
* - filterbankMatrix: Pre-computed Mel filterbank (TypeScript provides this)
|
|
25
|
+
* - numBins: Number of input frequency bins (from STFT/FFT)
|
|
26
|
+
* - numMelBands: Number of Mel frequency bands (output size)
|
|
27
|
+
*/
|
|
28
|
+
|
|
29
|
+
#pragma once
|
|
30
|
+
|
|
31
|
+
#include "../IDspStage.h"
|
|
32
|
+
#include <Eigen/Dense>
|
|
33
|
+
#include <vector>
|
|
34
|
+
#include <memory>
|
|
35
|
+
#include <stdexcept>
|
|
36
|
+
#include <string>
|
|
37
|
+
#include <cmath>
|
|
38
|
+
|
|
39
|
+
namespace dsp::adapters
|
|
40
|
+
{
|
|
41
|
+
class MelSpectrogramStage : public IDspStage
|
|
42
|
+
{
|
|
43
|
+
public:
|
|
44
|
+
/**
|
|
45
|
+
* @brief Constructs a Mel Spectrogram stage
|
|
46
|
+
* @param filterbank_matrix Pre-computed Mel filterbank (numMelBands × numBins), row-major
|
|
47
|
+
* @param num_bins Number of input frequency bins
|
|
48
|
+
* @param num_mel_bands Number of output Mel frequency bands
|
|
49
|
+
*/
|
|
50
|
+
explicit MelSpectrogramStage(
|
|
51
|
+
const std::vector<float> &filterbank_matrix,
|
|
52
|
+
size_t num_bins,
|
|
53
|
+
size_t num_mel_bands)
|
|
54
|
+
: m_numBins(num_bins),
|
|
55
|
+
m_numMelBands(num_mel_bands),
|
|
56
|
+
m_filterbank(num_mel_bands, num_bins)
|
|
57
|
+
{
|
|
58
|
+
// Validate parameters
|
|
59
|
+
if (m_numBins == 0)
|
|
60
|
+
{
|
|
61
|
+
throw std::invalid_argument("MelSpectrogram: num_bins must be greater than 0");
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
if (m_numMelBands == 0)
|
|
65
|
+
{
|
|
66
|
+
throw std::invalid_argument("MelSpectrogram: num_mel_bands must be greater than 0");
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (filterbank_matrix.size() != num_mel_bands * num_bins)
|
|
70
|
+
{
|
|
71
|
+
throw std::invalid_argument(
|
|
72
|
+
"MelSpectrogram: filterbank matrix size (" +
|
|
73
|
+
std::to_string(filterbank_matrix.size()) +
|
|
74
|
+
") must equal numMelBands × numBins (" +
|
|
75
|
+
std::to_string(num_mel_bands * num_bins) + ")");
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Copy filterbank matrix (input is row-major from TypeScript)
|
|
79
|
+
// Eigen uses column-major by default, so we need to specify row-major
|
|
80
|
+
m_filterbank = Eigen::Map<const Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>>(
|
|
81
|
+
filterbank_matrix.data(), num_mel_bands, num_bins);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
const char *getType() const override
|
|
85
|
+
{
|
|
86
|
+
return "melSpectrogram";
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
bool isResizing() const override
|
|
90
|
+
{
|
|
91
|
+
return true; // This stage changes output size
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
void process(float *buffer, size_t numSamples, int numChannels, const float *timestamps = nullptr) override
|
|
95
|
+
{
|
|
96
|
+
// This stage changes output size - processResizing() should be called instead
|
|
97
|
+
throw std::runtime_error("MelSpectrogram stage requires processResizing() to be called");
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
size_t calculateOutputSize(size_t inputSize) const override
|
|
101
|
+
{
|
|
102
|
+
// Input has numBins per frame, output has numMelBands per frame
|
|
103
|
+
// Example: 10 samples, 2 channels, numBins=5 → samplesPerChannel=5, numFrames=1
|
|
104
|
+
// Output: 1 frame × numMelBands × numChannels
|
|
105
|
+
// Since we don't know numChannels here, we need to handle it in processResizing
|
|
106
|
+
// For now, return based on the ratio: (numMelBands / numBins) * inputSize
|
|
107
|
+
return (inputSize / m_numBins) * m_numMelBands;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
void processResizing(const float *inputBuffer, size_t inputSize,
|
|
111
|
+
float *outputBuffer, size_t &outputSize,
|
|
112
|
+
int numChannels, const float *timestamps = nullptr) override
|
|
113
|
+
{
|
|
114
|
+
// Calculate how many complete spectrum frames we have
|
|
115
|
+
// Each frame should be numBins samples per channel
|
|
116
|
+
size_t samplesPerChannel = inputSize / numChannels;
|
|
117
|
+
size_t numFrames = samplesPerChannel / m_numBins;
|
|
118
|
+
|
|
119
|
+
if (numFrames == 0)
|
|
120
|
+
{
|
|
121
|
+
// Not enough data for even one frame - output nothing
|
|
122
|
+
outputSize = 0;
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Calculate output size
|
|
127
|
+
outputSize = numFrames * m_numMelBands * numChannels;
|
|
128
|
+
|
|
129
|
+
// Temporary buffers for Eigen operations
|
|
130
|
+
Eigen::VectorXf input(m_numBins);
|
|
131
|
+
Eigen::VectorXf output(m_numMelBands);
|
|
132
|
+
|
|
133
|
+
// Process each channel independently
|
|
134
|
+
for (int ch = 0; ch < numChannels; ++ch)
|
|
135
|
+
{
|
|
136
|
+
// Process each frame for this channel
|
|
137
|
+
for (size_t frame = 0; frame < numFrames; ++frame)
|
|
138
|
+
{
|
|
139
|
+
// Extract input spectrum (de-interleaved)
|
|
140
|
+
for (size_t i = 0; i < m_numBins; ++i)
|
|
141
|
+
{
|
|
142
|
+
size_t index = (frame * m_numBins + i) * numChannels + ch;
|
|
143
|
+
input(i) = inputBuffer[index];
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
// Apply Mel filterbank: mel_energies = filterbank × power_spectrum
|
|
147
|
+
output = m_filterbank * input;
|
|
148
|
+
|
|
149
|
+
// Write output (re-interleaved)
|
|
150
|
+
for (size_t i = 0; i < m_numMelBands; ++i)
|
|
151
|
+
{
|
|
152
|
+
size_t outIndex = (frame * m_numMelBands + i) * numChannels + ch;
|
|
153
|
+
outputBuffer[outIndex] = output(i);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
Napi::Object serializeState(Napi::Env env) const override
|
|
160
|
+
{
|
|
161
|
+
Napi::Object state = Napi::Object::New(env);
|
|
162
|
+
state.Set("numBins", Napi::Number::New(env, m_numBins));
|
|
163
|
+
state.Set("numMelBands", Napi::Number::New(env, m_numMelBands));
|
|
164
|
+
|
|
165
|
+
// Serialize filterbank matrix (row-major)
|
|
166
|
+
Napi::Array filterbankArray = Napi::Array::New(env, m_numMelBands * m_numBins);
|
|
167
|
+
for (size_t i = 0; i < m_numMelBands; ++i)
|
|
168
|
+
{
|
|
169
|
+
for (size_t j = 0; j < m_numBins; ++j)
|
|
170
|
+
{
|
|
171
|
+
filterbankArray.Set(i * m_numBins + j, Napi::Number::New(env, m_filterbank(i, j)));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
state.Set("filterbank", filterbankArray);
|
|
175
|
+
|
|
176
|
+
return state;
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
void deserializeState(const Napi::Object &state) override
|
|
180
|
+
{
|
|
181
|
+
size_t numBins = state.Get("numBins").As<Napi::Number>().Uint32Value();
|
|
182
|
+
size_t numMelBands = state.Get("numMelBands").As<Napi::Number>().Uint32Value();
|
|
183
|
+
|
|
184
|
+
if (numBins != m_numBins || numMelBands != m_numMelBands)
|
|
185
|
+
{
|
|
186
|
+
throw std::runtime_error("MelSpectrogram: Dimension mismatch during deserialization");
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Restore filterbank matrix
|
|
190
|
+
Napi::Array filterbankArray = state.Get("filterbank").As<Napi::Array>();
|
|
191
|
+
for (size_t i = 0; i < m_numMelBands; ++i)
|
|
192
|
+
{
|
|
193
|
+
for (size_t j = 0; j < m_numBins; ++j)
|
|
194
|
+
{
|
|
195
|
+
m_filterbank(i, j) = filterbankArray.Get(i * m_numBins + j).As<Napi::Number>().FloatValue();
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
void reset() override
|
|
201
|
+
{
|
|
202
|
+
// Stateless - no reset needed
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
private:
|
|
206
|
+
size_t m_numBins; // Number of input frequency bins
|
|
207
|
+
size_t m_numMelBands; // Number of output Mel bands
|
|
208
|
+
Eigen::MatrixXf m_filterbank; // Mel filterbank matrix (numMelBands × numBins)
|
|
209
|
+
};
|
|
210
|
+
|
|
211
|
+
} // namespace dsp::adapters
|