Странный результат реконструкции сигнала быстрого преобразования Фурье - PullRequest
0 голосов
/ 23 октября 2019

У меня есть некоторые данные, которые показаны на рисунке ниже, и мне интересно найти некоторые из его коэффициентов ряда Фурье.

r = np.array([119.80601628, 119.84629291, 119.85290735, 119.45778804,
   115.64497439, 105.58519852, 100.72765819, 100.04327702,
   100.08590518, 100.35824977, 101.58424993, 105.47976376,
   112.27556007, 117.07679226, 118.99998888, 119.60458086,
   119.78624424, 119.83022022, 119.36116943, 115.72323767,
   106.58946834, 101.19479124, 100.11537349, 100.13313755,
   100.41846106, 101.42255377, 104.33650237, 109.73625492,
   115.14763728, 118.24665037, 119.35359999, 119.68061835])

z = np.array([-411.42980545, -384.98596279, -358.13032372, -330.89578468,
   -303.39129113, -275.76248957, -248.24478443, -221.07069838,
   -194.33260984, -168.05271807, -142.19357982, -116.62090103,
    -91.15354178,  -65.56745626,  -39.65284757,  -13.29632162,
     13.54374939,   40.84929432,   68.50496394,   96.33720787,
    124.08525182,  151.36802193,  177.98791952,  204.0805317 ,
    229.85399128,  255.44727674,  281.02166554,  306.75399703,
    332.74638285,  359.05528646,  385.74336711,  412.8189858 ])

plt.plot(z, r, label='data')
plt.legend()

enter image description here Затем я вычисляю среднюю выборкупериод, так как он не является постоянным, как видно из переменной Z:

l = []
for i in range(32-1):
    l.append(z[i]-z[i+1])
Ts = np.mean(l)

Затем я вычисляю fft: из scipy.fftpack import fft

rf = scipy.fftpack.fft(r)

Для восстановления сигнала затем:

fs = 1/Ts

amp = np.abs(rf)/r.shape[0]
n = r.shape[0]
s = 0
for i in range(n//2):

    phi = np.angle(rf[i], deg=False)
    a   = amp[i]
    k   = i*fs/n

    s += a*np.cos(2*np.pi*k  *(z)  +phi)

plt.plot(z, s, label='fft result')
plt.plot(z, r, label='data')
plt.legend()

enter image description here

Результат, однако, странный как по амплитуде, так и по частоте.

1 Ответ

1 голос
/ 23 октября 2019

Комплексный спектр представляет собой симметричный спектр с диапазоном (-fMax / 2, ..., + fMax / 2). Вы использовали только правую положительную часть спектра. Это означает, что ваш восстановленный сигнал содержит только половину частот спектра. Поскольку спектр является симметричным, все, что вам нужно сделать, это удвоить вычисленные абсолютные значения. Однако есть важное исключение. Амплитуда значения постоянного тока [0] не должна быть удвоена.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...