Main Content

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

highpass

ハイパス フィルター信号

説明

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

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

y = highpass(xt,fpass) は、fpass Hz の通過帯域周波数のフィルターを使用して timetable xt 内のデータをハイパス フィルター処理します。関数は、timetable 内のすべての変数および各変数内のすべての列を個別にフィルター処理します。

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

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

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

すべて折りたたむ

1 kHz で 1 秒間サンプリングされた信号を作成します。信号は 2 つのトーン、1 つは 50 Hz、もう 1 つは 250 Hz を含み、分散 1/100 のガウス ホワイト ノイズに埋め込まれています。高周波数のトーンの振幅は、低周波数のトーンの 2 倍です。

fs = 1e3;
t = 0:1/fs:1;

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

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

highpass(x,150,fs)

Figure contains 2 axes objects. Axes object 1 with title Highpass Filtering (Fpass = 150 Hz), xlabel Time (s) contains 2 objects of type line. These objects represent Original, Filtered. Axes object 2 with xlabel Frequency (Hz), ylabel Power Spectrum (dB) contains 2 objects of type line. These objects represent Original, Filtered.

標準のデジタル ミュージック シンセサイザーを実装し、民謡の演奏に使用します。サンプル レートを 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)

Figure contains an axes object. The axes object with title Fres = 8.2798 Hz, Tres = 310 ms, xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

信号をハイパス フィルター処理して、主旋律を伴奏から分離します。450 Hz の通過帯域周波数を指定します。時間領域と周波数領域で元の信号とフィルター処理された信号をプロットします。

hong = highpass(song,450,fs);

% To hear, type sound(hong,fs)

highpass(song,450,fs)

Figure contains 2 axes objects. Axes object 1 with title Highpass Filtering (Fpass = 450 Hz), xlabel Time (s) contains 2 objects of type line. These objects represent Original, Filtered. Axes object 2 with xlabel Frequency (kHz), ylabel Power Spectrum (dB) contains 2 objects of type line. These objects represent Original, Filtered.

主旋律のスペクトログラムをプロットします。

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

Figure contains an axes object. The axes object with title Fres = 8.2798 Hz, Tres = 310 ms, xlabel Time (s), ylabel Frequency (kHz) contains an object of type image.

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

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

[y1,d1] = highpass(x,200,fs,ImpulseResponse="iir",Steepness=0.5);
[y2,d2] = highpass(x,200,fs,ImpulseResponse="iir",Steepness=0.8);
[y3,d3] = highpass(x,200,fs,ImpulseResponse="iir",Steepness=0.95);

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

Figure contains an axes object. The axes object with title Fres = 976.801 mHz, xlabel Frequency (Hz), ylabel Power Spectrum (dB) contains 3 objects of type line. These objects represent Steepness = 0.5, Steepness = 0.8, Steepness = 0.95.

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

[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])
ylim([-130 10])

Figure contains an axes object. The axes object contains 3 objects of type line. These objects represent Steepness = 0.5, Steepness = 0.8, Steepness = 0.95.

入力引数

すべて折りたたむ

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

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

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

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

正規化された通過帯域周波数。区間 (0, 1) のスカラーとして指定します。

通過帯域周波数。区間 (0, fs/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 より低い周波数を 30 dB 減衰する最小次数の IIR フィルターを使用して入力をフィルター処理します。

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

例: 'ImpulseResponse','iir','StopbandAttenuation',30 は、fpass より低い周波数を 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) の範囲にあるスカラー値として指定します。急峻さが増加するにつれて、フィルター応答は理想のハイパス応答に近づきますが、フィルター長およびフィルター処理演算の計算コストの増加ももたらします。詳細については、ハイパス フィルターの急峻さを参照してください。

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

出力引数

すべて折りたたむ

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

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

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

  • フィルター応答を可視化するには、FVTool を使用します。

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

詳細

すべて折りたたむ

ハイパス フィルターの急峻さ

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

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

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

  • フィルターの "阻止帯域周波数" fstop は、それ未満では減衰が StopbandAttenuation を使用して指定した値以上になる周波数です。

  • フィルターの "遷移幅" W は、fpass – fstop です。ここで、fpass は指定した "通過帯域周波数" です。

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

Frequency response of a highpass filter with the Nyquist, passband, and stopband frequencies, the transition width, the stopband attenuation, and the passband ripple

Steepness に値 s を指定すると、関数は遷移幅を次のように計算します。

W = (1 – s) × fpass.

  • Steepness が 0.5 に等しい場合、遷移幅は、fpass の 50% です。

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

  • Steepness の既定値は 0.85 であり、これは fpass の 15% である遷移幅に相当します。

バージョン履歴

R2018a で導入