webrtc 에서 의 소음 억제 의 세 가지: 신호 존재 확률 을 바탕 으로 하 는 순환 평균 소음 평가

webrtc 에서 의 소음 억제 의 세 가지: 신호 존재 확률 을 바탕 으로 하 는 순환 평균 소음 평가
위 에서 아래로 이어받다
위의 글 에서 webrtc 에서 현재 프레임 을 이용 하여 STFT 를 통 해 주파수 폭 을 얻 고 quentile 알고리즘 과 결합 하여 초기 소음 평 가 를 먼저 진행 하 였 으 나 아직 끝나 지 않 았 다. 그 다음 에 이 추정 소음 과 주파수 폭 을 이용 하여 Computesnr 에 가 져 와 선험 소음 비 와 후 험 소음 비 를 계산 하 였 다. 1. 선험 소음 비 추정 치 는 이전 프레임 을 통 해 저 장 된 진폭 (소음 제거 되 지 않 음) 이다.최종 소음 추정 값 과 평활 인 자 를 곱 하면 평활 인 자 는 비 나 필터 의 이득 이다.2. 후 검 신호 비 는 현재 프레임 주파수 진폭 과 quantile 이 추산 한 소음 을 이용 하여 얻 은 것 이다.3. 마지막 으로 DD (Directed decision) 를 사용 하여 선험 소음 비 를 업데이트 합 니 다.이 DD 는 선험 소음 비 를 추산 하 는 방법 이다.
다음은 현재 프레임 의 feature 를 업데이트 하고 음성 발생 확률 을 계산 해 야 합 니 다. 이 확률 에 따라 소음 평 가 를 업데이트 하고 음성 확률 에 대한 분석 은 이 절 에서 전개 되 지 않 습 니 다. 중점적으로 주목 하 는 것 은 UpdateNoiseEstimate 라 는 함수 가 하 는 일 입 니 다.
static void UpdateNoiseEstimate(NoiseSuppressionC* self,
                                const float* magn,
                                const float* snrLocPrior,
                                const float* snrLocPost,
                                float* noise) {
  size_t i;
  float probSpeech, probNonSpeech;
  // Time-avg parameter for noise update.
  float gammaNoiseTmp = NOISE_UPDATE;
  float gammaNoiseOld;
  float noiseUpdateTmp;

  for (i = 0; i < self->magnLen; i++) {
    probSpeech = self->speechProb[i];
    probNonSpeech = 1.f - probSpeech;
    // Temporary noise update:
    // Use it for speech frames if update value is less than previous.
    noiseUpdateTmp = gammaNoiseTmp * self->noisePrev[i] +
                     (1.f - gammaNoiseTmp) * (probNonSpeech * magn[i] +
                                              probSpeech * self->noisePrev[i]);
    // Time-constant based on speech/noise state.
    gammaNoiseOld = gammaNoiseTmp;
    gammaNoiseTmp = NOISE_UPDATE;
    // Increase gamma (i.e., less noise update) for frame likely to be speech.
    if (probSpeech > PROB_RANGE) {
      gammaNoiseTmp = SPEECH_UPDATE;
    }
    // Conservative noise update.
    if (probSpeech < PROB_RANGE) {
      self->magnAvgPause[i] += GAMMA_PAUSE * (magn[i] - self->magnAvgPause[i]);
    }
    // Noise update.
    if (gammaNoiseTmp == gammaNoiseOld) {
      noise[i] = noiseUpdateTmp;
    } else {
      noise[i] = gammaNoiseTmp * self->noisePrev[i] +
                 (1.f - gammaNoiseTmp) * (probNonSpeech * magn[i] +
                                          probSpeech * self->noisePrev[i]);
      // Allow for noise update downwards:
      // If noise update decreases the noise, it is safe, so allow it to
      // happen.
      if (noiseUpdateTmp < noise[i]) {
        noise[i] = noiseUpdateTmp;
      }
    }
  }  // End of freq loop.
}

