当前位置: 首页 > 知识库问答 >
问题:

JTransforms:ifft奇数数据

勾岳
2023-03-14

我正试图计算逆FFT,因为我只想要选择频率。下面是我如何进行FFT:

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);

正如上面所看到的,我正在从每个点做一个复数。

然后,我计算一个频率的功率电平:

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;
}
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);
}
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 ]

共有1个答案

淳于凯
2023-03-14

为了得到严格实的结果(所有虚分量等于零),IFFT的输入必须是共轭对称的。例如,阵列的上半部分必须是下半部分的复共轭,围绕阵列的中心镜像,除了第0个元素(直流或0赫兹bin)。

 类似资料:
  • 问题内容: 我的NPE的Stacktrace开头为: 该文件中的行号141为: 其中store不为null且store.getAvailablePieces()为null。我不明白为什么我要在这里例外。 有任何想法吗? 问题答案: 我99%确信这是由于条件运算符的行为引起的。我相信您的代码等同于: 换句话说,它会将的结果拆箱到,然后再装箱到。如果返回,的确会导致死亡。 解决方法是也使第三个操作数:

  • 我必须用奇数的范围(这里是)填充数组:1,3,5,7,9...但我总是在每个奇数之间有一个0,我不明白为什么。 注:注释中大写字母下的代码是由我们的教授给出的... 输出:

  • Python3 实例 以下实例用于判断一个数字是否为奇数或偶数: 实例(Python 3.0+)# Filename : test.py # author by : www.runoob.com # Python 判断奇数偶数 # 如果是偶数除于 2 余数为 0 # 如果余数为 1 则为奇数 num = int(input("输入一个数字: ")) if (num % 2) == 0: print

  • 我有一个布尔方法的麻烦,我想检查数组是偶数,奇数,还是两者都不是。我输入数组大小和数组值,但是“isArrayEven”方法仍然输出“array中的所有数字都是偶数”,即使我的数组是1、2、3并且isArrayEven假定是false。 我

  • 但是如何在O(n)中解决这个问题呢?

  • 问题内容: 我的工作是为零售环境的网络摄像机开发软件。我的团队正在开发的软件之一就是Web服务器,它检索由摄像机本身(具有自己的嵌入式Web服务器)以HTML格式生成并存储在摄像机中的各种报告。然后,我们的软件将从摄像机获取这些报告,并将其存储在中央Web服务器上。 在将摄像机的IP很好地插入到我们的软件中的同时,我正在开发一个简单的Java类,该类将查询网络并找到网络上的所有摄像机。 但是问题是