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

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, а затем прорежьте так, чтобы вы сохранили нули. Верхняя половина спектра будет совмещена, но на практике интегрированные боковые лепестки могут быть довольно незначительными.
Марк Боргердинг