함수 자체 가 간결 하 게 쓰 여 져 있 습 니 다. 첫 번 째 주파수 분량 을 초기 화 합 니 다. 기본 설정 NOISEUPDATE, 이 평활 인자 에 따라 현재 프레임 noise UpdateTmp 를 계산 합 니 다. 음성 확률 이 문턱 을 초과 하면 평활 인자 SPEECHUPDATE 는 noise UpdateTmp 를 다시 계산 합 니 다.(중간 에 magnAvgPause 를 계산 하 는 과정 을 삽입 하여 음성 발생 확률 계산 에 사용 합 니 다) 마지막 으로 초기 에 설 정 된 부 드 러 운 인자 의 변화 여부 에 따라 소음 에서 부 드 럽 게 계산 하 는 소음 평가 인지, 아니면 두 번 의 계산 결과 의 최소 치 를 취하 여 업데이트 할 지 결정 합 니 다.이 알고리즘 은 두 번 째 순환 부터 부 드 러 운 인자 업 데 이 트 는 인접 주파수 음성 확률 로 결정 되 며 이 방법 은 근접 주파수 상관 성 원칙 을 한층 더 활용 한다.우 리 는 앞에서 소음 비 계산 이 STSA (short - time spectral amplitude) 방법 을 이용 하 는 것 이 라 고 언급 한 적 이 있 지만 구체 적 으로 어떤 준칙 을 사용 합 니까?비교적 유행 하 는 paper, MMSE, OMLSA, IMCRA 를 찾 아 보 는 것 은 webrtc ns 가 사용 하 는 것 입 니까?다음은 먼저 STSA 구조 아래 의 몇 가지 적응 준칙 을 알 아 보 겠 습 니 다.
MMSE-Minimum Mean-Square Error
이 방법 은 'Speech Enhancement Using a Minimum Mean - Square Error Short - Time Spectral Amplitude Estimator' 에서 나 온 것 으로 이 알고리즘 은 고 스 통계 모델 의 가설 을 바탕 으로 일련의 복잡 한 추론 을 통 해 A k ^ =Γ ( 1.5 ) v k γ k M ( − 0.5 ; 1 ; − v k ) R k \hat{A_k}=\Gamma(1.5) \frac{\sqrt{v_k}}{\gamma_k} M(-0.5;1;-v_k)R_k Ak​^​=Γ(1.5)γk vk M (- 0.5; 1; - vk) Rk 여기 서 R k R 만 강조 합 니 다.k Rk 는 현재 프레임 주파수 k k k 의 푸 립 엽 변환 계수 이 고 A k ^ \ hat {A k} Ak ^ 는 R k Rk Rk 가 계산 한 추정 치.
LSA-Log Spectral Amplitude
또 하 나 는 스펙트럼 추정 방법의 MMSE (MMSE - LASA) 로 추정 공식 인 A k ^ =ξ k 1 + ξ k e x p [ 1 2 ∫ 0 ∞ e − t t   d t ] R k \hat{A_k}=\frac{\xi_k}{1+\xi_k} exp[\frac{1}{2}\int_0^\infty {\frac{e^{-t}}{t}} \,{\rm d}t]R_k Ak​^​=1+ξk​ξk​​exp[21​∫0∞​te−t​dt]Rk​
MCRA-Minima Controlled Recursive Averaging
만약 에 현재 추정 되 는 음성 출현 확률 이 p (k, t) p (k, t) p (k, t) 라면 그 중에서 k 표지 부 립 엽 주파수 계수, t 표지 현재 프레임 은 소음 추정 을 업데이트 할 수 있다.λ d ^ ( k , t + 1 ) \hat{\lambda_d}(k,t+1) λd​^​(k,t+1): λ d ^ ( k , t + 1 ) = λ d ^ ( k , t ) p ( k , t ) + [ α d λ d ^ ( k , t ) + ( 1 − α d ) ∣ Y ( k , t ) ∣ 2 ] ( 1 − p ( k , t ) ) \begin{aligned} \hat{\lambda_d}(k,t+1)&=\hat{\lambda_d}(k,t)p(k,t)+[\alpha_d\hat{\lambda_d}(k,t)+(1-\alpha_d)|Y(k,t)|^2](1-p(k,t)) \end{aligned} λd​^​(k,t+1)​=λd​^​(k,t)p(k,t)+[αd​λd​^​(k,t)+(1−αd) 8739 ° Y (k, t) 8739 ° 2] (1 − p (k, t) 라 는 글 에서 두 가지 방법 을 제시 했다.
  • OMLSA-Optimally Modified Log-Spectral Amplitude Estimator
  • IMCRA-Improved Minima Controlled Recursive Averaging

  • 그러나 앞의 방법의 개선 이기 때문에 공식 을 열거 하지 않 겠 다.여기 서 우 리 는 MCRA 와 일치 도가 가장 높다 고 느낀다. 그러면 소음 평가 방법 을 공식 으로 추상 화 해 보 자.λ d ^ ( k , t + 1 ) = λ d ^ ( k , t ) γ d ( k , t ) + ( 1 − γ d ( k , t ) ) [ ( 1 − p ( k , t ) ) ∣ Y ( k , t ) ∣ + p ( k , t ) λ d ^ ( k , t ) ] \begin{aligned} \hat{\lambda_d}(k,t+1)&=\hat{\lambda_d}(k,t)\gamma_d(k,t)+(1-\gamma_d(k,t))[(1-p(k,t))|Y(k,t)|+p(k,t)\hat{\lambda_d}(k,t)] \end{aligned} λd​^​(k,t+1)​=λd​^​(k,t)γd​(k,t)+(1−γd​(k,t))[(1−p(k,t))∣Y(k,t)∣+p(k,t)λd ^ (k, t)] 여기 있 는γ d ( k , t ) \gamma_d(k,t) γd (k, t) 도 부 드 러 운 인자 이지 만 이 부 드 러 운 인 자 는 음성 / 비 음성 에 따라 변 하고 임 주파 (저주파 - > 고주파) 의 영향 을 받는다.보기 편 하도록 바로 바꾸다α d \alpha_d αd​。비교 해 보다λ d ^ ( k , t + 1 ) = λ d ^ ( k , t ) α d + ( 1 − α d ) [ ( 1 − p ( k , t ) ) ∣ Y ( k , t ) ∣ + p ( k , t ) λ d ^ ( k , t ) ] \begin{aligned} \hat{\lambda_d}(k,t+1)&=\hat{\lambda_d}(k,t)\alpha_d+(1-\alpha_d)[(1-p(k,t))|Y(k,t)|+p(k,t)\hat{\lambda_d}(k,t)] \end{aligned} λd​^​(k,t+1)​=λd​^​(k,t)αd​+(1−αd​)[(1−p(k,t))∣Y(k,t)∣+p(k,t)λd ^ (k, t)] 비교적 재 미 있 는 부분 은 부 드 러 운 인자 와 음성 확률 이 포 함 된 방식 으로 바 뀌 었 다. 중심 사상 은 모두 이 두 인자 로 자가 적응 하 기 를 원 하 는 추적 소음 일 것 이다.
    다시 비 나 필터 로 돌아 가기
    사실 비 나 필터 함수 인 Computed Based WienerFilter 는 계산 소음 비 함수 인 ComputeSner 와 매우 비슷 하 며, 마지막 으로 얻 은 이득 도 매우 간단 한 공식 적 인 세트 로 첫 번 째 블 로그 에 이미 논술 되 었 기 때문에 webrtc 에 서 는 간단 한 비 나 필터 방법 일 뿐 MMSA LSA 등 방법 을 도입 하지 않 은 것 으로 추정 된다.소음 추정 때 도 VAD 의 하 드 코어 전략 을 피하 기 위해 소프트 판결 전략 을 채택 했다.
    작은 매듭
    웹 rtc 의 코드 에서 한 바퀴 마음껏 돌아 알고리즘 의 기본 원 리 를 대체적으로 파악 한 다음 에 마지막 보루 로 들 어가 음성 소음 확률 을 예측 했다.

    좋은 웹페이지 즐겨찾기