2009-08-13 8 views
10

Tôi đã tự hỏi nếu ai đó có thể chỉ cho tôi một thuật toán/kỹ thuật được sử dụng để so sánh các tín hiệu phụ thuộc thời gian. Lý tưởng nhất, thuật toán giả thiết này sẽ lấy 2 tín hiệu làm đầu vào và trả về một số sẽ là phần trăm tương tự giữa các tín hiệu (0 là 2 tín hiệu không liên quan thống kê và 1 là chúng là một kết hợp hoàn hảo). Tất nhiên, tôi nhận ra rằng có vấn đề với yêu cầu của tôi, cụ thể là tôi không biết cách xác định đúng 'sự giống nhau' trong ngữ cảnh so sánh 2 tín hiệu này, vì vậy nếu ai đó cũng có thể chỉ cho tôi ở bên phải hướng (như những gì tôi nên tìm kiếm/biết, vv), tôi cũng đánh giá cao nó.Thuật toán để phù hợp với thời gian phụ thuộc (1D) Tín hiệu

Trả lời

0

tôi không biết xử lý tín hiệu, vì vậy đây là một đoán ..:

là tín hiệu của bạn một cách hiệu quả một danh sách các cặp có thứ tự (x,y), nơi x là lần và y biên độ? Nếu vậy, thì có lẽ bạn có thể vứt bỏ thì thời gian phối hợp - ví dụ:

Signal 1: [(x0,y0), (x1,y1), (x2,y2), (x3,y3), ...] 
Signal 2: [(x0,z0), (x1,z1), (x2,z1), (x3,z3), ...] 

Ném đi thời gian:

Signal 1: [y0, y1, y2, y3, ...] 
Signal 2: [z0, z1, z2, z3, ...] 

Sau đó, bạn có thể so sánh biên độ với nhau, có lẽ bằng cách tìm kiếm một correlation . Có lẽ bạn có thể âm mưu chống lại yz:

Comparing: [(y0,z0), (y1,z1), (y2,z2), (y3,z3), ...] 

Hoặc tính toán một trong những hệ số tương quan khác nhau.

1

Giải pháp chung: bạn có thể chia dữ liệu thành biểu đồ và sử dụng phép thử Chi bình phương hoặc kiểm tra Kolomogrov.

Cả hai đều được dự định rõ ràng để xác định cơ hội phân phối hai đại diện cho các mẫu ngẫu nhiên từ cùng phân phối underling (nghĩa là: có cùng hình dạng trong thống kê).

Tôi không biết thực hiện ac ra khỏi đỉnh đầu của tôi, nhưng ROOT cung cấp C++ thực hiện của cả hai:

Tôi tin rằng các tài liệu trỏ đến một số giấy tờ là tốt.


Tôi nghĩ rằng CERNLIB cung cấp cả các thuật toán trong fortran77, mà bạn có thể liên kết đến c. Dịch mã ROOT có thể dễ dàng hơn.

1

Bạn có thể thử Chuyển đổi nhanh Fourier (tra cứu FFT trong Wikipedia, có thư viện nguồn mở để thực hiện chuyển đổi).

FFT sẽ chuyển đổi dữ liệu của bạn từ miền thời gian (tức là xung tại 1s, 2s, 3s, 4s ...) sang dữ liệu trong miền tần số (tức là xung mỗi giây).

Sau đó, bạn có thể so sánh tần số và mức độ liên quan tương đối dễ dàng hơn.Nó phải là một bước đi đúng hướng cho bạn.

+0

Không phải là đề xuất xấu cho một số loại đầu vào, nhưng bạn thực sự rời OP với cùng một vấn đề: cách so sánh hai với phổ. – dmckee

+0

dmckee: ngoại trừ các tín hiệu chuyển đổi bẩn sẽ có thể so sánh điểm-điểm mà không thay đổi. Bằng cách này, "quang phổ" là thuật ngữ sai cho các tín hiệu ban đầu, vì nó có nghĩa là năng lượng (hoặc phép đo tương đương) trên trục x. – Svante

14

cross-correlation function là giải pháp xử lý tín hiệu cổ điển. Nếu bạn có quyền truy cập vào Matlab, hãy xem hàm XCORR. max(abs(xcorr(Signal1, Signal2, 'coeff'))) sẽ cung cấp cho bạn cụ thể những gì bạn đang tìm kiếm và tương đương tồn tại trong Python là tốt.

Tương quan chéo giả định rằng "tương tự" mà bạn đang tìm kiếm là thước đo của mối quan hệ tuyến tính giữa hai tín hiệu. Định nghĩa các tín hiệu hữu hạn có độ dài thực có giá trị với thời gian chỉ số n = 0..N-1 là:

C[g] = sum{m = 0..N-1} (x1[m] * x2[g+m]) 

g chạy từ -N..N (bên ngoài phạm vi đó sản phẩm bên trong tổng là 0).

Mặc dù bạn đã yêu cầu một số, nhưng chức năng này khá thú vị. Miền chức năng g được gọi là miền trễ.

Nếu x1x2 có liên quan bởi một ca thời gian, hàm tương quan chéo sẽ có đỉnh tại thời điểm trễ tương ứng với ca làm việc. Ví dụ, nếu bạn có x1 = sin[wn]x2 = sin[wn + phi], do đó, hai sóng sin ở cùng tần số và pha khác nhau, hàm tương quan chéo sẽ có đỉnh tại độ trễ tương ứng với dịch pha.

