Comment puis-je concevoir des filtres d'interpolation Nyquist avec l'algorithme Parks-McClellan?

17

Nous pouvons facilement concevoir des filtres d'interpolation qui obéissent à certaines contraintes du domaine fréquentiel en utilisant l' algorithme de Parks-McClellan . Cependant, il n'est pas immédiatement clair comment appliquer les contraintes de domaine temporel; en particulier, je souhaite générer des filtres Nyquist. Donc, si je suréchantillonne d'un facteur de N, je veux que le filtre ait des passages à zéro kNpour, pour un entier non nul k(cela garantit que les échantillons d'entrée de mon interpolateur apparaîtront dans la séquence de sortie).

J'ai vu Harris 1 parler d'une technique pour concevoir des filtres demi-bande, c'est-à-dire le cas spécial où N=2. Existe-t-il une solution générale à cela? (Je sais que nous pouvons facilement concevoir des filtres avec la méthode window, mais cela ne nous donne pas le même contrôle.)

[1] Traitement du signal multidébit pour les systèmes de communication , pp. 208-209

Oliver Charlesworth
la source
Pour N=2voir ma réponse à: Conception du filtre FIR: Fenêtre vs Parks-McClellan et Least-Squares .
Olli Niemitalo
Quelques références bibliographiques qui sont malheureusement payantes: F. Mintzer, «Sur les filtres FIR demi-bande, troisième bande et Nème bande et leur conception», IEEE Trans. Acoust., Speech & Signal Process., Vol. ASSP-30, non. 5, pp. 734–738, octobre 1982. T. Saramaki et Y. Neuvo, «Une classe de filtres FIR Nyquist (bande N) avec zéro interférence intersymbole», IEEE Trans. Circuits & Syst., Vol. CAS-34, non. 10, pp. 1182–1190, oct. 1987.
Olli Niemitalo
Et ce document qui semble très pertinent : X. Zhang, « Design of Mth-band FIR linear phase filters », 2014 19e Conférence internationale sur le traitement numérique du signal , Hong Kong, 2014, pp. 7-11. doi: 10.1109 / ICDSP.2014.6900776
Olli Niemitalo

Réponses:

9

Une méthode de conception, quoique limitée à des puissances de deux, consisterait à commencer par un filtre demi-bande, à insérer des zéros les uns aux autres (crée une réplique spectrale), puis à le convoluer avec un deuxième filtre demi-bande ayant une bande de transition plus large. Répétez le processus jusqu'à ce que vous atteigniez la puissance requise de 2.

Voici un exemple qui crée un filtre passe-bas avec Fc = fs / 8 et zéro croisements tous les 4 échantillons:

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

Comparaison d'exemples de filtres

Mark Borgerding
la source
J'allais suggérer la même chose.
Phonon
5
+1 pour un graphique impressionnant. je vais TOUJOURS +1 des graphiques impressionnants parce qu'ils sont bien meilleurs que longs ... souvent ennuyeux / mauvaises explications.
Trevor Boyd Smith
5

Une méthode pour obtenir les passages à zéro souhaités est de faire une conception hybride.

Commencez avec un filtre à demi-bande Parks-McLellan / Remez à poids égal pour la bande passante et la bande d'arrêt. Puisqu'il s'agit d'un filtre demi-bande , il aura des zéros à des échantillons alternatifs. Vous pouvez ensuite interpoler le domaine temporel par sin (x) / x par zéro-bourrage dans le domaine fréquentiel.

Exemple: création d'un filtre passe-bas fs / 12 avec passages par zéro tous les 6 échantillons.

% 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

Le filtre résultant est proche, mais pas aussi bon que le prototype en termes d'ondulation de bande d'arrêt / bande passante. L'interpolation sin (x) / x introduit une sonnerie de bas niveau. Vous devrez peut-être sur-concevoir légèrement le filtre prototype pour obtenir le niveau d'atténuation requis dans le filtre interpolé.

Mark Borgerding
la source
1
+1: Idée intéressante; Je dois y réfléchir un peu. Mais deux questions me viennent à l'esprit. Premièrement, est-il sûr de dire que nous pouvons traduire nos contraintes de conception de l'équiripple au filtre demi-bande simplement par mise à l'échelle? Deuxièmement, qu'en est-il des valeurs impaires de N ?
Oliver Charlesworth
Les valeurs impaires de N peuvent être gérées en décimant une FIR paire par 2. Par exemple, si vous voulez des zéros tous les 7 échantillons, concevez un sapin avec des zéros tous les 14, puis décimez de manière à conserver les zéros. La moitié supérieure du spectre sera aliasée, mais les lobes latéraux intégrés peuvent être assez négligeables dans la pratique.
Mark Borgerding