Ses sinyalinde logaritmik fourier dönüşümü (LFT)


9

Müzikleri olabildiğince kesin bir şekilde analiz etmeye çalışıyorum. Tabii ki FFT denedim ama bazı problemlerim var.

Düşük frekansların insanın işitmesinden çok düşük çözünürlüğe sahip olduğunu buldum. Bu sorunu çözmek için çok uzun süre FFT denedim, ancak 44100Hz örnek hızında 8192 örnek / s ile analiz ederken bile (zaman çözünürlüğü olmaması anlamına gelir), düşük frekanslarda yeterli çözünürlük elde etmedim.

Birkaç çözüm buldum.

İlk olarak, FFT kutularında ikinci dereceden enterpolasyon.
Ama mükemmel bir yol gibi görünmüyor. Bu yöntemin sorunları şunlardır:

1. 'Frek bölmeleri arasındaki frekansları belirlemek istersem, enterpolasyon yapmak için hangi üç bölmeyi seçmeliyim?'
2. 'Bunu yapsam bile, sonuç hakkında gerçek bir ek bilgi yok. İnterpolasyonların bir tür zor yöntem olduğunu biliyorum. '

İkincisi, her frekans bölmesini istenen sıklıkta çıkarmak, böylece bölmeleri logaritmik olarak çıkarabilirim.
Ancak kritik bir hesaplama maliyeti problemi var: (belki de üzerinde) N ^ 2.

Üçüncüsü, LFT (Logaritmik Fourier Dönüşümü).
Bu, logaritmik aralıklı örnekler gerektirir ve inanılmaz derecede hızlı bir hızda tam olarak aradığım şeyi verir; /programming/1120422/is-there-an-fft-that-uses-a-logarithmic-division-of-frequency

Ama bu algoritma hakkında hiçbir fikrim yok. Makaleyi anlamaya ve uygulamaya çalıştım, ancak İngilizce ve matematiksel becerilerimin eksikliği nedeniyle imkansızdı.

Bu yüzden, LFT'nin uygulanması konusunda yardıma ihtiyacım var.

Yanıtlar:


8

En basit ve en pragmatik çözüm, gerekli çözünürlüğü en düşük frekansta elde ettiğiniz yeterince büyük boyutta normal bir FFT kullanmaktır. Örneğin, en düşük ilgi frekansında 1 Hz çözünürlük istiyorsanız, 1 saniyelik bir FFT penceresine ihtiyacınız olacaktır, yani FFT boyutunun örnek hızına eşit olması gerekir, örn. 44100.

Hatta eğer Not olabilir sen kazanabilir tüm kolaylık (toplam çıkış kutularına olmamasından olurdu - o zaman logaritmik FFT uygulamak hala fiziği (bilgi kuramı) yasalarına tabi olacaktır ve yine benzer bir uzunluk örnek penceresini gerekir ) performans pahasına.


Bu garip. Teorik olarak daha fazla veri olmadığını biliyorum. Büyük boyutlu bir FFT kullanırsam, müzik aletinin çok hızlı başlangıçlarını analiz edemediği doğrudur. Ayrıca, düşük frekansta daha yüksek çözünürlük elde edemediğim de doğrudur. Ama insan işitme sistemine ne dersiniz? Bu sistem hem zaman hem de frekans açısından nasıl daha yüksek çözünürlük elde ediyor?

3
Belki de birbirini takip eden her oktavı 2 katına indirdiğiniz hiyerarşik bir yaklaşımı düşünmelisiniz, böylece daha yüksek frekanslarda kısa zaman pencerelerini ve daha düşük frekanslarda daha uzun zaman pencerelerini kullanabilirsiniz? Bu, bant genişliğinin frekansla arttığı işitsel bir filtre bankasına biraz benzer olacaktır.
Paul R

Harika bir yaklaşım. Düşük frekanslarda uzun süre goertzel, yüksek frekanslarda kısa süre goertzel? Mantıklı. Ancak büyük bir hesaplama maliyeti gerektirecektir.

Daha karmaşık olmasına rağmen, büyük bir FFT yapmaktan muhtemelen daha verimlidir. Örneğin, 4 oktavlı bir hiyerarşi için, x2 aşağı örnekleme için 4 x 2048 nokta FFT ve 3 düşük geçiş filtresi isteyebilirsiniz. En düşük FFT'nin çözünürlüğü, tam örnekleme hızında tek bir 16384 noktalı FFT kadar iyi olacaktır, ancak FFT O (n log n) olduğu için toplam hesaplama maliyeti çok daha düşük olacaktır.
Paul R

aha, FFT 2048, aşağı örnek x2, FFT 2048, aşağı örnek x2 .... 16384 FFT'den daha düşük maliyetle hem zaman hem de frekans çözünürlüğüne sahibim. Harika. Ve şimdi başka bir çözüm daha var: 16384 numunede, her seferinde 32 ile goertzel. Böylece, biriktirerek, düşük ve yüksek frekansları daha az maliyetle çıkarabilirim. Çok teşekkürler. :)

0

Gerçekleştirmek istediğiniz analiz her bir bölmedeki sinyallerin frekansını gerektiriyorsa, bunu başarmak için Short Time Fourier Dönüşümü'nü kullanabilirsiniz.

FFT'nin her bir bölmesi, gerçek ve hayali bileşeni temsil eden karmaşık bir sayı verir - veya biraz manipülasyon fazı ve büyüklüğünden sonra.

Frekans = dPhi / dt, (Phi == faz) olarak, ardışık STFT spektrum çiftlerinden karşılık gelen bölmeleri alarak frekansı hesaplayabilirsiniz.

DSP Dimension'ın bu süreç hakkında iyi bir makalesi var.


Görünüşe göre daha karmaşık bir problem üzerinde duruyorum. FFT kullanabilirim, ancak ses sinyali analizinde bu uygun değil.

3
Short Time Fourier Dönüşümünün "sabit Q" versiyonuna bakın. STFT'nin bu düzenlemesi, farklı frekans aralıkları için gereksinimleri karşılamak üzere logaritmik olarak ayarlanan frekans çözünürlüğü sağlar.
user2718

Bir bakacağım. Ben sadece fft sonucu uygulanan basit bir filtre-banka dönüşüm operasyonu olduğunu düşündüm.
Laie
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.