Як я можу створити інтерполяційні фільтри Nyquist за алгоритмом Паркс-МакКлеллан?


17

Ми можемо легко створити інтерполяційні фільтри, які підкоряються певним обмеженням частотної області за допомогою алгоритму Паркс-МакКлеллан . Однак не відразу зрозуміло, як застосувати обмеження часової області; зокрема, мені цікаво генерувати фільтри Nyquist. Тож якщо я пересилюю на коефіцієнт N, я хочу, щоб фільтр мав нульові перетини в kNдля ненульового цілого числа k(це гарантує, що вхідні зразки до мого інтерполятора з'являться у вихідній послідовності).

Я бачив, як Гарріс 1 говорив про техніку проектування напівдіапазонних фільтрів, тобто про особливий випадок, де N=2. Чи є для цього загальне рішення? (Я знаю, що ми можемо легко створити фільтри методом вікон, але це не дає нам однакового контролю.)

[1] Багатостороння обробка сигналів для систем зв'язку , стор. 208-209



На жаль, декілька посилань на літературу, які платять, на жаль: Ф. Мінцер, "Про напівдіапазонні, третьосмугові та N-діапазонні фільтри FIR та їх дизайн", IEEE Trans. Acoust., Speech & Signal Process., Vol. ASSP-30, ні. 5, с. 734–738, жовтень 1982 р. Т. Сарамакі та Ю. Неуво, „Клас фільтрів FIR Nyquist (N-смуга) з нульовими міжсимвольними перешкодами”, IEEE Trans. Circuits & Syst., Vol. КАС-34, вип. 10, с. 1182–1190, жовтень 1987 р.
Оллі Ніємітало

І цей документ, який здається дуже суттєвим: X. Чжан, " Дизайн лінійнофазних фільтрів MIR-діапазону FIR ", 19-а міжнародна конференція з цифрової обробки сигналів , Гонконг, 2014, стор. 7-11. doi: 10.1109 / ICDSP.2014.6900776
Olli Niemitalo

Відповіді:


9

Один із способів проектування, хоч і той, який обмежений потужностями двох, полягав би в тому, щоб почати з одного напівдіапазонного фільтра, вставляти нулі один на одного (створює спектральну репліку), а потім обертати його другим напівдіапазонним фільтром, що має більш широку перехідну смугу. Повторіть процес, поки не досягнете необхідної потужності 2.

Ось приклад, який створює фільтр низьких частот з Fc = fs / 8 і нульовим перетином кожні 4 зразки:

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

Порівняння прикладних фільтрів


Я збирався запропонувати те саме.
Phonon

5
+1 для дивовижного графіка. Я буду ВІДПОЧИТИ +1 дивовижні графіки, тому що вони набагато кращі, ніж довгі ... часто нудні / погані пояснення.
Тревор Бойд Сміт

5

Один із способів отримати бажаний нульовий перехід - це зробити гібридну конструкцію.

Почніть з напівдіапазонного фільтра Паркс-Маклаллан / Ремез з рівним вагою для пропускної здатності та упору. Оскільки це напівсмуговий фільтр , він матиме нулі на альтернативних зразках. Потім можна інтерполювати часову область за допомогою sin (x) / x шляхом нульового заповнення в частотній області.

Приклад: створення фільтра низької частоти fs / 12 з нульовим перетином кожні 6 зразків.

% 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

Отриманий фільтр є близьким до прототипу, але не настільки хорошим, як у відношенні пульсації зупинки / пропускної смуги. Інтерполяція sin (x) / x дійсно вводить дзвінок низького рівня. Вам може знадобитися трохи переробити прототип фільтра, щоб отримати необхідний рівень загасання в інтерпольованому фільтрі.


1
+1: цікава ідея; Мені потрібно трохи подумати над цим. Однак у мене виникають два питання. По-перше, чи можна впевнено сказати, що ми можемо перевести наші обмежувальні конструкції на напівдіапазонний фільтр просто шляхом масштабування? По-друге, як щодо непарних значень N ?
Олівер Чарльворт

Непарні значення N можна обробити, зменшивши парний FIR на 2. Наприклад, якщо ви хочете нулі кожні 7 проб, спроектуйте ялицю з нулями кожні 14, а потім зменшіть так, щоб ви зберегли нулі. Верхня половина спектру буде відстежена, але інтегровані бічні кульки можуть бути незначними на практиці.
Марк Боргердінг
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.