问题描述
我正在尝试使用带通滤波器和savgol滤波器处理一些音频样本。但是我不确定我做得是否正确。专门用于savgol过滤器。我想对音频信号进行平滑处理,但是不确定是否正确执行了操作。特别是savgol过滤器,savgol过滤器中的“窗口大小”是什么意思?
我的目标是尽可能地平滑音频数据,以获得更好的结果,以消除两个音频样本之间的时间差。
谢谢!
代码如下:
import numpy as np
from scipy.fftpack import rfft,irfft,rfftfreq
from scipy.signal import savgol_filter
import pylab as plt
def hz_filter(lo_cutoff = 0,hi_cutoff = 0,start_time = 0,end_time = 10):
rate,audio_data = scipy.io.wavfile.read('audio.wav')
time_scale = np.linspace(0,audio_data.size/rate,num=audio_data.size,endpoint=True)
frequency = rfftfreq(audio_data.size,d=time_scale[1]-time_scale[0])
amp = rfft(audio_data)
zero_amp = amp.copy()
if lo_cutoff == 0 and hi_cutoff == 0:
out_data = irfft(zero_amp)
elif lo_cutoff > 0 and hi_cutoff == 0:
zero_amp[(frequency < lo_cutoff)] = 0
out_data = irfft(zero_amp)
elif lo_cutoff == 0 and hi_cutoff > 0:
zero_amp[(frequency > hi_cutoff)] = 0
out_data = irfft(zero_amp)
elif lo_cutoff != 0 and hi_cutoff != 0:
zero_amp[(frequency > hi_cutoff)] = 0
zero_amp[(frequency < lo_cutoff)] = 0
out_data = irfft(zero_amp)
out_data=savgol_filter(out_data,51,3)
plt.subplot(221)
plt.plot(time_scale,audio_data)
plt.title("audio_data")
plt.subplot(222)
plt.plot(frequency,amp)
plt.xlim(0)
plt.title("Frequency ")
plt.subplot(223)
plt.plot(frequency,zero_amp)
plt.xlim(0)
plt.title("Frequency after")
plt.subplot(224)
plt.plot(time_scale,out_data)
plt.show()
3000Hz至5000Hz之间的截止频率
仅使用savgol的结果:
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)