Hilbert dönüşümü sinyal zarfını hesaplamak için?


27

Hilbert dönüşümünün bir sinyalin zarfını hesaplamak için kullanılabileceğini duydum. Bu nasıl çalışıyor? Ve bu "Hilbert zarfı" ndaki işaretten basitçe bir sinyal düzelterek aldığı zarftan ne kadar farklı?

Özellikle dinamik aralık sıkıştırma işleminde kullanılmak üzere bir zarfı hesaplamanın bir yolunu bulmakla ilgileniyorum (yani, bir ses sinyalinin sesli bölümlerinin otomatik olarak "sesini kısmak").


şimdi bir çalışma kodunuz var mı? Hilbert transsform ya da başka bir yöntem ile?
Basj

Yanıtlar:


18

Hilbert dönüşümü "analitik" sinyali hesaplamak için kullanılır. Örneğin, http://en.wikipedia.org/wiki/Analytic_signal . Sinyalin bir sinüs dalgası veya modüle edilmiş bir sinüs dalgasıysa, analitik sinyalin büyüklüğü gerçekten zarf gibi görünecektir. Ancak, Hilbert dönüşümünün hesaplanması önemsiz değildir. Teknik olarak, oldukça uzun bir nedensel olmayan FIR filtresi gerektirir, bu nedenle adil bir miktarda MIPS, bellek ve gecikme süresi gerektirecektir.

Geniş bir bant sinyali için, özel uygulamanız için "zarfı" nasıl tanımladığınıza bağlıdır. Dinamik aralık sıkıştırma uygulamanız için, zaman içindeki ses yüksekliği algısı ile iyi ilişkilendirilen bir metrik istersiniz. Hilbert dönüşümü bunun için doğru bir araç değildir.

