Fourier dönüşümünü yapmadan önce neden bir sinyali sıfırladım?


77

Önceki bir sorunun cevabında, bir kişinin cevap vermesi gerektiği belirtildi.

giriş sinyallerini sıfırlayın (dalganın en az yarısı "boş" olacak şekilde sonuna sıfır ekleyin)

Bunun sebebi nedir?


Bu ne yaptığınıza bağlı. Bu benim cevabım üzerine bir yorum olabilirdi. Buna bir açıklama ekledim.
Kasım’daki endolith

@endolith: Başlangıçta bir yorum olarak bırakmayı düşündüm, ama sorunun genel bir ilgi alanı olabileceğini ve eğer bir yere yorumlarda iyi bir cevap gömülmesi üzücü olacağını düşünüyorum. Kabul etmezseniz, bu soruyu silerim.
Jonas

9
Bu çok genel bir soru. 2 değerinde bir şey yapmak için sıfırlama pedi, dairesel dönüşümün dairesel olmayan dönüşüm gibi davranmasını sağlamak için sıfırlama pedi yapabilirsiniz, bir sinyali yeniden örnekleme, frekans çözünürlüğünü değiştirmek için vs. yapabilirsiniz.
endolith

Yanıtlar:


82

Sıfır dolgu, daha uzun bir FFT sonuç vektörü üretecek olan daha uzun bir FFT kullanmanıza izin verir.

Daha uzun bir FFT sonucu, frekans içinde daha fazla aralıklı olan daha fazla frekans kutusuna sahiptir. Ancak, esas olarak, orijinal verilerin sıfır dolgulu olmayan FFT'sinin yüksek kaliteli Sinc enterpolasyonu ile aynı sonucu vereceklerdir.

Bu, daha fazla enterpolasyon olmadan çizildiğinde daha pürüzsüz görünümlü bir spektrumla sonuçlanabilir.

Her ne kadar bu enterpolasyon, komşu veya yakındaki frekansların çözülmesine veya / veya çözünürlüğüne çözülmesine yardımcı olmamakla birlikte, spektrumda önemli bir bitişik sinyal veya gürültüye sahip olmayan tek bir izole frekansın pikini görsel olarak çözmek daha kolay olabilir . İstatistiksel olarak, daha yüksek FFT sonuç kutularının yoğunluğu, tepe noktası büyüklüğü kutusunun, rastgele izole edilmiş bir giriş frekansı sinüzoit frekansına daha yakın ve daha fazla enterpolasyon olmadan (parabolik ve diğerleri) daha muhtemel olmasını sağlayacaktır.

Ancak, esasen, bir DFT / FFT'den önce sıfır doldurma, çok sayıda noktanın enterpolasyonunun hesaplamalı olarak verimli bir yöntemidir.

Çapraz korelasyon, otomatik korelasyon veya evrişim filtrelemesi için sıfır dolgu, evrişim sonuçlarını karıştırmamak için kullanılır (dairesel evrişim nedeniyle). Doğrusal bir evrişimin tam sonucu, iki giriş vektöründen herhangi birinden daha uzundur. Bu uzun evrişim sonucunun sonunu koymak için bir yer sağlamazsanız, FFT hızlı evrişim sadece onu karıştırır ve istediğiniz sonucu toparlar. Sıfır doldurma, daha uzun sonucu karıştırmak için bir demet sıfır sağlar. Ve sadece bir sıfır vektörüyle karıştırılmış / toplanmış bir şeyi çözmek çok daha kolaydır.


12
Son paragraf, daha net bir şekilde ifade edilebileceğini düşündüğüm halde, asıl sorunun ana cevabıdır. Korelasyon veya evrişim bağlamında sıfır-dolgu, işlemin frekans alanında uygulanmasının, dairesel evrişim / korelasyon yerine lineer verim sağlaması için yapılabilir . Bununla birlikte, üst üste bindirme ve üst üste bindirme algoritmalarında olduğu gibi, yanda bazı defter tutma çalışmaları yapmak istemeniz durumunda, bu bir zorunluluk değildir.
Jason R,

4
@ Jason R: Aslında her ikisi de dairesel evrişimdir. Normal (budanmamış) bir FFT tüm çarpanları yapar ve sonucun bir kısmına sarmak için ekler. Sadece yeterince sıfır doldurulmuş durumda, tüm bu çarpımlar ve ekler sıfır değerindedir, bu yüzden kimse hesaplanan ve dairenin etrafına sarılmış hiçbir şeyle ilgilenmez.
hotpaw2

9
Aslında; İki sinyalin DFT'lerinin çoğalması her zaman dairesel evrişim gerçekleştirir. Farklı ifade etmeliydim: onları dairesel olarak kıvrılarak elde edilen sonucun, doğrusal olarak kıvrılabiliyorsanız (lineer kıvrımın ne olduğunu varsayarak, varsayalım) genellikle durum).
Jason R

