0

我在每个瞬态分割鼓音频文件并将音频导出到单独的 wav 文件。问题是,我所有的文件都有一个我似乎无法摆脱的 dc 偏移量,这导致文件末尾出现爆音。我可以使用 Audacity 的内置高通滤波器来验证应用滤波器是否可以解决我的问题,但我还不能用代码复制这些结果。

我的偏好是使用 torchaudio 的 highpass_biquad() 方法,但我也愿意使用 scipy 过滤器。主要目标是删除偏移量,以便音频文件最后不会有爆裂声。

我如何实现高通滤波器来校正直流偏移,就像 Audacity 的高通滤波器一样,如图所示?

torchaudio 方法

from torchaudio.functional import highpass_biquad
import librosa

wav, sample_rate = librosa.load(path, sr=None, mono=False) # files are 24 bit 44.1k
wav_tensor = torch.from_numpy(wav)
cuttoff_freq = 15.0

wav_filtered = highpass_biquad(wav_tensor, sample_rate, cutoff_freq)

scipy方法

from scipy import signal
import librosa

wav, sample_rate = librosa.load(path, sr=None, mono=False) # files are 24 bit 44.1k
cutoff_freq = 15

# METHOD 1
b, a = signal.butter(N=5, Wn=cutoff_freq, btype='high', fs=sample_rate)
wav_filtered = signal.filtfilt(b, a, wav)

# METHOD 2
sos = signal.butter(N=5, Wn=cutoff_freq, btype='hp', fs=sample_rate, output='sos')
wav_filtered = signal.sosfilt(sos, wav)

图 1 是 torch highpass_biquad 方法的输出。scipy 方法产生类似的结果。

图2是大胆应用高通效果后的音频。这是我的代码所需的输出。

图 3 是未应用高通滤波的输出示例。大多数文件在 0dB 以下居中。

火炬 highpass_biquad 的结果。 与 scipy 方法类似的结果。

在大胆应用高通效果后的音频。 这是我的代码所需的输出

未应用高通滤波的输出示例。 大多数文件居中低于 0dB

4

1 回答 1

1

事实证明,在写入文件时,直流偏移是由 wavio 中的缩放函数产生的。毕竟高通滤波器工作正常。

于 2021-09-20T01:23:55.897 回答