Como criar filtros de interpolação Nyquist com o algoritmo Parks-McClellan?

17

Podemos projetar facilmente filtros de interpolação que obedecem a certas restrições no domínio da frequência usando o algoritmo Parks-McClellan . No entanto, não está claro imediatamente como impor restrições no domínio do tempo; em particular, estou interessado em gerar filtros Nyquist. Portanto, se estou superamostrando por um fator de N, quero que o filtro tenha cruzamentos de zero em kN, para um número inteiro diferente de zero k(isso garante que as amostras de entrada para meu interpolador apareçam na sequência de saída).

Eu vi Harris 1 falar sobre uma técnica para projetar filtros de meia banda, ou seja, o caso especial em que N=2. Existe uma solução geral para isso? (Eu sei que podemos projetar filtros facilmente com o método window, mas isso não nos dá o mesmo controle.)

[1] Processamento de sinais multirados para sistemas de comunicação , pp. 208-209

Oliver Charlesworth
fonte
Para N=2ver minha resposta para: Design do filtro FIR: Window vs Parks-McClellan e Least-Squares .
Olli Niemitalo
Infelizmente, algumas referências de literatura pagas a parede: F. Mintzer, “Sobre filtros FIR de meia banda, terceira e nona banda e seu design”, IEEE Trans. Acoust., Speech & Sign Process., Vol. ASSP-30, n. 5, pp. 734-738, outubro de 1982. T. Saramaki e Y. Neuvo, "Uma classe de filtros FIR Nyquist (banda Nth) com interferência intersimbólica zero", IEEE Trans. Circuits & Syst., Vol. CAS-34, n. 10, pp. 1182–1190, outubro de 1987.
Olli Niemitalo
E este artigo parece muito direto ao ponto: X. Zhang, " Projeto de filtros de fase linear FIR de banda M ", 19ª Conferência Internacional de 2014 sobre Processamento Digital de Sinais , Hong Kong, 2014, pp. 7-11. doi: 10.1109 / ICDSP.2014.6900776
Olli Niemitalo

Respostas:

9

Um método de design, embora limitado a potências de dois, seria começar com um filtro de meia banda, inserir zeros um no outro (criar uma réplica espectral) e depois envolvê-lo com um segundo filtro de meia banda com uma banda de transição mais ampla. Repita o processo até atingir a potência necessária de 2.

Aqui está um exemplo que cria um filtro passa-baixo com Fc = fs / 8 e zero cruzamentos a cada 4 amostras:

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

Comparação de filtros de exemplo

Mark Borgerding
fonte
Eu ia sugerir a mesma coisa.
Phonon
5
+1 para um gráfico impressionante. SEMPRE vou marcar com +1 gráficos impressionantes porque eles são muito melhores do que longos ... muitas vezes chatas / explicações ruins.
Trevor Boyd Smith
5

Um método para obter as passagens de zero desejadas é fazer um design híbrido.

Comece com um filtro de meia banda Parks-McLellan / Remez com o mesmo peso da banda passante e da banda parada. Por ser um filtro de meia banda , ele terá zeros em amostras alternativas. Você pode interpolar o domínio do tempo com sin (x) / x com zero-stuffing no domínio da frequência.

Exemplo: criando um filtro passa baixo fs / 12 com cruzamentos zero a cada 6 amostras.

% 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

O filtro resultante é próximo, mas não tão bom quanto, do protótipo em termos de ondulação de banda de parada / banda de passagem. A interpolação sin (x) / x introduz algum toque de baixo nível. Pode ser necessário projetar um pouco o filtro do protótipo para obter o nível de atenuação necessário no filtro interpolado.

Mark Borgerding
fonte
1
+1: ideia interessante; Eu preciso pensar um pouco sobre isso. Duas perguntas me ocorrem, no entanto. Primeiro, é seguro dizer que podemos traduzir nossas restrições de design de dois pares para o filtro de meia banda simplesmente escalando? Segundo, e os valores ímpares de N ?
Oliver Charlesworth
Os valores ímpares de N podem ser manipulados dizimando um FIR par por 2. Por exemplo, se você deseja zeros a cada 7 amostras, projete um abeto com zeros a cada 14 e depois dizime de modo a reter os zeros. A metade superior do espectro terá um alias, mas os lóbulos laterais integrados podem ser bastante insignificantes na prática.
precisa saber é o seguinte