在FFT Java类中计算正弦或余弦函数的问题-Android Studio

时间:2018-09-07 20:32:42

标签: java android

我想在Android Studio中使用Fast Fourier Transform Java类。我想创建一个正弦函数,但是有一个简单的问题: 我的FFT函数需要在内部使用double [],并用于cicle来创建在内部不能使用的正弦函数。 我的问题是:如何创建正弦函数以在FFT函数中使用它? 我是Android Studio的新手,答案可能很简单,但我现在还不知道。 请建议我该怎么做。 谢谢 这是我的FFT.java类:

package com.google.android.gms.samples.vision.face.rPPG.Math;

public class Fft {

    public static double FFT(Double[] in, int size, double samplingFrequency) {
        double temp = 0;
        double POMP = 0;
        double frequency;
        double[] output = new double[2*size];

        for(int i=0;i<output.length;i++)
            output[i] = 0;

        for(int x=0;x<size;x++){
            output[x]=in[x];
        }

        DoubleFft1d fft = new DoubleFft1d(size);
        fft.realForward(output);

        for(int x=0;x<2*size;x++){
            output[x]= Math.abs(output[x]);
        }

        for(int p=12; p<size; p++) {// 12 was chosen because it is a minimum frequency that we think people can get to determine heart rate.
            if(temp < output[p]) {
                temp = output[p];
                POMP = p;

            }
        }

//      if (POMP < 12) {
//      POMP = 0;
//      }

        frequency = POMP*samplingFrequency/(2*size);
        return frequency;
    }
}

1 个答案:

答案 0 :(得分:1)

您可以使用以下方法生成离散的(采样的)正弦信号:

X[n] = A * sin(2*PI*fo*n*ts)

其中X[n]是索引n(0、1、2、3 ...)处的正弦值;振幅; fo是正弦函数频率,ts是采样周期。 另外,对于正弦可能会有用:

(fs = 1/ts)

fs是采样频率。