Come posso progettare i filtri di interpolazione Nyquist con l'algoritmo Parks-McClellan?


17

Possiamo facilmente progettare filtri di interpolazione che obbediscono a determinati vincoli del dominio di frequenza usando l' algoritmo Parks-McClellan . Tuttavia, non è immediatamente chiaro come applicare i vincoli nel dominio del tempo; in particolare, sono interessato a generare filtri Nyquist. Quindi, se sto sovracampionando per un fattore di N, voglio che il filtro abbia zero-incroci kN, per intero diverso da zero k(questo assicura che i campioni di input al mio interpolatore appariranno nella sequenza di output).

Ho visto Harris 1 parlare di una tecnica per la progettazione di filtri a mezza banda, ovvero il caso speciale in cui N=2. C'è una soluzione generale per questo? (So ​​che possiamo facilmente progettare filtri con il metodo window, ma questo non ci dà lo stesso controllo.)

[1] Elaborazione del segnale multirate per sistemi di comunicazione , pagg. 208-209



Un paio di riferimenti letterari a pagamento, purtroppo: F. Mintzer, "Sui filtri FIR a metà banda, terza banda e Nth band e il loro design", IEEE Trans. Acustica., Processo vocale e di segnale., Vol. ASSP-30, n. 5, pagg. 734–738, ottobre 1982. T. Saramaki e Y. Neuvo, "Una classe di filtri FIR Nyquist (N-band) con interferenza zero nell'interimbolismo", IEEE Trans. Circuits & Syst., Vol. CAS-34, n. 10, pp. 1182-1190, ottobre 1987.
Olli Niemitalo

E questo articolo che sembra molto al punto: X. Zhang, " Progettazione di filtri di fase lineare FIR di fascia M ", 19ª Conferenza internazionale sull'elaborazione del segnale digitale 2014, Hong Kong, 2014, pp. 7-11. doi: 10.1109 / ICDSP.2014.6900776
Olli Niemitalo

Risposte:


9

Un metodo di progettazione, sebbene limitato a una potenza di due, sarebbe quello di iniziare con un filtro a mezza banda, inserire gli zeri l'uno con l'altro (crea una replica spettrale), quindi contorcerlo con un secondo filtro a mezza banda con una banda di transizione più ampia. Ripeti il ​​processo fino ad arrivare alla potenza richiesta di 2.

Ecco un esempio che crea un filtro passa-basso con Fc = fs / 8 e zero incroci ogni 4 campioni:

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

Confronto di filtri di esempio


Stavo per suggerire quella stessa cosa.
Phonon,

5
+1 per un fantastico grafico. Farò SEMPRE +1 grafici fantastici perché sono molto meglio che lunghi ... spesso spiegazioni noiose / cattive.
Trevor Boyd Smith,

5

Un metodo per ottenere i passaggi per lo zero desiderati è quello di realizzare un progetto ibrido.

Inizia con un filtro a metà banda Parks-McLellan / Remez con lo stesso peso di banda passante e banda di arresto. Dal momento che è un filtro a mezza banda , avrà zeri a campioni alternativi. È quindi possibile interpolare il dominio del tempo per sin (x) / x per zero-stuffing nel dominio della frequenza.

Esempio: creazione di un filtro passa-basso fs / 12 con zero incroci ogni 6 campioni.

% 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

Il filtro risultante è vicino, ma non altrettanto buono, al prototipo in termini di ondulazione stopband / passband. L'interpolazione sin (x) / x introduce alcuni squilli di basso livello. Potrebbe essere necessario sovrascrivere leggermente il filtro prototipo per ottenere il livello di attenuazione richiesto nel filtro interpolato.


1
+1: idea interessante; Devo pensarci un po '. Tuttavia, mi vengono in mente due domande. Primo, è sicuro affermare che possiamo tradurre i nostri vincoli di progettazione equiripple nel filtro a mezza banda semplicemente ridimensionando? Secondo, che dire dei valori dispari di N ?
Oliver Charlesworth,

I valori dispari di N possono essere gestiti decimando un FIR pari di 2. ad es. Se si desidera zeri ogni 7 campioni, progettare un abete con zeri ogni 14, quindi decimare in modo da conservare gli zeri. La metà superiore dello spettro sarà aliasata, ma i laterali integrati potrebbero essere praticamente trascurabili nella pratica.
Mark Borgerding,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.