Parks-McClellanアルゴリズムを使用してナイキスト補間フィルターを設計するにはどうすればよいですか?


17

Parks-McClellanアルゴリズムを使用して、特定の周波数領域の制約に従う補間フィルターを簡単に設計できます。ただし、時間領域の制約を強制する方法はすぐにはわかりません。特に、ナイキストフィルターの生成に興味があります。したがって、係数でオーバーサンプリングしNている場合、フィルタにゼロkN以外の整数のゼロ交差が必要ですk(これにより、補間器への入力サンプルが出力シーケンスに表示されるようになります)。

Harris 1がハーフバンドフィルターを設計する手法、つまりの特別なケースについて話しているのを見ましたN=2。これに対する一般的な解決策はありますか?(ウィンドウメソッドを使用してフィルターを簡単に設計できることは知っていますが、同じコントロールは得られません。)

[1] 通信システムのマルチレート信号処理、 pp。208-209



残念ながら、いくつかの参考文献があります。F。Mintzer、「ハーフバンド、サードバンド、およびNバンドFIRフィルターとその設計について」IEEE Trans。Acoust。、Speech&Signal Process。、vol。ASSP-30、いいえ。5、pp。734–738、1982年10月。T。サラマキおよびY.ノイボ、「符号間干渉ゼロのFIRナイキスト(Nバンド)フィルターのクラス」IEEE Trans。Circuits&Syst。、vol。CAS-34、いいえ。10、pp。1182–1190、1987
。– Olli Niemitalo

そして、非常に重要なように思われるこの論文:X. Zhang、「Mth-band FIR linear phase filtersの設計」、2014 第19回デジタル信号処理に関する国際会議、香港、2014年、pp。7-11。doi:10.1109 / ICDSP.2014.6900776
Olli Niemitalo

回答:


9

2のべき乗に制限されていますが、1つの設計方法は、1つのハーフバンドフィルターで開始し、1つおきにゼロを挿入し(スペクトルレプリカを作成し)、それをより広い遷移帯域を持つ2番目のハーフバンドフィルターで畳み込みます。必要な2の累乗になるまで、このプロセスを繰り返します。

以下は、Fc = fs / 8およびゼロ交差が4サンプルごとにあるローパスフィルターを作成する例です。

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

サンプルフィルターの比較


同じことを提案するつもりでした。
フォノン

5
すばらしいグラフの場合は+1。長いグラフよりもずっと優れているので、素晴らしいグラフを常に+1します。
トレバーボイドスミス

5

目的のゼロクロッシングを取得する1つの方法は、ハイブリッド設計を行うことです。

通過帯域と阻止帯域に等しい重みが与えられたParks-McLellan / Remezハーフバンドフィルターから始めます。それがあるので、ハーフバンドフィルタは、交互のサンプルにゼロを有することになります。次に、周波数領域でゼロスタッフィングを行うことにより、sin(x)/ xで時間領域を補間できます。

例:6サンプルごとにゼロクロッシングを持つfs / 12ローパスフィルターを作成します。

% 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

結果として得られるフィルターは、阻止帯域/通過帯域リップルに関してプロトタイプに近いものの、それほど良くありません。sin(x)/ x補間により、低レベルのリンギングが発生します。補間フィルターで必要なレベルの減衰を得るには、プロトタイプフィルターをわずかに過剰設計する必要がある場合があります。


1
+1:興味深いアイデア。これについて少し考える必要があります。しかし、私には2つの質問があります。まず、スケーリングによって等リップルの設計制約をハーフバンドフィルターに変換できると言っても安全ですか?第二に、Nの奇数値はどうですか?
オリバーチャールズワース

Nの奇数値は、偶数FIRを2で間引くことで処理できます。たとえば、7サンプルごとにゼロが必要な場合、14ごとにゼロでfirを設計し、ゼロを保持するように間引きします。スペクトルの上半分はエイリアスされますが、統合されたサイドローブは実際にはごくわずかです。
マークボーガーディング
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.