SCNRv4GainCalculator
Overview
DSP Concepts proprietary Single-Channel Noise Reduction Gain Calculator. For version 4
Discussion
This module calculates gain coefficients for single-channel noise reduction. It is part of the SCNRv4 design.
The module works in conjunction with the WOLA filterbank modules.
The Yk input pin expects the squared-magnitude of the WOLA-domain noisy signal.
The Pn input pin expects a signal with noise levels per subband. This signal should be in dBs, and typically comes directly from the output of the NoiseTracking module.
The output pin provides the gain coefficients per subband, which can then be applied to the WOLA-domain samples of the input signal. These are real numbers and represent magnitude only.
The module is single channel, expects real data, and operates on any block size and any sampling rate.
The minGaindB parameter is the lower clipping threshold of gain for each frequency bin. The value for minGaindB is a negative number in dB, and it corresponds to the maximum attenuation allowed for each subband.
Before being output, the gain signal is smoothed out using cross-bin averaging in logarithmic groupings. The smoothOctave parameter defines how many octaves the averaging should span. Smoothing can be disabled by setting smoothOctave to 0.
The timeAlphaPrioriMs parameter controls the recursive averaging parameter in the SNR calculation. The default value is 250ms. Higher values mean more smoothing, resulting in a lower risk of musical noise, but a higher risk of distorting onset transients.
Type Definition
typedef struct _ModuleSCNRv4GainCalculator
{
ModuleInstanceDescriptor instance; // Common Audio Weaver module instance structure
FLOAT32 prioriSnrScaler1Gain; // Scaler gain.
FLOAT32 prioriSnrScaler2Gain; // Scaler gain.
FLOAT32 timeAlphaPrioriMs; // Averaging time for a-priori SNR computation, in ms.
FLOAT32 minGaindB; // Minimum gain (maximum reduction) per subband, in dB.
FLOAT32 smoothOctave; // Number of octaves for cross-bin logarithmic smoothing.
FLOAT32 postSnrClipAsymUpper; // Asymmetric-clip upper limit.
FLOAT32 prioriSnrClipAsymUpper; // Asymmetric-clip upper limit.
FLOAT32 gainCalcLogScaleGain; // Scale Offset gain.
FLOAT32 smoothStartFreq; // Start frequency for cross-bin smoothing.
FLOAT32* aAPrioriFb; // A-priori SNR estimation feedback line.
FLOAT32* aPrioriSnrDelay; // Block Delay single-block delay buffer.
INT32* aSmoothStartIdx; // Starting index for the averaging process.
INT32* aSmoothEndIdx; // Ending index for the averaging process.
FLOAT32* aSmoothOneOverN; // Precomputed 1/N for averaging.
} ModuleSCNRv4GainCalculatorClass;
Variables
Properties
Name | Type | Usage | isHidden | Default value | Range | Units |
prioriSnrScaler1Gain | float | derived | 0 | 1 | Unrestricted | Â |
prioriSnrScaler2Gain | float | derived | 0 | 1 | Unrestricted | Â |
timeAlphaPrioriMs | float | parameter | 0 | 250 | 0:1000000 | ms |
minGaindB | float | parameter | 0 | -12 | -30:0 | dB |
smoothOctave | float | parameter | 0 | 0.1 | 0:1 | Â |
postSnrClipAsymUpper | float | const | 1 | 1000000 | Unrestricted | Â |
prioriSnrClipAsymUpper | float | const | 1 | 10000 | Unrestricted | Â |
gainCalcLogScaleGain | float | const | 1 | 0.033333 | Unrestricted | Â |
smoothStartFreq | float | const | 1 | 0 | Unrestricted | Â |
aAPrioriFb | float* | state | 1 | [1 x 32] | Unrestricted | Â |
aPrioriSnrDelay | float* | state | 1 | [1 x 32] | Unrestricted | Â |
aSmoothStartIdx | int* | derived | 1 | [32 x 1] | Unrestricted | Â |
aSmoothEndIdx | int* | derived | 1 | [32 x 1] | Unrestricted | Â |
aSmoothOneOverN | float* | derived | 1 | [32 x 1] | Unrestricted | Â |
Pins
Input Pins
Name: Yk
Description: Input signal power
Data type: float
Channel range: 1
Block size range: Unrestricted
Sample rate range: Unrestricted
Complex support: Real
Â
Name: Pn
Description: Input noise power
Data type: float
Channel range: 1
Block size range: Unrestricted
Sample rate range: Unrestricted
Complex support: Real
Output Pins
Name: out
Description: Output signal
Data type: float
Scratch Pins
Channel count: 1
Block size: 33
Sample rate: 48000
MATLAB Usage
File Name: scnrv4_gain_calculator_module.m
M = scnrv4_gain_calculator_module(NAME)
Single-channel noise-reduction gain calculator. This module
takes a noise-level estimate and calculates gain coefficients to be used
in noise reduction.
Arguments:
NAME - name of the module
Â