Skip to main content
Skip table of contents

SCNRv2

Overview

DSP Concepts proprietary Single-Channel Noise Reduction. Version 2.

Discussion

DSP Concepts proprietary Single-Channel Noise Reduction module. This module works in conjunction with the WOLA filterbank modules. The module supports any number of channels and applies noise reduction independently to each. The input pin is mic input signal and output pin is stationary noise-suppressed signal. There is an optional 2nd output pin that outputs noise masking gain for each frequency

The module operates on any number of channels, any block size, and any sampling rate. At design time, you specify the number of channels and whether the output noise suppression mask gain output pin is active. At run time, the strength of noise suppression can be controlled by specifyin minGaindB and noiseAdjustdB The tunable parameter minGaindB is a lower clipping point of gain in dB for each frequency bin. minGaindB is a negative number in the range [-20 0]. Setting minGaindB = -10 means that the module will apply at most -10 dB of attenuation in a subband.

noiseAdjustdB is an offset which is added to the estimated noise floor. Stationary noise floor estimation is prone to be lower than actual noise level. By setting noiseAdjustdB to a positive number the algorithm will assume a higher noise floor and be more aggressive.

Smaller minGaindB and/or larger noiseAdjustdB setting configures noise suppression more aggressive. The module estimates SNR and determines attenuation of each frequency from gain table.

The module can be configured to output an optional 2nd output pin. This pin holds the instantaneous gain reduction (as a linear value) that is applied to each subband.

Type Definition

CODE
typedef struct _ModuleSCNRv2
{
    ModuleInstanceDescriptor instance;            // Common Audio Weaver module instance structure
    FLOAT32 minGaindB;                            // the minimum gain to be applied in dB
    FLOAT32 noiseAdjustdB;                        // noise level adjustment in dB.
    FLOAT32 minGain;                              // the minimum gain to be applied in linear.
    FLOAT32 noiseAdjust;                          // noise level adjustment in linear.
    FLOAT32 attackTime;                           // Internal coefficient realizing the attack time.
    FLOAT32 attackCoeff;                          // Internal coefficient realizing the attack time.
    FLOAT32 freq1;                                // Internal coefficient realizing the attack time.
    FLOAT32 b0_1;                                 // Desired first numerator coefficient.
    FLOAT32 b1_1;                                 // Desired second numerator coefficient.
    FLOAT32 a1_1;                                 // Desired second denominator coefficient.
    FLOAT32 freq2;                                // Internal coefficient realizing the attack time.
    FLOAT32 b0_2;                                 // Desired first numerator coefficient.
    FLOAT32 b1_2;                                 // Desired second numerator coefficient.
    FLOAT32 a1_2;                                 // Desired second denominator coefficient.
    FLOAT32 ppriorTimeConst;                      // Internal coefficient realizing the attack time.
    FLOAT32 ppriorEta;                            // Internal coefficient realizing the attack time.
    FLOAT32* pxState;                             // Sb smoothing state for Px computation.
    FLOAT32* pshatState;                          // Sb smoothing state for Ps_hat computation.
    FLOAT32* gainState;                           // Sb smoothing state for gain computation.
    FLOAT32* pnEnvState;                          // Attack release env state for Pn computation.
    FLOAT32* prevPsHat;                           // Feedback memory.
    FLOAT32* maskGain;                            // Noise suppression mask gain.
} ModuleSCNRv2Class;

Variables

Properties

Name

Type

Usage

isHidden

Default value

Range

Units

minGaindB

float

parameter

0

-12

-20:1:0

dB

noiseAdjustdB

float

parameter

0

6

0:1:12

dB

minGain

float

derived

1

0.25119

Unrestricted

noiseAdjust

float

derived

1

3.9811

Unrestricted

attackTime

float

const

1

2000

Unrestricted

attackCoeff

float

derived

1

1.0417e-05

Unrestricted

freq1

float

const

1

12

Unrestricted

b0_1

float

derived

1

0.00078478

Unrestricted

b1_1

float

derived

1

0.00078478

Unrestricted

a1_1

float

derived

1

0.99843

Unrestricted

freq2

float

const

1

5

Unrestricted

b0_2

float

derived

1

0.00032714

Unrestricted

b1_2

float

derived

1

0.00032714

Unrestricted

a1_2

float

derived

1

0.99935

Unrestricted

ppriorTimeConst

float

const

1

311.9

Unrestricted

ppriorEta

float

derived

1

0.99993

Unrestricted

pxState

float*

state

1

[1 x 32]

Unrestricted

pshatState

float*

state

1

[1 x 32]

Unrestricted

gainState

float*

state

1

[1 x 32]

Unrestricted

pnEnvState

float*

state

1

[1 x 32]

Unrestricted

prevPsHat

float*

state

1

[1 x 32]

Unrestricted

maskGain

float*

state

1

[1 x 33]

Unrestricted

Pins

Input Pins

Name: in

Description: Audio input

Data type: float

Channel range: Unrestricted

Block size range: Unrestricted

Sample rate range: Unrestricted

Complex support: Complex

Output Pins

Name: out

Description: audio output

Data type: float

Name: maskGain

Description: SCNR mask gain

Data type: float

MATLAB Usage

File Name: scnr_v2_module.m

CODE
 M = scnr_v1_module(NAME)
 Single-channel noise reduction module.  This module reduces stationary 
 noise floor level.  Arguments:
   NAME - name of the module
   NUMCHANS - number of channels to process.  Default=1.
   OUTPUTMASKGAIN - Boolean which specifies whether the module has a
     second output pin containing the instantaeous gains applied to each
     subband.

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.