Получить автокорреляционную функцию из спектра мощности (python) - PullRequest
0 голосов
/ 03 февраля 2020

Я пытаюсь вычислить автокорреляционную функцию сигнала, для которого я знаю только спектр мощности.

Чтобы проверить мой подход, я хотел опробовать его на спектре шума $ 1 / f ^ 2 $, для которого известна автокорреляция (медленно уменьшающаяся). вот мой тестовый код

import scipy as sp
import colorednoise as cn

def plot_acf(length, avg):
    fig, ax1 = plt.subplots(1,1)

# get 1/f^2 noise.
    data = cn.powerlaw_psd_gaussian(2, length)

# getting the power-spectrum. scipy.welch returns the power-spectrum, with 
# positive frequencies first and then negative frequencies.
    f, pxx = sp.welch(data, nperseg = avg, window = "hanning", return_onesided = False)

# remove the spurious imaginary part of the inverse fourier transform.
    acf = np.real_if_close(np.fft.ifft(pxx))

    ax1.plot(acf[:int(avg/2)])

Но он выдает графики, которые выглядят так:

enter image description here

Что явно не так: Сила корреляции слишком слабая и слишком быстро уменьшается для шумового сигнала $ 1 / f ^ 2 $.

Вы знаете, откуда может возникнуть проблема?

...