| 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 | ![]() |