Pav*_*vel 1 algorithm signal-processing
如何从包含语音的单个音频文件中估算SNR?我知道两种方法:
log power histogram pecentile difference(又名"NIST quick method"),如下所述:http://labrosa.ee.columbia.edu/~dpwe/tmp/nist/doc/stnr.txt
10*log10((SN)/ N),其中
有没有更好的方法不需要立体声数据(或干净和嘈杂版本的数据)?我还想避免NIST文档中描述的"第二种方法"(见1.)对分布做出了强有力的假设.
小智 5
人声使用300 Hz至3 kHz的频率.这就是(旧的)电话系统正在使用的.人声从不使用所有这些频率,这就是为什么我们可以进行频率分析以找到本底噪声 - 没有任何参考或语音活动检测e [i]:
计算FFT,频率分辨率为~10 - 20 Hz.对于48 kHz的采样率,您将使用FFT长度的采样率/分辨率= 4800个样本,这应该四舍五入到最接近的2的幂,即4096
确定保持300 - 3000 Hz结果的必要箱.bin索引k保持频率k*samplerate/FFT_length的结果.对于48kHz以上的输入和FFT长度4096,这是k(300Hz)= 300*4096/48000~ = 25并且k(3000Hz)= 3000*4096/48000~ = 250.
计算每个必要箱中的能量:E [k] = FFT [k] .re ^ 2 + FFT [k] .im ^ 2.这取决于您的FFT算法"在哪里"写入实部和虚部.
N = min {E [k = 25..250]}*number_of_bins(= 250-25 + 1)
S =总和{E [k = 25..250]}
SNR =(SN)/ N. 等级为10*log10(SNR)
随着SNR随着时间的推移而变化,请回到步骤1,使用一些新样本 - 可能会有一些重叠