2015-11-06 3 views
0

У меня есть массив (размер 128) данных, на которых я использую FFT. Я пытаюсь найти частоту данных через спектр БПФ. Проблема в том, что формула freq = i * Fs/N не работает. Мои данные довольно шумные, и я не знаю, из-за моих шумных данных или из-за того, что я делаю что-то еще неправильно. Ниже мое Необработанные данные:Получение частоты FFT от шумных данных?

Raw Data

И это спектр, который является результатом преобразования:

Spectrum

Я получаю две максимальные пики равной величины с индексом 4 и 128 в выходной массив. Частота данных должна быть около 1.1333 Гц, но я получаю 5-6 или неправильные значения, когда я использую формулу:

freq = i * Fs/N; 

где i является индексом массива наибольшего пика величины, Fs является частота дискретизации в Гц и N - это размер данных.

Используя мои данные, вы получите freq = (4 * 11.9)/128 = 0,37 Гц, что очень сильно отличается от ожидаемого.

Если мои расчеты верны, есть ли способы улучшить мои данные? Или мои расчеты для частоты неправильны?

+0

Для одного вашего спектра, кажется, содержится 256 точек, поэтому я предполагаю, что вы накладываете чередующиеся реальные и мнимые части, а не величины. Если 'i' - это индекс, показанный на вашем графике Spectrum, тогда результат будет отключен в 2 раза (не помогая вашему делу). Затем у вас есть сильная средняя/очень низкочастотная составляющая (раздел сырых данных колеблется между 98-100, а не около 0), что естественно появится в ячейках с более низким спектром. Удалите это смещение, и вам лучше увидеть пики спектра, связанные с вашими колебаниями данных. – SleuthEye

+0

По сильному среднему значению вы имеете в виду пики на краях спектра? Я удалил около 1/5 спектра с каждой стороны и получил это: [ссылка на изображение] (http://imgur.com/Fc4ExB3). Поэтому я предполагаю, что мои данные слишком шумны, чтобы создать точный частотный спектр? – Piglet

+0

Я тоже смущен об индексе максимальной величины. Предполагая, что имеется 256 точек данных, а мнимые части чередуются, если самая высокая величина указана в индексе 90, я бы сказал, i = 45, так как 45-я реальная величина будет равна индексу 90? – Piglet

ответ

1

Позволяет сначала убедиться, что вы смотрите на фактические величины. БПФ возвращают комплексные значения, связанные с каждым ядром. Эти комплексные значения обычно представлены двумя значениями: один для реальной части и другой для мнимой части. Затем величину частотной составляющей можно получить, вычислив sqrt(real*real+imaginary*imaginary).

Это должно дать вам вдвое больше значения и соответствующего спектра (с величинами, выраженными в децибелах):

enter image description here

Как вы можете видеть, что есть сильный пик вблизи 0Гц. Это согласуется с вашими сырыми данными с большим средним значением, а также с увеличением тренда от 0 до 4,2 с (оба из которых больше амплитуды колебаний). Если мы должны были удалить эти низкие частоты вклады (с, например, фильтр верхних частот с частотой среза около 0,25 Гц), мы получим следующую флуктуационную данные:

enter image description here

с соответствующим спектром:

enter image description here

Как вы можете видеть, частоту колебаний можно более легко наблюдать в бункере 11, что дает вам freq = (11 * 11.9)/128 = 1 Гц.

Однако обратите внимание, что ли удаление ниже 0,25 Гц эти частотные компоненты является улучшение ваших данных зависит от того, являются ли эти частотные компоненты представляют интерес для вашего приложения (возможно, не так как вы, кажется, заинтересованы в относительно быстрых колебаний).

-1

Перед измерением частот, близких к 0 Гц (или около 0-го лотка результатов FFT), необходимо удалить смещение постоянного тока (в среднем по всем выборкам) до БПФ.Применение оконной функции (окна фон Ханна или Хэмминга) после устранения смещения постоянного тока и до БПФ также может помочь.

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