【发布时间】:2020-09-12 10:27:12
【问题描述】:
我正在尝试带通一些音频,并且我已经成功实现并从 python 中的 scipy.signal 模块获得了正确的结果。但我的必要性是在 java 中这样做,以便我可以在 android 中进行一些过滤。
我尝试在 java 中使用 berndporr/iirj 库,但它返回的数据原样。这是使用这个库的java代码。 list 是一个包含音频样本的双精度数组。
double[] filteredList = new double[list.length];
Butterworth butterworth = new Butterworth();
butterworth.bandPass(3,44100,110,90);
for(int i = 0; i < list.length; i++)
{
filteredList[i] = butterworth.filter(list[i]);
}
filteredList 与我使用 scipy 的 python 程序的输出不匹配。
python代码如下:
import numpy as np
from scipy.signal import butter, filter
def butter_bandpass(lowcut, highcut, fs, order=5):
nyq = 0.5 * fs
low = lowcut / nyq
high = highcut / nyq
b, a = butter(order, [low, high], btype='band')
return b, a
def butter_bandpass_filter(data, lowcut, highcut, fs, order=5):
b, a = butter_bandpass(lowcut, highcut, fs, order=order)
y = lfilter(b, a, data)
return y
arr = np.array(list)
filteredList = butter_bandpass_filter(arr, 20, 200, 44100, order=3)
这里的filteredList 包含正确的输出。
我将结果与应用 20hz-200hz 带通滤波器的 FL Studio 的输出进行比较。
谁能告诉我我的 Java 代码有什么问题,或者谁能告诉我一个更好的音频过滤库。
【问题讨论】:
标签: java signal-processing audio-processing