2015-11-05 2 views
0

Я пишу приложение для Android, которое измеряет яркость кадров камеры в течение определенного периода времени и вычисляет сердечный ритм с использованием анализа Фурье, чтобы найти частоту волны. Проблема заключается в том, что мой спектральный анализ выглядит следующим образом:Правильно ли этот анализ Фурье сигналов яркости? (Android)

Spectral analysis (y-axis is magnitude, x-axis is index)

, который в значительной степени инверсией, что спектральный анализ должен выглядеть (как нормальное распределение). Могу ли я точно оценить это, чтобы найти индекс максимальной величины, или этот спектр показывает, что мои данные слишком шумные?

EDIT: Вот что выглядит мои данные камеры, как (я выступаю FFT на этом): Luminance of Current Frame vs. Time

+0

Как вы планируете вывод БПФ? величина? масштаб журнала? –

+0

Выход БПФ просто по величине, а ось Х - индекс каждого пика. – Piglet

+0

Я должен отметить, что я использую библиотеку Java JTransforms для выполнения БПФ на моем 1D-входе. Входной сигнал визуализируется в нижнем графике, поскольку значения яркости и выходной массив показаны в верхнем графике, где x - индекс выборки, а y - величина. – Piglet

ответ

0

Похоже, у вас есть две проблемы здесь происходит:

1) Выход FFT часто помещает значение для отрицательных частот справа от положительных частот, что, по-видимому, имеет место здесь. Поэтому вам нужно переместить правую половину БПФ влево и поставить freq=0 посередине.

2) В комментариях вы говорите, что вы рисуете величину, но это явно не так (величина должна быть больше 0 и симметричной). Вместо этого вы, вероятно, просто замышляете действительно часть. Вместо этого возьмите величину, или Re*Re + Im*Im, где Re и Im - действительная и мнимая части соответственно. (В зависимости от формы ваших цифр, что-то вроде Math.sqrt(Math.pow(a.re, 2) + Math.pow(a.im, 2)).)

Смежные вопросы