首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java频率分析性能

Java频率分析性能
EN

Stack Overflow用户
提问于 2012-03-27 12:21:34
回答 2查看 886关注 0票数 3

我正在开发一个应用程序,它对音频进行采样,并需要对这些数据进行实时处理(FFT和谐波乘积谱)。

我需要使用44100赫兹的采样率和0.5Hz的频率分辨率,这意味着我需要88200采样前快速傅立叶变换。这需要大约2秒的时间来捕获,因为它是采样率的两倍;然而,在第一个样本之后,我确实通过使用循环缓冲区对采样进行了显著的改进,并且从那时起只读取了一半的样本。

不幸的是,性能仍然很低,并且有相当多的延迟。这是一个大问题,因为应用程序需要及时地做出响应,以便在发生时进行输入。

有谁对我如何改善这方面的表现有任何建议吗?我认为主要的问题在于对大样本的要求,如果有一些方法我可以减少读取音频的数量,同时保持相同的准确性,那就更好了。线程在这里有用吗?

编辑

如果这有助于了解,我尝试做实时的F0估计从电吉他输入,以及多F0估计和弦匹配。我有这样做的方法,而且非常准确,但是对于一个uni项目来说,我没有足够的时间去研究FFT以外的其他方法。真的,我只是希望有一种方法来加速取样过程。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-27 13:25:34

由于您需要捕获2s的音频,这将设置一个较低的延迟。即使你有50%的重叠,你仍然有一个最小的延迟1s。FFT和其他处理只会增加这一点,但希望不会增加大量(否则使用更快的FFT库)。减少延迟的唯一方法是牺牲频率分辨率。

票数 1
EN

Stack Overflow用户

发布于 2012-03-27 16:51:30

使用FFT方法可以给你一个时频交换。如果您想要更低的延迟,您将不得不使用较少的数据,这与FFT (或较短或零填充)将给您一个较低的频率估计。

零填充只会给你一个高质量的插值。但是,这可能提供一个更好的峰值频率估计,而不是仅仅使用较短FFT的峰值宾的中心。

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

https://stackoverflow.com/questions/9889447

复制
相关文章

相似问题

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