Zettelkasten

SNR(Signal to Noise) 구하는 법

·수정 2026.04.23·수정 2

요약

  • SNR(Signal To Noise Ratio)는 신호와 잡음의 비율을 db 단위로 나타낸 값이다.
  • SNR을 통해 음성 파일의 깨끗함 정도를 확인할 수 있다.

본문

  • snr 계산 방법
SNR(dB)=10log10(PsignalPnoise)\text{SNR(dB)} = 10 \cdot \log_{10}\left(\frac{P_\text{signal}}{P_\text{noise}}\right)
  • P는 평균 제곱값(=파워)
  • 단일 구간에 대한 SNR 계산 코드
import numpy as np
import soundfile as sf

wav, sr = sf.read("audio.wav")
wav.astype(np.float32)

sig = wav[int(start_sig * sr): int(end_sig* sr)]
sig = wav[int(start_noi * sr): int(end_noi* sr)]

P_sig = np.mean(sig**2)
P_noi = np.mean(noi**2)

SNR_dB = 10*np.log10(P_sig/P_noi)
  • 복수 구간에 대한 SNR 계산 코드
total_sig = []
total_noi = []

for seg in segs_sig:
    total_sig.append(wav[int(seg[0]*sr):int(seg[1]*sr)])
    total_noi.append(wav[int(seg[1]*sr):int(seg[1]*sr+0.5*sr)])

sig_cat = np.concatenate(total_sig) # 주어진 배열을 합쳐서 하나의 배열로 만드는 함수
noi_cat = np.concatenate(total_noi)


P_sig = np.mean(sig_cat**2)
P_noi = np.mean(noi_cat**2)

SNR_dB = 10*np.log10(P_sig/P_noi)