Tính đạo hàm


9

Tôi có một loạt dữ liệu (mảng đơn). Nếu tôi lấy dữ liệu này và vẽ nó, tôi có thể thấy rằng có nhiều đỉnh. Tuy nhiên Nếu tôi phóng to một phần dữ liệu, tôi thấy rằng có tiếng ồn đáng kể.

Tôi muốn phát hiện có bao nhiêu đỉnh trong dữ liệu bằng cách sử dụng ít thời gian và năng lượng của CPU. Tôi đã nghĩ đến việc phát hiện độ dốc của các đỉnh này (có thể là sắc nét hoặc trơn tru tăng hoặc giảm) và xem xét số lượng dốc để xác định số lượng đỉnh. (2 độ dốc dương và âm cho mọi đỉnh)

Bất kỳ con trỏ làm thế nào tôi có thể tính toán độ dốc khi có tiếng ồn?

Mã sẽ đi vào một hệ thống nhúng, bộ nhớ bị hạn chế, tốt nhất là tôi muốn thực hiện một cái gì đó không yêu cầu bất kỳ bản sao dữ liệu quan trọng nào.


1
Bạn có vẻ như trong một cửa hàng yêu cầu thứ gì đó bạn cần

2
Nếu tiếng ồn có tần số tương đối cao thì bạn có thể vượt qua bộ lọc dữ liệu
Paul R

4
Bạn có thể đăng một hoặc nhiều ví dụ về dữ liệu của bạn không? Điều đó sẽ giúp chúng ta thấy nó trông như thế nào. Phát hiện cực đại thường không được thực hiện thông qua ước lượng đạo hàm, vì tính toán đạo hàm của tín hiệu rất nhạy với nhiễu (đó là hoạt động đường cao tốc). Có thể có các đặc điểm cho tín hiệu quan tâm mà bạn có thể khai thác. Ngoài ra, luôn có sự đánh đổi giữa xác suất phát hiện chính xác đỉnh và xác suất khai báo sai một đỉnh thực sự không đáng quan tâm. Cái nào quan trọng hơn cho ứng dụng của bạn?
Jason R

2
Nếu bạn có thể sản xuất một cốt truyện, nó sẽ hữu ích.
Jason R

1
Bạn muốn phát hiện các đỉnh, bạn có thể muốn tìm kiếm phát hiện đỉnh (xem tại dsp.stackexchange.com/questions/1302/peak-detection-approach ).
Geerten

Câu trả lời:


1

Nó phụ thuộc vào loại nhiễu và loại tín hiệu. Hiển thị một ví dụ nếu bạn muốn một câu trả lời tốt. Nhưng, nói rằng, nói chung bạn có thể muốn lọc tín hiệu thấp. Nếu tôi là bạn, tôi sẽ sử dụng phổ công suất Fourier để xem phần lớn nhiễu có phải là tần số cao hay không và tín hiệu tôi quan tâm chủ yếu ở dải thấp hơn. Nếu chúng trùng nhau, ồ đó là cuộc sống. Tôi sẽ phải suy nghĩ nhiều hơn về mọi thứ.

Một bộ lọc thông thấp tốt cho tín hiệu nhiễu trong nhiều trường hợp là bộ lọc Savitzky-Golay. Nó được mô tả trong Công thức số và đối với Python có một chức năng trong Python Numpy Cookbook. Nó chỉ đơn thuần là một tổ hợp với một hạt nhân nhỏ. Bạn chọn kích thước cửa sổ dựa trên chiều rộng của các đỉnh hoặc các tính năng khác, đủ rộng để loại bỏ tiếng ồn, nhưng không rộng hơn các tính năng. Nó có thể nhỏ, nói năm điểm, hoặc lớn hơn như hàng chục, một trăm có thể.

Bạn cũng chọn một thứ tự đa thức - thông thường tôi sử dụng 2 hoặc 4. Đơn hàng 2 sẽ ổn khi cửa sổ nhỏ, <10 điểm hoặc nó kéo dài dưới nửa chu kỳ hoặc hơn (nếu tín hiệu của bạn giống với sin) trong khi thứ tự 4 là tốt hơn trong việc kết hợp các hình dạng đỉnh bị biến dạng, nhưng thích có khoảng 9 điểm trở lên. Nhưng rất nhiều phụ thuộc vào hình dạng và tần số của tiếng ồn.

Như những người khác nói trong các nhận xét, việc tìm kiếm các công cụ phái sinh có thể không phải là chiến lược tốt nhất, nhưng nếu bạn muốn tìm kiếm các công cụ phái sinh, bộ lọc Savitzky-Golay có thể làm điều đó - đồng thời làm mịn và báo cáo công cụ phái sinh thay vì tín hiệu.

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.