首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JTransforms : ifft奇数数据

JTransforms : ifft奇数数据
EN

Stack Overflow用户
提问于 2017-06-03 00:12:35
回答 1查看 223关注 0票数 0

我试图计算逆FFT,因为我只想选择频率。下面是我对FFT的理解:

代码语言:javascript
复制
final double[] points = reader.readPoints();
final DoubleFFT_1D analyzer = new DoubleFFT_1D(points.length);
final double[] fft = new double[points.length * 2];

for (int i = 0; i < points.length; i++) {
    fft[2 * i] = points[i];
    fft[2 * i + 1] = 0;
}

analyzer.complexForward(fft);

如上文所示,我正在从每一点上得出一个复杂的数字。

然后,我计算我的功率水平,频率:

代码语言:javascript
复制
final double[] magnitude = new double[fft.length];
for (int i = 0; i < fft.length / 2; i++) {
    magnitude[2 * i] = Math.sqrt(Math.pow(fft[2 * i], 2) + Math.pow(fft[2 * i + 1], 2));
    magnitude[2 * i + 1] = 0;
}

从生成的图表中,我可以看到兴趣的激增,大约频率为0.2717391304347826。让我们推断这个双值存储在一个名为frequencyOfInterest的变量中;

我试图将iFFT的内容如下:

代码语言:javascript
复制
public void performIfft() {
    int ifftIdx = 0;
    for (int idx = 0; idx < magnitude.length; idx += 2) {
        final Double currentBinFreq = getFrequency(magnitude.length, idx);
        final boolean freqMatch = currentBinFreq.compareTo(frequencyOfInterest) == 0;
        ifft[ifftIdx] = Double.valueOf(freqMatch ? fft[ifftIdx] : 0);
        ifft[ifftIdx + 1] = Double.valueOf(freqMatch ? fft[ifftIdx + 1] : 0);
        ifftIdx += 2;
    }
    analyzer.complexInverse(ifft, true);
}

private static Double getFrequency(final int pointsLength, final int idx) {
    final Double sampleCount = Double.valueOf(idx * 30);
    final Double n = Double.valueOf(pointsLength);
    return Double.valueOf(sampleCount / n);
}

执行此操作后,复杂数组如下所示:

代码语言:javascript
复制
0.0,0.0
0.0,0.0
-6126.10186299952,-6126.10186299952
-3385.1822332667743,-3385.1822332667743
0.0,0.0
[ 0.0,0.0 continues until the end ]

我的结果在一个图表上如下:

虽然频率输出似乎是正确的(在我的图表中的5波),但我不明白为什么有两个( Img和real )。同样的,当我做FFT入口集时,我期望想象中的对应方是零,即2*i+1= 0。

我在使用这个库取出iFFT时做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-06-03 01:00:06

为了得到一个严格的实结果(所有虚分量等于零),IFFT的输入必须是共轭对称的。例如,阵列的上半部分必须是下半部分的复共轭,除了零点eth元件( DC或0 Hz bin)外,还反映在阵列的中心附近。

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

https://stackoverflow.com/questions/44338999

复制
相关文章

相似问题

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