Pendekatan deteksi puncak


24

Apa algoritma deteksi puncak yang ada? Saya memiliki data yang bising, dan saya ingin menerapkan deteksi puncak untuk data ini. Data terbalik, sebenarnya saya mencoba menentukan bagian bawah.

Ini adalah snapshot data di Excel. Saya suka mendeteksi kedua pantat. Saya berpikir tentang meneruskan data melalui filter low-pass dan kemudian melakukan rata-rata bergerak di mana saya menentukan puncak dan dalam rata-rata bergerak saya melakukan pencarian lain. Saya tidak memiliki latar belakang DSP; ini hanya pendekatan akal sehat. Saya ingin mendengar apa yang para ahli rekomendasikan.

Masukkan deskripsi gambar di sini


2
Apa dua dasar yang ingin Anda deteksi? Saya hanya melihat satu yang jelas. Apakah Anda tahu suara apa yang Anda miliki, atau dari mana asalnya?
Jason R

Saya ingin tahu apakah Anda ingin menerapkannya pada perangkat keras tertentu (kendala sumber daya) karena itu akan mempengaruhi strategi pendeteksian puncak saya.
anasimtiaz

@JasonR yang ungu jelas. Namun ujung yang tajam ada outlier. Idealnya, saya ingin itu dicukur dan dari menghitung titik bawah. (maka filter LP dalam pendekatan saya) Yang tidak jelas pada biru muda adalah titik kanan min minimum puncak ungu. Ungu sebenarnya bukan masalah, tetapi biru muda. Excel plot tidak adil tetapi ini dari 12 bit ADC di mana 4096 adalah 2V.
Ktuncer

@anasimtiaz percaya atau tidak ini akan berjalan pada iPhone / Android jadi saya kira kita bisa mengatakan, itu seperti PC. Tidak ada kendala perangkat keras.
Ktuncer

@Ktuncer Saya telah menambahkan beberapa gambar untuk Anda lihat sendiri.
Spacey

Jawaban:


12

Ktuncer, ada sejumlah metode yang dapat Anda gunakan di sini. Salah satu metode yang saya rekomendasikan adalah menggunakan Discrete Wavelet Transform, (DWT), dan khususnya, lihat Daubechies Wavelet . Saya akan memilih, katakanlah, Daub-14 / Daub-Tetra.

Pada dasarnya apa yang benar-benar perlu Anda lakukan adalah 'tren' sinyal Anda, dan kemudian dari sana, lakukan pick min atau max. Itu akan menyingkirkan outlier Anda. Transformasi wavelet daub-14 / daub-tetra dapat membantu Anda melakukan ini, dan ini membantu terutama karena Anda tidak tahu sifat sinyal Anda. (Menggunakan daub-14, Anda dapat secara akurat mewakili sinyal polinomial derajat 14/2 = 7, dan sepertinya Anda tidak perlu lebih dari itu).

Perhitungan wavelet ini pada dasarnya mengubah 'memampatkan' energi Anda menjadi beberapa indeks. Indeks tersebut merepresentasikan bobot berdasarkan vektor basis. Sisa bobot akan (idealnya) mendekati nol. Ketika Anda memiliki noise dalam sinyal Anda (seperti yang Anda lakukan), bobot yang biasanya nol memiliki beberapa bobot sekarang, tetapi Anda dapat dengan mudahnya mengeluarkannya dan 'membatalkan sinyal Anda. Setelah selesai, Anda dapat melakukan deteksi maks / menit sederhana.

Ada lebih banyak detail yang terlibat, Anda dapat mengirim saya email jika Anda ingin membahas bagaimana menerapkannya. Saya telah melakukan pekerjaan serupa sebelumnya.

EDIT: Berikut adalah beberapa gambar yang menggambarkan Daub-Tetra Denoiser:

masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini masukkan deskripsi gambar di sini


1
Saya suka ini .. Apakah ada perpustakaan referensi untuk ini di matlab?
Ktuncer

@Ktuncer Tembak saya email.
Spacey

4

Saya jauh dari ahli, tetapi inilah yang akan saya lakukan:

Anda tampaknya memiliki sinyal yang bervariasi secara perlahan yang ditumpangkan dengan fluktuasi. Puncak yang Anda cari adalah beberapa fluktuasi yang lebih kuat, jadi saya akan mendeteksi mereka menggunakan itu.

  1. X(T)Y(t)

  2. X-YσX-Y

  3. |(X-Y)(t)|>α×σα

Overhoot atau undershoot dapat dideteksi secara khusus dengan menghapus nilai absolut dan menggunakan tes yang tepat. Apakah itu yang Anda cari?


1
Pendekatan yang menarik. Apa itu σ? (Std. Dev?). Selain itu, selain matematika, apa logika di baliknya?
Ktuncer

