Signal Processing Toolbox | ![]() ![]() |
表示
y=
decimate(x,r) y=
decimate(x,r,n) y=
decimate(x,r,'fir') y=
decimate(x,r,n,'fir')
詳細
間引きにより、データ列のオリジナルのサンプリングレートを、より低いレートにします。これは、補間の逆の操作です。間引き過程では、ローパスフィルタで入力データをフィルタ処理し、得られた平滑化信号を、より低いレートでサンプリングします。
y = decimate(x,r)
は、ファクタr
を使って、x
のサンプリングレートを低減します。間引きされたベクトルy
は、入力ベクトルx
の長さの1/r
に短縮されます。デフォルトでは、decimate
は、8次のローパスChebyshev I型フィルタを使用します。これは、入力列を順方向と逆方向の両方でフィルタ処理し、位相歪みを除去しますが、設定したフィルタ次数を2回適用したことになります。
y = decimate(x,r,n)
は、n
次Chebyshevフィルタを使用します。数値的に不安定となるため、13次を越える次数は避けるべきです。13次を越える場合、MATLABはワーニングメッセージを表示します。
y = decimate(x,r,'fir')
は、Chebyshev IIRフィルタの代わりに30点FIRフィルタを使用します。この場合、decimate
は、片方向でのみ入力列をフィルタ処理します。この手法では、メモリの消費が節約されるため、長いデータ列を処理するのに有効です。
y = decimate(x,r,n,'fir')
は、長さn
のFIRフィルタを使用します。
例題
t=
0:.00025:1; % 時間ベクトル x=
sin(2*
pi*
30*
t) + sin(2*
pi*
60*
t); y=
decimate(x,4);
stem(x(1:120)), axis([0 120 -2 2]) % オリジナルの信号 title('Original Signal') figure stem(y(1:30)) % 間引き後の信号 title('Decimated Signal')
アルゴリズム
decimate
では、つぎのように参考文献[1の間引きアルゴリズム8.2および8.3を使用します。
decimate
は、正規化されたカットオフ周波数0.8/r
と0.05 dBの通過帯域リップルをもつChebyshev I型フィルタを使用します。fir
オプションを付けると、decimate
は、fir1
を使ったカットオフ周波数1/r
をもつローパスFIRフィルタを設計します。
filtfilt
を使って順方向と逆方向にフィルタを適用します。
r
点おきに選択することにより、フィルタ処理したデータをリサンプリングします。
診断
r
が整数でない場合、decimate
は、つぎのエラーメッセージを表示します。
Resampling rate R must be an integer.
n
が13次を越えるIIRフィルタを設定している場合、decimate
は、つぎのワーニングメッセージを表示します。
Warning: IIR filters above order 13 may be unreliable.
参考
|
ローパスフィルタを使って、サンプリングレートの増加(補間) |
|
任意のファクタによるサンプリングレートの変更 |
|
キュービックスプライン補間(MATLAB Function Referenceを参照) |
|
FIRフィルタの適用とサンプリングレート変換 |
参考文献
[1] IEEE. Programs for Digital Signal Processing. IEEE Press. New York: John Wiley & Sons, 1979. Chapter 8.
![]() | dct | deconv | ![]() |