dspx 1.1.5 → 1.2.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 +31 -0
- package/dist/bindings.d.ts +59 -14
- package/dist/bindings.d.ts.map +1 -1
- package/dist/bindings.js +93 -16
- package/dist/bindings.js.map +1 -1
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/prebuilds/win32-x64/dspx.node +0 -0
- package/src/native/DspPipeline.cc +22 -1
- package/src/native/adapters/ConvolutionStage.h +254 -183
- package/src/native/adapters/PeakDetectionStage.h +181 -68
- package/src/native/core/PeakDetection.h +225 -0
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
|
Binary file
|
|
@@ -882,9 +882,30 @@ namespace dsp
|
|
|
882
882
|
throw std::invalid_argument("PeakDetection: requires 'threshold' parameter");
|
|
883
883
|
}
|
|
884
884
|
|
|
885
|
+
if (!params.Has("mode"))
|
|
886
|
+
{
|
|
887
|
+
throw std::invalid_argument("PeakDetection: requires 'mode' parameter");
|
|
888
|
+
}
|
|
889
|
+
|
|
885
890
|
float threshold = params.Get("threshold").As<Napi::Number>().FloatValue();
|
|
886
891
|
|
|
887
|
-
|
|
892
|
+
// Optional mode and domain parameters
|
|
893
|
+
std::string mode = params.Has("mode")
|
|
894
|
+
? params.Get("mode").As<Napi::String>().Utf8Value()
|
|
895
|
+
: "moving";
|
|
896
|
+
std::string domain = params.Has("domain")
|
|
897
|
+
? params.Get("domain").As<Napi::String>().Utf8Value()
|
|
898
|
+
: "time";
|
|
899
|
+
|
|
900
|
+
// Get new optional windowSize and minPeakDistance
|
|
901
|
+
int windowSize = params.Has("windowSize")
|
|
902
|
+
? params.Get("windowSize").As<Napi::Number>().Int32Value()
|
|
903
|
+
: 3;
|
|
904
|
+
int minPeakDistance = params.Has("minPeakDistance")
|
|
905
|
+
? params.Get("minPeakDistance").As<Napi::Number>().Int32Value()
|
|
906
|
+
: 1;
|
|
907
|
+
|
|
908
|
+
return std::make_unique<dsp::adapters::PeakDetectionStage>(threshold, mode, domain, windowSize, minPeakDistance);
|
|
888
909
|
};
|
|
889
910
|
|
|
890
911
|
// ===================================================================
|
|
@@ -66,10 +66,38 @@ namespace dsp::adapters
|
|
|
66
66
|
return "convolution";
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
/**
|
|
70
|
+
* @brief Batch mode convolution resizes the buffer (N -> N - M + 1).
|
|
71
|
+
* Moving mode does not resize (N -> N).
|
|
72
|
+
*/
|
|
73
|
+
bool isResizing() const override
|
|
74
|
+
{
|
|
75
|
+
return (m_mode == ConvolutionMode::Batch);
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/**
|
|
79
|
+
* @brief Calculate output size for batch mode valid convolution.
|
|
80
|
+
* Output length = (N - M + 1) * channels, where N is samplesPerChannel and M is kernel size.
|
|
81
|
+
*/
|
|
82
|
+
size_t calculateOutputSize(size_t inputSize) const override
|
|
83
|
+
{
|
|
84
|
+
if (m_mode == ConvolutionMode::Moving)
|
|
85
|
+
{
|
|
86
|
+
return inputSize; // Same size output
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// Batch mode: valid convolution reduces size
|
|
90
|
+
// inputSize is total samples (numSamples * numChannels)
|
|
91
|
+
// We'll handle the actual calculation in processResizing
|
|
92
|
+
return inputSize; // Will be recalculated with proper channel info in processResizing
|
|
93
|
+
}
|
|
94
|
+
|
|
69
95
|
void process(float *buffer, size_t numSamples, int numChannels, const float *timestamps = nullptr) override
|
|
70
96
|
{
|
|
71
97
|
if (m_mode == ConvolutionMode::Batch)
|
|
72
98
|
{
|
|
99
|
+
// Batch mode is handled by processResizing() since it resizes the buffer
|
|
100
|
+
// This should not be called for batch mode if isResizing() returns true
|
|
73
101
|
processBatch(buffer, numSamples, numChannels);
|
|
74
102
|
}
|
|
75
103
|
else // ConvolutionMode::Moving
|
|
@@ -78,6 +106,40 @@ namespace dsp::adapters
|
|
|
78
106
|
}
|
|
79
107
|
}
|
|
80
108
|
|
|
109
|
+
/**
|
|
110
|
+
* @brief Process with buffer resizing (for batch mode convolution).
|
|
111
|
+
* Computes valid convolution where output length = N - M + 1.
|
|
112
|
+
*/
|
|
113
|
+
void processResizing(const float *inputBuffer, size_t inputSize,
|
|
114
|
+
float *outputBuffer, size_t &outputSize,
|
|
115
|
+
int numChannels, const float *timestamps = nullptr) override
|
|
116
|
+
{
|
|
117
|
+
size_t samplesPerChannel = inputSize / numChannels;
|
|
118
|
+
size_t kernelSize = m_kernel.size();
|
|
119
|
+
|
|
120
|
+
// Valid convolution output length: N - M + 1
|
|
121
|
+
if (samplesPerChannel < kernelSize)
|
|
122
|
+
{
|
|
123
|
+
// Not enough samples for valid convolution
|
|
124
|
+
outputSize = 0;
|
|
125
|
+
return;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
size_t outputSamplesPerChannel = samplesPerChannel - kernelSize + 1;
|
|
129
|
+
outputSize = outputSamplesPerChannel * numChannels;
|
|
130
|
+
|
|
131
|
+
// Copy input to temporary buffer (we'll process from inputBuffer to outputBuffer)
|
|
132
|
+
// For batch mode, we use the batch convolution logic
|
|
133
|
+
if (m_actualMethod == ConvolutionMethod::Direct)
|
|
134
|
+
{
|
|
135
|
+
processResizingDirect(inputBuffer, samplesPerChannel, outputBuffer, outputSamplesPerChannel, numChannels);
|
|
136
|
+
}
|
|
137
|
+
else // FFT
|
|
138
|
+
{
|
|
139
|
+
processResizingFFT(inputBuffer, samplesPerChannel, outputBuffer, outputSamplesPerChannel, numChannels);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
|
|
81
143
|
void reset() override
|
|
82
144
|
{
|
|
83
145
|
if (m_mode == ConvolutionMode::Moving)
|
|
@@ -278,144 +340,263 @@ namespace dsp::adapters
|
|
|
278
340
|
}
|
|
279
341
|
|
|
280
342
|
/**
|
|
281
|
-
* @brief Process in batch (stateless) mode.
|
|
343
|
+
* @brief Process in batch (stateless) mode - IN-PLACE VERSION.
|
|
344
|
+
* Only used if isResizing() is false (which it's not for batch mode).
|
|
345
|
+
* This is kept for backward compatibility but should use processResizing().
|
|
282
346
|
*/
|
|
283
347
|
void processBatch(float *buffer, size_t numSamples, int numChannels)
|
|
284
348
|
{
|
|
349
|
+
// For batch mode, we should be using processResizing() since isResizing() returns true
|
|
350
|
+
// But if called directly (legacy), we still handle it
|
|
351
|
+
size_t samplesPerChannel = numSamples / numChannels;
|
|
352
|
+
size_t kernelSize = m_kernel.size();
|
|
353
|
+
|
|
354
|
+
if (samplesPerChannel < kernelSize)
|
|
355
|
+
{
|
|
356
|
+
std::fill_n(buffer, numSamples, 0.0f);
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
|
|
360
|
+
size_t outputSamplesPerChannel = samplesPerChannel - kernelSize + 1;
|
|
361
|
+
size_t outputSize = outputSamplesPerChannel * numChannels;
|
|
362
|
+
|
|
363
|
+
// Process using resizing logic but write back to same buffer (truncated)
|
|
285
364
|
if (m_actualMethod == ConvolutionMethod::Direct)
|
|
286
365
|
{
|
|
287
|
-
|
|
366
|
+
processResizingDirect(buffer, samplesPerChannel, buffer, outputSamplesPerChannel, numChannels);
|
|
288
367
|
}
|
|
289
368
|
else // FFT
|
|
290
369
|
{
|
|
291
|
-
|
|
370
|
+
processResizingFFT(buffer, samplesPerChannel, buffer, outputSamplesPerChannel, numChannels);
|
|
292
371
|
}
|
|
372
|
+
|
|
373
|
+
// Note: buffer now contains outputSize valid samples at the beginning
|
|
293
374
|
}
|
|
294
375
|
|
|
295
376
|
/**
|
|
296
|
-
* @brief Direct convolution
|
|
377
|
+
* @brief Direct convolution for batch mode - processes from input to output buffers.
|
|
297
378
|
*
|
|
298
|
-
*
|
|
299
|
-
*
|
|
300
|
-
* FIR filter for true streaming processing.
|
|
379
|
+
* Computes VALID convolution where the kernel fully overlaps the signal.
|
|
380
|
+
* Output length is outputSamplesPerChannel = inputSamplesPerChannel - M + 1.
|
|
301
381
|
*
|
|
302
|
-
*
|
|
303
|
-
*
|
|
382
|
+
* For input [1,2,3,4,5] and kernel [1,0,-1]:
|
|
383
|
+
* output[0] = 1*1 + 0*2 + (-1)*3 = -2
|
|
384
|
+
* output[1] = 1*2 + 0*3 + (-1)*4 = -2
|
|
385
|
+
* output[2] = 1*3 + 0*4 + (-1)*5 = -2
|
|
304
386
|
*/
|
|
305
|
-
void
|
|
387
|
+
void processResizingDirect(const float *inputBuffer, size_t inputSamplesPerChannel,
|
|
388
|
+
float *outputBuffer, size_t outputSamplesPerChannel,
|
|
389
|
+
int numChannels)
|
|
306
390
|
{
|
|
307
|
-
size_t
|
|
391
|
+
size_t kernelSize = m_kernel.size();
|
|
308
392
|
|
|
309
|
-
//
|
|
310
|
-
if (
|
|
393
|
+
// Resize de-interleaved buffers if needed
|
|
394
|
+
if (m_deinterleaved_buffers.size() != static_cast<size_t>(numChannels))
|
|
311
395
|
{
|
|
312
|
-
|
|
313
|
-
|
|
396
|
+
m_deinterleaved_buffers.resize(numChannels);
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
for (int ch = 0; ch < numChannels; ++ch)
|
|
400
|
+
{
|
|
401
|
+
if (m_deinterleaved_buffers[ch].size() != inputSamplesPerChannel)
|
|
314
402
|
{
|
|
315
|
-
|
|
316
|
-
std::make_unique<core::FirFilterNeon>(m_kernel));
|
|
403
|
+
m_deinterleaved_buffers[ch].resize(inputSamplesPerChannel);
|
|
317
404
|
}
|
|
318
405
|
}
|
|
319
406
|
|
|
320
|
-
//
|
|
321
|
-
|
|
322
|
-
|
|
407
|
+
// Resize output buffer
|
|
408
|
+
if (m_temp_output_channel.size() != outputSamplesPerChannel)
|
|
409
|
+
{
|
|
410
|
+
m_temp_output_channel.resize(outputSamplesPerChannel);
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
// Step 1: De-interleave input data
|
|
323
414
|
for (int ch = 0; ch < numChannels; ++ch)
|
|
324
415
|
{
|
|
325
|
-
|
|
416
|
+
for (size_t i = 0; i < inputSamplesPerChannel; ++i)
|
|
417
|
+
{
|
|
418
|
+
m_deinterleaved_buffers[ch][i] = inputBuffer[i * numChannels + ch];
|
|
419
|
+
}
|
|
420
|
+
}
|
|
326
421
|
|
|
327
|
-
|
|
328
|
-
|
|
422
|
+
// Step 2: Process each channel - valid convolution
|
|
423
|
+
const float *kernelPtr = m_kernel.data();
|
|
424
|
+
|
|
425
|
+
for (int ch = 0; ch < numChannels; ++ch)
|
|
426
|
+
{
|
|
427
|
+
const float *channelInput = m_deinterleaved_buffers[ch].data();
|
|
428
|
+
float *output = m_temp_output_channel.data();
|
|
429
|
+
|
|
430
|
+
// Valid convolution: y[n] = Σ h[k] * x[n+k] for k=0 to M-1
|
|
431
|
+
for (size_t n = 0; n < outputSamplesPerChannel; ++n)
|
|
329
432
|
{
|
|
330
|
-
|
|
331
|
-
|
|
433
|
+
float sum = 0.0f;
|
|
434
|
+
|
|
435
|
+
// Convolve kernel with signal at position n
|
|
436
|
+
for (size_t k = 0; k < kernelSize; ++k)
|
|
437
|
+
{
|
|
438
|
+
sum += kernelPtr[k] * channelInput[n + k];
|
|
439
|
+
}
|
|
440
|
+
|
|
441
|
+
output[n] = sum;
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
// Step 3: Re-interleave output
|
|
445
|
+
for (size_t i = 0; i < outputSamplesPerChannel; ++i)
|
|
446
|
+
{
|
|
447
|
+
outputBuffer[i * numChannels + ch] = output[i];
|
|
332
448
|
}
|
|
333
449
|
}
|
|
334
450
|
}
|
|
335
451
|
|
|
336
452
|
/**
|
|
337
|
-
* @brief
|
|
338
|
-
*
|
|
339
|
-
* This is the apples-to-apples comparison with the "naive JS" benchmark.
|
|
340
|
-
* It's a simple, stateless loop with NO circular buffers, NO window reversing,
|
|
341
|
-
* and NO per-sample memory copies. Just like the naive JS code, but with
|
|
342
|
-
* de-interleaving for cache-friendly processing and SIMD for the inner loop.
|
|
343
|
-
*
|
|
344
|
-
* For very small kernels (K=8), the simplicity of this algorithm allows the
|
|
345
|
-
* C++ compiler to optimize it aggressively (loop unrolling, SIMD vectorization).
|
|
453
|
+
* @brief FFT convolution for batch mode - processes from input to output buffers.
|
|
346
454
|
*/
|
|
347
|
-
void
|
|
455
|
+
void processResizingFFT(const float *inputBuffer, size_t inputSamplesPerChannel,
|
|
456
|
+
float *outputBuffer, size_t outputSamplesPerChannel,
|
|
457
|
+
int numChannels)
|
|
348
458
|
{
|
|
349
|
-
size_t samplesPerChannel = numSamples / numChannels;
|
|
350
459
|
size_t kernelSize = m_kernel.size();
|
|
351
460
|
|
|
352
|
-
//
|
|
461
|
+
// FFT convolution size must be at least inputSamplesPerChannel + kernelSize - 1
|
|
462
|
+
size_t fftSize = inputSamplesPerChannel + kernelSize - 1;
|
|
463
|
+
|
|
464
|
+
// Round up to next power of 2
|
|
465
|
+
size_t fftSizePow2 = 1;
|
|
466
|
+
while (fftSizePow2 < fftSize)
|
|
467
|
+
{
|
|
468
|
+
fftSizePow2 *= 2;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
// Resize buffers if needed
|
|
472
|
+
if (m_batch_fft_size != fftSizePow2)
|
|
473
|
+
{
|
|
474
|
+
m_batch_fft_size = fftSizePow2;
|
|
475
|
+
size_t halfSize = fftSizePow2 / 2 + 1;
|
|
476
|
+
|
|
477
|
+
m_fft_engine = std::make_unique<core::FftEngine<float>>(fftSizePow2);
|
|
478
|
+
|
|
479
|
+
m_batch_kernel_padded.resize(fftSizePow2);
|
|
480
|
+
m_batch_kernel_fft.resize(halfSize);
|
|
481
|
+
m_batch_channel_data.resize(fftSizePow2);
|
|
482
|
+
m_batch_signal_fft.resize(halfSize);
|
|
483
|
+
m_batch_result.resize(fftSizePow2);
|
|
484
|
+
|
|
485
|
+
// Precompute kernel FFT
|
|
486
|
+
std::fill(m_batch_kernel_padded.begin(), m_batch_kernel_padded.end(), 0.0f);
|
|
487
|
+
std::copy(m_kernel.begin(), m_kernel.end(), m_batch_kernel_padded.begin());
|
|
488
|
+
m_fft_engine->rfft(m_batch_kernel_padded.data(), m_batch_kernel_fft.data());
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
size_t halfSize = m_batch_fft_size / 2 + 1;
|
|
492
|
+
|
|
493
|
+
// Resize de-interleaved buffers
|
|
353
494
|
if (m_deinterleaved_buffers.size() != static_cast<size_t>(numChannels))
|
|
354
495
|
{
|
|
355
496
|
m_deinterleaved_buffers.resize(numChannels);
|
|
356
|
-
for (auto &buf : m_deinterleaved_buffers)
|
|
357
|
-
{
|
|
358
|
-
buf.resize(samplesPerChannel);
|
|
359
|
-
}
|
|
360
497
|
}
|
|
361
|
-
|
|
362
|
-
|
|
498
|
+
|
|
499
|
+
for (int ch = 0; ch < numChannels; ++ch)
|
|
363
500
|
{
|
|
364
|
-
|
|
501
|
+
if (m_deinterleaved_buffers[ch].size() != inputSamplesPerChannel)
|
|
365
502
|
{
|
|
366
|
-
|
|
503
|
+
m_deinterleaved_buffers[ch].resize(inputSamplesPerChannel);
|
|
367
504
|
}
|
|
368
505
|
}
|
|
369
506
|
|
|
370
|
-
|
|
371
|
-
if (m_temp_output_channel.size() != samplesPerChannel)
|
|
507
|
+
if (m_temp_output_channel.size() != outputSamplesPerChannel)
|
|
372
508
|
{
|
|
373
|
-
m_temp_output_channel.resize(
|
|
509
|
+
m_temp_output_channel.resize(outputSamplesPerChannel);
|
|
374
510
|
}
|
|
375
511
|
|
|
376
|
-
// Step 1: De-interleave input data
|
|
512
|
+
// Step 1: De-interleave input data
|
|
377
513
|
for (int ch = 0; ch < numChannels; ++ch)
|
|
378
514
|
{
|
|
379
|
-
for (size_t i = 0; i <
|
|
515
|
+
for (size_t i = 0; i < inputSamplesPerChannel; ++i)
|
|
380
516
|
{
|
|
381
|
-
m_deinterleaved_buffers[ch][i] =
|
|
517
|
+
m_deinterleaved_buffers[ch][i] = inputBuffer[i * numChannels + ch];
|
|
382
518
|
}
|
|
383
519
|
}
|
|
384
520
|
|
|
385
|
-
// Step 2: Process each channel
|
|
386
|
-
const float *kernelPtr = m_kernel.data();
|
|
387
|
-
|
|
521
|
+
// Step 2: Process each channel
|
|
388
522
|
for (int ch = 0; ch < numChannels; ++ch)
|
|
389
523
|
{
|
|
390
|
-
|
|
391
|
-
|
|
524
|
+
// Zero-pad channel data
|
|
525
|
+
std::fill(m_batch_channel_data.begin(), m_batch_channel_data.end(), 0.0f);
|
|
526
|
+
std::copy(m_deinterleaved_buffers[ch].begin(),
|
|
527
|
+
m_deinterleaved_buffers[ch].end(),
|
|
528
|
+
m_batch_channel_data.begin());
|
|
392
529
|
|
|
393
|
-
//
|
|
394
|
-
|
|
530
|
+
// FFT of signal
|
|
531
|
+
m_fft_engine->rfft(m_batch_channel_data.data(), m_batch_signal_fft.data());
|
|
532
|
+
|
|
533
|
+
// Complex multiplication in frequency domain
|
|
534
|
+
for (size_t i = 0; i < halfSize; ++i)
|
|
395
535
|
{
|
|
396
|
-
|
|
536
|
+
m_batch_signal_fft[i] *= m_batch_kernel_fft[i];
|
|
537
|
+
}
|
|
397
538
|
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
{
|
|
401
|
-
if (n >= k)
|
|
402
|
-
{
|
|
403
|
-
sum += kernelPtr[k] * channelInput[n - k];
|
|
404
|
-
}
|
|
405
|
-
}
|
|
539
|
+
// IFFT to get convolution result
|
|
540
|
+
m_fft_engine->irfft(m_batch_signal_fft.data(), m_batch_result.data());
|
|
406
541
|
|
|
407
|
-
|
|
542
|
+
// Copy valid portion to output buffer
|
|
543
|
+
for (size_t i = 0; i < outputSamplesPerChannel; ++i)
|
|
544
|
+
{
|
|
545
|
+
m_temp_output_channel[i] = m_batch_result[i];
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
// Step 3: Re-interleave output
|
|
549
|
+
for (size_t i = 0; i < outputSamplesPerChannel; ++i)
|
|
550
|
+
{
|
|
551
|
+
outputBuffer[i * numChannels + ch] = m_temp_output_channel[i];
|
|
552
|
+
}
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
/**
|
|
557
|
+
* @brief Direct convolution in moving mode - Ultra high-performance version.
|
|
558
|
+
*
|
|
559
|
+
* Uses FirFilterNeon with O(1) guard-zone circular buffer instead of
|
|
560
|
+
* the old O(N) memmove approach. Each channel maintains its own stateful
|
|
561
|
+
* FIR filter for true streaming processing.
|
|
562
|
+
*
|
|
563
|
+
* Key optimization: The FirFilterNeon class handles all state management
|
|
564
|
+
* with O(1) updates and fully vectorized NEON convolution.
|
|
565
|
+
*/
|
|
566
|
+
void processMovingDirect(float *buffer, size_t numSamples, int numChannels)
|
|
567
|
+
{
|
|
568
|
+
size_t samplesPerChannel = numSamples / numChannels;
|
|
569
|
+
|
|
570
|
+
// Initialize FIR filters for each channel (only once)
|
|
571
|
+
if (m_moving_fir_filters.size() != static_cast<size_t>(numChannels))
|
|
572
|
+
{
|
|
573
|
+
m_moving_fir_filters.clear();
|
|
574
|
+
for (int ch = 0; ch < numChannels; ++ch)
|
|
575
|
+
{
|
|
576
|
+
m_moving_fir_filters.push_back(
|
|
577
|
+
std::make_unique<core::FirFilterNeon>(m_kernel));
|
|
408
578
|
}
|
|
579
|
+
}
|
|
409
580
|
|
|
410
|
-
|
|
581
|
+
// Process each channel with stateful FIR filter
|
|
582
|
+
// For interleaved data, we process per-sample but the FirFilterNeon
|
|
583
|
+
// uses O(1) circular buffer updates (no memmove!)
|
|
584
|
+
for (int ch = 0; ch < numChannels; ++ch)
|
|
585
|
+
{
|
|
586
|
+
auto &fir = m_moving_fir_filters[ch];
|
|
587
|
+
|
|
588
|
+
// Process all samples for this channel (stateful streaming)
|
|
411
589
|
for (size_t i = 0; i < samplesPerChannel; ++i)
|
|
412
590
|
{
|
|
413
|
-
|
|
591
|
+
size_t idx = i * numChannels + ch;
|
|
592
|
+
buffer[idx] = fir->processSample(buffer[idx]);
|
|
414
593
|
}
|
|
415
594
|
}
|
|
416
|
-
}
|
|
417
|
-
|
|
418
|
-
|
|
595
|
+
}
|
|
596
|
+
|
|
597
|
+
/**
|
|
598
|
+
* @brief Initialize overlap-add FFT state for each channel.
|
|
599
|
+
*/
|
|
419
600
|
void initializeOverlapAdd(int numChannels)
|
|
420
601
|
{
|
|
421
602
|
if (!m_is_initialized || static_cast<int>(m_overlap_buffers.size()) != numChannels)
|
|
@@ -520,116 +701,6 @@ namespace dsp::adapters
|
|
|
520
701
|
}
|
|
521
702
|
}
|
|
522
703
|
}
|
|
523
|
-
} /**
|
|
524
|
-
* @brief FFT convolution in batch mode.
|
|
525
|
-
*
|
|
526
|
-
* Uses FFT-based fast convolution: FFT(x) * FFT(h) -> IFFT
|
|
527
|
-
*/
|
|
528
|
-
void processBatchFFT(float *buffer, size_t numSamples, int numChannels)
|
|
529
|
-
{
|
|
530
|
-
size_t samplesPerChannel = numSamples / numChannels;
|
|
531
|
-
size_t kernelSize = m_kernel.size();
|
|
532
|
-
|
|
533
|
-
// FFT convolution size must be at least N + M - 1
|
|
534
|
-
size_t fftSize = samplesPerChannel + kernelSize - 1;
|
|
535
|
-
|
|
536
|
-
// Round up to next power of 2 for efficiency
|
|
537
|
-
size_t fftSizePow2 = 1;
|
|
538
|
-
while (fftSizePow2 < fftSize)
|
|
539
|
-
{
|
|
540
|
-
fftSizePow2 *= 2;
|
|
541
|
-
}
|
|
542
|
-
|
|
543
|
-
// Resize buffers only if FFT size changed (avoid reallocation on every call)
|
|
544
|
-
if (m_batch_fft_size != fftSizePow2)
|
|
545
|
-
{
|
|
546
|
-
m_batch_fft_size = fftSizePow2;
|
|
547
|
-
size_t halfSize = fftSizePow2 / 2 + 1;
|
|
548
|
-
|
|
549
|
-
// Create/resize FFT engine
|
|
550
|
-
m_fft_engine = std::make_unique<core::FftEngine<float>>(fftSizePow2);
|
|
551
|
-
|
|
552
|
-
// Pre-allocate buffers
|
|
553
|
-
m_batch_kernel_padded.resize(fftSizePow2);
|
|
554
|
-
m_batch_kernel_fft.resize(halfSize);
|
|
555
|
-
m_batch_channel_data.resize(fftSizePow2);
|
|
556
|
-
m_batch_signal_fft.resize(halfSize);
|
|
557
|
-
m_batch_result.resize(fftSizePow2);
|
|
558
|
-
|
|
559
|
-
// Zero-pad kernel and compute FFT (only once per size)
|
|
560
|
-
std::fill(m_batch_kernel_padded.begin(), m_batch_kernel_padded.end(), 0.0f);
|
|
561
|
-
std::copy(m_kernel.begin(), m_kernel.end(), m_batch_kernel_padded.begin());
|
|
562
|
-
m_fft_engine->rfft(m_batch_kernel_padded.data(), m_batch_kernel_fft.data());
|
|
563
|
-
}
|
|
564
|
-
|
|
565
|
-
size_t halfSize = m_batch_fft_size / 2 + 1;
|
|
566
|
-
|
|
567
|
-
// Resize de-interleaved buffers if needed
|
|
568
|
-
if (m_deinterleaved_buffers.size() != static_cast<size_t>(numChannels))
|
|
569
|
-
{
|
|
570
|
-
m_deinterleaved_buffers.resize(numChannels);
|
|
571
|
-
for (auto &buf : m_deinterleaved_buffers)
|
|
572
|
-
{
|
|
573
|
-
buf.resize(samplesPerChannel);
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
else if (!m_deinterleaved_buffers.empty() &&
|
|
577
|
-
m_deinterleaved_buffers[0].size() != samplesPerChannel)
|
|
578
|
-
{
|
|
579
|
-
for (auto &buf : m_deinterleaved_buffers)
|
|
580
|
-
{
|
|
581
|
-
buf.resize(samplesPerChannel);
|
|
582
|
-
}
|
|
583
|
-
}
|
|
584
|
-
|
|
585
|
-
// Resize output buffer
|
|
586
|
-
if (m_temp_output_channel.size() != samplesPerChannel)
|
|
587
|
-
{
|
|
588
|
-
m_temp_output_channel.resize(samplesPerChannel);
|
|
589
|
-
}
|
|
590
|
-
|
|
591
|
-
// Step 1: De-interleave all input data (improves cache locality)
|
|
592
|
-
for (int ch = 0; ch < numChannels; ++ch)
|
|
593
|
-
{
|
|
594
|
-
for (size_t i = 0; i < samplesPerChannel; ++i)
|
|
595
|
-
{
|
|
596
|
-
m_deinterleaved_buffers[ch][i] = buffer[i * numChannels + ch];
|
|
597
|
-
}
|
|
598
|
-
}
|
|
599
|
-
|
|
600
|
-
// Step 2: Process each channel on contiguous memory
|
|
601
|
-
for (int ch = 0; ch < numChannels; ++ch)
|
|
602
|
-
{
|
|
603
|
-
// Zero-pad channel data using pre-allocated buffer
|
|
604
|
-
std::fill(m_batch_channel_data.begin(), m_batch_channel_data.end(), 0.0f);
|
|
605
|
-
std::copy(m_deinterleaved_buffers[ch].begin(),
|
|
606
|
-
m_deinterleaved_buffers[ch].end(),
|
|
607
|
-
m_batch_channel_data.begin());
|
|
608
|
-
|
|
609
|
-
// FFT of signal
|
|
610
|
-
m_fft_engine->rfft(m_batch_channel_data.data(), m_batch_signal_fft.data());
|
|
611
|
-
|
|
612
|
-
// Complex multiplication in frequency domain
|
|
613
|
-
for (size_t i = 0; i < halfSize; ++i)
|
|
614
|
-
{
|
|
615
|
-
m_batch_signal_fft[i] *= m_batch_kernel_fft[i];
|
|
616
|
-
}
|
|
617
|
-
|
|
618
|
-
// IFFT to get convolution result
|
|
619
|
-
m_fft_engine->irfft(m_batch_signal_fft.data(), m_batch_result.data());
|
|
620
|
-
|
|
621
|
-
// Store in output buffer
|
|
622
|
-
for (size_t i = 0; i < samplesPerChannel; ++i)
|
|
623
|
-
{
|
|
624
|
-
m_temp_output_channel[i] = m_batch_result[i];
|
|
625
|
-
}
|
|
626
|
-
|
|
627
|
-
// Step 3: Re-interleave output back to original buffer
|
|
628
|
-
for (size_t i = 0; i < samplesPerChannel; ++i)
|
|
629
|
-
{
|
|
630
|
-
buffer[i * numChannels + ch] = m_temp_output_channel[i];
|
|
631
|
-
}
|
|
632
|
-
}
|
|
633
704
|
}
|
|
634
705
|
};
|
|
635
706
|
|