FIR filtresinin kaç musluğa ihtiyacı vardır?


20

Alçak geçiren bir filtre uygulamak için bir dizi FIR filtresi tasarlamak istiyorum. Ayrıca filtre aracılığıyla sinyalin gecikme süresini azaltmaya çalışıyorum, bu yüzden kullanabileceğim minimum musluk sayısının ne olabileceğini merak ediyorum.

Daha fazla musluğun frekansın daha iyi kesilmesine ve daha iyi durdurma bandı reddine vb. . Ancak ilgilendiğim şey daha temel - eğer demek bu, düşük frekans sinyallerini zayıflatmak için en az 100 dokunmaya ihtiyacım olduğu anlamına mı geliyor? Yoksa daha az dokunmayla kaçabilir miyim ve eğer varsa teorik bir alt sınır var mı?fs100

Yanıtlar:


24

Bellanger'ın klasik Dijital Sinyal İşleme - Teori ve Uygulama'ya atıfta bulunulması gereken nokta, kesme frekansınızın nerede olduğu değil, ne kadar zayıflamaya ihtiyacınız olduğu, sinyalde ne kadar dalgalanma olmasını tolere edebileceğiniz ve en önemlisi nasıl geçişinizi geçiş bandından daralmaya (geçiş genişliği) daraltmanız gerekir.

Doğrusal faz filtresi istediğinizi varsayıyorum (minimum gecikmeyi belirtmenize rağmen, daha sonra sinyalinizle ne yapacağınızı iyi bilmiyorsanız, minimum faz filtresinin iyi bir fikir olduğunu düşünmüyorum) . Bu durumda, filtre sırası (musluk sayısıdır)

N-23günlük10[110δ1δ2]fsΔf

ile

fs örnekleme oranıΔf geçiş genişliği, yani. geçiş bandının sonu ile durdurma bandının başlangıcı arasındaki farkδ1 geçiş bandındaki dalgalanma, yani. "Orijinal genliğin ne kadarını değiştirmeyi göze alabilirsiniz?"δ2 durdurma bandındaki baskılama.

Hadi bazı rakamları girelim! İçin bir kesme frekansı belirttinizfs100 , bu yüzden devam edeceğim ve geçiş genişliğinizin yarısından fazla olmayacağını iddia edeceğim, bu yüzden .Δf=fs200

SDR / RF teknolojisinden gelen 60 dB bastırma tipik olarak tamamen yeterlidir - çılgın maliyetler olmadan donanım, istenmeyen sinyalleri girişinizden uzak tutmak için daha iyi olmayacaktır , bu yüzden meh, CPU'yu daha iyi fantastik bir filtreye sahip olarak harcamayız donanımınızın yapabileceğinden daha fazla. Bu nedenle, .δ2=-60 dB=10-3

Geçiş bandında% 0.1'lik bir genlik varyasyonu ile yaşayabileceğinizi varsayalım (daha fazla ile yaşayabiliyorsanız, baskılama gereksinimini daha az katı hale getirmeyi düşünün). Bu .δ1=10-4

Yani, bunu şuna takın:

N-Tommy'nin filtresi23günlük10[110δ1δ2]fsΔf=23günlük10[11010-410-3]fsfs200=23günlük10[11010-7]200=23günlük10[110-6]200=23(günlük10106)200=236200=800 .

200 dokunuşunuzla çok uzaktasınız, IFF Seveceğini farz gibi filtrenizde son derece dar bir geçiş bandı kullanın.

