Hướng dẫn python find period of function - python tìm khoảng thời gian của chức năng

Khi phần DC của tín hiệu được loại bỏ, chức năng có thể được kết hợp với chính nó để bắt được khoảng thời gian. Thật vậy, tích chập sẽ có các đỉnh ở mỗi bội số của giai đoạn. FFT có thể được áp dụng để tính toán chập.

fft = np.fft.rfft(L, norm="ortho")

def abs2(x):
    return x.real**2 + x.imag**2

selfconvol=np.fft.irfft(abs2(fft), norm="ortho")

Đầu ra đầu tiên không tốt vì kích thước của hình ảnh không phải là bội số của thời kỳ.

Hướng dẫn python find period of function - python tìm khoảng thời gian của chức năng

Theo chú ý của NILS Werner, một cửa sổ có thể được áp dụng để hạn chế ảnh hưởng của rò rỉ quang phổ. Thay vào đó, ước tính thô đầu tiên của giai đoạn có thể được sử dụng để tạo ra tín hiệu và quy trình có thể được lặp lại khi tôi trả lời làm thế nào để tôi mở rộng mối tương quan chéo dựa trên FFT sao cho đỉnh của nó bằng với Rho của Pearson.

Hướng dẫn python find period of function - python tìm khoảng thời gian của chức năng

Từ đó, thời gian sôi sục để tìm mức tối đa đầu tiên. Đây là một cách nó có thể được thực hiện:

import numpy as np
import scipy.signal

from matplotlib import pyplot as plt

L = np.array([2.762, 2.762, 1.508, 2.758, 2.765, 2.765, 2.761, 1.507, 2.757, 2.757, 2.764, 2.764, 1.512, 2.76, 2.766, 2.766, 2.763, 1.51, 2.759, 2.759, 2.765, 2.765, 1.514, 2.761, 2.758, 2.758, 2.764, 1.513, 2.76, 2.76, 2.757, 2.757, 1.508, 2.763, 2.759, 2.759, 2.766, 1.517, 4.012])
L = np.round(L, 1)
# Remove DC component, as proposed by Nils Werner
L -= np.mean(L)
# Window signal
#L *= scipy.signal.windows.hann(len(L))

fft = np.fft.rfft(L, norm="ortho")

def abs2(x):
    return x.real**2 + x.imag**2

selfconvol=np.fft.irfft(abs2(fft), norm="ortho")
selfconvol=selfconvol/selfconvol[0]

plt.figure()
plt.plot(selfconvol)
plt.savefig('first.jpg')
plt.show()


