Main Content

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

bandpass

バンドパス フィルター信号

説明

y = bandpass(x,wpass) は、バンドパス フィルターを使用し、2 要素ベクトル wpass で指定され π ラジアン/サンプルの正規化された単位で表される通過帯域周波数範囲で入力信号 x をフィルター処理します。bandpass は 60 dB の阻止帯域の減衰量で最小次数のフィルターを使用し、フィルターによって生じた遅延を補正します。x が行列の場合、関数は各列を別々にフィルター処理します。

y = bandpass(x,fpass,fs) は、xfs Hz のレートでサンプリングされていることを指定します。2 要素ベクトル fpass は、フィルターの通過帯域周波数範囲を Hz で指定します。

y = bandpass(xt,fpass) は、2 要素ベクトル fpass によって Hz で指定される通過帯域周波数範囲でフィルターを使用して timetable xt のデータをバンドパス フィルター処理します。関数は、timetable 内のすべての変数および各変数内のすべての列を個別にフィルター処理します。

y = bandpass(___,Name=Value) は、名前と値の引数を使用して、上記の任意の構文に追加オプションを指定します。阻止帯域の減衰量、バンドパス フィルターの急峻さ、およびフィルターのインパルス応答のタイプを変更できます。

[y,d] = bandpass(___) は、入力のフィルター処理に使用する digitalFilter オブジェクト d も返します。

出力引数のない bandpass(___) は、入力信号をプロットし、フィルター処理された信号を重ね合わせます。

すべて折りたたむ

1 kHz で 1 秒間サンプリングされた信号を作成します。信号には 50 Hz、150 Hz、250 Hz の 3 つのトーンが含まれます。高周波数と低周波数のトーンのどちらも、振幅がその中間のトーンの倍です。信号は分散 1/100 のガウス ホワイト ノイズに組み込まれます。

