ドキュメンテーション センター

  • 評価版
  • 製品アップデート

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

Farrow 構造を使用した非整数遅延フィルター

この例では、Farrow 構造を使用して実装されるデジタル非整数遅延フィルターの設計法を示します。デジタル非整数遅延 (FD) フィルターは、信号のサンプリングの瞬間を微調整するのに便利なツールです。これらはたとえば、遅延パラメーターが時間とともに変化するデジタル モデムの同期に通常使用されます。 この例では、時変 FIR FD フィルターの実装によく使用される Farrow 構造について示します。

理想非整数遅延フィルター

理想非整数遅延フィルターは、線形位相オールパス フィルターです。そのインパルス応答は、非因果フィルターに対応した時間シフト離散 sinc 関数です。インパルス応答は無限であるので、時間の有限シフトによって因果的にすることはできません。したがって、これは実現不可能であり、近似しなければなりません。

Farrow 構造

非整数遅延フィルターの出力を計算するには、既存の離散時間サンプル間の入力信号値を推定する必要があります。任意の点における新しいサンプル値を計算するには、特殊な内挿フィルターを使用できます。これらのフィルターのうち、多項式ベースのフィルターは、その特殊な構造、つまり Farrow 構造のおかげで係数を簡単に処理できるので、特に有用です。特に、Farrow 構造の調整可能性により、これは実用的なハードウェアの実装に適しています。

可能な限り平坦な FIR 近似 (ラグランジュ内挿)

ラグランジュ内挿は、多項式ベースのフィルターの特殊なケースとなる時間領域方法です。出力信号は次数の多項式 M で近似されます。最も単純なケース (M=1) は、線形内挿に対応しています。さまざまな割合で単位遅延を分割するいくつかの線形非整数遅延フィルターを設計し、解析してみましょう。

h = repmat(dfilt.farrowlinearfd, [1 10]);
for d=0:9,
    h(d+1) = dfilt.farrowlinearfd(d/10);
end
fvtool(h,'Color','white')
fvtool(h,'Analysis','PhaseDelay','Color','white')

遅延の値に対し、理想フィルターは平坦な振幅応答と平坦な位相遅延応答をもっていなければなりません。近似は最小周波数に対してのみ正しくなります。つまり、実際に線形 FD が正しく機能するには、信号をオーバーサンプリングする必要があります。この場合にフィルターを適用し、フィルター入力の上に遅延信号を重ねてみましょう。

t = 0:9;
x = sin(2*pi*.1*t);
y1 = filter(h(2),x);
y2 = filter(h(5),x);
figure('Color','white')
stem(t,x);hold on;stem(t-.1,y1,'g','filled')
hold on;stem(t-.4,y2,'r','filled')
legend('Input Signal', 'Input Delayed by 0.1 Sample', ...
    'Input Delayed by 0.4 Sample','Location','SouthWest')

より高次のラグランジュ内挿器を設計できます。3 次ラグランジュ内挿器を線形内挿器と比較してみましょう。

d = .4; % Fractional Delay
hl1 = dfilt.farrowlinearfd(d) % Coefficients hard-coded in this structure
 
hl1 =
 
     FilterStructure: 'Farrow Linear Fractional Delay'
          Arithmetic: 'double'                        
           FracDelay: 0.4                             
    PersistentMemory: false                           
                                                      

3 次ラグランジュ内挿器には、非整数遅延フィルター デザイナー (FDESIGN.FRACDELAY) を使用しましょう。

fd = fdesign.fracdelay(d,'N',3)
 
fd =
 
               Response: 'Fractional Delay'
          Specification: 'N'               
            Description: {'Filter Order'}  
              FracDelay: 0.4               
    NormalizedFrequency: true              
            FilterOrder: 3                 
                                           

フィルターは実際には "設計" 関数を呼び出すことで設計します。

hl2 = design(fd,'lagrange','FilterStructure','farrowfd')
 
hl2 =
 
          FilterStructure: 'Farrow Fractional Delay'
               Arithmetic: 'double'                 
             Coefficients: [4x4 double]             
                FracDelay: 0.4                      
         PersistentMemory: false                    
                                                    
hfvt = fvtool(hl1,hl2,'Color','white');
legend(hfvt, 'Linear', 'Cubic')
fvtool(hl1,hl2,'Analysis','PhaseDelay','Color','white')

多項式の次数を若干増加すると有用な帯域幅が増加しますが、ラグランジュ近似を使用する場合は、微分フィルターの長さ、つまりインパルス応答の区分数 ('Coefficients' プロパティの行数) が多項式の長さ ('Coefficients' プロパティの列数) に等しくなります。他の設計法を使用してこの制限を克服することもできます。

3 次フィルターの DC における位相遅延が 0.4 サンプルから 1.4 サンプルにシフトしていることにも注目してください。どちらのフィルターも非整数遅延は 0.4 サンプルですが、それぞれのノミナル整数群遅延はフィルター次数の半分 (ゼロ方向に丸める) に等しくなります。

時変非整数遅延

直接型 FIR と比較した Farrow 構造の利点は、その調整可能性にあります。数多くの実用アプリケーションにおいて、遅延は時間とともに変化します。新しい各遅延に対し、直接型実装では新しい係数の集合が必要ですが、Farrow 実装では多項式係数は一定になります。

t = 0:9;
x = sin(2*pi*.1*t);
d = (t+1)/10;
ty = zeros(10,1);
y = zeros(10,1);
h = dfilt.farrowlinearfd;
h.PersistentMemory = true;
for i=1:10,
    h.FracDelay = d(i);
    ty(i) = t(i)-d(i);
    y(i) = filter(h,x(i));
end
figure('Color','white')
stem(t,x);hold on;stem(ty,y,'r','filled')
legend('Input','Input Delayed by a Variable Delay','Location','SouthWest')

この情報は役に立ちましたか?