# let's get a max, assuming a least 4 periods...
multipleofperiod=np.argmax(selfconvol[1:len(L)/4])
Ltrunk=L[0:(len(L)//multipleofperiod)*multipleofperiod]

fft = np.fft.rfft(Ltrunk, norm="ortho")
selfconvol=np.fft.irfft(abs2(fft), norm="ortho")
selfconvol=selfconvol/selfconvol[0]

plt.figure()
plt.plot(selfconvol)
plt.savefig('second.jpg')
plt.show()


#get ranges for first min, second max
fmax=np.max(selfconvol[1:len(Ltrunk)/4])
fmin=np.min(selfconvol[1:len(Ltrunk)/4])
xstartmin=1
while selfconvol[xstartmin]>fmin+0.2*(fmax-fmin) and xstartmin< len(Ltrunk)//4:
    xstartmin=xstartmin+1

xstartmax=xstartmin
while selfconvol[xstartmax]fmin+0.2*(fmax-fmin) and xstartmin< len(Ltrunk)//4:
    xstartmin=xstartmin+1

period=np.argmax(selfconvol[xstartmax:xstartmin])+xstartmax

print "The period is ",period

$ \ beingroup $

Đặt cược tốt nhất của bạn là sử dụng biến đổi Fourier của dữ liệu và tìm kiếm tần số cơ bản bằng cách tìm kiếm đỉnh thấp nhất trong biến đổi. Hình ảnh miền công cộng sau đây cho thấy những gì bạn nhận được:here to download the full example code

Đã trả lời ngày 19 tháng 2 năm 2013 lúc 11:21

Nbubisnbubis

import numpy as np
data = np.loadtxt('../../../../data/populations.txt')
years = data[:, 0]
populations = data[:, 1:]

32.1k9 Huy hiệu vàng77 Huy hiệu bạc138 Huy hiệu đồng

Hướng dẫn python find period of function - python tìm khoảng thời gian của chức năng

Loại câu hỏi này được trả lời bởi sự tự tương quan (ACF).

Hướng dẫn python find period of function - python tìm khoảng thời gian của chức năng

Đã trả lời ngày 19 tháng 2 năm 2013 lúc 11:27

Axel Kemperaxel Kemper ( 0 minutes 0.027 seconds)

4.7701 Huy hiệu vàng21 Huy hiệu bạc23 Huy hiệu đồng

$ \ beingroup $

Đặt cược tốt nhất của bạn là sử dụng biến đổi Fourier của dữ liệu và tìm kiếm tần số cơ bản bằng cách tìm kiếm đỉnh thấp nhất trong biến đổi. Hình ảnh miền công cộng sau đây cho thấy những gì bạn nhận được:

Nói cách khác :

Cho một hàm $ \ f (t) \ | \ t \ in \ [0, t_f] $

Tôi muốn tìm $ \ {t, \ t> 0 \} $ để $ \ forall \, t, \ f (t+t) = f (t) $

Có ai có giải pháp không?

Cảm ơn trước.

hỏi ngày 19 tháng 2 năm 2013 lúc 11:10Feb 19, 2013 at 11:10

$ \ endgroup $

$ \ beingroup $

Câu trả lời nhanh chóng và bẩn thỉu là lấy một biến đổi Fourier của chức năng của bạn và quan sát ở đâu, nếu có, có các gai trong biến đổi. Các tần số mà biến đổi có gai đại diện cho $ 2 \ pi/p $, trong đó $ p $ là khoảng thời gian của dữ liệu.

Trong thực tế, bạn sẽ không có gai nhưng một tập hợp các đỉnh. Có một điều trị kỹ lưỡng trong các công thức nấu ăn bằng số điều trị vấn đề theo thống kê bằng cách tính toán một cái gì đó gọi là biểu đồ của Lomb. .

Đã trả lời ngày 19 tháng 2 năm 2013 lúc 11:26Feb 19, 2013 at 11:26

Hướng dẫn python find period of function - python tìm khoảng thời gian của chức năng

Ron Gordonron GordonRon Gordon

135K16 Huy hiệu vàng181 Huy hiệu bạc297 Huy hiệu đồng16 gold badges181 silver badges297 bronze badges

$ \ endgroup $

$ \ beingroup $

Câu trả lời nhanh chóng và bẩn thỉu là lấy một biến đổi Fourier của chức năng của bạn và quan sát ở đâu, nếu có, có các gai trong biến đổi. Các tần số mà biến đổi có gai đại diện cho $ 2 \ pi/p $, trong đó $ p $ là khoảng thời gian của dữ liệu.

Hướng dẫn python find period of function - python tìm khoảng thời gian của chức năng

Trong thực tế, bạn sẽ không có gai nhưng một tập hợp các đỉnh. Có một điều trị kỹ lưỡng trong các công thức nấu ăn bằng số điều trị vấn đề theo thống kê bằng cách tính toán một cái gì đó gọi là biểu đồ của Lomb. .Feb 19, 2013 at 11:21

Hướng dẫn python find period of function - python tìm khoảng thời gian của chức năng

Đã trả lời ngày 19 tháng 2 năm 2013 lúc 11:26nbubis

Ron Gordonron Gordon9 gold badges77 silver badges138 bronze badges

$ \ endgroup $

$ \ beingroup $

Câu trả lời nhanh chóng và bẩn thỉu là lấy một biến đổi Fourier của chức năng của bạn và quan sát ở đâu, nếu có, có các gai trong biến đổi. Các tần số mà biến đổi có gai đại diện cho $ 2 \ pi/p $, trong đó $ p $ là khoảng thời gian của dữ liệu.

Trong thực tế, bạn sẽ không có gai nhưng một tập hợp các đỉnh. Có một điều trị kỹ lưỡng trong các công thức nấu ăn bằng số điều trị vấn đề theo thống kê bằng cách tính toán một cái gì đó gọi là biểu đồ của Lomb. .Feb 19, 2013 at 11:27

Hướng dẫn python find period of function - python tìm khoảng thời gian của chức năng

Đã trả lời ngày 19 tháng 2 năm 2013 lúc 11:26Axel Kemper

Ron Gordonron Gordon1 gold badge21 silver badges23 bronze badges

$ \ endgroup $