Ayrı örneklenmiş 1D sinyalinde yerel maksimumu (örnekler arasında) bulmak için Savitzky Golay filtresini nasıl kullanabilirim?


9

Sismik sinyalim y (i) var: resim açıklamasını buraya girin

Burada bir maksimum buldum: i = 152.54, y = 222.29 manuel olarak ve kırmızı olarak çizildi.

Tüm maxima'ları otomatik olarak bulmak istiyorum.

Savitzky Golay Filtresinin (SGF) hem bir sinyalin hem de türevlerinin düzeltilmiş tahminlerini bulmak için kullanılabileceğini ve SGF'nin avantajlarından birinin minima ve maxima'yı diğer filtrelerden çok daha iyi koruduğunu okudum. Bu benim kullanımım için harika görünüyor.

SGF katsayıları üreten bir Matlab betiği buldum. Ve bunu, türev için 4. dereceden SGF katsayılarını bulmak için kullandı. Küçük bir Matlab betiği kodladım.

  1. Sinyalin türev için 4. sıra SGF katsayılarıyla kıvrılmasıyla sinyalin türevini bulur
  2. Türev değişikliklerinin işaret ettiği örnek (i, i + 1) çiftini bulur
  3. i ve i + 1 arasında doğrusal enterpolasyon ile türevin sıfır geçişini bulur

Senaryo:

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

Im benim senaryom Ben türev istenen sonucu vermek için işlevi almak için negatif negatif pozitif için test etmek zorunda kaldı, ancak bu beni şaşırttı. Maksimum için türev pozitiften negatife gitmemeli mi? Maksimum ve minima arasında ayrım yapmanın daha iyi bir yolu var mı?

Aşağıda, sinyalimdeki maksimum değeri bulmak için bu işlevi kullanmanın sonucu verilmiştir: resim açıklamasını buraya girin

Sonuçlar iyi görünüyor, ancak bazı maksimumların bulunmadığını fark ettim: i = 143.13, 190.88, 256.97.

Bu diğer maksimalara yakın oldukları için mi?

En yakın iki maksimumu nasıl kontrol edebilirim?

Herhangi bir cevap için şimdiden teşekkürler!


Filtre çıkışını çizebilir misiniz?
Jim Clay

Yanıtlar:


5

Bu özel filtreye aşina olmasam da, gösterdiğiniz arsaya dayanarak, işleminiz tarafından bulunmayan maxima'nın sadece sürecin doğasında bulunan zaman çözünürlüğüne karşı çıktığını tahmin ediyorum. Her türlü "yumuşatma", ilgili sinyalin zaman-yerel yayılmasının olduğunu gösterir, böylece yakınlardaki iki tepe noktası varsa, bunların bir araya getirilmesi mümkündür. Daha düşük dereceli bir filtrenin, muhtemelen aldığınız düzeltme miktarına bağlı olarak bu davranışın daha azını göstermesi mümkündür.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.