Làm cách nào để sử dụng bộ lọc Golay Savitzky để tìm cực đại cục bộ (ở giữa các mẫu) trong tín hiệu 1D được lấy mẫu một cách riêng biệt?


9

Tôi có một tín hiệu địa chấn y (i): nhập mô tả hình ảnh ở đây

Ở đây tôi đã tìm thấy một mức tối đa: i = 152,54, y = 222,29 bằng tay và vẽ nó bằng màu đỏ.

Tôi muốn tìm tất cả các cực đại tự động.

Tôi đọc rằng Bộ lọc Golitz Savitzky (SGF) có thể được sử dụng để tìm các ước tính được làm mịn của cả tín hiệu và các dẫn xuất của nó, và một trong những lợi ích của SGF là nó bảo tồn cực tiểu và cực đại tốt hơn nhiều so với các bộ lọc khác. Điều này nghe có vẻ tuyệt vời cho việc sử dụng của tôi.

Tôi tìm thấy một tập lệnh Matlab tạo ra các hệ số SGF. Và sử dụng điều này để thấy rằng các hệ số SGF bậc 4 cho đạo hàm. Tôi đã mã hóa một tập lệnh Matlab nhỏ

  1. tìm đạo hàm của tín hiệu bằng cách kết hợp tín hiệu với các hệ số SGF bậc 4 cho đạo hàm
  2. tìm cặp mẫu (i, i + 1) trong đó dấu hiệu thay đổi đạo hàm
  3. tìm thấy không giao thoa của đạo hàm bằng phép nội suy tuyến tính giữa i và i + 1

Kịch bản:

function [maxX,maxY] = findLocalMax(y)
% Kernel for 4th order Savitzky-Golay filter for finding derivative:
d4 = [0.0724 -0.1195 -0.1625 -0.1061 0 0.1061 0.1625 0.1195 -0.0724];

dy = conv(y,d4,'same'); % derivative

[m n] = size(dy);
maxX = [];
maxY = [];
for i = 1 : n - 1
  if dy(i) < 0 && dy(i+1) > 0 % max somewhere between i and i+1
    a = dy(i)/(dy(i) - dy(i+1)); % linear interpolation
    mx = i + a;
    maxX = [maxX mx];
    my = y(i)*(1-a) + y(i+1)*a; % linear interpolation
    maxY = [maxY my];
  end
end

Theo kịch bản của tôi, tôi phải kiểm tra xem đạo hàm có thay đổi từ âm sang dương để lấy hàm để cho kết quả mong muốn hay không, tuy nhiên điều này làm tôi bối rối. Không phải đạo hàm cho tối đa đi từ tích cực sang tiêu cực? Có cách nào tốt hơn để phân biệt giữa cực đại và cực tiểu không?

Dưới đây là kết quả của việc sử dụng chức năng này để tìm cực đại trên tín hiệu của tôi: nhập mô tả hình ảnh ở đây

Kết quả có vẻ tốt, nhưng tôi nhận thấy rằng một số cực đại không được tìm thấy: i = 143,13, 190,88, 256,97.

Đây có phải là vì chúng gần với cực đại khác?

Làm thế nào tôi có thể kiểm soát hai cực đại gần nhất có thể được?

Cảm ơn trước cho bất kỳ câu trả lời!


Bạn có thể vẽ sơ đồ đầu ra của bộ lọc?
Jim Clay

Câu trả lời:


5

Mặc dù tôi không quen thuộc với loại bộ lọc cụ thể này, dựa trên cốt truyện bạn đã hiển thị, tôi sẽ đoán rằng các cực đại mà quy trình của bạn không tìm thấy chỉ dừng lại ở độ phân giải thời gian vốn có trong quy trình. Bất kỳ loại "làm mịn" nào cũng ngụ ý rằng có một số tín hiệu quan tâm cục bộ theo thời gian, như vậy nếu có hai đỉnh gần đó, có thể chúng sẽ được kết hợp thành một. Có thể bộ lọc bậc thấp có thể thể hiện ít hơn hành vi này, có thể phải trả giá bằng số lượng làm mịn mà bạn nhận được.

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.