Bagaimana saya bisa mendesain filter interpolasi Nyquist dengan algoritma Parks-McClellan?


17

Kita dapat dengan mudah mendesain filter interpolasi yang mematuhi batasan domain frekuensi tertentu menggunakan algoritma Parks-McClellan . Namun, tidak segera jelas bagaimana menegakkan batasan waktu-domain; khususnya, saya tertarik untuk menghasilkan filter Nyquist. Jadi jika saya oversampling oleh faktor N, saya ingin filter memiliki zero-crossing kN, untuk integer non-nol k(ini memastikan bahwa sampel input ke interpolator saya akan muncul dalam urutan output).

Saya telah melihat Harris 1 berbicara tentang teknik untuk merancang filter setengah-band, yaitu kasus khusus di mana N=2. Apakah ada solusi umum untuk ini? (Saya tahu bahwa kami dapat dengan mudah mendesain filter dengan metode jendela, tetapi itu tidak memberi kami kontrol yang sama.)

[1] Pemrosesan Sinyal Multirate untuk Sistem Komunikasi , hlm. 208-209



Beberapa referensi literatur yang paywalled, sayangnya: F. Mintzer, "Pada FIR-band, ketiga-band, dan NIR-band filter FIR dan desain mereka," IEEE Trans. Acoust., Proses Bicara & Sinyal., Vol. ASSP-30, no. 5, hlm. 734-738, Oktober 1982. T. Saramaki dan Y. Neuvo, "Kelas FIR Nyquist (N-band) menyaring dengan nol interferensi simbol," IEEE Trans. Sirkuit & Sistem, vol. CAS-34, tidak. 10, hlm. 1182-1190, Oktober 1987.
Olli Niemitalo

Dan makalah ini yang tampaknya sangat langsung: X. Zhang, " Desain filter fase linier FIR Mth-band ," Konferensi Internasional ke-19 2014 tentang Pemrosesan Sinyal Digital , Hong Kong, 2014, hlm. 7-11. doi: 10.1109 / ICDSP.2014.6900776
Olli Niemitalo

Jawaban:


9

Salah satu metode desain, meskipun satu yang terbatas pada kekuatan dua, akan mulai dengan satu filter halfband, masukkan nol satu sama lain (membuat replika spektral), kemudian hubungkan dengan filter halfband kedua yang memiliki band transisi yang lebih luas. Ulangi proses ini sampai Anda mendapatkan kekuatan 2 yang diperlukan.

Berikut adalah contoh yang membuat filter lowpass dengan Fc = fs / 8 dan nol penyilangan setiap 4 sampel:

b0=remez(34,[0 .45 .55 1],[1 1 0 0])';
b1=remez(6,[0 .25 .75 1],[1 1 0 0])';
b0up = zeros(1,2*length(b0)-1);
b0up(1:2:end) = b0;
B0up=freqz(b0up);
b2 = conv(b0up,b1);  % length = 34*2+1 + 6 = 75 coefficients

Perbandingan contoh filter


Saya akan menyarankan hal yang sama.
Phonon

5
+1 untuk grafik yang luar biasa. saya akan SELALU memberi +1 grafik yang luar biasa karena jauh lebih baik daripada panjangnya ... sering membosankan / penjelasan buruk.
Trevor Boyd Smith

5

Salah satu metode untuk mendapatkan zero crossing yang Anda inginkan adalah dengan melakukan desain hybrid.

Mulailah dengan filter setengah-band Parks-McLellan / Remez dengan bobot yang sama untuk passband dan stopband. Karena ini adalah filter setengah pita , maka akan ada nol pada sampel alternatif. Anda kemudian dapat menginterpolasi domain waktu dengan sin (x) / x dengan isian nol di domain frekuensi.

Contoh: membuat filter lowpass fs / 12 dengan nol penyilangan setiap 6 sampel.

% prototype Remez filter 
taps=18; 
b = remez(taps,[0 .4 .6 1],[1 1 0 0])';  
% force halfband condition of zeros at every other sample
b(2:2:end)=0;  b(taps/2+1)=.5; 

% zero pad the time domain to give the Gibbs ripple some deadspace
B=fft(b,4*(taps+1) ); 
% split the frequency domain into two halves, split the Nyquist bin
Blo = [ B(1:length(B)/2) 0.5*B(length(B)/2+1) ]; 
Bhi = [ 0.5*B(length(B)/2+1) B(length(B)/2+2:length(B))  ]; 

% insert padding at pi to increase size 3x
Bpad = [ Blo zeros(1,3*length(B)-length(Blo)-length(Bhi) ) Bhi];  
bint = real( ifft(Bpad) ); % this has zeros every 6 samples

Filter yang dihasilkan dekat, tetapi tidak sebagus prototipe dalam hal stopband / passband ripple. Dosa (x) / x interpolasi memang memperkenalkan beberapa dering tingkat rendah. Anda mungkin perlu mendesain sedikit lebih banyak filter prototipe untuk mendapatkan tingkat redaman yang diperlukan dalam filter yang diinterpolasi.


1
+1: Ide yang menarik; Saya perlu memikirkan ini sedikit. Namun, dua pertanyaan muncul pada saya. Pertama, apakah aman untuk mengatakan bahwa kami dapat menerjemahkan kendala desain equiripple kami ke filter setengah-band hanya dengan penskalaan? Kedua, bagaimana dengan nilai aneh N ?
Oliver Charlesworth

Nilai ganjil N dapat ditangani dengan menipiskan FIR genap dengan 2. mis. Jika Anda ingin nol setiap 7 sampel, rancang sebuah cemara dengan nol setiap 14, lalu musnahkan sedemikian sehingga Anda mempertahankan nol. Setengah bagian atas spektrum akan alias, tetapi sidelob terintegrasi mungkin cukup diabaikan dalam praktek.
Mark Borgerding
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.