Как применить БПФ, чтобы найти частоту сигнала? - PullRequest
0 голосов
/ 04 апреля 2019

В настоящее время я работаю над проектом, в котором я записываю величину ускорения мобильного телефона, совершая периодические движения, что очень заметно, когда я визуализирую его в python и сглаживаю.Тем не мение;Я пытаюсь программно получить частоту сигнала (mag), и пока все мои попытки провалились.Данные хранятся в CSV-файле, который включает в себя несколько столбцов, но я извлекаю столбец величины, сглаживаю его с помощью фильтра нижних частот, а затем, наконец, пытаюсь использовать функцию fft numpy для моего отфильтрованного массива значений, но это не дает мнеожидаемый результат.

Вот изображение моей визуализированной величины после сглаживания:

Smoothed Data

Как вы можете видеть, это довольно периодически, и вы можете сказать, просто посмотревна этом, но я понятия не имею, почему FFT не может поймать это.

Я пробовал FFT и из numpy пакета, и из scipy, оба дают мне одинаковые результаты.

data = genfromtxt("data.csv", dtype=float, delimiter=',', names=True)
y = data['mag']
w = np.fft.fft(y)
freq = np.fft.fftfreq(len(w))

Вывод, который я получаю из freq массива, где самая высокая частота равна 0, чего я не понимаю.Если это уместно, я знаю, что частота дискретизации, с которой я записываю данные с устройства, составляет 20 миллисекунд, и я уже пробовал FFT как с необработанными данными, так и со сглаженными, и все же безуспешно.

1 Ответ

1 голос
/ 05 апреля 2019

Ваш сигнал имеет постоянное смещение. Смещение постоянного тока такое же (для БПФ), как и косинусоидальная волна с частотой 0. Это смещение постоянного тока также, по-видимому, больше, чем периодические изменения амплитуды в вашем сигнале. Таким образом, f = 0 - ожидаемый результат.

Вы можете попробовать как минимум две вещи. Вы могли бы искать следующее пиковое значение в ваших значениях результата БПФ после частотного блока 0. Нанесите на график значения БПФ, и вы можете увидеть его. Или вы можете вычесть смещение по постоянному току (среднее / среднее для всех выборок) перед выполнением БПФ, что приведет к удалению большого результата БПФ на частотном интервале 0.

Обратите внимание, что центральными частотами бинарного результата являются только те, которые являются целочисленными периодическими по длине БПФ. Если реальная частота не одна из этих, вам придется интерполировать. Sinc kernal интерполяция является правильным интерполятором для данных результатов FFT.

...