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Δ fδ1δ2 örnekleme oranı geçiş genişliği, yani. geçiş bandının sonu ile durdurma bandının başlangıcı arasındaki fark geçiş bandındaki dalgalanma, yani. "Orijinal genliğin ne kadarını değiştirmeyi göze alabilirsiniz?" 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 filtresi≈ 23günlük10[ 110 δ1δ2]fsΔ f=23günlük10[110 ⋅ 10-4⋅ 10- 3]fsfs200=23günlük10[110 ⋅ 10- 7]200=23günlük10[ 110- 6]200=23( log10106)200=23⋅ 6 ⋅ 200= 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ü):
- 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).