σ

4σ

@ user4749 Ini akan membantu Anda mendapatkan puncak outlier, meskipun saya tidak yakin itu akan mendapatkan puncak keseluruhan yang Anda cari, (Saya berasumsi Anda sedang mencari puncak 'luas'?)
Spacey

1
@ Jean-Yves Halo! :-) Apakah Anda mengasumsikan suara ini guassian di sini btw? (Itu sebabnya kita bisa std ambang). Saya penasaran, bagaimana jika suara itu diwarnai?
Spacey

4

Deteksi puncak memiliki beberapa aplikasi, untuk sinyal 1D atau multidimensi. Berikut adalah beberapa contoh yang menunjukkan betapa beragamnya sinyal-sinyal ini dan interpretasinya terhadap suatu puncak:

  • Data 1D poster asli;

  • Transformasi gambar yang besar, setiap puncak sesuai dengan garis pada gambar asli; masukkan deskripsi gambar di sini

  • autokorelasi suatu gambar, setiap puncak berhubungan dengan frekuensi yang mengungkapkan "pola periodik"; masukkan deskripsi gambar di sini

  • korelasi silang "umum" dari gambar dan templat, setiap puncak sesuai dengan kemunculan templat pada gambar (kami mungkin tertarik untuk mendeteksi hanya puncak terbaik atau beberapa puncak);

masukkan deskripsi gambar di sini

  • hasil pemfilteran gambar untuk sudut Harris, setiap puncak sesuai dengan sudut pada gambar asli.

masukkan deskripsi gambar di sini

Ini adalah definisi dan teknik deteksi puncak yang saya temui - tentu saja ada yang lain yang saya lupa atau tidak tahu, dan mudah-mudahan jawaban lain akan membahasnya.

Teknik preprocessing termasuk smoothing dan denoising. @ Jawaban Mohammad adalah tentang wavelet, dan Anda dapat melihat berbagai penggunaannya dalam dokumentasi WaveletThreshold Mathematica (di mana saya juga mengambil contoh dari, by the way).

Kemudian Anda mencari maxima. Bergantung pada aplikasi Anda, Anda hanya perlu maxima global (mis. Registrasi gambar), beberapa maxima lokal (mis. Deteksi garis), atau banyak maxima lokal (deteksi titik kunci): Ini dapat dilakukan secara iteratif, mencari nilai tertinggi dalam data kemudian menghapus wilayah di sekitar puncak yang dipilih, dll. hingga nilai sisa tertinggi di bawah ambang batas. Sebagai alternatif, Anda dapat mencari maxima lokal dalam ukuran lingkungan tertentu, dan hanya menyimpan maxima lokal yang nilainya di atas ambang batas - beberapa merekomendasikan untuk menjaga maxima lokal berdasarkan jaraknya dengan sisa maxima lokal (selanjutnya lebih baik). Gudang senjata juga memiliki fitur operasi morfologis: Maxima yang diperluas dan transformasi top-hat keduanya cocok.

Lihat hasil tiga teknik ini pada gambar yang difilter untuk sudut Harris:

masukkan deskripsi gambar di sini

Selain itu, beberapa aplikasi mencoba menemukan puncak pada resolusi sub-pixel. Interpolasi, yang bisa khusus untuk aplikasi, berguna.

Sejauh yang saya tahu, tidak ada peluru perak, dan data akan menunjukkan teknik mana yang paling berhasil.

Akan sangat menyenangkan memiliki lebih banyak jawaban, khususnya. berasal dari disiplin ilmu lain.


Bagaimana Anda mengekstrak data badan pertanyaan untuk Anda gunakan? Saya tidak dapat menemukannya dalam bentuk bersih.
Léo Léopold Hertz 준영

1
Benarkah saya? Saya menggunakan contoh lain. Melihat pertanyaan itu lagi hari ini, saya tidak melihat cara mengekstraksi data dengan bersih dari pertanyaan itu.
Matthias Odisio

-1

Saya pikir salah satu algoritma deteksi puncak khas adalah seperti ini mana refadalah peak(bottom).

for i=1,N   {
       if i=1   {  ref=data(i) }
       else { if data(i)<=ref {ref =data(i) }}
}

3
Saya tidak meremehkan jawaban Anda, tetapi saya pikir itu dianggap di luar topik oleh mereka yang melakukannya. Sketsa ini mendeteksi minimum absolut suatu urutan. OP sedang mencari puncak, di mana orang perlu berurusan dengan lokalitas dan kebisingan.
Matthias Odisio

Sayangnya belum ada tanggapan sama sekali terhadap karunia "jawaban kanonik". Dalam hal itu semua jawaban sama-sama "tidak relevan"; Saya memberikan hadiah untuk jawaban ini karena ini yang tertua.
Matthias Odisio
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.