微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用Savgol滤波器和带通滤波器处理音频数据,以查找音频数据之间的时间差

如何解决使用Savgol滤波器和带通滤波器处理音频数据,以查找音频数据之间的时间差

我正在尝试使用带通滤波器和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()  

仅带通的结果:

enter image description here

3000Hz至5000Hz之间的截止频率

仅使用savgol的结果:

enter image description here

同时使用以下结果:

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。