このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
bandpass
バンドパス フィルター信号
構文
説明
は、名前と値の引数を使用して、上記の任意の構文に追加オプションを指定します。阻止帯域の減衰量、バンドパス フィルターの急峻さ、およびフィルターのインパルス応答のタイプを変更できます。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])
入力引数
x
— 入力信号
ベクトル | 行列
ベクトルまたは行列として指定される入力信号。
例: sin(2*pi*(0:127)/16)+randn(1,128)/100
は、ノイズを含む正弦波を指定します
例: [2 1].*sin(2*pi*(0:127)'./[16 64])
は、2 チャネルの正弦波を指定します。
データ型: single
| double
複素数のサポート: あり
wpass
— 正規化された通過帯域周波数範囲
(0, 1) 内の要素をもつ 2 要素ベクトル
正規化された通過帯域周波数範囲。区間 (0, 1) の要素をもつ 2 要素ベクトルとして指定します。
fpass
— 通過帯域周波数範囲
(0, fs
/2) 内の要素をもつ 2 要素ベクトル
通過帯域周波数範囲。区間 (0, fs
/2) の要素をもつ 2 要素ベクトルとして指定します。
fs
— サンプル レート
正の実数のスカラー
サンプル レート。正の実数スカラーとして指定します。
xt
— 入力 timetable
timetable
入力 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 フィルターを使用して入力をフィルター処理します。
ImpulseResponse
— インパルス応答のタイプ
"auto"
(既定値) | "fir"
| "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 フィルターを設計します。次数の削減は、遷移帯域の急峻さを犠牲にすることになります。
信号をフィルター処理し、遅延を補正します。
Steepness
— 遷移帯域の急峻さ
0.85
(既定値) | [0.5, 1) の範囲にあるスカラー値 | [0.5, 1) の範囲の要素をもつ 2 要素ベクトル
遷移帯域の急峻さ。スカラーまたは [0.5, 1) の範囲の要素をもつ 2 要素ベクトルとして指定します。急峻さが増加するにつれて、フィルター応答は理想のバンドパス応答に近づきますが、フィルター長およびフィルター処理演算の計算コストの増加ももたらします。詳細については、バンドパス フィルターの急峻さを参照してください。
StopbandAttenuation
— フィルター阻止帯域の減衰量
60
(既定値) | dB 単位の正のスカラー
フィルター阻止帯域の減衰量。dB 単位で正のスカラーとして指定します。
出力引数
y
— フィルター処理された信号
ベクトル | 行列 | timetable
フィルター処理された信号。入力と同じ次元のベクトル、行列または timetable として返されます。
d
— バンドパス フィルター
digitalFilter
オブジェクト
フィルター処理演算で使用するバンドパス フィルター。digitalFilter
オブジェクトとして返されます。
d
を使用して信号x
をフィルター処理するには、filter
(d,x)
を使用します。bandpass
とは異なり、関数filter
はフィルター遅延を補正しません。関数filtfilt
とfftfilt
をdigitalFilter
オブジェクトと使用することもできます。フィルター アナライザーを使用して、フィルター応答を可視化します。
デジタル フィルターを周波数応答仕様に基づいて編集または生成するには、
designfilt
を使用します。
詳細
バンドパス フィルターの急峻さ
Steepness
引数は、フィルターの遷移領域の幅をコントロールします。急峻さが小さいほど、遷移領域は幅広くなります。急峻さが大きいほど、遷移領域は狭くなります。
フィルターの急峻さは、以下の定義を検討することで解釈します。
"ナイキスト周波数" fNyquist は、エイリアシングせずに指定のレートでサンプリング可能な信号の最高の周波数成分です。fNyquist は、入力信号に時間情報がない場合は 1 (×π ラジアン/サンプル)、入力信号が timetable の場合またはサンプル レートを指定する場合は
fs
/2 Hz です。フィルターの "阻止帯域周波数" の下限および上限である、fstoplower と fstopupper は、それを下回った場合および超えた場合に減衰が
StopbandAttenuation
を使用して指定した値以上になる周波数です。フィルターの "遷移幅下限" Wlower は、
fpass
lower – fstoplower ("低域通過帯域周波数"fpass
lower は指定したfpass
の最初の要素) です。フィルターの "遷移幅上限" Wupper は、fstopupper –
fpass
upper ("高域通過帯域周波数"fpass
upper はfpass
の 2 番目の要素) です。最も理想的でないフィルターは、通過帯域全体にわたる入力信号も減衰します。周波数に依存する減衰の最大値は、"通過帯域リップル" と呼ばれます。
bandpass
が使用するすべてのフィルターに 0.1 dB の通過帯域リップルがあります。
遷移帯の幅をコントロールするには、2 要素ベクトル [slower,supper]、またはスカラーとして Steepness
を指定できます。Steepness
をベクトルとして指定した場合、関数は以下を実行します。
遷移幅下限を以下で計算します。
Wlower = (1 – slower) ×
fpass
lower.Steepness
の最初の要素が 0.5 に等しい場合、遷移幅は、fpass
lower の 50% です。Steepness
の最初の要素が 1 に近づくにつれて、遷移幅は最小値のfpass
lower の 1% に達するまで徐々に狭くなります。
遷移幅上限を以下で計算します。
Wupper = (1 – supper) × (fNyquist –
fpass
upper).Steepness
の 2 番目の要素が 0.5 に等しい場合、遷移幅は、(fNyquist –fpass
upper). の 50% です。Steepness
の 2 番目の要素が 1 に近づくにつれて、遷移幅は最小値の (fNyquist –fpass
upper) の 1% に達するまで徐々に狭くなります。
Steepness
をスカラーとして指定した場合、関数は、下限および上限の遷移幅が等しいフィルターを設計します。Steepness
の既定値は 0.85 です。
バージョン履歴
R2018a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)