Расчет функций БПФ по дискретному сигналу - PullRequest
1 голос
/ 22 января 2020

У меня есть массив однородного сигнала, который был выбран с частотой 10 Гц (то есть две последовательные точки данных находятся на расстоянии 100 миллисекунд). Это фактически величина 3-х осей трехмерного гироскопа, массив содержит 30 точек данных (за 3 секунды). Я показываю частоту этой серии следующим образом

import numpy as np
import matplotlib.pyplot as pl

sample_rate = 10
x = np.array([318.45,302.78,316.47,334.14,333.41,326.15,320.07,318.68,314.12,308.64,300.15,304.33,318.42,322.72,329.56,339.18,338.03,343.27,351.44,353.23,352.35,352.88,353.43,352.14,351.28,352.82,353.36,353.35,353.19,353.82])
x = np.array(x) - np.mean(x)
p = np.abs(np.fft.rfft(x))
f = np.linspace(0, sample_rate/2, len(p))
pl.plot(f, p)
pl.show()

Может кто-нибудь сказать мне, правильно ли я построил или нет? Я планирую рассчитать следующие характеристики (сверху сигнал)

  1. D C Компонент
  2. Спектральная энергия
  3. Информационная энтропия
  4. Доминант частотные компоненты
  5. Основная частота
  6. Величина первых пяти компонентов анализа БПФ

Может ли кто-нибудь помочь мне заполнить приведенный выше код для расчета этих функций?

----@RoadRunner66: Пожалуйста, смотрите мои вопросы ниже, так как я не смог отправить вам длинный ответ ----

Спасибо за ваш ответ и ваш код,

Что касается вашего вопроса, данные взяты из гироскопа, который измеряет углы Эйлера.

Итак (сумма x [i] ** 2: 3357757.0) - это спектральная энергия? Если да, то нужно ли нормализовать его, разделив это число на n? (или умножьте на n, как вы сделали), однако две нижеприведенные статьи имеют различия в своих определениях.

Как и в первой статье (первая ссылка ниже), они заявили, что "Вторая особенность в частотной области набор был выбран в качестве спектральной энергии, которая определяется как сумма квадратов коэффициентов БПФ "

Во второй статье (2-я ссылка) они указали другим способом, что " Спектральная энергия : квадратичная сумма спектральных коэффициентов, деленная на количество выборок в окне "

А как насчет основной частоты, это то же самое значение (термин) с доминантной частотой? Я думаю, что основная частота относится к единственной, которая имеет самый высокий пик спектра?

Я напечатал частоты и эквивалентные величины в два ряда, как это enter image description here

Я думаю, что вы напечатали величину первых 5, как желтый сильфон. Я не уверен насчет определения «Первые 5 компонентов»

Если мы используем первые пять последовательных, как вы указали, имеет ли смысл включать те (например, с частотой 0 или 0,666) и кормить их в мою модель прогнозирования (как объяснено ниже), потому что она слишком низкая по сравнению с другими. Если возвращаемый спектр ясен с доминирующими частотами, такими как 1 Гц и 3 Гц, то, возможно, величина на частоте 0,5 Гц или 1,5 Гц будет близка к нулю.

Может ли это быть термин "Величина первых пяти компонентов" анализа БПФ »- это« Величина первых пяти доминирующих компонентов », как я выделил синим цветом? Относится ли этот термин к 5 значениям или только к 1 значениям (квадрат root от суммы 5 квадратов)? Если это относится к 5 значениям (весьма вероятно, что это так), то я думаю, что пять лучших доминирующих компонентов по величине будут лучшим выбором, когда речь идет о сравнении разницы между двумя сигналами?

Кстати, второй в статье также написано «Первые 5-БПФ коэффициенты: первые 5 из коэффициентов быстрого преобразования Фурье взяты, так как они охватывают основные частотные компоненты, а использование дополнительных коэффициентов не улучшило точность»

Если честно, я работаю над проблемой коровьей деятельности, моя стратегия состоит в том, чтобы сегментировать данные датчика по времени windows (3,5,7..секунды) и извлекать элементы из каждого окна, а затем передавать их к модели машинного обучения.

(Мои данные включают в себя 3D-гироскоп и 3D-акселерометр, прикрепленный к шее коровы, выборка данных датчиков составляет 10 Гц)

Я хочу объединить два типа функций, один раз функции домена, а другой - функции частотной области.

Я прочитал статью и обнаружил вышеупомянутый набор характеристик частотной области, который включает термин «Величина первых пяти компонентов анализа БПФ» (из этой статьи https://ieeexplore.ieee.org/abstract/document/4663615) и из этой https://www.ncbi.nlm.nih.gov/pmc/articles/PMC4634510/

Второй, который они называли «Первые 5-БПФ коэффициенты: первые 5 из коэффициентов быстрого преобразования Фурье берутся, так как они захватывают компоненты основной частоты, и использование дополнительных коэффициентов не улучшили точность. "

Большое спасибо за ваше чтение и ответ!

1 Ответ

0 голосов
/ 23 января 2020

Вы сделали большую часть работы. Похоже, что это для присвоения класса, так что это может объяснить разреженность данных, которые на самом деле не очень много для go.

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

sample_rate = 10 #Hz

x = np.array([318.45,302.78,316.47,334.14,333.41,326.15,320.07,318.68,314.12,308.64,
              300.15,304.33,318.42,322.72,329.56,339.18,338.03,343.27,351.44,353.23,
              352.35,352.88,353.43,352.14,351.28,352.82,353.36,353.35,353.19,353.82])
n=len(x)
print(f'number of points n : {n}')
t= np.linspace(0,3, n)     # time according to your description
mn=np.mean(x)
print(f' mean = {mn:.3f} unit')
print(f' sum x[i]**2  : {np.sum(x**2) :.1f} unit^2 ')

pr = np.abs(np.fft.rfft(x))/n
print()
print(f' DC peak :  {pr[0]};  this makes choice of normalization 1/n meaningful')

print(f' n *sum X[k]**2   : {np.sum(np.abs(pr)**2)*n :.1f} unit^2 ') 
f = np.linspace(0, sample_rate/2, len(pr))   # 10 Sa/sec, so 5 Hz is Nyquist limit

plt.figure(figsize=(20,5))

plt.subplot(141)
plt.plot(t,x,'.-')
plt.title('original data') 

plt.subplot(142)
plt.plot(f, pr,'.-')
plt.title('spectrum')


plt.subplot(143)
xf = np.array(x) - mn   #  remove the DC
plt.plot(t, xf,'.-')
plt.title('original data with DC removed')

plt.subplot(144)
pr = np.abs(np.fft.rfft(xf))/n
plt.plot(f, pr, '.-');
plt.title('spectrum (DC removed) ')

enter image description here

Пик D C соответствует среднему значению исходного сигнала в 334 единицах.

Спектральная энергия (см. Теорема Парсеваля ) одинакова во временной и частотной областях.

Я не знаю, какое определение информационной энтропии ожидается для вас (см., Например, Приблизительная энтропия ).

Доминирующие частоты в спектре ( после удаления D C) имеют частоту 1/3 Гц, 1 Гц и 2 Гц, причем 1/3 Гц является самой большой. Я напечатал величину первых пяти.

Важным вопросом для меня будет физический смысл данных. Это углы? Если да, то в каком подразделении?

Обратите внимание, что частотные компоненты в исходных данных можно «увидеть» на частоте 1/3 Гц (одна волна в течение 3 секунд), 1 Гц (одна волна на 1 сек c) и 2 Гц (одна волна более 1/2 сек c) соответственно.

enter image description here

...