27

Zaman alanı sinyalinizi sıfırlamaya karar vermeden önce göz önünde bulundurmanız gereken birkaç şey var. Sinyali hiç sıfırlamak gerekmeyebilir!

1) Frekans alanında daha iyi çözünürlük elde etmek için zaman alanı verisini (sıfır doldurma değil) uzatın.

2) FFT kutularının daha iyi tanımlanmasını görmek istiyorsanız, eğer daha doğru bir çözünürlük almasanız da, FFT noktalarının zaman alanı sinyal uzunluğunun ötesinde (sıfır doldurma) sayısını artırın. Ayrıca 2 adet FFT puanının gücüne erişmek için de ped kullanabilirsiniz.

fs/NfsN

Http://www.bitweenie.com/listings/fft-zero-padding/ adresinde bu noktaları gösteren bazı güzel rakamlar var.

Söylenecek son bir şey: Sinyali zaman alanındaki sıfır pedine sokarsanız ve bir pencereleme işlevi kullanmak istiyorsanız, sinyali sıfır panelden önce pencerelendiğinizden emin olun. Pencere işlevini sıfır doldurma işleminden sonra uygularsanız, pencerenin gerçekleştirmesi gereken şeyi başaramazsınız. Daha spesifik olarak, yine de yumuşak bir sıfıra geçiş yerine, sinyalden sıfıra keskin bir geçişiniz olacaktır.


8

Genel olarak DFT'den önce sıfır doldurma, dönüştürülen alanda enterpolasyona veya daha sık örneklemeye eşdeğerdir.

İşte karşıtın nasıl çalıştığını gösteren hızlı bir görselleştirme. Zamanında bant sınırsız bir sinyali daha yüksek hızda örneklerseniz, daha 'ezilmiş' bir spektrum elde edersiniz, yani her iki ucunda da daha sıfır bulunan bir spektrum elde edersiniz. Başka bir deyişle, DFT'lemeden sonra sadece frekansı sıfırlayarak ve ardından sıfır-pedli sonucu IDFT'leyerek zamanla daha fazla numune alabilirsiniz.

Aynı etki, sıfır dolgusu zaman içinde gerçekleştiğinde tersine tutar. Hepsi bu, çünkü mükemmel bir sinyal rekonstrüksiyonu, bir sinyal bantsız olduğu ve en azından Nyquist hızında örneklenmiş olduğu sürece mümkün.

'Çözünürlük' terimi, onu nasıl tanımladığınıza bağlıdır. Benim için, zaman veya sıklıkta iki bitişik gözlem noktasının ne kadar iyi (istatistiksel olarak) ayırt edilebileceği anlamına gelir. Bu durumda çözünürlük aslında spektral sızıntı nedeniyle DFT boyutuna bağlıdır. Yani, pencere boyutu ne kadar küçükse, dönüştürülmüş sinyali daha bulanık veya lekeli ve bunun tersi de geçerlidir. Ne sıklıkta örneklediğinizden veya 'tanım' dediğim şeyden farklı. Örneğin, yüksek oranda örneklenmiş çok bulanık bir görüntü elde edebilirsiniz (yüksek tanımlı), ancak daha düşük hızda örneklemeden daha fazla bilgi alamazsınız. Dolayısıyla, özet olarak, sıfır dolgusu hiç olmadığı kadar fazla bilgi edinmediğiniz için çözünürlüğü hiç iyileştirmez.


6

Kişi, zaman-alan numunesini izole etmek için kullanılan pencereleme fonksiyonunun spektrumuyla ilgileniyorsa, sıfır doldurma WILL, pencereleme fonksiyonunun frekans çözünürlüğünü arttırır.

x(t)w(t)w(t)X(f)W(f) evrişimi başlatır.

x(t)X(f) , dikdörtgenin genişliğiyle aynı ise ve tam olarak çöp kutusu frekanslarından birinde bir sinüzoid vardı, o zaman o çöp kutusuna merkezlenmiş görünen eşitleme işlevi örnekleri tam sıfır dışı sıfır geçişlerinde düşüyor ve eşitlemenin şeklini göremiyorsunuz. hiç spektrumu. şimdi sıfır ped veri girmeden Eğer FFTsonuçta ortaya çıkan spektrumdaki senkronizasyon fonksiyonunun şeklini açığa çıkarak pik ve sıfır geçiş dışındaki yerlerdeki bazı örnekleri göreceksiniz. Peki hangi kullanımın sıfır doldurma? Her zamanki durum olan pencereli sinyallerin ayrık dönüşümünün doğasını ortaya çıkarmak için kesinlikle eğitim amaçlıdır. Pratik bir anlamda, bir taşıyıcı dalgaya binen izole edilmiş bir zarfın spektral şekli ile ilgilendiğiniz herhangi bir durumda faydalı olabilir.


4

