首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java fftpack的基本使用

Java fftpack的基本使用
EN

Stack Overflow用户
提问于 2014-01-11 16:04:43
回答 1查看 1K关注 0票数 4

我用MATLAB编写了一些简单的音频处理算法,用于Android应用程序。我在将FFT实现转换为Java时遇到了一些困难。

我正在尝试使用弗特帕普的Java版本,据报道它是高效的,但对我来说也有点神秘,也许是因为我缺乏对FFT的全面掌握。

我只是有一个双数组,我想从它生成一个对应的复数数组,表示FFT。我对FFT所做的唯一计算就是取其元素的绝对值。

为了清楚起见,下面是我想使用Java fftpack复制的基本MATLAB代码:

代码语言:javascript
复制
X = fft(myDoubleArray);
abs(X[i]);

我认为这很简单,但我无法识别fftpack的入口点。

已解决:

下面来自LutzL的答案是有效的,但是创建一个Complex1D对象实际上是不必要的,因为fftpack支持双数组作为输入:

代码语言:javascript
复制
RealDoubleFFT rdfft = new RealDoubleFFT(myArray.length);
rdfft.ft(myArray);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-12 12:20:07

sourceforge jfftpack存储库读取

通过以下方法初始化一个新的fft对象

代码语言:javascript
复制
fft = new ComplexDoubleFFT(N);

然后,使用fft对象的前向转换

代码语言:javascript
复制
Complex1D X;
X.x=new double[N];
X.y=new double[N];
for(k=0;k<N;k++) X.x[k]=x[k];

fft.ft(X);

,然后可以将绝对值访问为

代码语言:javascript
复制
x=X.x[k]; y=X.y[k]; a=Math.sqrt(x*x+y*y);

可选地除以N来规范快速傅立叶变换。

添加适当的变量声明。

通常的惯例是,如果用采样频率fs采样信号,则条目X(Xy)k表示k*fs/N处的频率分量( k=N/2 to N-1 )。

您可能想要寻找一个不同的、支持得更好的FFT实现,它是用纯java实现的,实现二进制长度的FFT并不那么复杂。唯一复杂的是在实现转换以获得最后的加速因子时。

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

https://stackoverflow.com/questions/21064509

复制
相关文章

相似问题

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