Main Content

instbw

瞬時帯域幅の推定

R2021a 以降

説明

ibw = instbw(x,fs) は、fs のレートでサンプリングした信号の瞬時帯域幅 x を推定します。x が行列の場合、この関数は各列の瞬時帯域幅を個別に推定し、結果を対応する列 ibw で返します。

ibw = instbw(x,t) は、t に格納されている時間値でサンプリングした x の瞬時帯域幅を推定します。

ibw = instbw(xt) は、MATLAB® timetable xt に格納されている信号の瞬時帯域幅を推定します。関数は、timetable 内のすべての変数および各変数内のすべての列を個別に処理します。

ibw = instbw(tfd,fd,td) は、その時間-周波数分布 tfdfd に格納されている帯域幅値および td に格納されている時間値でサンプリングされる信号の瞬時帯域幅を推定します。

ibw = instbw(___,Name=Value) は、名前と値の引数を使用して、上記の任意の構文に追加オプションを指定します。計算に使用するスケール係数または周波数範囲を指定できます。たとえば、FrequencyLimits=[10 20] は、10 Hz から 20 Hz の範囲で入力の瞬時帯域幅を計算します。

また [ibw,t] = instbw(___) は、ibw に対応するサンプル時間のベクトル t も返します。

出力引数なしで instbw(___) を使用すると、推定された瞬時帯域幅がプロットされます。

すべて折りたたむ

600 Hz で 2 秒間サンプリングされた信号を生成します。この信号は、正弦関数的に変化する周波数成分をもつチャープで構成されます。

fs = 6e2;

x = vco(sin(2*pi*(0:1/fs:2)),[0.1 0.4]*fs,fs);

信号のスペクトログラムを計算し、ウォーターフォール プロットとして表示します。

[p,f,t] = pspectrum(x,fs,'spectrogram');

