我在每个瞬态分割鼓音频文件并将音频导出到单独的 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 以下居中。