巴特沃斯过滤器

2024-09-27 09:34:32 发布

您现在位置:Python中文网/ 问答频道 /正文

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

# 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)

Tags: 文件fftdatafilterspfilteredfrequencywav
1条回答
网友
1楼 · 发布于 2024-09-27 09:34:32

看看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)

相关问题 更多 >

    热门问题