Pencereyi neden FFT spektrumu değiştirmek yerine ters FFT yerine zaman etki alanında kullanıyoruz?


16

DSP'nin bir sinyalin bölümlerinin FFT'sini kullanarak yapılacağını, FFT'den (örneğin sinyal + gürültümüzün spektrumunu temsil ettikleri) ortaya çıkan örnekleri değiştireceğini ve istenmeyen sinyalleri kaldıracağını ve bir zaman almak için ters bir FFT yaptığını düşündüm. filtrelenmiş sinyalin alan gösterimi (gürültü şimdi kaldırılmıştır). Ancak bu yapılmaz, bunun yerine pencere fonksiyonlarını kullanarak zaman alanındaki tüm işleri yaparız. Neden?

Pencere işlevini zaman etki alanında, pencere işlevinin frekans yanıtını frekans etki alanındaki sinyalin spektrumu ile birleştirdiğimizden katlarsak, bu nasıl çalışır? Demek istediğim, sinyalimizi filtrenin frekans tepkisi ile çarparak frekans alanındaki tüm işleri yapsaydık, bu filtreleme gibi olurdu? Ama burada pencere yerine zaman alanına tüm şeyleri yapıyoruz.

-> Karışıklıkların nereden geldiğini görelim. Alçak geçiren filtre gibi analog filtreler için bu darbe benzeri frekans tepkisine sahibiz. Bir sinyali filtrelediğimizde, sinyalin spektrumunu filtrenin nabız frekans tepkisi ile etkili bir şekilde çarpıyoruz. Bu, bir kesme üzerindeki sinyaldeki tüm frekansları 0'a indirecektir. Düşük geçişli bir filtre esasen böyle çalışır. Neden dijital filtreler için de aynısını yapmıyorsunuz?


Yanıtlar:


7

Pencereleme spektral sızıntıyı azaltır.

başladığınızı varsayalım . Bu süre 2 π / ω 0'dır . günah(y)=marul(ω0t)2π/ω0

Ama kimse dönem olduğunu söyleseydim ve körü körüne aralığı seçmek [ 0 , 1.8 π / ω 0 ] nedeniyle tüm sahte olan diğer frekanslarda frekans bileşenlerini gözlemleyecek ve bu kesilmiş dalga FFT almak kesik dalga formunun periyodiklik için kopyalanmasıyla oluşturulan atlamalar orijinal sinyalde gerçekten mevcut değildir - bu, periyotlar arasındaki geçişi sorunsuz bir şekilde yakalamayan şanssız bir kesimin bir eseridir. İdeal olarak ω = ω 0'da sadece bir spektral bileşen vardır . 2π/ω[0,1.8π/ω0]ω=ω0

Zaman alanında pencerelemenin amacı, tüm bu hayali spektral bileşenleri azaltmaktır.


12

DFT hesaplamaları giriş sinyalinin sonsuz periyodik uzantısı üzerinde çalıştığı için pencereleme kullanılır. Birçok gerçek sinyal ya hiç periyodik olmadığından ya da gerçek sürelerinden farklı bir aralıkta örneklendiğinden, bu, tekrarlanan aralıklar arasında kaçak adı verilen yapay 'kenarda yanlış frekans bileşenleri üretebilir . Önce zaman alanı sinyalini her iki uçta sıfıra giden bir pencere fonksiyonuyla çarparak, sonsuz periyodik uzantıda tekrarlanan aralıklar arasında yumuşak bir geçiş yaratırsınız, böylece DFT'yi aldığımızda bu yapay frekans bileşenlerinin oluşturulmasını azaltırsınız.

Bu yazı , bu fenomene daha derinlemesine bir bakış ve farklı pencere fonksiyonlarının etkileri hakkında bir fikir vermektedir.


11

İki farklı operasyonu karıştırdığınızı düşünüyorum.

