2016-04-11 20 views
3

Analog bir sinyalim var ve kenarları/'dalga formlarını' tespit etmek istiyorum. Tespit edilecek dalga formları, bazen aşağıdaki ilk örnekte olduğu kadar basittir (basit yükselen kenar), fakat aynı zamanda daha karmaşıktır (bir önceki küçük 'blob' ile yükselen bir kenar gibi). Sinyal gürültüye ve istenmeyen küçük sinyallere sahiptir, bu nedenle 'eşleşme notu' 0.0 ile 1.0 arasında bir eşleşme bir eşik belirlemekte yarar olacaktır. Diğer bir gereksinim, algılama süresidir: Algoritma, görüntüdeki kırmızı lekeli daire gibi, 1 'yükselme süresi' içinde 'tetiklenmelidir'. Mümkün olduğunca erken, ancak maksimum ulaşılmadan önce.Sinyal kenarını tespit etmek için desen uydurma?

Her şey bir STM32 ARM kontrol cihazında yürütülür, sinyal saniyede 100 puan alır. Bir kenarın yükselen kenarı 0,5 - 2 saniye sürdüğünden, 'bakılacak' veri aralığı 250 - 500 civarında veri noktası olacaktır.

Korelasyonu ve FFT'leri okudum, ancak konuyu doğru anlarsam, bu sadece periyodik dalga formları için geçerli olacaktır (FFT sinyalin/cos'un parçalarına sinyalleyeceği gibi).

FFT ve korelasyon doğru yolla mı, yoksa gereksinimimiz için daha iyi yöntemler var mı? Yolumuz doğruysa, konuya kolay bir giriş için literatür/arama terimleri öneriliyor mu?

Düzenleme: Gerçek verilerden örnekler ekledim. Picture 2'da algılaması kolay bir kenar görebilirsiniz. Bu kenarlarda, temel bir kenar saptaması kullanarak sorunumuz yoktur.

Picture 3 numaralı yazıcımızda sorunumuz var: Güncel algoritmamız 2565'lerde bir kenar algılıyor, ancak 2574'lerde bir algılama istiyoruz. İlk 'blob' her zaman, algılanacak kenarla karşılaştırıldığında sinyal seviyesinin yaklaşık% 40 -% 85'inde görülür.

Sample waveforms to detect

example of good data

example of bad data

+1

Bu sorudan önce mutlaka bir cevap verilebilir: gerçek verileri göster. Deneyimden, gerçek verilerin bir OP skeçleri gibi * asla * olmadığını biliyorum. –

+1

Bunun için bir dalgacık paket dönüşümü atmanızı öneririm, aldığınız şeyi görün ve çıktıdaki kalıpları bulmaya çalışın. Https://en.wikipedia.org/wiki/Wavelet_packet_decomposition dosyasının alt kısmı, denemeniz gereken MATLAB, R, C++ ve Java'daki mevcut uygulamalara bağlantı sağlar. Aşırı pürüzsüz olmasından kaçınmanızı tavsiye ederim. 4 musluk Daubechies dalgacık muhtemelen işe yarayacak. (Haar dalgacık çok serttir - yükselen kenarı çok iyi temsil etmeyecektir.) – btilly

cevap

1

O Fourier serileri kesinlikle doğru hiçbir kenarlı verilerin bir açıklamasını yazmak için çalışıyoruz çünkü kötü bir seçimdir ve sonra keşfedelim bu açıklamadaki kenarlar. Iyi çalışmıyor.

Yapabileceğiniz bir yaklaşım, Fourier serileri gibi bir şey yapmak, ancak daha yerelleştirilmiş ve kenarları gibi görünen şeyleri içeren açıklamalar yapmaktır. Google hakkında daha fazla bilgi edinmek için "dalgacık kenarı algılama" için. Bu, gürültülü verilerden çeşitli formlar çıkarmanıza olanak tanır. Örneğin insanlar bunu resimlerden kenarlar çıkarmak ve ses kayıtlarından phoenemes için kullanırlar. Dalgacıklar büyük bir konu, ancak istediğiniz şeylere yakın bir şey yapan bir kütüphane bulmak mümkün olabilir.

Fakat bunun gibi basit bir 1-d problemi için, sadece bir düzeltme işlemi uygulayabilir, sonra ilgi şekillerine bakın. Yumuşatma işleminiz ne kadar iyi olursa, daha fazla gürültü tahammül edebilir, ancak şekilleri görmek ne kadar zorlaşır. Örneğin, düzeltme için üssel sönümleme yapabilirsiniz. next_average = 0.9 * average + 0.1 * next_value. (Daha genel olarak (1 - x) * average + x * next_value.) Bu, her noktayı yaklaşık 10 puanlık hareketli bir pencerenin ortalaması gibi görünen bir şeye dönüştürecektir. 100 puan önce şu anki ortalamayla karşılaştırın ve oldukça güvenilir bir yükselişe dikkat edebileceksiniz. Bazıları daha çok dalga geçiyor ve diğer kombinasyonları görebiliyorsunuz.

Amaçlarınız için yeterince iyi çalışan bir şey bulmak için denklemlerle ve verilerinizle oynamak zorundasınız.

İlgili konular