Main Content

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

tsa

説明

ta = tsa(x,fs,tp) は、tp で指定されたパルス時間にレート fs でサンプリングされた信号 x の時間同期平均を返します。

ta = tsa(x,t,tp) は、t に格納された時間値でサンプリングされた x の時間同期平均を返します。

ta = tsa(xt,tp) は、MATLAB® timetable xt に格納された信号の時間同期平均を返します。

ta = tsa(___,Name=Value) は、名前と値の引数を使用して、上記の任意の構文に追加オプションを指定します。たとえば、シャフトの 1 回転あたりのタコメーター パルス数を指定したり、時間領域または周波数領域どちらの信号の平均を求めるかを選択したりできます。

[ta,t,p,rpm] = tsa(___) は、ta に対応するサンプル時間のベクトル t、パルス値のベクトル pta に対応する定数回転速度 (分あたりの回転数) rpm も返します。

出力引数なしの tsa(___) は、現在の Figure の各信号セグメントに対応する時間同期平均信号および時間領域信号をプロットします。

すべて折りたたむ

ノイズの多い正弦波の時間同期平均を計算します。

ホワイト ガウス ノイズに含まれ正弦波で構成される信号を生成します。信号は、500 Hz で 20 秒間サンプリングされます。10 Hz の正弦波周波数と 0.01 のノイズ分散を指定します。信号の 1 周期をプロットします。

fs = 500;
t = 0:1/fs:20-1/fs;

f0 = 10;
y = sin(2*pi*f0*t) + randn(size(t))/10;

plot(t,y)
xlim([0 1/f0])

信号の時間同期平均を計算します。信号を同期させるために、正弦波と同じ周期をもつ一連のパルスを使用します。出力引数なしで tsa を使用して結果を表示します。

tPulse = 0:1/f0:max(t);

tsa(y,fs,tPulse)

指数的に減衰する 2 次チャープから構成される信号を生成します。信号は 1 kHz で 2 秒間サンプリングされます。チャープの初期周波数は 2 Hz で、最初の 1 秒後に 280 Hz まで増大します。減衰の特性時間は 1/2 秒です。信号をプロットします。

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

x = exp(-2*t').*chirp(t',2,1,28,'quadratic');

plot(t,x)

時間ベクトルを使用して duration 配列を作成します。この duration 配列と信号で timetable を構築します。信号のピークの位置を使用してパルス時間を判別します。時間同期平均を表示します。

ts = seconds(t)';
tx = timetable(ts,x);

[~,lc] = findpeaks(x,t);
tsa(tx,lc)

時間同期平均を計算します。出力引数の型を表示します。サンプル時間は duration 配列に格納されます。

[xta,xt,xp,xrpm] = tsa(tx,lc);
whos x*
  Name         Size            Bytes  Class        Attributes

  x         2001x1             16008  double                 
  xp           9x1              1133  timetable              
  xrpm         1x1                 8  double                 
  xt           9x1                74  duration               
  xta          9x1              1129  timetable              

duration 配列を datetime ベクトルに変換します。datetime ベクトルと信号を使用して timetable を構築します。時間同期平均を計算しますが、今度は、15 回転分の平均を求めます。

出力引数の型を表示します。入力 timetable が datetime ベクトルを使用していても、ここでも、サンプル時間は duration 配列に格納されます。

dtb = datetime(datevec(ts));
dtt = timetable(dtb,x);

nr = 15;
tsa(dtt,lc,'NumRotations',nr)

[dta,dt,dp,drpm] = tsa(dtt,lc,'NumRotations',nr);
whos d*
  Name         Size            Bytes  Class        Attributes

  dp         135x1              3149  timetable              
  drpm         1x1                 8  double                 
  dt         135x1              1082  duration               
  dta        135x1              3145  timetable              
  dtb       2001x1             32016  datetime               
  dtt       2001x1             49001  timetable              

スイッチオフ後ファン ブレードが遅くなっていくときのファン ブレードの位置の時間同期平均を計算します。

2400 rpm で回転する卓上扇風機をオフにします。空気抵抗 (ベアリングの摩擦からの寄与は無視できるとします) により約 5 秒でファンのローターが停止します。高速カメラでファン ブレードの 1 つの x 座標を 1 kHz のレートで測定します。

fs = 1000;
t = 0:1/fs:5-1/fs;

rpm0 = 2400;

このファン ブレードを、ローターを中心として半径 10 cm を回転する質点として理想化します。ブレードには速度に比例する抵抗力がかかり、その結果、位相角は次の式で求められます。

ϕ=2πf0T(1-e-t/T),

ここで、f0 は初期周波数、T=0.75 秒は減衰時間です。

a = 0.1;
f0 = rpm0/60;
T = 0.75;

phi = 2*pi*f0*T*(1-exp(-t/T));

x 座標と y 座標を計算し、プロットします。ホワイト ガウス ノイズを付加します。

