Как я могу разработать интерполяционные фильтры Найквиста с алгоритмом Паркс-Макклеллан?


17

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

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

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



К сожалению, есть несколько ссылок на литературные источники: Ф. Минцер, «О КИХ-фильтрах с полуполосной, третьей и N-полосной частотами и их конструкции», IEEE Trans. Acoust., Speech & Signal Process., Vol. АССП-30, № 5, pp. 734–738, октябрь 1982 г. Т. Сарамаки и Ю. Неуво. Класс фильтров FIR Найквиста (N-полоса) с нулевой межсимвольной интерференцией, IEEE Trans. Circuits & Syst., Vol. CAS-34, нет. 10, с. 1182–1190, октябрь 1987 г.
Олли Нимитало,

И эта статья, которая кажется очень интересной: X. Чжан, « Проектирование линейно-фазовых FIR-фильтров M-го диапазона », 2014 г., 19-я Международная конференция по цифровой обработке сигналов , Гонконг, 2014 г., стр. 7-11. doi: 10.1109 / ICDSP.2014.6900776
Олли Нимитало

Ответы:


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

Сравнение примеров фильтров


Я собирался предложить то же самое.
Фонон

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.