Zaman alanında pencereleme @ sam ile açıklanır, bu yüzden tekrar etmeyeceğim. Ancak filtreleme yapmak için pencereleme yapılmaz. Bir sinyalin FFT'sini filtre frekansı tepkisi ile çarparak filtreleme birçok durumda tamamen mantıklıdır ve gerçekten de yapılır. Filtrelemenin alternatifi, zaman alanlı evrişimdir (pencerelemeden farklıdır). Bunun, her şeyin depolanmasını beklemeden ve daha sonra dönüştürülmeden ölçüldüğü için 'gerçek zamanlı' bir sinyal üzerinde çalışma gibi kendi avantajları vardır.

Yani 'Neden dijital filtrelerle de aynı şeyi yapmıyorsunuz?' Sorusuna cevap basitçe 'uygun olduğunda yapıyoruz'.


Aynı zamanda, soruda kıvrım ve pencerenin karıştığı izlenimine sahibim. İyi işaret ettin!
Deve

11

Bu sorunun birkaç iyi cevabı var. Ancak, önemli bir noktanın tamamen açıklığa kavuşturulmadığını hissediyorum. Sorunun bir kısmı, bir sinyalin FFT'sini neden istenen filtre tepkisi ile çarpmadığımızdı. Örneğin, sinyalimizi alçak geçiren filtre uygulamak istiyorsak, istenen kesme frekansından daha yüksek olan tüm frekans bileşenlerini sıfırlayabiliriz. Bu aslında FIR filtreleri tasarlamak için iyi bilinen frekans örnekleme yönteminin basit bir uygulamasıdır. Sorun, FFT tarafından hesaplanan ayrı frekans bileşenlerini sıfırlayabilmemizdir. Bu ayrık frekanslar arasında neler olduğu konusunda hiçbir kontrole sahip değiliz. Filtrelemenin bu kadar basit bir versiyonunun sadece zayıf bir durdurma bandı zayıflaması vereceği ortaya çıkıyor (FFT uzunluğuna bakılmaksızın). Matlab veya oktav erişiminiz varsa,

x=2*rand(1024,1)-1;
X=fft(x);
Y=X.*[ones(200,1);zeros(625,1);ones(199,1)]; % lowpass filter
y=real(ifft(Y)); % real() just to remove numerical errors
Y=fft(y,4096);
plot(20*log10(abs(Y(1:2048)))),axis([0,2048,-30,50])

6

Dikdörtgen olmayan bir pencere kullanmıyorsanız, FFT sonuçları herhangi bir frekans etki alanı filtrelemesi yapmadan önce varsayılan bir dikdörtgen pencerenin (periyodik bir Sinc) dönüştürülmesi ile zaten döndürülür. örneğin biri muhtemelen istemediğiniz iki filtre uygulayacaksınız.

Zaman alanında pencereleme yaparak, FFT ve frekans alanı filtrelemeden önce, dikdörtgen pencereleme ile yapılan herhangi bir filtreyi ("sızıntı" olarak adlandırılır) değiştirirsiniz ve böylece ek bir istenmeyen filtre kıvrımı elde edemezsiniz.

Bunu yapmanın diğer bir yolu, bir dikdörtgen pencerenin efektlerinin bitişik pencerelerden benzer efektlerle iptal edildiği ardışık pencerelerde örtüşme ekleme veya örtüşme kaydetme yöntemlerini kullanmaktır.


5

Zaman alanındaki pencere çünkü

  • pencerenin kenarlarında sıfır garantisi verebiliriz
  • pencere fonksiyonlarının uzamsal alanda hoş bir analitik ifadesi vardır
  • birçok pencere fonksiyonunun yaklaşık olarak zor olabilen garip şekilli bir spektrumu vardır
  • sadece sınırlı sayıda örnek gerekir (sinyal akışı olarak pencereleme yapılabilir)

örneğin wikipedia'dan

resim açıklamasını buraya girin

Pencereleme fonksiyonlarının sıfıra inmesi, spektral alanda çok yavaş sıfıra giden yan loblara sahip oldukları anlamına gelir. Bu kısıtlamadan kurtulursak, Gauss filtresi gibi hem uzamsal hem de spektral alanlarda kompakt fonksiyonlara sahip olabiliriz. Bu, spektral etki alanı üzerinden filtre uygulayabileceğiniz, ancak tüm sinyalin bilinmesini gerektirdiği anlamına gelir.

