không thể tìm ra thời kỳ tín hiệu của tôi


7

Tôi có một tín hiệu ồn ào, đó là âm thanh của động cơ với tốc độ không đổi, vì vậy âm thanh "nên" là định kỳ, tôi biết rằng có một cách sử dụng chức năng tự tương quan để có thời gian, tôi đã làm điều đó, nhưng tôi không thể tìm ra thời kỳ. Bất kỳ ý tưởng làm thế nào để làm điều đó dưới tín hiệu và kết quả của sự tự tương quan: tín hiệu tín hiệu

kết quả tự tương quan: tự kỷ


Nếu bạn có một câu hỏi mới, vui lòng hỏi nó bằng cách nhấp vào nút Hỏi câu hỏi . Bao gồm một liên kết đến câu hỏi này nếu nó giúp cung cấp bối cảnh. - Từ đánh giá
MBaz

Câu trả lời:


6

Đây là một nỗ lực để làm những gì bạn cần trong scilab.

nhập mô tả hình ảnh ở đây

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_peakschứ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));

4

có vẻ như bạn đang áp dụng một số chức năng cửa sổ trong tín hiệu của bạn (Lô tự động có vẻ như cửa sổ)!

Để thực hiện công việc của nó, phân tách tín hiệu của bạn trong một dữ liệu đóng khung liên tục có bị chồng chéo hay không, áp dụng chức năng tự tương quan:

y(k)=n=0N1x(k)x(n+k)

Cuối cùng, tìm vị trí cao nhất và chúc mừng bạn đã tìm thấy thời kỳ!

Làm thế nào để làm điều đó trong MATLAB ở đây


Không, tôi không biết, và ý bạn là nói về những đỉnh núi?
Động cơ

đỉnh là giá trị tối đa trong vectơ tự tương quan của bạn!
ederwander

chu kỳ của tôi không thể là 10000 vector của tôi có 10000 phần tử?
Động cơ

2
Không cần phải có một chức năng cửa sổ được áp dụng. Công cụ ước lượng tự tương quan chuẩn (thiên vị) sẽ tạo ra một đường bao tam giác cho tự tương quan. Ngoài ra, đỉnh của tương quan tự động sẽ luôn ở trung tâm, vì vậy bạn cần giải thích thêm một chút ý của bạn bằng cách "tìm vị trí đỉnh". Tôi nghi ngờ bạn có nghĩa là tìm đỉnh chính, và sau đó tìm đỉnh lớn nhất tiếp theo gần nó nhất; khoảng cách giữa hai người sẽ là một ước tính của thời kỳ.
Peter K.

bạn nói đúng, cốt truyện từ @Engine dường như là một chế độ tự động chuẩn :-) Tôi đã thực hiện bằng matlab ở đây
ederwander

0

Cách ưa thích của tôi để tìm ra "khoảng thời gian" tín hiệu của bạn là nhìn vào phổ. Có vẻ như tín hiệu của bạn có một hình sin mạnh với một số nhiễu trên đó. Nếu bạn lấy FFT và vẽ độ lớn, bạn sẽ có thể thấy tần số nào mạnh nhất (chúng có thể sẽ tương ứng với RPM mà động cơ đang chạy). "Khoảng thời gian" tín hiệu của bạn sẽ được chia cho tần số tín hiệu. Nếu bạn có một hình sin 10Hz, thời gian của nó sẽ là 0,1 giây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.