Deteksi dan perhitungan kemiringan dan puncak waktu nyata

9

Saya memiliki sinyal yang saya sampel di 500khz. Saya mencoba mendeteksi naik, turun dan puncaknya data yang masuk. Basis puncak bisa untuk 250 usec atau 2.5msec, amplitudo bisa 6db atau 15db di atas lantai kebisingan. Sayangnya saya tidak memiliki snr yang baik. Level dc dari sinyal tidak konstan tetapi bergerak jauh lebih lambat dari komponen ac.  

Pada titik keputusan, saya perlu tahu kemiringan naik turun. Ini adalah sistem realtime yang sulit dan saya benar-benar perlu membuat keputusan dalam 100usec setelah kemiringan ke bawah mencapai tingkat dc. 

Saya mencari saran bagaimana saya bisa mengimplementasikan algoritma yang layak secara efisien.  

Saat ini saya melakukan rata-rata berjalan (melewati 25 titik data yang ditambahkan bersama-sama) dan mencoba mendeteksi tren. Begitu saya mendeteksi tren naik, saya mulai mencari tren turun dan begitu saya melakukannya, saya mungkin mengumpulkan 50 sampel lagi dan mulai menghitung. 

Noise sekarang dengan mudah mengacaukan algoritma ini, maka pertanyaannya. 

Memperbarui

Untuk kepentingan orang lain, saya akhirnya menerapkan Moving Average diikuti oleh integrator. Rata-rata bergerak dari 64 data terakhir cukup lancar tetapi kehilangan kenaikan ke tingkat tertentu, mengintegrasikan 8 nilai terakhir memperoleh kembali kenaikan dan saya hanya mencari naik dan turun, kemudian saya melakukan regresi linier untuk lereng. Bekerja ok, tidak bagus tapi ok.

Ktuncer
sumber
Bisakah Anda memposting plot urutan data yang gagal pada algoritma Anda saat ini?
Jim Clay
Melakukan hal semacam ini meskipun memiliki kebisingan yang signifikan cukup sulit. Saran Juancho tentang pembeda mungkin adalah saran yang bagus.
Daniel R Hicks

Jawaban:

5

Anda harus mulai dengan pembeda bandwidth (setara dengan pembeda diikuti oleh filter low-pass). Diferensialator akan menghapus tren frekuensi rendah dan akan merespons tajam ke puncak dan lereng Anda. Komponen low-pass akan menghilangkan noise di luar frekuensi cutoff.

Anda harus merancang frekuensi cutoff Anda sehingga Anda mendapatkan pulsa bersih untuk lereng Anda.

Lereng positif akan melambat saat pulsa positif; lereng negatif sebagai pulsa negatif, dan puncak akan sesuai dengan nol-persimpangan antara positif dan negatif.

Jenis filter ini biasanya diterapkan sebagai filter FIR. Jumlah sampel untuk filter Anda akan bergantung pada batasan waktu-nyata Anda, ketajaman pada frekuensi cutoff, dan frekuensi cutoff itu sendiri.

Juancho
sumber
Saya tidak terlalu berpengalaman dengan DSP. Bisakah Anda mengarahkan saya ke kemungkinan implementasi? Berdasarkan jawaban Anda dan pengetahuan saya yang terbatas, saya pikir tautannya ( holoborodko.com/pavel/numerical-methods/numerical-derivative/… ) melakukan apa yang Anda sebutkan. Jika saya menggunakan pendekatan seperti itu, saya tidak tahu 1) Bagaimana cara menentukan frekuensi saya? 2) Bagaimana cara memilih koefisien filter?
Ktuncer
Tautan berikut juga memecahkan masalah serupa dan berisi banyak tautan. dsprelated.com/showmessage/123740/1.php
Ktuncer