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



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


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é.


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.