Daha iyi bir seçenek, A ağırlıklı bir filtre ( http://en.wikipedia.org/wiki/A-weighting ) uygulamak ve sonra kayıplı bir tepe noktası veya kayıplı bir RMS dedektörü yapmak olabilir. Bu, zaman içinde algılanan yüksek sesle oldukça iyi bağıntılı olacaktır ve yapılması nispeten ucuzdur.


Her ikisi de nedensel değildir, ancak FFT metodu (spektrumun ve IFFT'in yarısını atar) genellikle FIR filtresinden daha mı hızlıdır?
Endolith

Ayrıca, Hilbert dönüşümünü hesaplamak için FFT yöntemi nedensellik gerektirmiyor? Biri muhtemelen yararlı zarf şekilleri elde etmek için oldukça büyük bir pencereye ihtiyaç duyar.
mavavilj

4

Bir zarfı aşağıdaki şekilde hesaplamak için Hilbert dönüşümünü kullanabilirsiniz. (MATLAB kodu olarak yazacağım):

envelope = abs(hilbert(yourTimeDomainSignal));

Şu anda matematiği yazmak için zamanım yok, (daha sonra deneyeceğim), ama çok basit, sinyalinizin sinüs dalgası olduğunu söyleyin. Bir sinüsün Hilbert dönüşümü bir -kosindir. (Başka bir deyişle, hilbert dönüşümü her zaman size -90 derece faz kayması sinyalinizi verecektir - başka bir deyişle dörtlüsü).

Sinyalinizi (sinüs dalgası) jyükseltilmiş sinyalinizin zamanına eklerseniz, (-kosin dalgası) şunları alırsınız:

sin(wt) - j.*cos(wt)

Bu da e ^ olur (j * (wt - pi / 2)).

Böylece, bunun mutlak değerini aldığınızda, zarfınız olan 1 elde edersiniz. (Bu durum için).


Hata! Olumsuz işaretini unuttum - teşekkürler Dilip, şimdi düzeltildi.
Spacey

2

Genlik zarfını bir sinyalden almak için en az iki ayrı yoldan haberdarım.

Anahtar denklem:

E(t)^2 = S(t)^2 + Q(S(t))^2

Where Q represents a π/2 phase shift (also known as quadrature signal).

Farkına varmanın en basit yolu, Q (S) 'yi FFT kullanarak bir grup sinüzoidal bileşene ayrıştırmak, her bir bileşeni saat yönünün tersine çeyrek tur çevirmek (her bir bileşenin karmaşık bir sayı olacağını unutmayın; + iy -> -y + ix) ve sonra yeniden birleştirin.

Bu yaklaşım oldukça iyi sonuç veriyor, ancak biraz ayarlama gerektiriyor (Henüz matematiği daha iyi bir şekilde açıklayacak kadar iyi anlamıyorum)

Burada “Hilbert dönüşümü” ve “analitik sinyal” gibi birkaç anahtar terim var.

Bu terimleri kullanmaktan kaçınıyorum çünkü kullanımlarında kayda değer bir belirsizliğe şahit olduğumdan eminim.

Bir belge f (t) orijinal bir gerçek sinyalin (karmaşık) analitik sinyalini şöyle tarif eder:

Analytic(f(t)) = f(t) + i.H(f(t))

where H(f(t)) represents the 'π/2 phase shift' of f(t)

bu durumda genlik zarfı basitçe | Analitik (f (t)) | 'dir, bu bizi orijinal Pisagor denklemine geri getirir

Not: Son zamanlarda frekans kaydırma ve düşük geçişli bir dijital filtre içeren daha gelişmiş bir teknikle karşılaştım. Teori, analitik sinyali farklı yollarla inşa edebileceğimizdir; f (t) 'yi pozitif ve negatif sinüzoidal frekans bileşenlerine ayırır ve sonra negatif bileşenleri çıkarın ve pozitif bileşenleri iki katına çıkarırız. ve bu "negatif frekans bileşeninin çıkarılması", frekans kaydırma ve alçak geçirgen filtreleme kombinasyonu ile yapılabilir. Bu dijital filtreler kullanılarak oldukça hızlı yapılabilir. Bu yaklaşımı henüz keşfetmedim, bu yüzden şu anda söyleyebileceğim kadar.


1
Bunların hepsi aynı şeyi hesaplamanın farklı yollarıdır (bir Hilbert dönüşümü yoluyla analitik sinyalin büyüklüğü). "Gelişmiş" teknik basitçe bir FFT yapmak, negatif frekansları sıfırlamak ve sonra ters bir FFT yapmaktır. Asıl kısım orijinal sinyal ve Hilbert'in onun dönüştürdüğü hayali kısımdır. Şeytan, çerçeveleme, pencereleme, örtüşen ve doğrusal ve dairesel işleme gibi detaylarda bulunur.
Hilmar

2
Bazı bireylerin, bu topluma verdiğim zaman ve enerjiyi (yukarıdaki yazı ile) bir düşük oyla ödüllendirmeye uygun gördüklerini görmek çok acı verici. Birine fayda sağlayacak iyi sağlam bilgiler içeren bir yazı.
P i

2
@Hilmar, Hilbert Dönüşümünü sağlamak için 'negatif frekansları kaldırmanın' daha iyi bir yolu var. Dediğim gibi, FFT içermeyen bir yol. Yukarıdakilerin ışığında, şu anda onu ayrıntılandırmak konusunda özellikle istekli hissetmiyorum.
P i

Hilbert dönüşümüyle ilgili ayrıntılı cevabınızı takdir edin; bunun iyi karşılandığından, bu yüzden bulaşıktan atılmayacağından emin olmak istedim. Lütfen oydaki kimseyi dikkate almayın.

0

Bu yüzden temel olarak bir Otomatik Kazanç Kontrolü (AGC) arıyorsanız. Dijital olarak işleyerek yapmanız gerekip gerekmediğinden emin değilsiniz, ancak bu görevi çok iyi yerine getirebilecek çok iyi entegre devreler var, genellikle AGC birçok başka özelliğe entegre olur, ancak JFET transistörleri ile bazı kesitler oluşturulabilir. ve bazı diyotlar.

Ancak bunu dijital işleme ile yapmanın çok kolay anlaşılabilir bir yolu, 5 veya 10 msn'yi temsil etmek için yeterli numunelerden oluşan bir zaman çizelgesi almak ve uyarıcı bir alfa faktörü uygulamak için uyarlayıcı bir varyans tahmincisi tasarlamak olacaktır. gelen her yeni örnek geçmiş örneklerden daha fazla hesaba katılır. daha sonra bu varyans tahminine dayanarak, her bir ses örneğine uyguladığınız bir kazancı belirleyen bir fonksiyon olan arzunuza göre tasarlarsınız. bu karar zor bir sınır olabilir, ancak eğer varyans bir miktar eşiğin üstüne çıkarsa kazancı bir miktar düşürürsünüz.

Veya, varyanstan kazanıma doğru doğrusal olmayan bir dönüşüm yarattığınız ve son varyans tahminine dayanarak her numuneye dönüşüm uyguladığınız daha yumuşak bir karar sınırı olabilir.

Bu daha sezgisel yöntemlerdir fakat en azından sizi tüm ağır matematikten kurtarır.

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.