Çok dar bir filtreyi nasıl tasarlayabilirim?


15

Hz'de örneklenmiş bir ses sinyalim olduğunu varsayalım ve ~ 60 Hz'nin altındaki her şeyi izole eden düşük geçişli bir filtre tasarlamak istiyorum . Dijital dünyada, bu [ - π ] geçiş bandı ile düşük geçişli bir filtredir4800060. Ayrıca geçiş bandı da makul olmalıdır. Bunun için bir FIR filtresi oluşturmak, uzun vadede hassasiyeti etkileyen birçok musluğa sahip olabilir. Bir IIR filtresi çok ideal değildir, çünkü ses filtrelerde doğrusal olmayan faz tepkisi çeker, bu nedenle sinyal filtrelenmez, sonra ters çevrilmez ve tekrar filtrelenmezse, bu gerçekten bir seçenek değildir.[-π400,π400]

Bir dalgacık dönüşümü, bu seferde düzenli filtrelemeden daha iyi olabilir mi?


Decimate istememek için bir neden var mı?
Lorem Ipsum

Hayır, istediğimi elde ettiğim sürece karar vermek iyidir.
Phonon

1
"Makul" geçiş bandı nedir? Bu, filtrenizin sırasını belirleyecektir. Örneğin, stop bandınız 300 Hz'de başlıyorsa, muhtemelen oldukça iyi durumdasınız demektir. 60.1 Hz gibi bir şeyde yüksek zayıflama istiyorsanız, o zaman uzun olacaktır. Uzun FIR filtreleri mutlaka kötü değil,
Jason R

5
Gerçek bir filtre spesifikasyonuna ihtiyacınız var, aksi takdirde soru anlamsız. Kabul edilebilir geçiş bandı dalgalanmasını, durdurma bandını reddetmeyi, geçiş bandının genişliğini vb. Belirtin
Paul R

Mantıklı. Yapacağım.
Phonon

Yanıtlar:


20

Mühendislik süresini optimize ediyorsanız ve büyük FFT'leri iyi destekleyen bir platformdaysanız (sabit nokta değil), hotpaw2'nin tavsiyelerini alın ve hızlı evrişim kullanın . Saf bir FIR uygulamasından çok daha iyi performans gösterecek ve uygulanması nispeten kolay olacaktır.

Öte yandan, en iyi uygulamayı elde etmek için bunun için biraz zamanınız varsa veya sabit nokta platformundaysanız, çok hızlı bir aşağı filtreleme-çıkarma-çıkarma yapısı kullanmalısınız. Ama her şeyi doğru yapmak biraz daha zordur.

Hem hızlı evrişim hem de çok hızlı filtreleme araçlarının güvenilir ve yüksek düzeyde optimize edilmiş uygulamalarına erişimim var. Hızlı evrişim, çok oranlı yapıya kıyasla eşdeğer sinyal performansı elde etmek için yaklaşık 3 kat daha uzun sürer. Ayrıca, bu bir kayan nokta platformunda bile. Boşluk bir sabit nokta dsp üzerinde önemli ölçüde genişleyecektir.

Genel anlamda:

Aşağı-dönüşüm:

48kHz sinyalinizi 187.5 Hz sinyale dönüştürmek için 8 aşamalı yarım bant, yaklaşık 2 x filtre kullanın. Bu altörneklemenin ilk aşaması çok geniş bir geçiş bandına sahip olabilir, bu da alt 60 Hz aralığına takma adı olmadığı sürece enerjinin takma adına izin verir. Aşamalar ilerledikçe, muslukların sayısının artması gerekir, ancak bunlar giderek daha düşük bir örnekleme oranında uygulanacaktır, bu nedenle her aşamanın toplam maliyeti düşük kalır.

filtreleme:

Sonunda çıkarmak isteyeceğiniz enerjiyi korumak için 60 Hz bw civarında sıkı filtreleme yapın. Sıkı filtrelemeyi düşük hızda yapmanın iki avantajı vardır:

  1. 1Hz geçiş bant genişliği, orijinal frekansa kıyasla düşük hızda dijital frekans açısından 256 kat daha büyüktür. Dolayısıyla filtrenizin her dokunuşu 256 kat daha güçlüdür.
  2. Sinyalin kendisi daha düşük bir hızdadır, bu nedenle filtrenin sadece verileri 1/256 işlemesi gerekir.

Yukarı-dönüşüm:

Esasen, bu, decimation aşamalarının tersidir. 8 enterpolatör aşamasının her biri, ardışık girdi örnekleri arasında geçen numuneyi tahmin ederek hızı iki katına çıkarır. Örnekleme hızı yükseldikçe geçiş bandı genişler.

Çıkar:

Tam oranlı düşük geçişli filtrelenmiş sinyalinizi orijinal sinyalden çıkarın. Tüm grup gecikmelerini doğru şekilde ayarladıysanız, genel yapı dar geçiş bant genişliğine sahip bir yüksekgeçiren filtre olacaktır.


Bu harika bir cevap. Bu yazı hakkında yorumlarınızı alabilir miyim? dsp.stackexchange.com/questions/29655/…
richieqianle

6

Gecikme süresine ve hesaplama performans kısıtlamalarınıza uyan en uzun FFT / IFFT ile örtüşme ekleme / kaydetme evrişim filtresini deneyin. Bu yöntemi daha uzun FFT'lerle kullanırken son derece uzun FIR filtreleri tasarlayabilirsiniz.

Şarkının tamamını veya tüm ses sinyali dosyanızı çok uzun bir FFT + IFFT'de (dcache veya RAM'e uymayan uzun vektörler için özel FFT algoritmaları vardır), herhangi bir şey yapmanız gerekmez. örtüşme / kaydetme işlemiyle çok dar bir geçiş bandı elde edebilirsiniz.


4

Açıkça iki seçenek var: FIR & IIR. Daha önce de belirtildiği gibi FIR, ÇOK uzun (1000'li musluk) dürtü yanıtı gerektirir ve bellek, MIPS ve örtüşme ekleme / kaydetme gecikmesi açısından en verimli seçimdir. Ancak, gecikme gerçek bir sorun olabilir. Bunu bir ev sineması subwoofer için yüksek bir geçiş olarak kullanmak istiyorsanız, gecikme o kadar yüksek olacak ki videoyla dudak senkronizasyonu kaybedeceksiniz.

IIR, birkaç büyüklükte daha az pahalıdır ve bu nedenle sık kullanılır. Gerçekten düz olmayan bir faz tepkisi vardır, ancak çoğu durumda bu bir problem değildir veya çözülebilir. Örneğin, bir bas kutusundaki sürücüleri korumak için yüksek geçişli bir filtreye ihtiyacınız varsa, genel sistem faz yanıtına sürücü, kasa ve odadaki akustik hakim olduğundan faz yanıtı çok önemli değildir. Filtre burada sadece küçük bir rol oynamaktadır. Çoğu durumda, mutlak faz değil, "göreceli" fazı korumanız gerekir. Diyelim ki highpass'ı A sinyaline uygulamak istiyorsunuz, ancak B sinyaline değil, A ve B'nin bağıl fazının aynı kalması için B sinyaline uygun bir allpass koyabilirsiniz. Bu yaklaşımın genel gecikme ve grup gecikmesi hala FIR yönteminden çok daha azdı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.