Sinyalin tamamına sahipseniz, başka bir alternatif de dalgacık kullanmak olacaktır.


2

Ben de aynı soruyu sordum.

Bir kıvrım, zaman alanı sinyalinin pencereyle çarpılan integral / kümülatif toplamıdır. Bu, "pencereli" zaman alanı sinyali ile karıştırılmamalıdır.

Bu makalenin sonu bana çok yardımcı oldu.

Temel olarak, gerçek sinyallerin sonlu olduğunu ve aniden gerçek bir sinyalin kesildiğini, frekans alanında çok sayıda istenmeyen frekans / yapaylık ile sonuçlandığını söyler.

Bu artefaktları önlemek / en aza indirmek için, numuneniz sıfır olmayan bir skaler değerle aniden bitmek yerine sıfırla başlayacak ve bitecek şekilde yumuşak (örn. Çan şekilli) bir pencere fonksiyonu kullanabilirsiniz.

Pürüzsüz kesim

Yukarıdaki pencereli örnek, frekans alanında aşağıdaki ham örnekten daha az yapaylığa sahip olacaktır.

Ani kesme


1

Bir FFT ile ilişkili iki geniş kategori vardır ve bunlar 1) FIR filtresini uygulamanın etkili bir yoludur ve 2) Spektral Analizdir.

FIR Filtreleme için, pencereler için endişelenmez ve pencere bir filtreye karşılık gelmedikçe bunları kullanmaz, ancak bu yaygın bir şey değildir. Sızıntı endişe konusu değildir.

Spektral Analiz pencerelerin kullanıldığı yerdir. Burası, büyük bir endüstriyel makineye bağlı bir sensöre baktığınız ve bağırsaklarında derin bir yatak olup olmadığını anlamaya çalıştığınız yerdir. Rulmanlar arızalanırken gıcırdarlar, ancak olabilecekleri gürültü genellikle makinenin yaptığı diğer seslerden çok daha düşüktür. Sızıntı ve ortalamanın geldiği yer burasıdır. Güçlü tonlar verildiğinde, sızıntı birkaç çöp bidonu aradığımız zayıf sinyali yok edecektir. Güçlü sinyallerin varlığında Spektral Analiz'in zayıf sinyallere duyarlılığını artırır. Arka plan gürültüsü eğildiğinde de benzer bir etki vardır. Aradığımız bilgiler frekans alanındadır. RADAR, SONAR ve Jeofizik için de aynı sorun söz konusudur. Zayıf sinyali görmek hedeftir.


1

Tam bir frekans bölmesinde olmayan tek bir frekansın tüm spektrum üzerine yayılmasını önlemek için zaman alanında pencereleme gereklidir. Belki bu sayfa yardımcı olur: http://www.sm5bsz.com/slfft/slfft.htm Linrad (benim 20 yaşındaki projem) pencereli bir FFT kullanır, daha sonra frekans alanında bir filtre uygular (istemediğimiz şeyi sıfırla.) Bir pencere uygulayın - sıklık kutularındaki ağırlık 1'den ağırlık 0'a aniden gitmeyin. Sonra geriye doğru bir FFT uygulayın - ama şimdi çok daha az sayıda noktaya. Sıfır olduğunu bildiğimiz tüm frekans kutularını dahil etmeye gerek yoktur !! Sonuç olarak, çok daha küçük bir boyuta sahip bir zaman fonksiyonu elde ederiz - bu, çok daha düşük örnekleme oranına sahip olduğu anlamına gelir. Prosedür, tek bir adımda filtreleme ve decimation yapar. Bu aynı anda birden fazla kanalı filtrelemek isterse çok etkilidir. Linrad ana sayfası burada: http://www.sm5bsz.com/linuxdsp/linrad.htm

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.