Как извлечь точные частоты из сигнала? - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть 1D массив сигналов.Этот массив содержит информацию о некоторых функциях, которые я хочу проанализировать с помощью np.fft.

. В качестве примера я попробовал следующее:

Моя функция должна быть простой синусоидой lambda x : sin(x), вТеория, когда я помещаю входной массив через эту функцию, я получаю массив сигналов, который при преобразовании с помощью fft должен сказать мне, что основным компонентом этого сигнала был (в псевдокоде) signal = 1* sin(x).

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

Теперь мой вопрос: как я могу получить «сырые» веса синусоидальной составляющей из моего сигнала?

Вот где я застрял:

>>> y = f(x)
>>> fqs = np.fft.fft(y)
>>> fqs
array([ 3.07768354+0.00000000e+00j,  3.68364588+8.32272378e-16j,
        8.73514635-7.15951776e-15j, -7.34287625+1.04901868e-14j,
       -2.15156054+5.10742080e-15j, -1.1755705 +4.87611209e-16j,
       -0.78767676+3.40334406e-16j, -0.58990993+4.25167217e-16j,
       -0.476018  -3.43242308e-16j, -0.40636656+1.13055751e-15j,
       -0.36327126+1.55440604e-16j, -0.33804202-1.07128132e-16j,
       -0.32634218+2.76861429e-16j, -0.32634218+8.99298797e-16j,
       -0.33804202+5.02435797e-16j, -0.36327126-1.55440604e-16j,
       -0.40636656-3.06536611e-16j, -0.476018  -4.57882679e-17j,
       -0.58990993+4.31587904e-16j, -0.78767676+9.75500354e-16j,
       -1.1755705 -4.87611209e-16j, -2.15156054-1.87113952e-15j,
       -7.34287625+1.79193327e-15j,  8.73514635-6.76648711e-15j,
        3.68364588-6.60371698e-15j])
>>> np.abs(_)
array([3.07768354, 3.68364588, 8.73514635, 7.34287625, 2.15156054,
       1.1755705 , 0.78767676, 0.58990993, 0.476018  , 0.40636656,
       0.36327126, 0.33804202, 0.32634218, 0.32634218, 0.33804202,
       0.36327126, 0.40636656, 0.476018  , 0.58990993, 0.78767676,
       1.1755705 , 2.15156054, 7.34287625, 8.73514635, 3.68364588])
>>> where do I find my 1*sin(x) ?

1 Ответ

0 голосов
/ 25 апреля 2018

Даже если ваша переменная x известна, как показано здесь, я думаю, вы не генерируете периодическую функцию. Это прекрасно работает для меня:

import numpy as np
x=np.linspace(0,np.pi*2,100,endpoint=False)
y=np.sin(x)
yf=np.fft.rfft(y)

вывод

 (-1.5265566588595902e-16+0.0j)
 (-1.8485213360008856e-14+-50.0j)
 (5.8988036787285649e-15+-3.4015634637549994e-16j)
 (-1.0781745022416177e-14+-3.176912458933349e-15j)
 (6.9770353907875146e-15+-3.6920723832369405e-15j)

Единственное мнимое число без нуля - в режиме 1.

...