Not Bu etmediğini var bir sorun olarak - her şeyden önce, bir 800-musluklar filtre olduğunu korkutucu, ama açıkçası, sadece ilk bakışta:

  • Bu cevabı StackOverflow'da test ettiğim gibi : Birisinin CPU için optimize edilmiş FIR uygulamasını kullanıyorsanız CPU'nun günümüzde hızlı olması. Örneğin, GNU Radio'nun FFT-FIR uygulamasını tam olarak yukarıdaki filtre spesifikasyonu ana hatlarıyla kullandım. Saniyede 141 milyon örnek performansım var - bu sizin için yeterli olabilir veya olmayabilir. İşte soruya özel test durumumuz (üretmem birkaç saniye sürdü):GNU Radyo tabanlı FFT FIR filtrelemesonuç sonuçları: rate_avg = 1.40982e + 08
  • Decimation: Giriş bant genişliğinin sadece bir kısmını koruyacaksanız, filtrenizin çıkışı büyük ölçüde fazla örneklenir. Bir imhasını Tanıtımı filtre seni her çıkış örneğini vermediğini vasıtası ama her sen takma geleni sinyalini ortadan kaldırılması ediyoruz beri yapabilirsiniz normalde çok ve aliasing sürü yol açacak, ama - sadece bir tanesi inci Savely bunu. Akıllı filtre uygulamaları (çok fazlı desimatörler) bu şekilde hesaplama çabalarını M ile azaltabilir. Sizin durumunuzda, kolayca tahmin edebilirsiniz ve daha sonra bilgisayarınızın sadece hesaplaması gerekirMMM=50120050=24girdi örneği başına çarpma / birikme - çok daha kolay. GNU Radyosu'ndaki filtreler genellikle bu özelliğe sahiptir. Ve bu şekilde, FFT FIR'dan bile (bu bir çok fazlı decimator uygulamasına çok iyi borç vermez), performansta 2 faktörü daha sıkıştırabilirim. Daha fazlasını yapamam. Bu benim sistemime göre RAM bant genişliğine oldukça yakın. İçin
  • Gecikme: Umrumda değil. Gerçekten, yapma, gerekmedikçe. Bunu tipik ses örnekleme hızlarıyla mı yapıyorsunuz? Unutmayın,96kSs«gülünç141HANIMs yukarıda. Dolayısıyla filtre çıkışını hesaplamak için harcanan zaman sadece MS / s canlı sinyal akışı için uygun olacaktır. Çevrimdışı verileri olan DSP için: dengelemek için filtrenize paralel olarak sahip olduğunuz sinyale bir gecikme ekleyin. (Filtreniz doğrusal fazdaysa, gecikme filtre uzunluğunun yarısı olacaktır.) Bu, FIR filtresinin donanım uygulamasında alakalı olabilir.
  • Donanım uygulaması: Belki de PC'nizin veya gömülü aygıtınızın CPU ve işletim sistemi gerçekten gecikme kısıtlamalarınızı yerine getirmenize izin vermez ve bu nedenle FPGA tarafından uygulanan FIR'ları araştırıyorsunuzdur. Fark edeceğiniz ilk şey, donanım için farklı tasarım paradigması var - "Her şeyi bastırıyorum ama1100benim giriş hızımın "filtresinin Donanımda ele alacağınız sabit nokta numaraları için büyük bir bit genişliğine ihtiyacı vardır (CPU'daki kayan nokta numaralarının aksine). Bu nedenle, bu filtreyi genellikle birden çok Başka bir neden, her basamaklı "adım" ile çarpanlarınızın (genellikle "DSP dilimleri") daha düşük bir hızda çalışmasına izin verebilmeniz ve böylece bunları (DSP dilimleri sayısı) Diğer bir neden, özellikle yarım bant filtrelerin, yani giriş bandının yarısını bastıran ve giriş hızının yarısını sağlayan alçakgeçlerin donanımda çok verimli bir şekilde uygulanabilmesidir (yarıya sahip oldukları için) musluklar sıfırdır, CPU / SIMD uygulamasında kullanımı zor bir şeydir).

3
DSP Gölü 1990'lı yılların ortalarından başlarına gerçek zamanlı olarak 256.000 musluk FIR filtresi gerçekleştiriyordu. 1200 musluk? Phfffft! ;-)
Peter K.

2
@PeterK. İşte ruh budur! Bu 256kT FIR'a derin saygı - ürettikleri sayısal doğruluk, tasarımın büyüklüğü kadar nefes kesici olmalı. Onlardan teknolojik olarak zevk almak için çok genç olmak, 90'lı yılların başlarında ilginç bir zaman olmalı. O günlerde DFT IC'lerini geri alan bir mühendisle bir süre konuştum; Uygulamaya özgü DSP ASIC'lere duyulan ihtiyaç, insanlar, sonuçta elde edilen veri akışlarını gerçek anlamda işlemek için bilgisayar platformlarıyla DSP-bilge olanın mümkün olduğunu fark ettikçe yüksek görünüyordu, ancak (bugünün aksine) "çok amaçlı" hızlandırıcı yok.
Marcus Müller

@PeterK., Evet ama onlar aussies her zaman bacağımızı çekiyor.
robert bristow-johnson

@ robertbristow-johnson oy matey, burada neler içeriden bir şaka oluyor: D?
Marcus Müller

2
@ MarcusMüller, o zamana kadar ASIC'lerin popülaritesinin artmasına rağmen ortaya çıktı (ve sanırım bunun nedeni ASIC spesifikasyonu / tasarımcısı olan herkes artık sadece FPGA'ları kullanıyor) erken "çok amaçlı" DSP'ler vardı 90'lar. LakeDSP olayı 6 DSP56001 olarak yapılmıştır.
robert bristow-johnson

