WedX - журнал о программировании и компьютерных науках

Python, ряд Фурье дискретных данных

Я пытаюсь найти представление ряда Фурье для n числа гармоник набора данных с дискретным временем. Данные изначально не являются периодическими, поэтому я выполнил периодическое расширение набора данных, и результат можно увидеть на осциллограмме ниже.

введите здесь описание изображения

Я попытался воспроизвести решение в этом вопросе: Рассчитайте ряд Фурье с помощью тригонометрический подход Однако полученные мной результаты не дали надлежащего результата, как видно на рисунках ниже. Кажется, что вычисление просто выводит смещенную версию исходного сигнала.

введите здесь описание изображения

Набор данных, с которым я работаю, представляет собой массив numpy с 4060 элементами. Как я могу правильно вычислить и отобразить разложение в ряд Фурье дискретного набора данных?

Вот код, который я использовал, он почти идентичен коду в примере, указанном в ссылке, за исключением того, что были внесены изменения, чтобы приспособить мои собственные данные сигнала.

 # dat is a list with the original non periodic data
 # persig is essentially dat repeated over several periods

 # Define "x" range.
 l = len(persig)
 x = np.linspace(0,1,l)
 print len(x)

 # Define "T", i.e functions' period.
 T = len(dat)
 print T
 L = T / 2

 # "f(x)" function definition.
 def f(x): 

     persig = np.asarray(persig)
     return persig

# "a" coefficient calculation.
 def a(n, L, accuracy = 1000):
     a, b = -L, L
     dx = (b - a) / accuracy
     integration = 0
     for x in np.linspace(a, b, accuracy):
         integration += f(x) * np.cos((n * np.pi * x) / L)
     integration *= dx
     return (1 / L) * integration

# "b" coefficient calculation.
 def b(n, L, accuracy = 1000):
     a, b = -L, L
     dx = (b - a) / accuracy
     integration = 0
     for x in np.linspace(a, b, accuracy):
         integration += f(x) * np.sin((n * np.pi * x) / L)
     integration *= dx
     return (1 / L) * integration

# Fourier series.   
 def Sf(x, L, n = 5):
     a0 = a(0, L)
     sum = np.zeros(np.size(x))
     for i in np.arange(1, n + 1):
         sum += ((a(i, L) * np.cos((i * np.pi * x) / L)) + (b(i, L) * np.sin((i * np.pi * x) / L)))
     return (a0 / 2) + sum   


 plt.plot(x, f(x))


 plt.plot(x, Sf(x, L))


 plt.show()

  • Пожалуйста, покажите свой код и ваши результаты. 30.04.2017
  • numpy.fft? 30.04.2017
  • Добавлен код @DYZ 30.04.2017
  • В любом случае, поскольку вы используете numpy, почему бы не использовать функции scipy FFT? docs.scipy.org/doc/numpy/reference/routines.fft. html 30.04.2017
  • @DYZ мне нужно использовать fft или rfft? 30.04.2017
  • Не знаю. Прочтите документацию. 30.04.2017
  • @DYZ хорошо, теперь, когда у меня есть спектральное представление сигнала, и я знаю, каковы величины каждой гармоники, как мне построить ряд Фурье сигнала? так что я просто создаю синусоидальные волны, которые имеют величину и частоту каждой гармоники, присутствующей в спектре? 30.04.2017
  • Вам нужно оценить каждую гармонику с помощью a*np.sin(np.linspace(...)), сложить их и построить сумму с помощью matplotlib.pyplot.plot(). 30.04.2017

Новые материалы

Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что это выглядит сложно…
Просто начните и учитесь самостоятельно Я хотел выучить язык программирования MVC4, но не мог выучить его раньше, потому что он кажется мне сложным, и я бросил его. Это в основном инструмент..

Лицензии с открытым исходным кодом: руководство для разработчиков и создателей
В динамичном мире разработки программного обеспечения открытый исходный код стал мощной парадигмой, способствующей сотрудничеству, инновациям и прогрессу, движимому сообществом. В основе..

Объяснение документов 02: BERT
BERT представил двухступенчатую структуру обучения: предварительное обучение и тонкая настройка. Во время предварительного обучения модель обучается на неразмеченных данных с помощью..

Как проанализировать работу вашего классификатора?
Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

Работа с цепями Маркова, часть 4 (Машинное обучение)
Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..


Для любых предложений по сайту: [email protected]