Fourier dönüşümünden önce ve sonra gerçekleştirilen işlemlere bağlı olarak bunun farklı sebepleri olabilir. En yaygın neden, sonuçta meydana gelen dönüşümde daha yüksek frekans çözünürlüğü elde etmektir. Diğer bir deyişle, dönüşümünüzde kullanılan örnek sayısı arttıkça, sonuçtaki güç spektrumundaki çift genişliği daralır. Unutmayın: binwidth = sample_frequency / transform_size (genellikle pencere boyutu olarak adlandırılır). Bundan, dönüşüm boyutunuzu arttırdıkça, binwidth'in (= daha iyi frekans çözünürlüğü) azaldığını hayal edebilirsiniz. Sıfır doldurma, sinyale yeni bilgi vermeden dönüşüm boyutunu artırmanın bir yoludur.

Öyleyse neden sıfır doldurmadan büyük bir dönüşüm yapmıyorsunuz? Bu aynı etkiyi sağlamaz mı? İyi soru. Çoğu durumda, kısa süreli bir Fourier dönüşümü (stft) kullandığınız bir zaman alanı veri akışını analiz etmek isteyebilirsiniz. Bu, frekans spektrumundaki değişiklikleri karakterize etmek için ihtiyacınız olan zaman çözünürlüğüne göre her N numunesinin dönüşümünü gerektirir. Burada sorun yatıyor. Çok büyük bir pencere ve zaman çözünürlüğünü kaybedersiniz, çok küçük bir pencere ve frekans çözünürlüğünü kaybedersiniz. O zaman çözüm, size iyi zaman çözünürlüğü veren küçük zaman alanlı pencereleri almak ve daha sonra size iyi frekans çözünürlüğü sağlamak için bunları sıfırlamaktır. Umarım bu sizin için yararlıdır

Güncelleştirme
Bunu iyi açıklamadım. Daha iyi açıklamalıydım. Pencereli bir dönüşüme atıfta bulunarak, aslında 'gerçek' daha yüksek bir frekans çözünürlüğü elde edemezsiniz ancak görselleştirme amacıyla (güç spektrumunu gözle okuyarak) daha net sonuçlar verebilir. Kritik örnekleme hızını kullanarak, her bir yan lob, grafik tekniğine bağlı olarak yanıltıcı olabilecek tek bir bölmeyi işgal eder. Sıfır doldurma, daha açık olabilen enterpolasyonlu bir frekans spektrumu sağlar. Ek olarak, frekans tahmini için basit bir tepe toplama yöntemi kullanıyorsanız, sıfır dolgunun spektral enterpolasyon etkisi size ana lobun gerçek zirvesine daha yakın bir spektral örnek verecektir. Bu bağlantı bazı yararlı diyagramlar sunar: http://www.dsprelated.com/dspbooks/sasp/Practical_Zero_Padding.html


9
Bu cevap doğru değil. Sıfır doldurma, frekans çözünürlüğünü hiç iyileştirmez; sadece daha küçük dönüşümlerin çıktıları arasında enterpolasyon yapar. Sıfır doldurmayı, daha küçük dönüşümlerle aynı bant genişliğine sahip daha fazla frekans kutusu eklemek olarak düşünebilirsiniz; bu nedenle, filtre bankası perspektifinden, geçiş bantları örtüşür.
Jason R,

1
Anlamaya yardımcı olursa: Ayrıca bunun tersini de yapabilirsiniz: bir sinyalin FFT'sini alın, sonucu sıfırlayın ve FFT'yi ters çevirin. Bu, orijinal sinyali enterpolasyon etkisine sahip olacaktır. Fakat elbette, sinyal aynı Nyquist bant genişliği ile aynı sinyal olacak. Interpolasyon size orjinalinden daha yüksek frekans bilgisi vermez.
endolith

1
@ Jason R - Haklısın, cevabım yanıltıcıydı, orjinal yayında yukarıda açıklığa kavuşturmaya çalıştım. Sıfır doldurmanın frekans çözünürlüğünü arttırdığını söylememeliydim.
Dan Barry

2

Bunları önceki iyi cevaplarda bahsetmedim, bu yüzden sıfır doldurma için aşağıdaki ek önemli nedenleri ekleyeceğim:

Radix-2 algoritmaları daha verimlidir, bu yüzden sıfır 2 (veya bazı durumlarda radix-4 için 4'ün gücüne) kadar ya da herhangi bir büyük ana faktörden kaçınmak için sıfır kuvvetle doldurma, gerçek zamanlı performansı artırabilir. Ayrıca FFT'yi analiz için kullanırken, bir FIR'nın frekans tepkisini belirlemek gibi DTFT örneklerini hesaplamak için sıklıkla sıfır doldurma yapılır: fft ([1 1 1 1]) ile fft ([1 1 1 1], 512) bu frek ile aynıdır ([1 1 1 1]).

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.