Nếu x2 là phiên bản thu nhỏ của x1, tương quan chéo cũng sẽ mở rộng. Bạn có thể bình thường hóa hàm thành hệ số tương quan bằng cách chia cho sqrt(sum(x1^2)*sum(x2^2)) và đưa nó vào 0..1 bằng cách lấy giá trị tuyệt đối (dòng Matlab có các hoạt động này).

Nói chung, dưới đây là tóm tắt về mối tương quan chéo nào là tốt/xấu.

Cross-tương quan hoạt động tốt cho việc xác định nếu một tín hiệu được tuyến tính liên quan đến một, có nghĩa là nếu
x2(t) = sum{n = 0..K-1}(A_n * x1(t + phi_n))
nơi x1(t)x2(t) là những tín hiệu trong câu hỏi, A_n đang mở rộng quy mô các yếu tố, và phi_n là thay đổi thời gian. Các tác động của việc này là:

  1. Nếu một tín hiệu là thời điểm chuyển phiên bản của (phi_n <> 0 for some n) khác chức năng tương quan chéo sẽ khác không.
  2. Nếu một tín hiệu là phiên bản được chia tỷ lệ của (A_n <> 0 for some n) khác, hàm tương quan chéo sẽ khác không.
  3. Nếu một tín hiệu là sự kết hợp giữa các phiên bản được chia tỷ lệ và thời gian dịch chuyển khác (cả A_nphi_n khác 0 cho một số số n), hàm tương quan chéo sẽ khác 0. Lưu ý rằng đây cũng là định nghĩa của bộ lọc tuyến tính.

Để có thêm bê tông, giả sử x1 là tín hiệu ngẫu nhiên dải rộng. Hãy để x2=x1. Bây giờ, hàm tương quan chéo chuẩn hóa sẽ chính xác là 1 tại g = 0 và gần 0 ở mọi nơi khác. Bây giờ, hãy để x2 là phiên bản được lọc (tuyến tính) của x1. Hàm tương quan chéo sẽ khác 0,. Chiều rộng của phần khác 0 sẽ phụ thuộc vào băng thông của bộ lọc.

Đối với trường hợp đặc biệt là x1x2 là định kỳ, thông tin về dịch chuyển pha trong phần gốc của câu trả lời sẽ được áp dụng.

Trường hợp tương quan chéo sẽ không được giúp là nếu hai tín hiệu không liên quan đến tuyến tính. Ví dụ, hai tín hiệu định kỳ ở các tần số khác nhau không liên quan tuyến tính. Cũng không phải là hai tín hiệu ngẫu nhiên được rút ra từ một quá trình ngẫu nhiên băng rộng vào các thời điểm khác nhau. Cũng không phải là hai tín hiệu có hình dạng tương tự nhau nhưng với việc lập chỉ mục thời gian khác nhau - điều này giống như trường hợp tần số cơ bản không bằng nhau.

Trong mọi trường hợp, bình thường hóa hàm tương quan chéo và nhìn vào giá trị lớn nhất sẽ cho bạn biết các tín hiệu có liên quan tuyến tính hay không - nếu số thấp, như dưới 0,1, tôi sẽ thoải mái tuyên bố chúng không liên quan. Cao hơn thế và tôi sẽ xem xét kỹ hơn, vẽ đồ thị cả các hàm tương quan chéo chuẩn hóa và không chuẩn hóa và xem xét cấu trúc. Một mối tương quan chéo định kỳ ngụ ý cả hai tín hiệu là định kỳ, và một hàm tương quan chéo cao hơn đáng kể xung quanh g=0 ngụ ý một tín hiệu là một phiên bản được lọc của một tín hiệu khác.

+0

Nó không phải là hoàn toàn rõ ràng từ câu hỏi, nhưng nếu oort muốn một thước đo của hình dạng của hình dạng (chứ không phải trong phaseness), sau đó tương quan chéo là ít hơn tối ưu: cho một tín hiệu cơ sở s_b và hai tín hiệu thử nghiệm t_1, t_2, nó không thích hợp để nói tín hiệu kiểm tra nào giống nhất tín hiệu cơ bản. – dmckee

+0

Tôi đang tìm một hàm có thể đưa ra thước đo về hình dạng của hình dạng. Điều gì sẽ phù hợp hơn? – oort

+0

@oort: nhìn vào câu trả lời của tôi cho một vài lựa chọn. Đây là những phức tạp hơn mà tương quan chéo, nhưng họ thực sự đi thẳng đến vấn đề tương tự hình dạng. – dmckee

1

Dynamic Time Warping là phương pháp bạn có thể sử dụng nếu các tín hiệu phải khớp với nhau bằng cách tăng tốc và giảm thời gian ở các vị trí khác nhau.

0

Bạn không nói nhiều về tín hiệu là gì và đo lường "sự giống nhau" sẽ có ý nghĩa gì đối với bạn. Nhưng, nếu các tín hiệu trong pha (có nghĩa là, bạn muốn so sánh hai tín hiệu tức thời, và sẽ không có bất kỳ thời gian trễ nào để xem xét) thì tôi khuyên bạn nên xem xét mối tương quan của Pearson. Nó cho bạn giá trị 1 nếu hai tín hiệu giống hệt nhau, giá trị bằng 0 nếu chúng hoàn toàn không giống nhau và một cái gì đó ở giữa nếu chúng có vần điệu. Như một lợi thế bổ sung, Pearson không quan tâm nếu các tín hiệu được khuếch đại khác nhau, (ngoại trừ nếu một tín hiệu là nghịch đảo của tín hiệu kia nó cho bạn kết quả là -1).

Điều đó nghe có vẻ giống như những gì bạn đang tìm kiếm không?