在wav文件中过滤高于限制频率的信号(低通滤波器)

4

我需要在一个wav文件中过滤掉5KHz以上的频率。我做了一些研究,发现了Butterworth算法,但无法应用它。

假设我有一个单声道的wav文件。我读取它,然后想使用低通滤波器来过滤掉5KHz以上的频率。

目前为止我所做的是:读取该文件,读取帧并将其转换为数值。

from pydub import AudioSegment

song = AudioSegment.from_wav("audio.wav")
frame_count = int(song.frame_count())
all_frames = [song.get_frame(i) for i in range(frame_count)]

def sample_to_int(sample):
    return int(sample.encode("hex"), 16)

int_freqs = [sample_to_int(frame) for frame in all_frames]

如果我将大于5000的值改为0,这样就足够了吗?我觉得这不是正确的方法,我很困惑,希望能得到任何帮助。


1
如果你认为更改值> 5000甚至接近你所需的内容,那么你真的应该阅读一下抽样理论,因为你已经超出了自己的能力范围。 - Mark Ransom
虽然如果你想自己实现,可以对FFT应用某种曲线,然后进行逆FFT。但这是一种相当幼稚的做法。 - Linuxios
将频率过滤到5kHz是很正常的。老年人可以听到大约12 kHz,年轻人(可能不包括今天)可以听到18kHz,电话会话(POTS)在3-4 kHz左右有限制。如果您想了解更多信息,请查看我为其他人编写的带通滤波器FFT示例,但出于实际目的,我会选择Linuxious的答案。https://dev59.com/iJbfa4cB1Zd3GeqPwaJq#36975979 - roadrunner66
@roadrunner66:正常,是的。不过,除非你是为了效果而使用它,否则听起来并不好 :)。 - Linuxios
1个回答

6

Pydub包含一个低通滤波器,您无需自己实现:

from pydub import AudioSegment

song = AudioSegment.from_wav("audio.wav")
new = song.low_pass_filter(5000)

这个功能在effects.py文档中有记录。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接