Wie kann ich Nyquist-Interpolationsfilter mit dem Parks-McClellan-Algorithmus entwerfen?


17

Mithilfe des Parks-McClellan- Algorithmus können Interpolationsfilter entworfen werden, die bestimmten Frequenzbereichsbeschränkungen entsprechen . Es ist jedoch nicht sofort klar, wie Zeitbereichsbeschränkungen durchgesetzt werden sollen. Insbesondere interessiere ich mich für die Erzeugung von Nyquist-Filtern. Wenn ich also um einen Faktor von überabtaste N, möchte ich, dass der Filter Nulldurchgänge kNfür eine Ganzzahl ungleich Null aufweist k(dies stellt sicher, dass die Eingangsabtastwerte für meinen Interpolator in der Ausgangssequenz erscheinen).

Ich habe gesehen, wie Harris 1 über eine Technik zum Entwerfen von Halbbandfiltern sprach, dh den speziellen Fall, in dem N=2. Gibt es eine allgemeine Lösung dafür? (Ich weiß, dass wir Filter leicht mit der Fenstermethode entwerfen können, aber das gibt uns nicht die gleiche Kontrolle.)

[1] Multirate Signal Processing for Communication Systems , S. 208-209



Ein paar Literaturhinweise, die leider zahlungskräftig sind: F. Mintzer, „Über Halbband-, Drittband- und N-Band-FIR-Filter und deren Design“, IEEE Trans. Acoust., Speech & Signal Process. ASSP-30, No. 5, S. 734–738, Okt. 1982. T. Saramaki und Y. Neuvo, „Eine Klasse von FIR-Nyquist-Filtern (N-Band) mit Null-Intersymbol-Interferenz“, IEEE Trans. Circuits & Syst., Vol. CAS-34, Nr. 10, S. 1182–1190, Oktober 1987.
Olli Niemitalo

Und dieses Papier, das sehr auf den Punkt zu kommen scheint: X. Zhang, " Entwurf von FIR-Linearphasenfiltern im Mth-Band ", 19. Internationale Konferenz für digitale Signalverarbeitung 2014, Hongkong, S. 7-11. Doi: 10.1109 / ICDSP.2014.6900776
Olli Niemitalo

Antworten:


9

Eine Entwurfsmethode, auch wenn eine auf Zweierpotenzen beschränkt ist, würde darin bestehen, mit einem Halbbandfilter zu beginnen, Nullen an jeder anderen einzufügen (eine spektrale Nachbildung zu erstellen) und sie dann mit einem zweiten Halbbandfilter mit einem breiteren Übergangsband zu falten. Wiederholen Sie den Vorgang, bis Sie die erforderliche Potenz von 2 erreicht haben.

Im folgenden Beispiel wird ein Tiefpassfilter mit Fc = fs / 8 und Nulldurchgängen nach jeweils 4 Abtastwerten erstellt:

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

Vergleich von Beispielfiltern


Ich wollte dasselbe vorschlagen.
Phonon

5
+1 für tolle Grafik. Ich werde IMMER + 1 tolle Grafiken erstellen, weil sie viel besser sind als lange ... oft langweilige / schlechte Erklärungen.
Trevor Boyd Smith

5

Eine Methode, um Ihre gewünschten Nulldurchgänge zu erhalten, ist ein Hybrid-Design.

Beginnen Sie mit einem Parks-McLellan / Remez-Halbbandfilter, dessen Gewicht dem Durchlass- und dem Sperrband entspricht. Da es sich um ein Halbbandfilter handelt, weist es bei abwechselnden Abtastwerten Nullen auf. Sie können dann den Zeitbereich durch sin (x) / x interpolieren, indem Sie ihn im Frequenzbereich mit Nullen füllen.

Beispiel: Erstellen eines fs / 12-Tiefpassfilters mit Nulldurchgängen alle 6 Samples.

% 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

Das resultierende Filter ist dem Prototyp in Bezug auf Sperr- / Durchlassbandwelligkeit nahe, aber nicht ganz so gut. Die sin (x) / x-Interpolation führt zu einem leisen Klingeln. Möglicherweise müssen Sie den Prototypfilter leicht überarbeiten, um die erforderliche Dämpfung im interpolierten Filter zu erzielen.


1
+1: Interessante Idee; Ich muss ein wenig darüber nachdenken. Mir fallen jedoch zwei Fragen ein. Ist es sicher zu sagen, dass wir unsere Equiripple-Design-Einschränkungen einfach durch Skalieren auf das Halbbandfilter übertragen können? Zweitens, was ist mit ungeraden Werten von N ?
Oliver Charlesworth

Ungerade Werte von N können durch Dezimieren einer geraden FIR um 2 behandelt werden. Wenn Sie beispielsweise alle 7 Abtastwerte Nullen möchten, entwerfen Sie alle 14 eine Tanne mit Nullen, und dezimieren Sie dann so, dass Sie die Nullen beibehalten. Die obere Hälfte des Spektrums wird in eingeteilt, aber die integrierten Nebenkeulen können in der Praxis ziemlich vernachlässigbar sein.
Mark Borgerding
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.