目的のゼロクロッシングを取得する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補間により、低レベルのリンギングが発生します。補間フィルターで必要なレベルの減衰を得るには、プロトタイプフィルターをわずかに過剰設計する必要がある場合があります。
N=2
:への私の答えを参照FIRフィルタの設計:公園・マクレランと最小二乗VSウィンドウ。