Triển khai ma trận thưa thớt của Bộ lọc Kalman?


8

Tôi có một mã mô hình hóa dựa trên Bộ lọc Kalman mà tôi đã phát triển cho một ứng dụng lập bản đồ tầng điện ly khu vực gần thời gian thực. Mã này đồng hóa dữ liệu từ các cảm biến khác nhau thành bản đồ (được mô tả bằng một bộ các chức năng cơ bản) bằng Bộ lọc Kalman.

Tôi đang cố gắng mở rộng phạm vi này lên một vùng lớn hơn và nhiều cảm biến hơn, tuy nhiên phần đại số ma trận của Bộ lọc Kalman đang trở nên rất chậm, do các ma trận lớn (hàng nghìn hàng / cột) liên quan. Tôi nghi ngờ cách tốt nhất để tấn công vấn đề thời gian chạy là sử dụng thực tế là các ma trận này thường rất thưa thớt với 80% trở lên trong tổng số các phần tử bằng không. Lý do cho điều này là mỗi cảm biến có một tham số sai lệch được ước tính chung với các hệ số bản đồ. Điều này hiển thị là 1 trong cột cho cảm biến đó trong ma trận Kalman H, với số 0 trong các cột cho mọi cảm biến và bản đồ đồng hiệu quả khác. Có hàng trăm cảm biến, mỗi cảm biến đóng góp 8-10 quan sát ở mỗi kỷ nguyên, do đó có rất nhiều số không.

Tôi có thể xem xét việc triển khai các thành phần của bộ lọc Kalman bằng các thuật toán thưa thớt, cụ thể là nhân và đảo ngược *, nhưng tôi tự hỏi liệu có cách tiếp cận nào tốt hơn mà đưa ra bộ lọc Kalman ở dạng khác phù hợp hơn cho các trường hợp khi ma trận thưa thớt? Tôi biết tôi có thể sử dụng bộ lọc Kalman đồng bộ hoặc một cái gì đó tương tự, nhưng nếu có thể tôi muốn giữ lại sự tối ưu của bộ lọc Kalman tuyến tính thuần túy; tổng khối lượng dữ liệu không bị cấm, chỉ là các ma trận thưa thớt lớn xuất phát từ mô hình tuyến tính.

Về mặt triển khai, điều này được thực hiện trong IDL, tuy nhiên đại số ma trận lõi được thực hiện thông qua các cuộc gọi đến các thư viện LA được tối ưu hóa bên ngoài (cụ thể là ATLAS).

* Tôi biết rằng việc triển khai bộ lọc Kalman tối ưu sẽ tránh đảo ngược và thay vào đó sử dụng phân tách UD. Tôi đang xem xét việc cố gắng thực hiện một cái gì đó như thế này, vì vậy đó có thể là câu trả lời, nhưng tôi đang tìm hiểu xem liệu có giải pháp nào tốt hơn cho sự thưa thớt của ma trận hay không.


1
Tôi nghĩ rằng câu hỏi này sẽ tốt hơn nếu bạn bao gồm số lượng toán học tối thiểu để mô tả vấn đề. Nhiều người ở đây quen thuộc với đại số tuyến tính, nhưng không phải với quy trình lọc Kalman cơ bản. Mô tả ma trận H (bất kể nó có thể là gì) và các phương trình liên quan đến nó mà bạn đang cố gắng giải quyết, sẽ dẫn đến một câu trả lời tốt hơn.
Bill Barth

Bạn có lẽ đúng. Tuy nhiên, sơ đồ lọc Kalman là một chủ đề lớn đối với chính họ. Sẽ là quá nhiều khi yêu cầu ai đó tìm hiểu cách Bộ lọc Kalman hoạt động từ câu hỏi của tôi và từ đó đưa ra câu trả lời. Đây sẽ là nghiên cứu cấp giấy làm việc (dù sao tôi cũng giả sử như vậy). Tôi nghĩ rằng bất cứ ai ở vào vị trí để trả lời câu hỏi sẽ không cần thêm chi tiết.
Bogdanovist

Câu trả lời:


7

Với các ma trận thưa thớt, thường thì mặc dù ma trận thưa thớt, dày đặc. Trong những trường hợp như vậy, hệ số Cholesky hoặc của có nhiều khả năng thưa thớt (đặc biệt nếu các hàng / cột của được sắp xếp lại để cải thiện mô hình thưa thớt.) Trong hầu hết các trường hợp, nếu bạn muốn khai thác độ thưa thớt và không quan tâm đến sử dụng thuật toán lặp để giải các hệ thống liên quan đến , sau đó bạn nên sử dụng một số yếu tố của ma trận thay vì tính toán rõ ràng . A - 1 L U A A A A - 1AA1LUAAAA1

Đối với lọc Kalman nói riêng, thay vì tính toán

Sk=(HkPk1,kHkT+Rk)1

Thông thường, bạn nên làm việc tốt hơn với hệ số . Vì là đối xứng và phải có giá trị dương, nên bạn có thể sử dụng hệ số nhân Cholesky hoặc nhân tố để làm điều này. Bạn đã nói với chúng tôi rằng ma trận của bạn rất thưa thớt, nhưng bạn chưa nói với chúng tôi bất cứ điều gì về việc có thưa thớt hay có cấu trúc khác hay không, và dĩ nhiên có thể khá dày đặc. S k L D L T H k R k PSk1SkLDLTHkRkP