14

Hızlı ve çok pratik bir tahmin için, fred harris'in başparmak kuralını seviyorum:

N-tbirps=birtten22*BT

nerede:

Atten dB cinsinden istenen zayıflamadır,

BTBT=FstÖp-FpbirssFs

FstÖpFpbirss

Fs Hz cinsinden örnekleme frekansıdır.

Bu, 0,1 dB'lik bir geçiş bandı dalgalanmasına sahip doğrusal bir faz filtresi için alacağınız şeye çok yakın ortaya çıkar. Bu başparmak kuralını sık sık, gerekli musluk sayısı hakkında ilk kesme fikrini elde etmek için kullanıyorum ve daha sonra filtre tasarım sürecinde yineleme yoluyla değiştiriyorum.

Ayrıca şunu da belirtmek gerekir: bu genel kural, musluk sayısını gerçekten neyin harekete geçirdiğine dair harika bir fikir verir: durdurma bandının zayıflaması ve geçiş bandının dikliği (ve geçiş bandı dalgalanması, ancak tipik olarak - en azından benim için tasarladığım filtreler için kablosuz iletişim uygulamaları - zayıflama gereksinimi dalgalanma üzerinde baskın olacaktır). Bu nedenle Fs / 100'de bir kesme belirtme konusundaki sorunuz, bir durdurma bandına geçişin ne kadar hızlı olması gerektiğini kaçırıyor.

FsFpbirssFstÖp

N-tbirps=6022*2/100=137

Bu sayılarla oynamak, yaklaşma yaklaşımlarını kullanarak azaltma işleminin önemini de gösterebilir.


7

Kabul edilen cevaba ek olarak, birkaç ek referans. Olabilecek formülleri yazmayacağım. Bu formüller çoğunlukla başlangıç ​​kuralı veya başlamak için yaklaşık değerler verir. Gerçek tasarımınız için bu sayılarla uğraşabilirsiniz.

Bellanger'in tasarımının kökenlerinden biri: Dijital filtrelerdeki hesaplama karmaşıklığı üzerine, 1981, Proc. EUR. Konf. Devre Teorisi Tasarımı, M. Bellanger. Elde etmek oldukça zordur, ancak yapılabilir . İlginç bir şekilde, sonlu-aritmetik uygulamada dikkate alınması gereken katsayı başına bit sayısını değerlendirmek için formüller belirtir. Fransızcada daha erişilebilir bir versiyon: 1982 tarihli değerlendirme de la complexité des filtres numériques .

Diğer birkaç formül Sonlu dürtü yanıt filtresi tasarımında toplanmıştır , Dijital sinyal işleme el kitabı, 1993, T. Samamaki.

Daha yakın zamanlarda, optimum FIR dijital filtreler için minimum filtre uzunluğunun doğru tahminini okuyabilirsiniz , 2000, K. Ichige et al.

Son olarak, l0-norm optimizasyonu kullanarak minimum filtre siparişine sahip FIR filtrelerinin verimli tasarımı , 2014 siparişin kademeli olarak azaltıldığı bir tasarım olduğunu iddia ediyor.


4

küçültmek maksimum(|'H(ω)|)hepsi için ω stop bandında
tabi1δ|'H(ω)|δ hepsi için ω geçiş bandında

Düşünebileceğim temel pratik problemler, optimizasyon yaparken kullanılan frekans örneklerinin sayısıdır, çünkü frekanslar arası örnek davranışı istenmeyen etkilere neden olabilir. Uyumun ne kadar iyi olabileceği elbette muslukların sayısına bağlıdır. Sanırım minimum musluk sayısının problemin mümkün olmadığı zaman olduğunu söyleyebilirdiniz. Yani bir çözüm fizibilite problemini çözmek olacaktı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.