Pencere boyutunu büyütmeden FFT'nin frekans çözünürlüğünü artırabilir misiniz?


12

Çoklu dikiş analizi için STFT kullanmak istiyorum. Sinyalde mevcut olan parsiyelleri tespit etmenin sadece bir başlangıç ​​olduğunu anlıyorum. Hala sorunum var.

Diyelim ki 'CD' frekansıyla örneklenmiş sinyal var 44100Hz. 1024Numune penceresi ile frekans bölmesi çözünürlüğünü elde ederim 22500Hz/512=43Hz. Bu sadece: C5 = 523.251Hzve gibi yüksek piyano notalarını ayırt etmek için yeterlidir C#5 = 554.365.

Eskiden 1024oldukça büyük bir pencere olduğunu düşünürdüm . Ama belki değil ve normalde daha büyük pencereler kısmi tespit etmek için kullanılıyor?

Frekans çözünürlüğü, pencere boyutunu artırmaktan başka bir yöntemle artırılabilir mi, bu da zaman çözünürlüğünü kötüleştirir mi? İki yöntem düşündüm:

Yöntem 1:

  1. Sinyali bant geçiren filtrelerle frekans bantlarına bölün (örneğin 0-11.25Hzve 11.25-22.5Hz).
  2. Orijinal yüksek frekansların artık düşük frekanslar olmasını sağlamak için daha yüksek bantları örnekleyin (ikinci bant için de yapın 11.25-22.5Hz -> 0Hz-22.5Hz) - bunun mümkün olduğundan emin olun.
  3. Ayarlanmış etiketli concat sonuç haznesi setleri.

