БПФ интерпретация - PullRequest
       22

БПФ интерпретация

5 голосов
/ 07 января 2012

Я работаю над проектом Android, где использую БПФ для обработки данных акселерометра, и у меня возникают проблемы с пониманием того, как эти вещи на самом деле работают. Я использую библиотеку jTransform Петра Вендикера следующим образом:

        int length = vectors.length;
        float[] input = new float[length*2];
        for(int i=0;i<length;i++){
            input[i]=vectors[i];
        }

        FloatFFT_1D fftlib = new FloatFFT_1D(length);
        fftlib.complexForward(input);

        float outputData[] = new float[(input.length+1)/2];
        if(input.length%2==0){
            for(int i = 0; i < length/2; i++){

                outputData[i]= (float) Math.sqrt((Math.pow(input[2*i],2))+(Math.pow(input[2*(i)+1], 2)));
            }
        }else{
            for(int i = 0; i < length/2+1; i++){

                outputData[i]= (float) Math.sqrt((Math.pow(input[2*i],2))+(Math.pow(input[2*i+1], 2)));
            }
        }

        List<Float> output = new ArrayList<Float>();
        for (float f : outputData) {
            output.add(f);
        }

результат - массив со следующими данными output data visualization.

У меня проблема с интерпретацией выходных данных. Данные взяты с 10-секундного интервала, а частота дискретизации составляет 50 Гц. Во время захвата я перемещал телефон вверх и вниз примерно на 3/4 секунды в моей руке, возможно ли, чтобы экстремум, составляющий около 16 значений x, мог быть периодом самого сильного компонента сигнала? Мне нужно получить частоту самого сильного компонента в сигнале ..

Ответы [ 2 ]

7 голосов
/ 07 января 2012

Частота, представленная каждым результирующим бином FFT, представляет собой число бинов, умноженное на частоту дискретизации, деленное на длину FFT (свернутое с функцией Sinc, дающей ей ненулевую ширину, чтобы получить немного технической информации).Если ваша частота дискретизации составляет 50 Гц, а длина вашего БПФ равна длине БПФ, равной 512, то ячейка 16 результата БПФ будет представлять около 1,6 Гц, что близко к периоду 0,7 секунды.

Пик в корзине0 (DC) может представлять ненулевую силу тяжести на акселерометре.

1 голос
/ 30 августа 2012

Поскольку у вас есть реальные данные, вы должны передать эти значения в функцию realForward (не complexForward), как указано здесь .

...