如何模拟电话通道8k语音给出16k麦克风语音记录



我有一个模拟8k固定电话/蜂窝/VoIP语音音频的任务,给定该语音的16k麦克风录音。模仿它的主要阶段是什么?我找到了这个关于这种增强的火炬音频教程,它是关于如何做到这一点的最详细的说明。

最后我看到下面的16k麦克风->8k电话转换管道:

  1. 16 k→8 k重采样
  2. 应用RIR(房间脉冲响应来模拟混响)[可选]
  3. 应用噪声[可选]
  4. 应用sox公司过滤器(需要吗?))
  5. 适用编解码器(GSM, g72*, SILK, OPUS等)

应该添加什么?均衡,一些特殊的过滤器,丢包隐藏仿真?可能有现有的Matlab脚本或库为这种增强?

假设你有一个wave文件


from scipy.signal import lfilter, butter
from scipy.io.wavfile import read,write
from numpy import array, int16
def butter_params(low_freq, high_freq, fs, order=5):
nyq = 0.5 * fs
low = low_freq / nyq
high = high_freq / nyq
b, a = butter(order, [low, high], btype='band')
return b, a
def butter_bandpass_filter(data, low_freq, high_freq, fs, order=5):
b, a = butter_params(low_freq, high_freq, fs, order=order)
y = lfilter(b, a, data)
return y
def apply_telephony_effect(f1, f2):
fs,audio = read(f1)
low_freq = 300.0
high_freq = 3000.0
filtered_signal = butter_bandpass_filter(audio, low_freq, high_freq, fs, order=6)
write(f2,fs,array(filtered_signal,dtype=int16))

可以创建另一个

apply_telephony_effect('input.wav', 'output.wav')

输出听起来像电话。

最新更新