Power Spectral Density from jTransforms DoubleFFT_1D

Я использую java-библиотеку Jtransforms для выполнения анализа заданный набор данных.

Пример данных следующий:

980,988,1160,1080,928,1068,1156,1152,1176,1264

Я использую функцию DoubleFFT_1D в jTransforms. m с помощью java-библиотеки Jtransforms для выполнения анализа заданного набора данных. Пример данных следующий: 980,988,1160,1080,928,1068,1156,1152,1176,1264 Я использую функцию DoubleFFT_1D ...

Я использую java-библиотеку Jtransforms для выполнения анализа заданный набор данных.

Пример данных следующий:

980,988,1160,1080,928,1068,1156,1152,1176,1264

Я использую функцию DoubleFFT_1D в jTransforms. m с помощью java-библиотеки Jtransforms для выполнения анализа заданного набора данных. Пример данных следующий: 980,988,1160,1080,928,1068,1156,1152,1176,1264 Я использую функцию DoubleFFT_1D ...

Я использую java-библиотеку Jtransforms для выполнения анализа заданный набор данных.

Пример данных следующий:

980,988,1160,1080,928,1068,1156,1152,1176,1264

Я использую функцию DoubleFFT_1D в jTransforms. Вывод данных выглядит следующим образом:

10952, -152, 80.052, 379.936, -307.691, 12.734, -224.052, 427.607, -48.308, 81.472

У меня проблемы с интерпретацией вывода. Я понимаю, что первый элемент в выходном массиве - это сумма 10 входов (10952). Это

другие элементы выходного массива, которые я не понимаю. В конечном счете, я хочу изобразить спектральную плотность мощности входных данных на графике и найти значения между 0 и 0,5 Гц.

В документации для функций jTransform указано (где a - набор данных):

public void realForward (double [] a) вычисляет 1D прямое ДПФ вещественного данные, оставляющие результат в файле. Физическая структура выходных данных выглядит следующим образом:

если n четно, то

 a [2 * k] = Re [k], 0 <= k 

если n нечетное, то

 a [2 * k] = Re [k], 0 <= k <(n + 1) / 2
a [2 * k + 1] = Im [k], 0 

Этот метод вычисляет только половину элементов реального преобразования. Другая половина удовлетворяет условию симметрии. Если ты хочешь полностью реальное прямое преобразование, используйте realForwardFull. Чтобы вернуть исходные данные, используйте realInverse на выходе этого метода.

Параметры: a - данные для преобразования

Теперь, используя методы, описанные выше: (поскольку длина моего массива данных равна 10, используются методы "n равно")

Re[0] = 10952
Re[1] = 80.052
Re[2] = -307.691
Re[3] = -224.052
Re[4] = -48.308
Re[5] = 12.734

Im[0] = -152
Im[1] = 379.936
Im[2] = 12.734
Im[3] = 427.607
Im[4] = 81.472

Итак, некоторые вопросы: Этот вывод выглядит правильным? Мне кажется, что Re [0] не должно быть 10952, которое является суммой всех элементов в исходном массиве.

Похоже, вывод следует немного исправить: (я ошибаюсь?)

Re[0] = 80.052
Re[1] = -307.691
Re[2] = -224.052
Re[3] = -48.308
Re[4] = -152

Im[0] = 379.936
Im[1] = 12.734
Im[2] = 427.607
Im[3] = 81.472

Теперь используя следующее метод размещен на форуме:

Чтобы получить величину бина k, вам необходимо вычислить sqrt (re * re + im * im) , где re, im - действительная и мнимая составляющие в БПФ вывод для бункера k.

Для вашего конкретного БПФ re [k] = a [2 * k] и im [k] = a [2 * k + 1] . Поэтому для расчета спектра мощности:

for k in 0 to N/2 - 1
{
    spectrum[k] = sqrt(sqr(a[2*k]) + sqr(a[2*k+1]))
}

Таким образом:

spectrum[0] = 388.278
spectrum[1] = 307.955
spectrum[2] = 482.75
spectrum[3] = 94.717

Некоторые вопросы. Верны ли эти данные? Я на правильном пути? Могут ли эти спектральные данные отображать что-то вроде этого:

388.278 at .125 Hz
307.955 at .25 Hz
482.75 at .375 Hz
94.717 at .5 Hz

Я далеко? Моя цель - создать гистограмму спектральной плотности мощности от 0 до 0,5 Гц

13
задан Benjamin 29 July 2014 в 17:04
поделиться