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.
@@ -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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "dspx",
3
- "version": "1.1.5",
3
+ "version": "1.2.3",
4
4
  "description": "High-performance DSP library with native C++ acceleration and Redis state persistence",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
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
- return std::make_unique<dsp::adapters::PeakDetectionStage>(threshold);
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
- processBatchDirect(buffer, numSamples, numChannels);
366
+ processResizingDirect(buffer, samplesPerChannel, buffer, outputSamplesPerChannel, numChannels);
288
367
  }
289
368
  else // FFT
290
369
  {
291
- processBatchFFT(buffer, numSamples, numChannels);
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 in moving mode - Ultra high-performance version.
377
+ * @brief Direct convolution for batch mode - processes from input to output buffers.
297
378
  *
298
- * Uses FirFilterNeon with O(1) guard-zone circular buffer instead of
299
- * the old O(N) memmove approach. Each channel maintains its own stateful
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
- * Key optimization: The FirFilterNeon class handles all state management
303
- * with O(1) updates and fully vectorized NEON convolution.
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 processMovingDirect(float *buffer, size_t numSamples, int numChannels)
387
+ void processResizingDirect(const float *inputBuffer, size_t inputSamplesPerChannel,
388
+ float *outputBuffer, size_t outputSamplesPerChannel,
389
+ int numChannels)
306
390
  {
307
- size_t samplesPerChannel = numSamples / numChannels;
391
+ size_t kernelSize = m_kernel.size();
308
392
 
309
- // Initialize FIR filters for each channel (only once)
310
- if (m_moving_fir_filters.size() != static_cast<size_t>(numChannels))
393
+ // Resize de-interleaved buffers if needed
394
+ if (m_deinterleaved_buffers.size() != static_cast<size_t>(numChannels))
311
395
  {
312
- m_moving_fir_filters.clear();
313
- for (int ch = 0; ch < numChannels; ++ch)
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
- m_moving_fir_filters.push_back(
316
- std::make_unique<core::FirFilterNeon>(m_kernel));
403
+ m_deinterleaved_buffers[ch].resize(inputSamplesPerChannel);
317
404
  }
318
405
  }
319
406
 
320
- // Process each channel with stateful FIR filter
321
- // For interleaved data, we process per-sample but the FirFilterNeon
322
- // uses O(1) circular buffer updates (no memmove!)
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
- auto &fir = m_moving_fir_filters[ch];
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
- // Process all samples for this channel (stateful streaming)
328
- for (size_t i = 0; i < samplesPerChannel; ++i)
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
- size_t idx = i * numChannels + ch;
331
- buffer[idx] = fir->processSample(buffer[idx]);
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 Direct convolution in batch mode - TRUE "naive" C++ algorithm.
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 processBatchDirect(float *buffer, size_t numSamples, int numChannels)
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
- // Resize de-interleaved buffers if needed
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
- else if (!m_deinterleaved_buffers.empty() &&
362
- m_deinterleaved_buffers[0].size() != samplesPerChannel)
498
+
499
+ for (int ch = 0; ch < numChannels; ++ch)
363
500
  {
364
- for (auto &buf : m_deinterleaved_buffers)
501
+ if (m_deinterleaved_buffers[ch].size() != inputSamplesPerChannel)
365
502
  {
366
- buf.resize(samplesPerChannel);
503
+ m_deinterleaved_buffers[ch].resize(inputSamplesPerChannel);
367
504
  }
368
505
  }
369
506
 
370
- // Resize output buffer
371
- if (m_temp_output_channel.size() != samplesPerChannel)
507
+ if (m_temp_output_channel.size() != outputSamplesPerChannel)
372
508
  {
373
- m_temp_output_channel.resize(samplesPerChannel);
509
+ m_temp_output_channel.resize(outputSamplesPerChannel);
374
510
  }
375
511
 
376
- // Step 1: De-interleave input data for cache-friendly processing
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 < samplesPerChannel; ++i)
515
+ for (size_t i = 0; i < inputSamplesPerChannel; ++i)
380
516
  {
381
- m_deinterleaved_buffers[ch][i] = buffer[i * numChannels + ch];
517
+ m_deinterleaved_buffers[ch][i] = inputBuffer[i * numChannels + ch];
382
518
  }
383
519
  }
384
520
 
385
- // Step 2: Process each channel - optimized batch convolution
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
- const float *channelInput = m_deinterleaved_buffers[ch].data();
391
- float *output = m_temp_output_channel.data();
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
- // Standard convolution: y[n] = sum(h[k] * x[n-k])
394
- for (size_t n = 0; n < samplesPerChannel; ++n)
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
- float sum = 0.0f;
536
+ m_batch_signal_fft[i] *= m_batch_kernel_fft[i];
537
+ }
397
538
 
398
- // Simple scalar loop (compiler may auto-vectorize)
399
- for (size_t k = 0; k < kernelSize; ++k)
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
- output[n] = sum;
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
- // Step 3: Re-interleave output back to original buffer
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
- buffer[i * numChannels + ch] = output[i];
591
+ size_t idx = i * numChannels + ch;
592
+ buffer[idx] = fir->processSample(buffer[idx]);
414
593
  }
415
594
  }
416
- } /**
417
- * @brief Initialize overlap-add FFT state for each channel.
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