çok basit terimlerle düzeltmek


17

Yumuşatma nedir ve nasıl yapabilirim?

Matlab'da bir konuşma sinyalinin (FFT'nin 128 noktasının büyüklüğü) spektrum olan bir dizim var. Hareketli bir ortalama kullanarak bunu nasıl düzeltirim? Anladığım kadarıyla, belirli sayıda öğenin pencere boyutunu almalı, ortalama almalıyım ve bu yeni 1. öğe haline gelmelidir. Ardından pencereyi bir öğe sağa kaydırın, 2. öğe olan ortalamayı alın ve bu şekilde devam edin. Gerçekten böyle mi çalışıyor? Kendimden emin değilim, çünkü bunu yaparsam, nihai sonucumda 128'den az elemanım olacak. Peki nasıl çalışır ve veri noktalarını düzeltmeye nasıl yardımcı olur? Yoksa verileri düzgünleştirmenin başka bir yolu var mı?

EDIT: takip sorusuna bağlantı


spektrumu için muhtemelen (zaman boyutunda) ortalama birlikte ile birden spektrumları ziyade tek spektrumun frekans ekseni boyunca çalışan bir ortalama istiyoruz
Endolit

@endolith her ikisi de geçerli tekniklerdir. Frekans alanındaki ortalama (bazen Danielle Periodogram olarak da adlandırılır), zaman alanındaki pencereleme ile aynıdır. Çoklu periodogramların ("spektrumlar") ortalaması, gerçek Periodogramın (buna Welch Periodogram olarak adlandırılır) ihtiyaç duyduğu grup ortalamasını taklit etme girişimidir. Ayrıca, anlambilim meselesi olarak, "yumuşatmanın" olağandışı düşük geçişli filtreleme olduğunu iddia ediyorum. Bkz. Kalman filtreleme vs Kalman yumuşatma, Wiener filtreleme v Wiener yumuşatma, vb. Önemsiz bir ayrım var ve uygulamaya bağlı.
Bryan,

Yanıtlar:


23

Yumuşatma birçok yönden yapılabilir, ancak çok temel ve genel terimlerle, öğelerini komşularıyla karıştırarak bir sinyal çıkardığınız anlamına gelir. Gürültüden kurtulmak için sinyali biraz lekeliyor / bulanıklaştırıyorsunuz. Örneğin, çok basit bir düzeltme tekniği, her sinyal elemanını f(t)orijinal değerin 0,8'i, artı her bir komşusunun 0,1'i olarak yeniden hesaplamak olacaktır :

f'(t) = 0.1*f(t-1) + 0.8*f(t) + 0.1*f(t+1)

Çarpma faktörlerinin veya ağırlıklarının nasıl bir tane topladığını unutmayın. Dolayısıyla, sinyal oldukça sabitse, düzleştirme çok fazla değişmez. Ancak sinyal ani sarsıntılı bir değişiklik içeriyorsa, komşularından gelen katkı bu gürültüyü biraz gidermeye yardımcı olacaktır.

Bu yeniden hesaplama işlevinde kullandığınız ağırlıklara çekirdek adı verilebilir . Tek boyutlu Gauss işlevi veya başka bir temel çekirdek sizin durumunuzda yapmalıdır.

Belirli bir tür yumuşatma için güzel bir örnek:

Üstte: düzleştirilmemiş sinyal
Altta: düzeltilmiş sinyal

resim açıklamasını buraya girin

Birkaç çekirdeğe örnekler:

resim açıklamasını buraya girin


bu ağırlıklı bir hareketli ortalama mı? Buna pencere boyutu 3 mü deniyor? 1. ve son element ne olacak? Ve 128 öğeden oluşan bir dizim varsa ve 16 veya 32 öğeden oluşan bir pencere kullanmak istersem bu nasıl değiştirilir?

@ user13267: Evet, yumuşatma çekirdeğinin ağırlıklı bir hareketli ortalama olduğunu söyleyebilirsiniz. Düzgün bir çekirdek kullanırsanız (ikinci resme bakın), bu sadece düz bir ortalamadır. Pencere boyutu konusunda haklısın. Kenarlarla uğraşmak için üç temel yaklaşım vardır: 1) verilerinizi sıfır doldurma, 2) son değeri tekrarlama, 3) sinyali yansıtma. Her durumda, çekirdeğinizin hiçliğe düşmemesi için bazı taklit veriler yaparsınız.
Junuxx

sıfır doldurma hiçliğe düşmez mi? Hareketli ortalama sürecinin sonunda, yeni "ortalamalı" veri kümem orijinal ile aynı sayıda veriye sahip olmalı, değil mi? o zaman başında veya sonunda sıfırlama yaparsam veya son verileri tekrarlarsam, dizinin kenarlarındaki ortalama değeri saptırmaz mı? Ve sinyalin yansıtılması veri terimlerinin sayısı açısından nasıl yardımcı olur? Bunun için, örneğin 32 veri noktası ve 4 veya 5 pencere boyutu için sürecin nasıl gerçekleştiğini gösteren herhangi bir basit öğretici var mı?

