def test_calculate_SNR_positive_1(self):
source_array = [89, -89] * 6000 + [502, -502] * 8000 + [89, -89] * 7000
source_data = reduce(
lambda a, b: a + struct.pack('>h', b), source_array[1:], struct.pack('>h', source_array[0])
)
sampling_frequency = 8000
bounds_of_speech = [(2.0 * 6000.0 / sampling_frequency, 2.0 * (6000.0 + 8000.0) / sampling_frequency)]
silence_energy = reduce(
lambda a, b: a + b * b,
source_array[0:(2 * 6000)] + source_array[(2 * (6000 + 8000)):],
vad.EPS
) / (2.0 * (6000.0 + 7000.0))
speech_energy = reduce(
lambda a, b: a + b * b,
source_array[(2 * 6000):(2 * (6000 + 8000))],
vad.EPS
) / (2.0 * 8000.0)
target_snr = 20.0 * math.log10(speech_energy / silence_energy)
self.assertAlmostEqual(target_snr, vad.calculate_SNR(source_data, sampling_frequency, bounds_of_speech))
评论列表
文章目录