Örnekler arasında yerel tepe noktaları bulma


10

Sahibim n sismik sinyalin ayrık örnekleri y[n]: resim açıklamasını buraya girin

Sinyalde yerel maksimumu bulmak istiyorum.

Eğer için naif bir test y[n] bir maksimum:

y[n]:mbirxbenmbir Eğer y[n]>y[n-1] ve y[n]>y[n+1]

Bununla birlikte, maxima muhtemelen numuneler arasında bulunur, örn. ben=4.25.

Numuneler arasında maksimumları bulmak için enterpolasyona ihtiyacım olduğuna inanıyorum y[n].

  • Enterpolasyon kullanarak maxima'yı nasıl bulabilirim?
  • Ne tür enterpolasyon kullanmalıyım?

Gördüğünüz gibi sinyalim çok gürültülü değil, ancak yöntemin de biraz filtreleme yapması iyi olurdu, böylece maxima bir eşiği aşar ve belirli bir genişliğe sahiptir (sivri uç yoktur).

Ancak benim en büyük sorunum sadece örnekler arasında zirveler bulmak. Bunu yapmanın iyi bir yolu için herhangi bir öneriniz var mı?

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



Frekans spektrumları için çeşitli yöntemler: dspguru.com/dsp/howtos/how-to-interpolate-fft-peak
Endolit

İkincisinin bir cevabı yok @Geerten ;-)
Ivo

1
Oh .. haha, güzel bir nokta. Bu soruya bu soruya tekrar
değineceğim

Yanıtlar:


7

Alt örnek çözünürlüğü alma

Çok ucuz (kod boyutu açısından) bir çözüm sadece sinyalinizi örneklemektir. Matlab'da bu ile yapılabilir interp(y ,ratio). Biraz daha karmaşık bir çözüm, zirveleri saf olarak tespit etmekten oluşur; ve her pik için y [tepe - 1], y [tepe], y [tepe + 1] içinden bir parabol takılması; daha sonra bu parabolün gerçek tepe konumu olarak maksimum olduğu noktayı kullanın.

Tepe tespiti ile ilgili

Yardımcı olan bir grup teknik:

  • Hilmar tarafından önerildiği gibi, sinyali bir Gauss veya Hann penceresiyle kıvrılır, genişliği yaklaşık olarak algılanan zirveler arasında görmek istediğiniz minimum aralığın yarısına eşittir. Geçici doğruluk uygulamanız için gerekli göründüğünden, filtrelemenin getirdiği gecikmeyi dikkate aldığınızdan emin olun!
  • Sinyalinize kendi medyan filtrelenmiş bir versiyonunu çıkarın (oldukça büyük bir gözlem penceresi ile); ve sonucu standart sapma filtrelenmiş bir versiyonuna böleriz. Bu eğilimlerden kurtulur ve eşiklerin standart sapma birimlerinde ifade edilmesini sağlar.
  • Zirve toplama için, bunu bir "silindir şapka" filtresi kullanarak formüle ediyorum. Sinyalin üst şapka filtrelenmiş sürümünü yt [n] = max (y [n - W], y [n - W + 1], ..., y [n + W - 1], y [n olarak tanımlayın + W]); ve y [n] == yt [n] ve y [n]> eşiğinin olduğu noktalarda pik olarak kullanın.

Bütün bunlar Matlab'da birkaç geçiş nlfilter ile çok verimli bir şekilde uygulanabilir.


Yukarı örnekleme ve parabolik enterpolasyon kombinasyonu her ikisinden de daha iyi olabilir.
22:12

3

Kayıplı bir tepe dedektörü deneyin:

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

burada "a", dedektörün ne kadar hızlı bozulduğunu kontrol eden 1'den küçük bir sayıdır. Komşu piklerin tek bir taneye girmeden ne kadar yakın olabileceğini belirler. Ardından bir eşik algılama yapın.


Denkleminizde hem balta [n] hem de y [n] var. Bu doğru mu yoksa sadece y [n] olmalı mı?
Andy

x [n] girdi, y [n] çıktı. Genel olarak kötü cevap, bir yazım hatası var (şimdi düzeltildi) ve soruyu yanlış anladım. Özür
Hilmar
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.