2
Düzgünleştirilmiş veri kümenizin orijinal veri kümesiyle aynı uzunlukta olmasını istiyorsanız, uç noktalardaki verileri "tamamlamanız" gerekir. Bu verilerin nasıl oluşturulacağı konusunda yaptığınız herhangi bir seçim ortalamayı bir şekilde saptırır. Sınır dışı verilerin gerçek veri kümesinin bir aynası olarak işlenmesi (örn. N + 1 örneğinin N-1, N + 2 = N-2, vb. İle aynı olduğu varsayılarak), ancak sıfır veya sıfır olmayan bir tekrarlama varsayıldığında, tüm frekansların uçlarda yuvarlandığı görülecektir.
Russell Borogove

8

Junuxx'un güzel cevabına ek olarak birkaç not bırakmak istiyorum.

  • Düzgünleştirme filtreleme ile ilgilidir (ne yazık ki oldukça belirsiz Wikipedia makalesi ) - özelliklerine göre daha pürüzsüz seçmelisiniz.

  • Benim favorilerimden biri medyan filtresidir . Bu doğrusal olmayan bir filtre örneğidir. Bazı ilginç özellikleri vardır, "kenarları" korur ve büyük gürültü altında oldukça sağlamdır.

  • Sinyalinizin bir Kalman filtresine nasıl davrandığına dair bir modeliniz varsa göz atmaya değer. Düzgünleştirilmesi aslında gözlemlere dayalı olarak sinyalin Bayes maksimum olasılık tahmini.


4

Düzgünleştirme, komşu örnekler arasındaki ilişkiyi değiştirmek için komşu örneklerden alınan bilgilerin kullanılması anlamına gelir. Sonlu vektörler için, uçlarda, bir tarafa komşu bilgi yoktur. Seçenekleriniz şunlardır: uçları pürüzsüzleştirmeyin / filtrelemeyin, daha kısa bir sonuçta pürüzsüzleştirilmiş vektör kabul edin, verileri oluşturun ve bununla pürüzsüz hale getirin (uçlardaki tahminlerin doğruluğuna / kullanışlılığına bağlıdır) veya belki de farklı asimetrik yumuşatma çekirdekleri kullanarak uçlar (yine de sinyaldeki bilgi içeriğini kısaltır).


3

Değişen uzunluklarda musluklar için hareketli ortalama filtresini yumuşatmak için tüm matlab kodunu bulabilirsiniz. www.gaussianwaves.com/2010/11/moving-average-filter-ma-filter-2/


1

Diğerleri nasıl düzgünleştirdiğinizden bahsetmişlerdir, düzleştirmenin neden işe yaradığını belirtmek isterim .

Sinyalinizi uygun şekilde aşırı örneklerseniz, bir örnekten diğerine (örnek = zaman noktaları, pikseller, vb.) Nispeten az değişiklik gösterecektir ve genel olarak pürüzsüz bir görünüme sahip olması beklenmektedir. Başka bir deyişle, sinyaliniz birkaç yüksek frekans içerir, yani örnekleme hızınıza benzer bir hızda değişen sinyal bileşenleri.

Ancak, ölçümler genellikle gürültü nedeniyle bozulur. Bir ilk yaklaşımda, genellikle ortalama sıfır ile bir Gauss dağılımını ve sinyalin üzerine basitçe eklenen belirli bir standart sapmayı takip etme gürültüsünü düşünürüz.

Sinyalimizdeki gürültüyü azaltmak için, genellikle aşağıdaki dört varsayımı yaparız: gürültü rastgele, numuneler arasında korelasyonlu değil, ortalama sıfır var ve sinyal yeterince fazla örnekleniyor. Bu varsayımlarla, kayan ortalama bir filtre kullanabiliriz.

Örneğin, birbirini izleyen üç örneği ele alalım. Sinyal yüksek oranda örneklendiği için, alttaki sinyalin lineer olarak değiştiği düşünülebilir, bu da üç örnekteki sinyalin ortalamasının orta örnekteki gerçek sinyale eşit olacağı anlamına gelir. Buna karşılık, gürültü ortalama sıfıra sahiptir ve ilişkisizdir, bu da ortalamasının sıfıra düşmesi gerektiği anlamına gelir. Böylece, her bir numuneyi kendisi ve iki komşu komşusu arasındaki ortalama ile değiştirdiğimiz üç örnekli kayar ortalama filtre uygulayabiliriz.

Tabii ki, pencereyi ne kadar büyük yaparsak, gürültü sıfıra o kadar ortalama olur, ancak gerçek sinyalin doğrusallık varsayımı o kadar az olur. Bu yüzden bir değiş tokuş yapmalıyız. Her iki dünyanın en iyisini elde etmeye çalışmanın bir yolu, daha uzak örneklere daha küçük ağırlıklar verdiğimiz ağırlıklı bir ortalama kullanmaktır, böylece gerçek sinyali doğrusallığımızdan saptığı yerde çok fazla ağırlıklandırmazken, daha geniş aralıklardan gelen gürültü efektlerini ortalama Varsayım.

Ağırlıkları nasıl koymanız gerektiği gürültüye, sinyale ve hesaplama verimliliğine ve elbette gürültüyü ortadan kaldırmakla sinyale kesmek arasındaki değişime bağlıdır.

Son birkaç yıl içinde, örneğin değişken filtre pencereli (anizotropik difüzyon) düzleştirme şemaları veya gerçekten pencere kullanmayan şemalar tasarlayarak, dört varsayımdan bazılarını rahatlatmamıza izin vermek için çok fazla iş yapıldığını unutmayın. hiç (yerel olmayan araçlar).

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.