ドキュメンテーション

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

decimate

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

構文

y = decimate(x,r)
y = decimate(x,r,n)
y = decimate(x,r,'fir')
y = decimate(x,r,n,'fir')

説明

y = decimate(x,r) は、入力信号 x のサンプルレートを r の係数分低減させます。間引きされたベクトル yr の係数分短くなります。つまり、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:.00025:1;
x = sin(2*pi*30*t) + sin(2*pi*60*t);
y = decimate(x,4);

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

subplot 211
stem(0:120,x(1:121),'filled','markersize',3)
grid on
xlabel 'Sample number',ylabel 'Original'
subplot 212
stem(0:30,y(1:31),'filled','markersize',3)
grid on
xlabel 'Sample number',ylabel 'Decimated'

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')

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

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')

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

入力引数

すべて折りたたむ

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

データ型: double | single

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

データ型: double | single

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

データ型: double | single

出力引数

すべて折りたたむ

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

データ型: 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 より前に導入