应用FFT使所有maxPeaks为1

时间:2017-03-31 01:30:14

标签: java android signal-processing fft

我正在尝试将FFT算法应用于过滤数据集。要求我实现的滤波器是二阶高通IIR滤波器。我得到过滤数据的数组,然后我传递给我的FFT函数。每次我这样做,我只是将所有最大峰值都设为1。

我这样用:

leastsq

这就是我的 getFFT()函数的样子

double[] fft = getFFT(iirFiltered);
        return fft;

这是我执行分析的方式:

private double[] getFFT(double[] m1){

            double sum = 0;
            for (int i = 0; i < m1.length; i++) {
                sum += m1[i];

            }
            double mean = sum / m1.length;

            for (int i = 0; i < m1.length; i++) {
                m1[i] = m1[i] - mean;

            }

            int neft = 0;
            int count = 0;
            while (neft <= m1.length) {

                neft = (int) Math.pow(2, count);
                count++;
            }

            DSPLib.nFft(neft, m1);


            double[][] filtered = DSPLib.getFFT();

            double[] returnFiltered = new double[filtered.length];
            for(int i=1;i< returnFiltered.length;i++){
                //returnFiltered[i]= filtered[i][0]; // old one
                returnFiltered[i]= Math.sqrt(filtered[i][0]* filtered[i][0] + filtered[i][1]*filtered[i][1]); //new one

            }
            return returnFiltered;
        }

我的输出给了我一个奇怪的FFT图,无论我在什么频率,maxPeak总是在1

请指导我,因为我不熟悉信号处理。

PS:采样率为4d,心率为240 bpm,我获得224个RR间隔值和256个FFT输出值(此代码仅以某种方式给出所有实数值),最大幅度:19202.405718996466,HF :: 5.35238130772106E7,LF :: 6.235056793402985E7

0 个答案:

没有答案