- Detector computes smoothed spectral envelope - Finds peaks exceeding envelope - Creates per-bin suppression mask - Applies mask in frequency domain before ISTFT - Default params: sharpness=1.0, selectivity=0.5, depth=0.3 Verified: burst500.wav → output RMS reduced from 0.0678 to 0.0476
24 lines
528 B
C++
24 lines
528 B
C++
#pragma once
|
|
#include <cstddef>
|
|
#include <cstdint>
|
|
#include <complex>
|
|
#include <vector>
|
|
|
|
class Detector {
|
|
public:
|
|
Detector(size_t nfft, float sample_rate);
|
|
void setParams(float sharpness, float selectivity, float depth);
|
|
void processFrame(const std::complex<double>* spectrum, float* mask);
|
|
|
|
private:
|
|
size_t nfft_;
|
|
float sample_rate_;
|
|
float sharpness_;
|
|
float selectivity_;
|
|
float depth_;
|
|
|
|
std::vector<float> envelope_;
|
|
std::vector<float> prev_mask_;
|
|
std::vector<float> smooth_buf_;
|
|
};
|