Signal Processing Toolbox | ![]() ![]() |
表示
b=
intfilt(r,l,alpha) b=
intfilt(r,n,'Lagrange')
詳細
b
は、 =
intfilt(r,l,alpha)
r
サンプル毎に(r
-1)個の連続するゼロを内挿し、最近傍の(2
*l
-1)個のゼロでないサンプルを使って、理想的な帯域制限された内挿を行なう線形位相FIRフィルタを設計します。これは、Nyquist周波数をalpha
倍したオリジナルの帯域制約を仮定しています。出力されるフィルタは、interp
が使用するフィルタと同じです。
b
または、 =
intfilt(r,n,'Lagrange')
b = intfilt(r,n,'l')
は、r個のサンプルごとに(r-1
)個の連続するゼロを内挿し、データ列にn
次のLagrange多項式補間を実行するFIRフィルタを設計します。bは、n
が偶数の場合、長さ(n + 1)
*r
となり、n
が奇数の場合、長さ(n + 1)
*r-1
となります。
いずれのタイプのフィルタも基本的にローパスであり、補間や間引きを目的としています。
例題
帯域制限法を使って、信号のサンプル数を4倍にするディジタル補間フィルタを設計します。
alpha=
0.5; % "帯域制限度"ファクタ h1=
intfilt(4,2,alpha); % 帯域制限補間
フィルタh1
は、オリジナルの信号がNyquist周波数のalpha
倍に帯域制限されたときに最も適切に働きます。つぎに、帯域制限雑音信号を作成します。
randn('state',0)
x =
filter(fir1(40,0.5),1,randn(200,1)); % 帯域制限
ここで、サンプルごとに3つのゼロを信号に付加します。得られる列は、x
の長さの4倍となります。
xr =
reshape([x zeros(length(x),3)]',4*length(x),1);
コマンドfilter
を使って、補間します。
y =
filter(h1,1,xr);
y
はx
の補間バージョンであり、7個のサンプル分だけ遅れます(フィルタの群遅延)。その部分を拡大してこれを確認します。
plot(100:200,y(100:200),7+(101:4:196),x(26:49),'o')
intfilt
は、オリジナルの信号のLagrange多項式補間も実行します。たとえば、1次多項式補間は単なる線形補間であり、つぎのように三角フィルタで実現することができます。
h2 =
intfilt(4,1,'l') % Lagrange補間
h2 =
0.2500 0.5000 0.7500 1.0000 0.7500 0.5000 0.2500
アルゴリズム
帯域制限法は、firls
を使って参考文献[1]に示されている補間FIRを設計します。多項式法では、等間隔のサンプルにLagrange多項式補間公式を使って、適切なフィルタを作成します。
参考
|
データ列に対するサンプリングレートの低減(間引き) |
|
整数ファクタによるサンプリングレートの増加(補間) |
|
任意のファクタによるサンプリングレートの変更 |
参考文献
[1] Oetken, Parks, and Schüßler, "New Results in the Design of Digital Interpolators," IEEE Trans. Acoust., Speech, Signal Processing, Vol. ASSP-23 (June 1975), pp. 301-309.
![]() | interp | invfreqs | ![]() |