fs = 1e3;
t = 0:1/fs:1;
x = [2 1 2]*sin(2*pi*[50 150 250]'.*t) + randn(size(t))/10;

低周波数および高周波数のトーンを除去するために信号をバンドパス フィルター処理します。100 Hz と 200 Hz の通過帯域周波数を指定します。元の信号とフィルター処理された信号、およびそれらのスペクトルも表示します。

bandpass(x,[100 200],fs)

標準のデジタル ミュージック シンセサイザーを実装し、民謡の演奏に使用します。サンプル レートを 2 kHz に指定します。歌曲のスペクトログラムをプロットします。

fs = 2e3;
t = 0:1/fs:0.3-1/fs; fq = [-Inf -9:2]/12;
note = @(f,g) [1 1 1]*sin(2*pi*440*2.^[fq(g)-1 fq(g) fq(f)+1]'.*t);

mel = [5 3 1 3 5 5 5 0 3 3 3 0 5 8 8 0 5 3 1 3 5 5 5 5 3 3 5 3 1]+1;
acc = [5 0 8 0 5 0 5 5 3 0 3 3 5 0 8 8 5 0 8 0 5 5 5 0 3 3 5 0 1]+1;

song = [];
for kj = 1:length(mel)
    song = [song note(mel(kj),acc(kj)) zeros(1,0.01*fs)];
end
song = song/(max(abs(song))+0.1);

% To hear, type sound(song,fs)

pspectrum(song,fs,"spectrogram",TimeResolution=0.31, ...
    OverlapPercent=0,MinThreshold=-60)

信号をバンドパス フィルター処理して、他の 2 つから中声区を分離します。230 Hz と 450 Hz の通過帯域周波数を指定します。時間領域と周波数領域で元の信号とフィルター処理された信号をプロットします。

pong = bandpass(song,[230 450],fs);

% To hear, type sound(pong,fs)

bandpass(song,[230 450],fs)

中声区のスペクトログラムをプロットします。

figure
pspectrum(pong,fs,"spectrogram",TimeResolution=0.31, ...
    OverlapPercent=0,MinThreshold=-60)

100 Hz の通過帯域で無限インパルス応答バンドパス フィルターを使用して 1 kHz でサンプリングしたホワイト ノイズをフィルター処理します。異なる急峻さの値を使用します。フィルター処理された信号のスペクトルをプロットします。

fs = 1000;
x = randn(20000,1);

[y1,d1] = bandpass(x,[ 50 150],fs,ImpulseResponse="iir",Steepness=0.5);
[y2,d2] = bandpass(x,[200 300],fs,ImpulseResponse="iir",Steepness=0.8);
[y3,d3] = bandpass(x,[350 450],fs,ImpulseResponse="iir",Steepness=0.95);

pspectrum([y1 y2 y3],fs)
legend("Steepness = " + [0.5 0.8 0.95],Location="south")

フィルターの周波数応答を計算してプロットします。

[h1,f] = freqz(d1,1024,fs);
[h2,~] = freqz(d2,1024,fs);
[h3,~] = freqz(d3,1024,fs);

plot(f,mag2db(abs([h1 h2 h3])))
legend("Steepness = " + [0.5 0.8 0.95],Location="south")
ylim([-100 10])

低通過帯域周波数と高通過帯域周波数で別々の急峻さの値を指定することによってフィルターを非対称にします。

[y1,d1] = bandpass(x,[ 50 150],fs,ImpulseResponse="iir",Steepness=[0.5 0.8]);
[y2,d2] = bandpass(x,[200 300],fs,ImpulseResponse="iir",Steepness=[0.5 0.8]);
[y3,d3] = bandpass(x,[350 450],fs,ImpulseResponse="iir",Steepness=[0.5 0.8]);

pspectrum([y1 y2 y3],fs)

フィルターの周波数応答を計算してプロットします。

[h1,f] = freqz(d1,1024,fs);
[h2,~] = freqz(d2,1024,fs);
[h3,~] = freqz(d3,1024,fs);

plot(f,mag2db(abs([h1 h2 h3])))
ylim([-100 10])

入力引数

すべて折りたたむ

ベクトルまたは行列として指定される入力信号。

例: sin(2*pi*(0:127)/16)+randn(1,128)/100 は、ノイズを含む正弦波を指定します

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

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

正規化された通過帯域周波数範囲。区間 (0, 1) の要素をもつ 2 要素ベクトルとして指定します。

通過帯域周波数範囲。区間 (0, fs/2) の要素をもつ 2 要素ベクトルとして指定します。

サンプル レート。正の実数スカラーとして指定します。

入力 timetable。xt には、duration 型の、増加する有限の、等間隔に配置された秒単位の行時間が含まれなければなりません。

timetable が欠損している場合や時間点が重複している場合、欠損または重複する時間および非等間隔の時間をもつ timetable の整理のヒントを使用して修正できます。

例: timetable(seconds(0:4)',randn(5,1),randn(5,2)) には 1 Hz で 4 秒間サンプリングされたシングル チャネルのランダム信号と 2 チャネルのランダム信号が含まれます。

例: timetable(randn(5,1),randn(5,2),SampleRate=1) には 1 Hz で 4 秒間サンプリングされたシングル チャネルのランダム信号と 2 チャネルのランダム信号が含まれます。

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで、Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

例: ImpulseResponse="iir",StopbandAttenuation=30 は、fpass(1) より小さい周波数と fpass(2) より大きい周波数を 30 dB 減衰する最小次数の IIR フィルターを使用して入力をフィルター処理します。

R2021a より前では、コンマを使用して名前と値をそれぞれ区切り、Name を引用符で囲みます。

例: 'ImpulseResponse','iir','StopbandAttenuation',30 は、fpass(1) より小さい周波数と fpass(2) より大きい周波数を 30 dB 減衰する最小次数の IIR フィルターを使用して入力をフィルター処理します。

フィルターのインパルス応答のタイプ。"fir""iir"、または "auto" として指定します。

  • "fir" — 関数は、最小次数、線形位相、有限インパルス応答 (FIR) フィルターを設計します。遅延を補正するため、関数は入力信号の末尾に N/2 ゼロ (N はフィルター次数) を付加します。次に関数は、信号をフィルター処理し、出力の最初の N/2 サンプルを削除します。

    この場合、入力信号は、少なくとも仕様に適合するフィルターの 2 倍長くなければなりません。

  • "iir" — 関数は、最小次数の無限インパルス応答 (IIR) フィルターを設計し、関数 filtfilt を使用して、ゼロ位相フィルター処理の実行とフィルター遅延の補正を行います。

    信号が仕様に適合するフィルターの少なくとも 3 倍の長さではない場合、関数はより小さい次数のフィルターを設計し、したがって急峻さは小さくなります。

  • "auto" — 関数は、入力信号が十分に長い場合は最小次数の FIR フィルターを設計し、そうでない場合は最小次数の IIR フィルターを設計します。具体的には、関数は以下のステップに従います。

    • FIR フィルターが仕様を満たすために必要な最小次数を計算します。信号が必要なフィルター次数の少なくとも 2 倍の長さの場合、そのフィルターを設計して使用します。

    • 信号の長さが不足する場合、IIR フィルターが仕様を満たすために必要な最小次数を計算します。信号が必要なフィルター次数の少なくとも 3 倍の長さの場合、そのフィルターを設計して使用します。

    • 信号の長さが不足する場合、次数をその信号長の 3 分の 1 に切り捨て、その次数の IIR フィルターを設計します。次数の削減は、遷移帯域の急峻さを犠牲にすることになります。

    • 信号をフィルター処理し、遅延を補正します。

遷移帯域の急峻さ。スカラーまたは [0.5, 1) の範囲の要素をもつ 2 要素ベクトルとして指定します。急峻さが増加するにつれて、フィルター応答は理想のバンドパス応答に近づきますが、フィルター長およびフィルター処理演算の計算コストの増加ももたらします。詳細については、バンドパス フィルターの急峻さを参照してください。

フィルター阻止帯域の減衰量。dB 単位で正のスカラーとして指定します。

出力引数

すべて折りたたむ

フィルター処理された信号。入力と同じ次元のベクトル、行列または timetable として返されます。

フィルター処理演算で使用するバンドパス フィルター。digitalFilter オブジェクトとして返されます。

  • d を使用して信号 x をフィルター処理するには、filter(d,x) を使用します。bandpass とは異なり、関数 filter はフィルター遅延を補正しません。関数 filtfiltfftfiltdigitalFilter オブジェクトと使用することもできます。

  • フィルター アナライザーを使用して、フィルター応答を可視化します。

  • デジタル フィルターを周波数応答仕様に基づいて編集または生成するには、designfilt を使用します。

詳細

すべて折りたたむ

バンドパス フィルターの急峻さ

Steepness 引数は、フィルターの遷移領域の幅をコントロールします。急峻さが小さいほど、遷移領域は幅広くなります。急峻さが大きいほど、遷移領域は狭くなります。

フィルターの急峻さは、以下の定義を検討することで解釈します。

  • "ナイキスト周波数" fNyquist は、エイリアシングせずに指定のレートでサンプリング可能な信号の最高の周波数成分です。fNyquist は、入力信号に時間情報がない場合は 1 (×π ラジアン/サンプル)、入力信号が timetable の場合またはサンプル レートを指定する場合は fs/2 Hz です。

  • フィルターの "阻止帯域周波数" の下限および上限である、fstoplowerfstopupper は、それを下回った場合および超えた場合に減衰が StopbandAttenuation を使用して指定した値以上になる周波数です。

  • フィルターの "遷移幅下限" Wlower は、fpasslowerfstoplower ("低域通過帯域周波数" fpasslower は指定した fpass の最初の要素) です。

  • フィルターの "遷移幅上限" Wupper は、fstopupperfpassupper ("高域通過帯域周波数" fpassupperfpass の 2 番目の要素) です。

  • 最も理想的でないフィルターは、通過帯域全体にわたる入力信号も減衰します。周波数に依存する減衰の最大値は、"通過帯域リップル" と呼ばれます。bandpass が使用するすべてのフィルターに 0.1 dB の通過帯域リップルがあります。

Frequency response of a bandpass filter with the Nyquist frequency, the lower and upper passband frequencies, the upper and lower stopband frequencies, the upper and lower transition widths, the stopband attenuation, and the passband ripple

遷移帯の幅をコントロールするには、2 要素ベクトル [slower,supper]、またはスカラーとして Steepness を指定できます。Steepness をベクトルとして指定した場合、関数は以下を実行します。

  • 遷移幅下限を以下で計算します。

    Wlower = (1 – slower) × fpasslower.

    • Steepness の最初の要素が 0.5 に等しい場合、遷移幅は、fpasslower の 50% です。

    • Steepness の最初の要素が 1 に近づくにつれて、遷移幅は最小値の fpasslower の 1% に達するまで徐々に狭くなります。

  • 遷移幅上限を以下で計算します。

    Wupper = (1 – supper) × (fNyquistfpassupper).

    • Steepness の 2 番目の要素が 0.5 に等しい場合、遷移幅は、(fNyquistfpassupper). の 50% です。

    • Steepness の 2 番目の要素が 1 に近づくにつれて、遷移幅は最小値の (fNyquistfpassupper) の 1% に達するまで徐々に狭くなります。

Steepness をスカラーとして指定した場合、関数は、下限および上限の遷移幅が等しいフィルターを設計します。Steepness の既定値は 0.85 です。

バージョン履歴

R2018a で導入