x = a*cos(phi) + randn(size(phi))/200;
y = a*sin(phi) + randn(size(phi))/200;

plot(t,x,t,y)

同期される信号を求めます。関数 tachorpm を使用して、パルス時間を見つけます。検索する時間を 2.5 秒までに制限します。回転速度をプロットして、その指数関数的減衰を確認します。

[rpm,~,tp] = tachorpm(x(t<2.5),fs);
tachorpm(x(t<2.5),fs)

正弦波の周期に対応する時間同期平均信号を計算し、プロットします。周波数領域で平均化を実行します。

clf
tsa(x,fs,tp,Method="fft")

入力引数

すべて折りたたむ

入力信号。ベクトルで指定します。

例: cos(pi/4*(0:159))+randn(1,160) は単一チャネルの行ベクトル信号です。

データ型: single | double

サンプル レート。正のスカラーで指定します。

データ型: single | double

パルス時間。スカラーまたはベクトルで指定します。

  • スカラー — 回転が起こる定数の時間間隔

  • ベクトル — 定数の回転位相を定義する非負の厳密に増加する瞬時

タコメーター信号からタコメーターのパルス時間を抽出するために tachorpm を使用します。

データ型: single | double

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

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

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

データ型: single | double | duration

入力 timetable。xt には、増加する有限の行時間と、ベクトルで構成される変数を 1 つのみ含めなければなりません。

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

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

データ型: single | double

名前と値の引数

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

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

例: 'Method','pchip','ResampleFactor',10 は、信号を 10 の係数でアップサンプリングし、区分的 3 次エルミート内挿を使用して時間領域で平均化することを指定します。

内挿方式。次のいずれかの値として指定します。

  • "linear" — 線形内挿を実行し時間領域で平均化します。

  • "spline" — 3 次スプライン内挿を実行し時間領域で平均化します。

  • "pchip" — 区分的 3 次エルミート内挿を実行し時間領域で平均化します。

  • "fft" — 周波数領域で平均化を実行します。

ta におけるシャフトの回転数。正の整数スカラーとして指定します。

データ型: single | double

シャフトの回転あたりの時点数。正のスカラーとして指定します。

データ型: single | double

サンプル レートを上げる係数。正の整数スカラーとして指定します。

データ型: single | double

出力引数

すべて折りたたむ

時間同期信号平均。ベクトルまたは timetable として返されます。tsa への入力が timetable である場合、ta も timetable になります。

  • 入力 timetable の時間値が duration 配列として格納されている場合、ta の時間値も duration 配列です。

  • 入力 timetable の時間値が datetime 配列として格納されている場合、ta の時間値は秒単位で表される duration 配列です。

サンプル時間。ベクトルまたは duration 配列として返されます。

  • tsa への入力が timetable で、時間値が duration 配列として格納されている場合、t の形式は、入力時間値と同じです。

  • tsa への入力が timetable で、時間値が datetime 配列として格納されている場合、t は秒単位で表される duration ベクトルです。

  • tsa への入力が数値ベクトルで、入力サンプル時間 tduration スカラーまたは duration 配列に格納されている場合、t は入力 t と同じ単位を持つ duration 配列です。

位相値。ベクトルまたは回転数単位で表される timetable として返されます。

tsa への入力が timetable である場合、p も timetable です。p の値は、ta の時間値と同じです。

定数回転速度。1 分あたりの回転数で表されるスカラーとして返されます。

アルゴリズム

入力信号、サンプル レート、一連のタコメーター パルスが与えられると、tsa は以下のステップを実行します。

  1. タコメーター パルスと PulsesPerRotation で指定された値に基づいてサイクルの開始時間と終了時間を決定します。

  2. 'ResampleFactor' で指定された値に基づいて入力信号をリサンプリングします。

  3. 'Method' で指定されたオプションに基づいてリサンプリングした信号を平均化します。

    • Method"fft" に設定した場合、関数は次の処理を行います。

      1. 信号をさまざまなサイクルに対応するセグメントに分割します。

      2. 各セグメントの離散フーリエ変換を計算します。

      3. すべての変換が同じ長さになるように長すぎる変換を切り捨てます。

      4. スペクトルを平均化します。

      5. 平均の逆離散フーリエ変換を計算して時間領域に変換します。

    • Method が時間領域方式の 1 つに設定されている場合、関数は次の処理を行います。

      1. 指定された方式を使用して、信号をさまざまなサイクルに対応する一定間隔のサンプルのグリッドに内挿します。

      2. NumRotations で指定された値に基づいてリサンプリングした信号のセグメントを連結します。

      3. すべてのセグメントの平均を計算します。

参照

[1] Bechhoefer, Eric, and Michael Kingsley. "A Review of Time-Synchronous Average Algorithms." Proceedings of the Annual Conference of the Prognostics and Health Management Society, San Diego, CA, September-October, 2009.

拡張機能

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

バージョン履歴

R2017b で導入