ฉันจะใช้ตัวกรอง Savitzky Golay เพื่อค้นหา maxima ท้องถิ่น (ระหว่างตัวอย่าง) ในสัญญาณ 1D ที่สุ่มตัวอย่างได้อย่างไร


9

ฉันมีสัญญาณคลื่นไหวสะเทือน y (i): ป้อนคำอธิบายรูปภาพที่นี่

ที่นี่ฉันได้พบหนึ่งสูงสุด: i = 152.54, y = 222.29 ด้วยตนเองและลงจุดด้วยสีแดง

ฉันต้องการค้นหา maxima ทั้งหมดโดยอัตโนมัติ

ฉันอ่านว่าตัวกรอง Savitzky Golay (SGF) สามารถใช้ในการหาค่าประมาณที่ราบรื่นของสัญญาณและอนุพันธ์ของมันและข้อดีอย่างหนึ่งของ SGF ก็คือมันสามารถรักษา minima และ maxima ได้ดีกว่าตัวกรองอื่น ๆ มันฟังดูดีสำหรับการใช้งานของฉัน

ฉันพบสคริปต์ Matlab ที่สร้างค่าสัมประสิทธิ์ SGF และใช้สิ่งนี้เพื่อหาว่าค่าสัมประสิทธิ์ SGF ลำดับที่ 4 สำหรับอนุพันธ์ ฉันเขียนสคริปต์ Matlab ตัวเล็ก ๆ

  1. ค้นหาอนุพันธ์ของสัญญาณโดยการสังสัยสัญญาณด้วยสัมประสิทธิ์ SGF ลำดับที่ 4 สำหรับอนุพันธ์
  2. ค้นหาคู่ของตัวอย่าง (i, i + 1) โดยที่สัญญาณอนุพันธ์เปลี่ยนแปลง
  3. ค้นหาการข้ามอนุพันธ์จากศูนย์โดยการสอดแทรกเชิงเส้นตรงระหว่าง i และ i + 1

สคริปต์:

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

ฉันต้องการสคริปต์ของฉันฉันต้องทดสอบว่าอนุพันธ์เปลี่ยนจากลบเป็นบวกเพื่อให้ได้ฟังก์ชันเพื่อให้ได้ผลลัพธ์ตามที่ต้องการ แต่สิ่งนี้ทำให้ฉันสับสน ไม่ควรหาอนุพันธ์สำหรับค่าสูงสุดไปจากบวกถึงลบ? มีวิธีที่ดีกว่าในการแยกแยะความแตกต่างระหว่าง maxima และ minima หรือไม่?

ด้านล่างเป็นผลลัพธ์ของการใช้ฟังก์ชั่นนี้เพื่อหาค่าสูงสุดบนสัญญาณของฉัน: ป้อนคำอธิบายรูปภาพที่นี่

ผลลัพธ์ดูดี แต่ฉันสังเกตว่าไม่พบ maxima บางตัว: i = 143.13, 190.88, 256.97

นี่เป็นเพราะพวกเขาใกล้กับแม็กซิม่าคนอื่น ๆ หรือไม่?

ฉันจะควบคุม maxima ทั้งสองที่ใกล้ที่สุดได้อย่างไร

ขอบคุณล่วงหน้าสำหรับคำตอบ!


คุณสามารถเขียนเอาท์พุทตัวกรองได้หรือไม่?
Jim Clay

คำตอบ:


5

ในขณะที่ฉันไม่คุ้นเคยกับตัวกรองประเภทนี้โดยเฉพาะตามพล็อตที่คุณแสดงฉันจะเดาว่าจำนวนสูงสุดที่กระบวนการของคุณไม่พบนั้นเป็นเพียงการเปรียบเทียบกับการแก้ไขเวลาที่มีอยู่ในกระบวนการ "การปรับให้เรียบ" แบบใดก็ตามแสดงว่ามีการละเลงสัญญาณของดอกเบี้ยตามเวลาเช่นถ้ามีจุดสูงสุดสองจุดใกล้เคียงอาจเป็นไปได้ที่จะรวมตัวกันเป็นหนึ่งเดียว อาจเป็นไปได้ว่าตัวกรองคำสั่งซื้อที่ต่ำกว่าอาจมีพฤติกรรมนี้น้อยลงซึ่งเป็นไปได้ว่าจำนวนเงินของการปรับให้เรียบนั้นเป็นไปได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.