waterfall(f,t,p')
ax = gca;
ax.XDir = 'reverse';
view(30,45)

信号の瞬時帯域幅を推定してプロットします。

instbw(x,fs)
ylim([0 50])

2 kHz で 2 秒間サンプリングされた信号を生成します。この信号は、増加する周波数の、一定の間隔で追加されて指数関数的に減衰する正弦波の重ね合わせで構成されます。信号をプロットします。

fs = 2000;
t = 0:1/fs:2-1/fs;

frq = (50:100:950)';

amp = (t > 4*(frq-frq(1))/fs);
x = sum(amp.*sin(2*pi*t.*frq).*exp(-3*t));

% To hear, type sound(x,fs)

plot(t,x)
xlabel('Time (s)')

信号の瞬時帯域幅を計算して表示します。

[bw,bt] = instbw(x,t);

plot(bt,bw)
xlabel('Time (s)')
ylabel('Bandwidth (Hz)')

信号のスペクトログラムを計算します。100 ミリ秒の時間分解能を指定し、隣接するセグメント間のオーバーラップとして 0 を入力します。スペクトログラムを使用して信号の瞬時周波数を推定します。

[p,ff,tt] = pspectrum(x,t,'spectrogram','TimeResolution',0.1,'OverlapPercent',0);

instfreq(p,ff,tt)

スペクトログラムを使用して瞬時帯域幅を計算します。

instbw(p,ff,tt)

14 kHz で 2 秒間サンプリングされた信号を生成します。信号の周波数は、ガウス変調されたチャープに応じて変化します。信号を MATLAB® の timetable として保存します。

fs = 14000;
t = (0:1/fs:2)';
s = vco(chirp(t+.1,0,t(end),3).*exp(-2*(t-1).^2),[0.1 0.4]*fs,fs);

sx = timetable(s,'SampleRate',fs);

信号のスペクトログラムを計算します。0.2 の漏れ、50 ミリ秒の時間分解能、99% の隣接するセグメント間のオーバーラップを指定します。スペクトログラムを表示します。

opts = {'spectrogram','Leakage',0.2,'TimeResolution',0.05,'OverlapPercent',99};

[p,ff,tt] = pspectrum(sx,opts{:});

pspectrum(sx,opts{:})

信号の瞬時帯域幅を推定して表示します。

instbw(p,ff,tt)

300 Hz と 1,200 Hz の間で周波数が正弦関数的に変化するチャープで構成される信号を生成します。信号は 3 kHz で 2 秒間サンプリングされます。

fs = 3e3;
t = 0:1/fs:2;
y = chirp(t,100,1,200,"quadratic");
y = vco(cos(2*pi*t),[0.1 0.4]*fs,fs);

instfreq を使用して、信号の瞬時周波数と対応するサンプル時間を計算します。tfsmoment (Predictive Maintenance Toolbox)で計算された信号の時間-周波数分布の非集中 1 次条件スペクトル モーメントに出力が対応していることを確認します。

[z,tz] = instfreq(y,fs);
[a,ta] = tfsmoment(y,fs,1,Centralize=false);

plot(tz,z,ta,a,".")
legend("instfreq","tfsmoment")

instbw を使用して、信号の瞬時帯域幅と対応するサンプル時間を計算します。スケール係数を 1 に指定します。信号の時間分布の集中 2 次条件スペクトル モーメントの平方根に出力が対応していることを確認します。つまり、instbw は標準偏差を生成し、tfsmoment は分散を生成します。

[w,tw] = instbw(y,fs,ScaleFactor=1);
[m,tm] = tfsmoment(y,fs,2);

plot(tw,w,tm,sqrt(m),".")
legend("instbw","tfsmoment")

入力引数

すべて折りたたむ

ベクトルまたは行列として指定される入力信号。x がベクトルの場合、instbw では単一チャネルとして取り扱います。x が行列の場合、この関数は各列の瞬時帯域幅を個別に計算し、結果を対応する列 ibw で返します。

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

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

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

サンプル レート。正のスカラーで指定します。サンプル レートは単位時間あたりのサンプル数です。時間の単位が秒の場合、サンプル レートの単位は Hz です。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

サンプル時間。実数ベクトル、duration スカラー、duration 配列、または datetime 配列で指定します。

  • duration スカラー — x の連続するサンプル間の時間間隔。

  • 実数ベクトル、duration 配列、または datetime 配列 — x の各要素に対応する時点。

例: seconds(1) は信号の連続測定値間に 1 秒の中断を指定します。

例: seconds(0:8) は信号が 1 Hz で 8 秒間サンプリングされることを指定します。

データ型: single | double | duration | datetime

入力 timetable。xt に増加する有限の行時間を含めなければなりません。

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

例: timetable(seconds(0:4)',randn(5,1)) は 1 Hz で 4 秒間サンプリングされたランダム過程を指定します。

例: timetable(seconds(0:4)',randn(5,3),randn(5,4)) にはいずれも 1 Hz で 4 秒間サンプリングされた、3 チャネルのランダム過程と 4 チャネルのランダム過程が含まれます。

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

時間-周波数分布。fd に格納されている周波数および td に格納されている時間値でサンプリングされる行列として指定します。

例: [p,f,t] = pspectrum(sin(2*pi*(0:511)/4),4,"spectrogram") は、4 Hz で 128 秒間サンプリングされた 1 Hz の正弦波の時間-周波数分布と、それを計算する周波数および時間も指定します。

データ型: single | double

時間-周波数分布の周波数および時間値。ベクトルで指定します。

例: [p,f,t] = pspectrum(sin(2*pi*(0:511)/4),4,"spectrogram") は、4 Hz で 128 秒間サンプリングされた 1 Hz の正弦波の時間-周波数分布と、それを計算する周波数および時間も指定します。

データ型: single | double

名前と値の引数

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

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

例: 'FrequencyLimits',[25 50] は、25 Hz から 50 Hz の範囲で入力の瞬時帯域幅を計算します。

周波数範囲。Hz 単位の 2 要素ベクトルとして指定します。FrequencyLimits を指定していない場合、この引数の既定値は実数値の信号では [0 fs/2]、複素数値の信号では [-fs/2 fs/2] になります。

データ型: single | double

スペクトル モーメントのスケーリング係数。実数スカラーとして指定します。

データ型: single | double

出力引数

すべて折りたたむ

瞬時帯域幅。入力と同じ次元のベクトル、行列、または timetable として返されます。

データ型: single | double

帯域幅推定値の時間。実数ベクトル、duration 配列、または datetime 配列として返されます。

データ型: single | double

メモ

tfd、または td が単精度で、入力ベクトルまたは行列が倍精度の場合、関数は出力を単精度で返します。出力データ型はサンプル レートのデータ型に依存しません。

詳細

すべて折りたたむ

瞬時帯域幅

非定常信号の "瞬時帯域幅" は、特定の時点での平均に関して、瞬時周波数の広がりに関連する時変パラメーターです[1][2]

instbw は、入力信号の時間-周波数分布の 2 番目の条件スペクトル モーメントの平方根として瞬時帯域幅を推定します。関数は以下を実行します。

  1. 関数 pspectrum を使用して入力のスペクトログラム パワー スペクトル P(t,f) を計算し、このスペクトルを時間-周波数分布として使用します。

  2. 以下を使用して瞬時帯域幅を推定します。

    σf2(t)=0(ffinst(t))2P(t,f)df0P(t,f)df,

    ここで、finst(t) は、instfreq によって返され、以下によって推定された瞬時周波数です。

    finst(t)=0fP(t,f)df0P(t,f)df.

参照

[1] Boashash, Boualem. “Estimating and Interpreting the Instantaneous Frequency of a Signal. I. Fundamentals.” Proceedings of the IEEE® 80, no. 4 (April 1992): 520–538. https://doi.org/10.1109/5.135376.

[2] Boashash, Boualem. "Estimating and Interpreting The Instantaneous Frequency of a Signal. II. Algorithms and Applications." Proceedings of the IEEE 80, no. 4 (May 1992): 540–568. https://doi.org/10.1109/5.135378.

拡張機能

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

バージョン履歴

R2021a で導入

すべて展開する

参考

| | (Predictive Maintenance Toolbox) | (Predictive Maintenance Toolbox) | (Predictive Maintenance Toolbox)