Main Content

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

sosfilt

2 次セクション型 (双 2 次) IIR デジタル フィルター

説明

y = sosfilt(sos,x) では、2 次セクション デジタル フィルター sos が入力信号 x に適用されます。

  • x が行列の場合、この関数は最初の次元に沿って動作し、列ごとにフィルター処理されたデータを返します。

  • x が多次元配列の場合、この関数はサイズが 1 より大きい最初の配列次元に沿って動作します。

y = sosfilt(sos,x,dim) は、次元 dim に沿って動作します。

すべて折りたたむ

chirp.mat を読み込みます。ファイルに含まれている信号 y のパワーの大部分は、Fs/4 (ナイキスト周波数の半分) を超えています。サンプル レートは 8192 Hz です。

load chirp

t = (0:length(y)-1)/Fs;

7 次のバタワース ハイパス フィルターを、Fs/4 より低い信号成分を減衰させるように設計します。0.48π ラジアン/サンプルの正規化されたカットオフ周波数を使用します。フィルター係数を 2 次セクションで表します。

[zhi,phi,khi] = butter(7,0.48,'high');
soshi = zp2sos(zhi,phi,khi);

freqz(soshi)

Figure contains 2 axes objects. Axes object 1 with title Phase, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Phase (degrees) contains an object of type line. Axes object 2 with title Magnitude, xlabel Normalized Frequency (\times\pi rad/sample), ylabel Magnitude (dB) contains an object of type line.

信号をフィルター処理します。元の信号とハイパス フィルター処理された信号を表示します。両方のプロットに同じ y 軸のスケールを使用します。

outhi = sosfilt(soshi,y);

figure
subplot(2,1,1)
plot(t,y)
title('Original Signal')
ys = ylim;

subplot(2,1,2)
plot(t,outhi)
title('Highpass-Filtered Signal')
xlabel('Time (s)')
ylim(ys)

Figure contains 2 axes objects. Axes object 1 with title Original Signal contains an object of type line. Axes object 2 with title Highpass-Filtered Signal, xlabel Time (s) contains an object of type line.

同じ仕様でローパス フィルターを設計します。信号をフィルター処理し、結果を元の信号と比較します。両方のプロットに同じ y 軸のスケールを使用します。結果はほとんどがノイズです。

[zlo,plo,klo] = butter(7,0.48);
soslo = zp2sos(zlo,plo,klo);

outlo = sosfilt(soslo,y);

subplot(2,1,1)
plot(t,y)
title('Original Signal')
ys = ylim;

subplot(2,1,2)
plot(t,outlo)
title('Lowpass-Filtered Signal')
xlabel('Time (s)')
ylim(ys)

Figure contains 2 axes objects. Axes object 1 with title Original Signal contains an object of type line. Axes object 2 with title Lowpass-Filtered Signal, xlabel Time (s) contains an object of type line.

入力引数

すべて折りたたむ

2 次セクション デジタル フィルター。L 行 6 列の行列として指定します。L は 2 次セクションの数です。行列

sos=[b01b11b211a11a21b02b12b221a12a22b0Lb1Lb2L1a1La2L]

は、2 次セクション デジタル フィルター

H(z)=k=1LHk(z)=k=1Lb0k+b1kz1+b2kz21+a1kz1+a2kz2.

を表します。

例: [b,a] = butter(3,1/32); sos = tf2sos(b,a) は、正規化された 3 dB の周波数 π/32 ラジアン/サンプルを持つ 3 次のバタワース フィルターを指定します。

データ型: single | double

入力信号。ベクトル、行列、または N 次元配列として指定します。

例: x = [2 1].*sin(2*pi*(0:127)'./[16 64]) は、2 チャネルの正弦波を指定します。

データ型: single | double
複素数のサポート: あり

動作する対象の次元。正の整数スカラーとして指定します。既定の設定では、この関数はサイズが 1 より大きい x の最初の配列次元に沿って動作します。

データ型: single | double

出力引数

すべて折りたたむ

フィルター処理された信号。ベクトル、行列、または N 次元配列として返されます。yx と同じサイズになります。

参照

[1] Bank, Balázs. "Converting Infinite Impulse Response Filters to Parallel Form". IEEE Signal Processing Magazine. Vol. 35, Number 3, May 2018, pp. 124-130.

[2] Orfanidis, Sophocles J. Introduction to Signal Processing. Englewood Cliffs, NJ: Prentice-Hall, 1996.

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2006a より前に導入