Method2:

  1. Artan limiti olan bir dizi düşük geçiş filtresi kullanın.
  2. Artan frekans aralıklarında FFT gerçekleştirin.
  3. Her frekans için mümkün olan en iyi çözünürlüğü kullanın (bu frekansın dahil edildiği ilk FFT'den kutular).
  4. Bu, düşük frekansların daha iyi çözünürlüğe sahip olmasına neden olacaktır, ancak bence bu iyi, çünkü daha yüksek notlar için frekans farkı rende.

Bu konularda herhangi bir açıklama için minnettar olacağım.

Burada da okudum: Pencere boyutu, örnekleme hızı FFT eğim tahminini nasıl etkiler? pik toplama sonuçlarını iyileştirme yöntemi hakkında. Bence kullanmaya çalışacağım.


Sadece bir sinüs bileşeni olduğunu biliyorsanız, zirvenin komşu kutularına bir parabol takabilir ve "gerçek" zirveyi bulmak için enterpolasyon yapabilirsiniz. Bunun @pichenettes tarafından açıklanan faz yöntemiyle nasıl karşılaştırıldığından emin değilim.
endolith

Yanıtlar:


9

FFT'yi kullanmakta gerçekten ısrar ediyorsanız (zaman / frekans değiş tokuşlarından muzdarip olmayacak parametrik yöntemler yerine), her bir FFT bölmesi için anlık frekansı kurtarmak için faz bilgilerini kullanarak çok daha iyi bir çözünürlük yapabilirsiniz. Daha sonra kısmi FFT bin indeksinin bir fonksiyonu olarak anlık frekans veren fonksiyonda platolar aranarak tespit edilebilir. Bu tekniğin bu makalede anlatılan ortak uygulaması size bir ekstra STFT'ye "mal" olacaktır (anlık frekans, sinyalin STFT'si üzerindeki işlemler ve sinyalin türevinin STFT'si tarafından geri kazanılır).

Ses sinyallerinin sinüsoidal modellemesinin bu Matlab uygulamasındaki ifgram işlevine bakınız .

Bunun, bitişik FFT kutularına düşen iki kısmi çözüme yardımcı olmayacağını unutmayın. Spektral bir zirvenin FFT kutu indeksini bir frekansa dönüştürmekten çok daha doğru bir frekans tahmini sağlayacaktır.


Parametrik yöntemlerle ne demek istiyorsun? Ayrıca, birkaç ay önce FFT benzeri ancak tekdüze bir frekans ölçeğinden ziyade bir frekans oktav ölçeğine sahip bir algoritmadan bahsetmiş miydiniz?
Jim Clay

Parametrik yöntemler, sinyalin bir parametre seti tarafından tarif edilen belirli bir işlemle üretildiğini varsayan ve bu parametrelerin gözlemlerden en az kare bir tahminini hesaplayan istatistiksel sinyal analiz yöntemleridir. Örneğin, sinyalin N üstel sönümlü sinüzoidler + gürültünün bir toplamı olduğunu varsayarsanız, N kompleks genliklerini ve titreşimlerini çıkarmak için ESPRIT veya MUSIC gibi algoritmalar kullanılabilir.
pichenettes

2
Muhtemelen sabit Q dönüşümüne atıfta bulunuyorsunuz. Uyarı, FFT kadar hesaplama açısından hiçbir yerde verimli olmamasıdır; ve bu dönüşümü tersine çevirmenin önemsiz bir optimizasyon problemidir.
pichenettes

@JimClay: Belki bu buraya taşınmalı?
endolith

1
Parametrik yöntemlerin zaman / frekans değişimlerinden muzdarip olmadığını söylemek yanıltıcıdır. Özünde, parametrik yöntemler sistemi modeller ve modeli anlamlı veriler elde etmek için kullanır. Ancak performans sadece model kadar iyidir. "En iyi" modelin seçildiği varsayıldığında (kutup sayısı veya sinyal alanı özvektör sayısı), bu yöntemlerin performansı hala veri kayıt uzunluğuna çok duyarlıdır.
Bryan

2

"Çözüm" terimi birden çok anlama sahiptir. Genel olarak, aynı pencere uzunluğundaki veriyi kullanarak enterpolasyon yoluyla yakın aralıklı spektral pikleri ayırma (veya "çözme") yeteneğinizi artıramazsınız. Ancak, çeşitli enterpolasyon yöntemleri ile FFT bölme aralığından daha iyi bir çözünürlükle (bazen çok daha ince çözünürlük) gürültü tabanının çok üstünde olan izole edilmiş sabit spektral piklerin sıklığını tahmin edebilirsiniz.

Daha yüksek çözünürlük tahminleri için yaygın FFT sonuç enterpolasyon yöntemleri arasında parabolik enterpolasyon, Sinc enterpolasyonu, verilerin çok daha uzun bir FFT'ye sıfır doldurulması ve (hafif) ofset örtüşen pencereler kullanılarak faz vocoder yöntemleri bulunur.

Bir FFT aslında her biri çok dik bir geçişe sahip ancak belirli bir FIR filtre çekirdek uzunluğu için tonlarca durdurma bandı dalgalanmasına sahip bir bant geçiren filtre bankasıdır. Bu nedenle, bu filtrelerin pencerede periyodik olmayan gürültüyü büyük oranda reddetmesi yoktur. Bu tür parazitlerin sorun olduğundan şüpheleniyorsanız, pencereli bir FFT veya özel bir filtre bankası daha iyi performans gösterebilir.


1

Jim Clay sorusu ve pichenettes tarafından yapılan yorumlarda cevaplanan daha fazla araştırmadan sonra , Metod2'nin örneğin Kashima ve Mont-Reynaud tarafından tarif edilen Sınırlı Q-dönüşümü yeniden keşfedildiğini buldum (bu makaleye bağlantı verebileceğimden emin değilim, dosya kopuk görünüyor ) .

Yaklaşımları, en geniş frekans aralığından başladıkları ve en düşük oktav elde edene kadar tekrarlayarak 2'ye kadar alt örnekleme yaptıkları için algoritmik olarak daha verimlidir.

Q-dönüşümlerinin faydaları, örneğin Brown tarafından burada araştırılmıştır . Tek bir FFT kadar etkili olmayabilir, ancak bunu gerektirmeyen yüksek frekanslı bantlarda kalın FFT'yi hesaplamama avantajına sahiptir.

Tüm cevaplar, yorumlar ve bağlantılar için teşekkürler.


Eğer çok bir dalgacık dönüşümü gibi sesleri betimleyen ediyoruz Ne, tarafından onaylanması görünüyor bu . Bunun eski bir yazı olduğunu anlıyorum, ancak gelecekteki okuyucular dalgacıklara da bakmak isteyebilir. Yine de, cevabımda belirttiğim gibi, zaman-frekans belirsizlik ilkesini değiştiremezsiniz, ancak verilerin bilgisi biraz aldatmanıza izin verebilir.
orodbhen

1

Girdilerin "geçmişini" tutar ve bunu DFT'lerinizle çakışmak için kullanırsanız, spektral içeriği ayıklamak için daha fazla bilgi sağlar. Tabii ki, bu sinyalinizin zamanla değişen doğasına bağlıdır. Bir olasılık dağılım fonksiyonuna benzer şekilde olacaktır.

Bu size zaman içinde daha yakın aralıklı DFT'ler verir. Bununla birlikte, yine de her bir DFT'nin doğa yasaları tarafından kısıtlanan zamansal belirsizliğini artıracaktır: zamansal ve spektral davranışın kesin değeri aynı anda belirlenemez.

Bununla birlikte, frekans içeriği pencerede çok fazla değişmiyorsa, iyi olmalıdı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.