【问题标题】:Butterworth filter python巴特沃斯过滤器python
【发布时间】:2020-03-15 05:25:21
【问题描述】:

我想用巴特沃斯带通过滤wav 文件。我尝试将wav 文件转换为fft,然后应用带通滤波器,然后应用ifft。从图形上看,它似乎被过滤了一点,但是当我减少输入和输出wav 时,音频没有区别,就像过滤器一样,它不起作用。有错误吗?

# FFT - Fast Fourier Transform
frequency,data = wavfile.read('Input_sound.wav')
signalFFT = fft(data)
def butter_bandpass_filter(data, lowcut, highcut, frequency, order):
    nyq = 0.5 * frequency
    low = lowcut / nyq
    high = highcut / nyq

    b, a = butter(order, [low, high], btype='bandpass')
    y = lfilter(b, a, data)
    return y 
funct=butter_bandpass_filter(signalFFT,2100,3400,44100,4)

filtered_sound=ifft(funct)
filtered_sound=sp.real(filtered_sound)
filtered_sound=sp.int16(filtered_sound/sp.absolute(filtered_sound).max()*32767)
wavfile.write('Filtered_ouput.wav',frequency,filtered_sound)

【问题讨论】:

  • 我从未使用过butterlfilter,但据我了解documentation lfilter 可能适用于您的data 而不是signalFFT

标签: python filter fft wav butterworth


【解决方案1】:

lfilterdocumentation的例子,好像不需要进行FFT,直接把data提供给过滤器。然后就简单多了

frequency,data = wavfile.read('Input_sound.wav')

def butter_bandpass_filter(data, lowcut, highcut, frequency, order):
    nyq = 0.5 * frequency
    low = lowcut / nyq
    high = highcut / nyq

    b, a = butter(order, [low, high], btype='bandpass')
    y = lfilter(b, a, data)
    return y 

filtered_sound=butter_bandpass_filter(data,2100,3400,44100,4)
wavfile.write('Filtered_ouput.wav',frequency,filtered_sound)

【讨论】:

    猜你喜欢
    • 2015-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-09
    • 2020-08-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-19
    相关资源
    最近更新 更多