【问题标题】:Filtering frequencies above limit in wav file (Low pass filter)在 wav 文件中过滤超出限制的频率(低通滤波器)
【发布时间】:2016-09-05 11:40:28
【问题描述】:

我需要在 wav 文件中过滤 5Khz 以上的频率。我做了一些研究,发现了巴特沃斯算法,但无法应用。

假设我有一个单声道 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 是否足够?我不这么认为,我很困惑,很高兴听到任何帮助。

【问题讨论】:

  • 如果您认为更改值 > 5000 甚至 接近 到您需要的值,那么您真的应该阅读抽样理论,因为您太过头了。跨度>
  • 虽然如果您想自己实现它,您可以将某种曲线应用于 FFT,然后进行逆 FFT。但这是一种非常幼稚的做法。
  • 过滤到 5kHz 是很正常的。老年人可以听到大约 12 kHz,年轻人(今天可能不是)到 18 kHz,电话交谈(POTS)的限制在 3-4 kHz 左右。如果您想了解更多信息,请查看我为其他人编写的使用 FFT 进行带通滤波的示例,但出于实际目的,我会选择 Linuxious 的答案。 stackoverflow.com/questions/36968418/…
  • @roadrunner66:正常,是的。不过,除非您将其用于效果,否则听起来并不那么好:)。

标签: python audio signal-processing fft frequency


【解决方案1】:

Pydub 包含一个 lopass 过滤器——您无需自己实现它:

from pydub import AudioSegment

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

它在effects.py 中“记录”。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-22
    • 2019-06-04
    • 2014-02-09
    • 2012-08-19
    • 1970-01-01
    • 2010-09-25
    • 2014-07-29
    • 1970-01-01
    相关资源
    最近更新 更多