Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

decimate

間引き — 整数係数単位でのサンプル レートの低減

説明

y = decimate(x,r) は、入力信号 x のサンプル レートを r 分の 1 に減らします。間引きされた信号 yr 分の 1 に短くされます。つまり、length(y) = ceil(length(x)/r) となります。既定では、decimate は次数 8 のローパス チェビシェフ I 型無限インパルス応答 (IIR) フィルターを使用します。

y = decimate(x,r,n) は、次数 n のチェビシェフ フィルターを使用します。

y = decimate(x,r,"fir") は、ハミング ウィンドウのウィンドウ法で設計された有限インパルス応答 (FIR) フィルターを使用します。フィルターの次数は 30 です。

y = decimate(x,r,n,"fir") は、次数 n の FIR フィルターを使用します。

すべて折りたたむ

4 kHz でサンプリングされた正弦波信号を作成します。4 の係数で信号を間引きます。

t = 0:1/4e3:1;
x = sin(2*pi*30*t) + sin(2*pi*60*t);
y = decimate(x,4);

元の信号と間引き後の信号をプロットします。

subplot(2,1,1)
stem(0:120,x(1:121),'filled','MarkerSize',3)
grid on
xlabel('Sample Number')
ylabel('Original')

subplot(2,1,2)
stem(0:30,y(1:31),'filled','MarkerSize',3)
grid on
xlabel('Sample Number')
ylabel('Decimated')

Figure contains 2 axes objects. Axes object 1 with xlabel Sample Number, ylabel Original contains an object of type stem. Axes object 2 with xlabel Sample Number, ylabel Decimated contains an object of type stem.

2 つの正弦波を使用して信号を作成します。5 次のチェビシェフ IIR フィルターを使用して、13 の係数で信号を間引きします。元の信号と間引き後の信号をプロットします。

r = 13;
n = 16:365;
lx = length(n);
x = sin(2*pi*n/153) + cos(2*pi*n/127);

plot(0:lx-1,x,'o')
hold on
y = decimate(x,r,5);
stem(lx-1:-r:0,fliplr(y),'ro','filled','markersize',4)

legend('Original','Decimated','Location','south')
xlabel('Sample number')
ylabel('Signal')

Figure contains an axes object. The axes object with xlabel Sample number, ylabel Signal contains 2 objects of type line, stem. One or more of the lines displays its values using only markers These objects represent Original, Decimated.

元の信号と間引き後の信号は、"最後の" 要素が一致します。

2 つの正弦波を使用して信号を作成します。82 次の FIR フィルターを使用して、13 の係数で信号を間引きします。元の信号と間引き後の信号をプロットします。

r = 13;
n = 16:365;
lx = length(n);
x = sin(2*pi*n/153) + cos(2*pi*n/127);

plot(0:lx-1,x,'o')
hold on
y = decimate(x,r,82,'fir');
stem(0:r:lx-1,y,'ro','filled','markersize',4)

legend('Original','Decimated','Location','south')
xlabel('Sample number')
ylabel('Signal')

Figure contains an axes object. The axes object with xlabel Sample number, ylabel Signal contains 2 objects of type line, stem. One or more of the lines displays its values using only markers These objects represent Original, Decimated.

元の信号と間引き後の信号は、"最初の" 要素が一致します。

入力引数

すべて折りたたむ

入力信号。ベクトルで指定します。

データ型: double | single

間引き係数。正の整数で指定します。r が 13 より大きい場合により良好な結果を得るには、r を小さな係数に分割し、decimate を複数回呼び出します。

データ型: double | single

フィルター次数。正の整数で指定します。IIR フィルターでは 13 次を超える次数は数値的に不安定となるため推奨されません。このような場合、この関数は警告を表示します。

データ型: double | single

出力引数

すべて折りたたむ

ベクトルとして返される間引き後の信号。

アルゴリズム

間引きは、シーケンスの元のサンプル レートを低減します。これは内挿の逆の操作です。decimate ローパスは、入力をフィルター処理してエイリアシングから保護し、結果をダウンサンプリングします。関数は、参考文献[1]の間引きアルゴリズム 8.2 および 8.3 を使用します。

  1. decimate はローパス フィルターを作成します。既定では、cheby1 を使用してチェビシェフ I 型フィルターを設計します。このフィルターは、0.8/r の正規化されたカットオフ周波数と 0.05 dB の通過帯域リップルをもちます。伝達関数の生成に必要な畳み込みから蓄積された丸め誤差が原因で、指定したフィルター次数で通過帯域の歪みが生じることがあります。decimate は、歪みが原因でカットオフ周波数において振幅応答とリップルとの差が 10–6 を超える場合、フィルター次数を自動的に減らします。

    "fir" オプションを指定した場合、decimatefir1 を使用して、カットオフ周波数 1/r をもつローパス FIR フィルターを設計します。

  2. FIR フィルターを使用する場合、decimate は入力シーケンスを一方向にのみフィルター処理します。これはメモリの消費を節約するため、長いシーケンスの処理に有効です。IIR フィルターでは、decimatefiltfilt を使用して順方向と逆方向にフィルターを適用し、位相歪みを除去します。このプロセスによって、フィルター次数は実質的に 2 倍になります。いずれの場合も、この関数は、端点の条件の一致を確認して、信号の両端における過渡状態の影響を最小限にします。

  3. 最後に、decimate は、フィルター処理後のデータ内から r 個ごとに点を選択し、データをリサンプリングします。リサンプリングされたシーケンス (y) では、IIR フィルターを使用した場合は y(end)x(end) に一致し、FIR フィルターを使用した場合は y(1)x(1) に一致します。

参照

[1] Digital Signal Processing Committee of the IEEE® Acoustics, Speech, and Signal Processing Society, eds. Programs for Digital Signal Processing. New York: IEEE Press, 1979.

拡張機能

バージョン履歴

R2006a より前に導入

すべて展開する