2011-06-21 34 views
5

Tôi có hai bộ dữ liệu vào thời điểm đó (theo dạng vectơ) và tôi vẽ chúng trên cùng một trục để xem chúng có liên quan như thế nào với nhau, và tôi đặc biệt lưu ý và tìm kiếm các vị trí mà cả hai biểu đồ có hình dạng tương tự (ví dụ: các địa điểm có cả gradient có vẻ dương/âm ở khoảng thời gian tương tự). Ví dụ:Quá trình so sánh hai bộ dữ liệu

enter image description here

Cho đến nay tôi đã làm việc thông qua các dữ liệu đồ họa nhưng nhận ra rằng kể từ khi số lượng dữ liệu rất lớn âm mưu mỗi khi tôi muốn kiểm tra như thế nào hai bộ tương quan đồ họa nó sẽ mất quá nhiều thời gian.

Có ý tưởng, tập lệnh hoặc chức năng nào hữu ích để tự động hóa quá trình này không?

+2

tùy thuộc vào bản chất của dữ liệu, tôi khuyên bạn nên thực hiện phân tích tần suất bằng chức năng FFT. (Hãy chắc chắn hiểu cách chia tỷ lệ dữ liệu của bạn một cách chính xác trong miền FFT!) cách khác bằng cách sử dụng một cái gì đó đơn giản như lỗi bình phương bình phương có thể hữu ích. Nếu bạn có thể nói thêm về bản chất và nguồn gốc của dữ liệu, chúng tôi có thể cung cấp cho bạn một số lời khuyên tốt hơn. –

+0

@thron Lưu ý rằng để có được những gì anh ta muốn, anh ta cần tìm sự giống nhau trong pha không chỉ tần số giữa hai tín hiệu. Đó không phải là tầm thường. –

Trả lời

5

Điều đầu tiên bạn phải suy nghĩ là bản chất của các tiêu chí bạn muốn áp dụng để thiết lập sự giống nhau. Có nhiều cách để đo lường sự giống nhau và chính xác hơn, bạn có thể mô tả những gì bạn muốn cho "tương tự" có nghĩa là trong vấn đề của bạn dễ nhất là thực hiện nó bất kể ngôn ngữ lập trình.

Có nói rằng, đây là một số điều bạn có thể xem xét:

  • tương quan của hai tập dữ liệu
  • khác biệt của đạo hàm của bộ dữ liệu (nhưng tôi không nghĩ rằng nó sẽ là đủ mạnh mẽ)
  • phân tích quang phổ như mentionned bởi @thron ba
  • vv ...

Biết được nguồn gốc các bộ dữ liệu và sự thay đổi của chúng cũng có thể giúp ích rất nhiều trong việc xây dựng các thuật toán đủ mạnh.

1

Chắc chắn. Gọi hai vectơ của bạn A và B.

1) (Tùy chọn) Làm mịn dữ liệu của bạn bằng bộ lọc trung bình đơn giản (Matlab 'mịn') hoặc lệnh 'bộ lọc'. Điều này sẽ loại bỏ các thay đổi cục bộ trong vận tốc ("gradient") xuất hiện chủ yếu là nhiễu (như trong thành phần tăng dần của dấu vết màu đỏ). của mỗi vector (Matlab 'diff').

3) Thêm hai véc-tơ phân biệt với nhau (yếu tố khôn ngoan). Gọi đây là C.

4) Tìm tất cả các điểm trong C có giá trị tuyệt đối cao hơn ngưỡng nhất định (bạn sẽ phải đánh dấu dữ liệu để biết ý tưởng của điều này). Các điểm trên ngưỡng này cho biết tốc độ tương tự cao.

5) Bây giờ hãy tìm nơi có giá trị dương cao trong C được theo sau bởi giá trị âm cao hoặc ngược lại. Ở giữa hai điểm này, bạn sẽ có các đường cong tương tự trong A và B.

Lưu ý: a) Bạn có thể làm mịn sau bước 3 thay vì sau bước 1. b) Re 5), bạn có thể có tình huống một 'ngọn đồi' trong dữ liệu của bạn nằm ở rìa của vectơ và do đó được 'cắt giảm một nửa', và các vectơ xuống đến đường cơ sở trước khi tăng lên trên ngọn đồi tiếp theo. Sau đó, 5) sẽ xác định sai ngọn đồi khi đến giữa gốc ban đầu và đi lên tiếp theo. Để tránh điều này, bạn cũng có thể yêu cầu các điểm trong A và B ở giữa hai điểm tương đồng vận tốc có giá trị tuyệt đối cao.

+0

Cảm ơn bạn, điều này có vẻ giống như một con đường rất thú vị! – user718531