Spaces:
Running
Running
| from basis import ScoreBasis | |
| import numpy as np | |
| from pesq import pesq | |
| from scores.helper import wss, llr, SSNR, trim_mos | |
| class COVL(ScoreBasis): | |
| def __init__(self): | |
| super(COVL, self).__init__(name='COVL') | |
| self.score_rate = 16000 | |
| self.intrusive = False | |
| def windowed_scoring(self, audios, score_rate): | |
| if len(audios) != 2: | |
| return None | |
| return cal_COVL(audios[0], audios[1], score_rate) | |
| def cal_COVL(target_wav, pred_wav, fs): | |
| alpha = 0.95 | |
| # Compute WSS measure | |
| wss_dist_vec = wss(target_wav, pred_wav, fs) | |
| wss_dist_vec = sorted(wss_dist_vec, reverse=False) | |
| wss_dist = np.mean(wss_dist_vec[:int(round(len(wss_dist_vec) * alpha))]) | |
| # Compute LLR measure | |
| LLR_dist = llr(target_wav, pred_wav, fs) | |
| LLR_dist = sorted(LLR_dist, reverse=False) | |
| LLRs = LLR_dist | |
| LLR_len = round(len(LLR_dist) * alpha) | |
| llr_mean = np.mean(LLRs[:LLR_len]) | |
| # Compute the PESQ | |
| pesq_raw = pesq(fs, target_wav, pred_wav, 'wb') | |
| # Covl | |
| Covl = 1.594 + 0.805 * pesq_raw - 0.512 * llr_mean - 0.007 * wss_dist | |
| Covl = trim_mos(Covl) | |
| return Covl | |