Đây là một nỗ lực để làm những gì bạn cần trong scilab.
Cốt truyện trên cho thấy một số dữ liệu mà tôi tổng hợp. Biểu đồ thứ hai cho thấy sự tương quan tự động của dữ liệu thô (được phóng to xung quanh đỉnh trung tâm của tương quan tự động). Các vòng tròn màu đỏ hiển thị các đỉnh được tìm thấy bằng cách sử dụng find_peaks
chức năng này .
Cốt truyện cuối cùng cho thấy sự khác biệt giữa tất cả các địa điểm cao điểm. Đây sẽ là một ước tính của thời kỳ. Vì bạn không thực sự đảm bảo rằng giai đoạn cơ bản sẽ là số lượng mẫu nguyên, nên có lẽ bạn nên tìm giá trị trung bình của các giá trị này.
Trong trường hợp này, thời gian "thực sự" là 1/f0 = 11.191996
, và lấy diffs = diff(peaks);
và sau đó mean(diffs(10:173))
mang lại 11.195122
.
Mã dưới đây.
N = 1000;
f0 = 0.0893495634;
phi = rand(1,1,'uniform')*2*%pi;
sigma = 0.5;
x = sin(2*%pi*[0:N-1]*f0 + phi) + sigma*rand(1,N,'normal');
XC = xcorr(x);
clf
subplot(311)
plot(x);
subplot(312)
plot(XC);
peaks=peak_detect(XC,0);
plot(peaks,XC(peaks),'ro')
a = get('current_axes');
a.data_bounds=[950 1050 -500 800];
subplot(313)
plot(diff(peaks));