Tìm các đỉnh địa phương ở giữa các mẫu


10

Tôi có mẫu riêng biệt của tín hiệu địa chấn : ny[n]nhập mô tả hình ảnh ở đây

Tôi muốn tìm cực đại cục bộ trong tín hiệu.

Một thử nghiệm ngây thơ cho nếu là tối đa sẽ là: y[n]

y[n]:maxima if y[n]>y[n1] and y[n]>y[n+1]

Tuy nhiên, cực đại có thể nằm ở giữa các mẫu, ví dụ: có thể có cực đại tại .i=4.25

Để tìm cực đại ở giữa các mẫu, tôi tin rằng tôi cần phải nội suy .y[n]

  • Làm cách nào để tìm cực đại bằng phép nội suy?
  • Tôi nên sử dụng hình thức nội suy nào?

Như bạn có thể thấy tín hiệu của tôi không quá nhiễu, tuy nhiên sẽ tốt nếu phương thức cũng thực hiện một chút lọc để cực đại vượt quá ngưỡng và có độ rộng nhất định (không có gai).

Tuy nhiên, vấn đề lớn nhất của tôi chỉ là tìm các đỉnh ở giữa các mẫu. Bất kỳ đề xuất cho một cách tốt để làm điều này?

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


1
Có thể nhìn vào câu hỏi 1câu hỏi 2 .
Geerten

Một số phương pháp cho phổ tần số: dspguru.com/dsp/howtos/how-to-interpolate-fft-peak
endolith

Câu hỏi thứ hai đó không có câu trả lời @Geerten ;-)
Ivo Flipse

1
Oh..haha, điểm tốt. Vâng, tôi sẽ tham khảo lại câu hỏi này về câu hỏi đó;)
Geerten

Câu trả lời:


7

Lấy độ phân giải mẫu phụ

Một giải pháp rất rẻ (về kích thước mã) chỉ là để lấy mẫu tín hiệu của bạn. Trong MATLAB, điều này có thể được thực hiện với interp(y ,ratio). Một giải pháp phức tạp hơn một chút bao gồm các đỉnh phát hiện ngây thơ; và đối với mỗi đỉnh, khớp một parabol qua y [pic - 1], y [pic], y [pic + 1]; sau đó sử dụng điểm tại đó parabol này là cực đại làm vị trí cực đại thực sự.

Về phát hiện cực đại

Một loạt các kỹ thuật giúp:

  • Theo đề xuất của Hilmar, kết hợp tín hiệu bằng cửa sổ Gaussian hoặc Hann, độ rộng của nó gần bằng một nửa khoảng thời gian tối thiểu bạn muốn thấy giữa các đỉnh được phát hiện. Vì độ chính xác tạm thời có vẻ cần thiết cho ứng dụng của bạn, tuy nhiên, hãy đảm bảo rằng bạn tính đến độ trễ thời gian được lọc bởi bộ lọc!
  • Trừ tín hiệu của bạn một phiên bản được lọc trung bình của chính nó (với một cửa sổ quan sát khá lớn); và chia kết quả cho một phiên bản được lọc độ lệch chuẩn của chính nó. Điều này được loại bỏ các xu hướng và cho phép các ngưỡng được thể hiện bằng các đơn vị độ lệch chuẩn.
  • Để chọn cao điểm, tôi hình thành rằng sử dụng bộ lọc "top-hat". Xác định phiên bản được lọc trên cùng của tín hiệu của bạn là yt [n] = max (y [n - W], y [n - W + 1], ..., y [n + W - 1], y [n + W]); và sử dụng làm đỉnh của các điểm trong đó ngưỡng y [n] == yt [n] và y [n]>.

Tất cả điều này có thể được thực hiện rất hiệu quả trong Matlab với một vài lần vượt qua nlfilter.


Sự kết hợp của upampling cộng với phép nội suy parabol có thể hoạt động tốt hơn so với một mình.
hotpaw2

3

Hãy thử một máy dò đỉnh mất mát:

y[n] = max(abs(x[n]),a*y[n-1]);

trong đó "a" là một số nhỏ hơn 1 điều khiển tốc độ của máy dò phân rã. Nó xác định mức độ gần của các đỉnh lân cận có thể mà không bị nhòe thành một. Sau đó làm một phát hiện ngưỡng.


Bạn có cả ax [n] và y [n] trong phương trình của bạn. Điều này có đúng không hay chỉ là y [n]?
Andy

x [n] là đầu vào, y [n] là đầu ra. Câu trả lời xấu tổng thể, có một lỗi đánh máy (đã được sửa bây giờ) và tôi đã hiểu nhầm câu hỏi. Lời xin lỗi
Hilmar
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.