요약
- SNR(Signal To Noise Ratio)는 신호와 잡음의 비율을 db 단위로 나타낸 값이다.
- SNR을 통해 음성 파일의 깨끗함 정도를 확인할 수 있다.
본문
SNR(dB)=10⋅log10(PnoisePsignal)
- 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)
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)