首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scipy butterworth带通滤波器的Java替代方案

scipy butterworth带通滤波器的Java替代方案
EN

Stack Overflow用户
提问于 2020-09-12 18:27:13
回答 1查看 401关注 0票数 0

我正在尝试带通一些音频,我已经成功地实现了,并从python中的scipy.signal模块获得了正确的结果。但我必须用java来做这件事,这样我才能在android中做一些过滤。

我尝试在java中使用berndporr/iirj库,但它返回的数据与最初的一样。下面是使用这个库的java代码。list是一个包含音频样本的双精度数组。

代码语言:javascript
复制
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代码如下:

代码语言:javascript
复制
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包含了正确的输出。我正在将结果与FL studio的输出进行比较,FL studio正在应用一个20 is 200 is的带通滤波器。

有没有人能告诉我我的Java代码出了什么问题,或者有没有人能告诉我一个更好的音频过滤库。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-15 07:18:08

对于Android中的音频过滤,有一个标准的equalizer AudioEffect库,看起来很有用。

顺便说一句,Java是一种很难进行信号处理的语言。如果你需要的不仅仅是安卓的AudioEffects,可以考虑使用Android NDK并用C++编写。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63859350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档