ドキュメンテーション

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

highpass

ハイパス フィルター信号

構文

y = highpass(x,wpass)
y = highpass(x,fpass,fs)
y = highpass(xt,fpass)
y = highpass(___,Name,Value)
[y,d] = highpass(___)
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)

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

fs = 2e3;
t = 0:1/fs:0.3-1/fs;

l = [0 130.81 146.83 164.81 174.61 196.00 220 246.94];
m = [0 261.63 293.66 329.63 349.23 392.00 440 493.88];
h = [0 523.25 587.33 659.25 698.46 783.99 880 987.77];
note = @(f,g) [1 1 1]*sin(2*pi*[l(g) m(g) h(f)]'.*t);

mel = [3 2 1 2 3 3 3 0 2 2 2 0 3 5 5 0 3 2 1 2 3 3 3 3 2 2 3 2 1]+1;
acc = [3 0 5 0 3 0 3 3 2 0 2 2 3 0 5 5 3 0 5 0 3 3 3 0 2 2 3 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)

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

hong = highpass(song,450,fs);

% To hear, type sound(hong,fs)

highpass(song,450,fs)

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

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

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','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','Steepness = 0.8','Steepness = 0.95')
ylim([-130 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) のスカラーとして指定します。

通過帯域周波数。区間 (0, fs/2) のスカラーとして指定します。

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

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

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

例: timetable(seconds(0:4)',randn(5,1)) は 1 Hz で 4 秒間サンプリングされた確率変数を指定します。

名前と値のペアの引数

オプションの引数 Name,Value のコンマ区切りペアを指定します。Name は引数名で、Value は対応する値です。Name は引用符で囲まなければなりません。Name1,Value1,...,NameN,ValueN のように、複数の名前と値のペアの引数を、任意の順番で指定できます。

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

フィルターのインパルス応答のタイプ。'ImpulseResponse' と、'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.5, 1) の範囲のスカラーから構成されるコンマ区切りのペアとして指定します。急峻さが増加するにつれて、フィルター応答は理想のハイパス応答に近づきますが、フィルター長およびフィルター処理演算の計算コストの増加ももたらします。詳細は、ハイパス フィルターの急峻さを参照してください。

フィルター阻止帯域の減衰量。'StopbandAttenuation' と、dB 単位の正のスカラーで構成されるコンマ区切りペアで指定します。

出力引数

すべて折りたたむ

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

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

  • d を使用して信号 x をフィルター処理するには、filter(d,x) を使用します。

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

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

詳細

すべて折りたたむ

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

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

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

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

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

  • フィルターの "遷移幅"、W は、fpass – fstop です。

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

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

W = (1 – s) × fpass

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

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

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

R2018a で導入