Một lý do mà Bộ lọc Kalman Bộ đồng bộ (EnKF) và các kỹ thuật lọc hạt khác nhau rất phổ biến là vì các hệ thống có vectơ trạng thái cực lớn, việc lọc Kalman thông thường trở nên rất khó khăn. EnKF có thể được thực hiện một cách hiệu quả cho các vectơ trạng thái rất lớn nếu là đường chéo hoặc gần đường chéo. Những câu hỏi này đã được xử lý rất sâu sắc bởi những người làm việc trong lĩnh vực đồng hóa dữ liệu, vì vậy tôi khuyên bạn nên bắt đầu nghiên cứu của mình bằng cách đọc về cách họ xử lý các vấn đề này. Rk


Nếu tôi là bạn, tôi sẽ bắt đầu nhìn vào EnKF cho vấn đề này.
Brian Borchers

2

Chúng tôi có một thuật toán mạnh mẽ cho bộ lọc Bộ đồng phục Kalman (và Kalman thông thường). Nó rất phù hợp với ma trận thưa thớt và tính toán song song vì nó dựa trên ma trận trực giao và nó liên quan đến thuật toán căn bậc hai hoặc thuật toán UD.

Rất vui được gửi giấy

Thomas, SJ, J. Hacker và J. Anderson, (2009): Một công thức mạnh mẽ của bộ lọc Kalman đồng bộ Quart J. Royal Met. Sóc, tập 135, 507-521,

(PDF từ nhà xuất bản là miễn phí .)


2
Xin chào Stephen. Cảm ơn đã tham gia scicomp. Tôi hiểu rằng câu hỏi khá chung chung, do đó không thể đưa ra câu trả lời cụ thể. Tuy nhiên, cũng theo quan điểm về lợi ích của khách truy cập, bạn có thể cung cấp thêm thông tin về những gì thuật toán của bạn thực sự làm và cung cấp một liên kết ổn định, ví dụ. thông qua doi, để tham khảo.
ngày 1 tháng

Chỉ cần đăng bài tóm tắt ở đây sẽ là một cách tốt để "giải thích" liên kết đến các tiêu chuẩn Stack Exchange.
dmckee --- ex-moderator mèo con

Mặc dù tôi đồng ý với Jan, EE, những người liên quan đến KF (như tôi!) Thường không đọc các ấn phẩm khí tượng. Thực tế là bài báo được đề xuất như một câu trả lời cho một vấn đề khét tiếng tinh vi là động lực đủ để tôi săn lùng nó.
Damien

Tập hợp Kalman fi lter (EnKF) có thể được giải thích trong bối cảnh của lý thuyết hồi quy tuyến tính. Các phương trình của bộ lọc tương đương với các phương trình bình thường cho ước lượng bình phương nhỏ nhất có trọng số làm giảm thiểu một hàm bậc hai. Việc giải các phương trình bình thường là không đáng tin cậy về số lượng và chịu các lỗi lớn khi vấn đề không được điều hòa. Một thuật toán đáng tin cậy và hiệu quả về mặt số được trình bày, dựa trên việc giảm thiểu chức năng thay thế. Phương pháp này dựa trên các phép quay trực giao, rất song song và không ma trận "vuông" để tính toán cập nhật phân tích.
Stephen Thomas

0

Thời gian dài trở lại tôi đã có cơ hội làm việc về giảm kích thước, liên quan đến việc xử lý dữ liệu rơi vào các tập hợp lớn. Ý tưởng cơ bản đằng sau nó là nó xử lý dữ liệu thông qua một vài bước để định hướng nó theo cách mà hầu hết thông tin có thể được tính toán từ nó.

Nó hoạt động khá tốt cho ma trận là tốt và được sử dụng phần lớn. Phần tốt nhất là bạn thậm chí không cần lập trình nó vì đã có sẵn các thư viện chuẩn cho nó. Các công cụ toán học lớn như Matlab và Mathematica cũng hỗ trợ chức năng này một cách đơn giản.

Có hai thuật toán chính đạt được điều này - Phân tích thành phần chính và Phân tích giá trị số ít.

Những gì các thuật toán này thực sự đạt được là tìm thấy dữ liệu thực sự ảnh hưởng đến việc đọc của bạn bằng một mức đáng kể. Internet có đầy đủ thông tin về các thuật toán này. Điều này sẽ cho bạn thấy Apache đang làm điều đó như thế nào.


-1

Xin lỗi vì đã không thêm vào cuộc thảo luận trong một thời gian - nhưng tôi sẽ vui mừng đăng bài tóm tắt của bài báo - nhưng cũng sẵn sàng đi vào lý do tại sao các tính toán được tổ chức khác với cách tiếp cận KF tiêu chuẩn của EnKF


Tóm tắt là:
Stephen Thomas

Ý của bạn là đây là một bình luận hay chỉnh sửa câu trả lời khác của bạn?
Jed Brown
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.