Main Content

tsa

시간 동기 신호 평균

설명

예제

ta = tsa(x,fs,tp)tp에 지정된 펄스 시간에 fs의 레이트로 샘플링된 신호 x의 시간 동기 평균을 반환합니다.

ta = tsa(x,t,tp)t에 저장된 시간 값에 샘플링된 x의 시간 동기 평균을 반환합니다.

예제

ta = tsa(xt,tp)는 MATLAB® 타임테이블 xt에 저장된 신호의 시간 동기 평균을 반환합니다.

예제

ta = tsa(___,Name=Value)는 이름-값 인수를 사용하여, 위에 열거된 구문에 대한 추가 옵션을 지정합니다. 예를 들어, 축 회전당 회전속도계 펄스의 수를 지정하거나 시간 영역 또는 주파수 영역에서 신호의 평균을 구하도록 선택할 수 있습니다.

[ta,t,p,rpm] = tsa(___)에서 ta에 대응하는 샘플 시간의 벡터인 t, 위상 값의 벡터 p, ta에 대응하는 일정한 회전 속도(분당 공전 수)인 rpm도 반환합니다.

tsa(___) 함수에 출력 인수를 지정하지 않으면 각 신호의 세그먼트에 대응하는 시간 영역 신호와 시간 동기 평균 신호를 현재 Figure에 플로팅합니다.

예제

모두 축소

잡음이 있는 정현파의 시간 동기 평균을 계산합니다.

백색 가우스 잡음에 묻혀 있는 정현파로 구성된 신호를 생성합니다. 이 신호는 20초간 500Hz로 샘플링됩니다. 정현파 주파수를 10Hz로, 잡음 분산을 0.01로 지정합니다. 신호의 어떤 한 주기를 플로팅합니다.

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])

Figure contains an axes object. The axes object contains an object of type line.

신호의 시간 동기 평균을 계산합니다. 동기 신호의 경우 정현파와 같은 주기의 펄스 신호 집합을 사용합니다. 출력 인수 없이 tsa를 사용하여 결과를 표시합니다.

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

tsa(y,fs,tPulse)

Figure contains an axes object. The axes object with title Time-Synchronous Average Signal, xlabel Phase (rotations), ylabel Amplitude contains 200 objects of type line.

지수적으로 감쇠하는 2차 처프로 구성된 신호를 생성합니다. 신호는 2초 동안 1kHz로 샘플링됩니다. 처프의 초기 주파수는 2Hz이고, 처음 1초가 지나면 28Hz로 증가합니다. 감쇠의 특성 시간은 1/2초입니다. 신호를 플로팅합니다.

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

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

plot(t,x)

Figure contains an axes object. The axes object contains an object of type line.

시간 벡터를 사용하여 duration형 배열을 만듭니다. duration형 배열과 신호를 사용하여 타임테이블을 생성합니다. 신호 피크의 위치를 사용하여 펄스 시간을 확인합니다. 시간 동기 평균을 표시합니다.

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

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

Figure contains an axes object. The axes object with title Time-Synchronous Average Signal, xlabel Phase (rotations), ylabel Amplitude contains 73 objects of type line.

시간 동기 평균을 계산합니다. 출력 인수의 유형을 표시합니다. 샘플 시간이 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형 벡터와 신호를 사용하여 타임테이블을 생성합니다. 시간 동기 평균을 계산하되 이번에는 15회전 세트에 대한 평균을 구합니다.

출력 인수의 유형을 표시합니다. 입력 타임테이블에서 datetime형 벡터를 사용했더라도 샘플 시간이 duration형 배열에 다시 저장됩니다.

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

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

Figure contains an axes object. The axes object with title Time-Synchronous Average Signal, xlabel Phase (rotations), ylabel Amplitude contains 5 objects of type line.

[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              

스위치를 끈 후 속도가 느려지는 선풍기 날의 위치에 대해 시간 동기 평균을 계산합니다.

2400rpm으로 회전하는 책상용 선풍기가 꺼지는 경우를 생각해 보겠습니다. 공기 저항(및 무시할 수 있는 정도로 미미한 베어링 마찰)으로 인해 선풍기의 날개가 약 5초 후 멈춥니다. 고속 카메라가 1kHz의 속도로 선풍기 날개 중 하나의 x 좌표를 측정합니다.

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

rpm0 = 2400;

중심에서 반경 10cm로 회전하는 점질량으로 이 선풍기 날개를 이상화합니다. 날개에 속도에 비례하는 끄는 힘이 적용되므로 위상각에 대한 다음 표현식이 성립합니다.

ϕ=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));

xy 좌표를 계산하고 플로팅합니다. 백색 가우스 잡음을 추가합니다.

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

plot(t,x,t,y)

Figure contains an axes object. The axes object contains 2 objects of type line.

동기 신호를 알아보겠습니다. tachorpm 함수를 사용하여 펄스 시간을 구합니다. 검색 범위를 2.5초 이전의 시간까지로 제한합니다. 지수적 감쇠를 보려면 회전 속도를 플로팅하십시오.

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

Figure contains 2 axes objects. Axes object 1 with title Tachometer Signal, xlabel Time (secs), ylabel Volts contains 4 objects of type line. One or more of the lines displays its values using only markers These objects represent Detected pulses, State levels. Axes object 2 with title RPM Signal, ylabel RPMs contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent RPM signal, RPM at pulses.

정현파의 한 주기에 해당하는 시간 동기 평균 신호를 계산하고 플로팅합니다. 주파수 영역에서 평균을 구합니다.

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

Figure contains an axes object. The axes object with title Time-Synchronous Average Signal, xlabel Phase (rotations), ylabel Amplitude contains 29 objects of type line.

입력 인수

모두 축소

입력 신호로, 벡터로 지정됩니다.

예: cos(pi/4*(0:159))+randn(1,160)은 단일채널 행 벡터 신호입니다.

데이터형: single | double

샘플 레이트로, 양의 스칼라로 지정됩니다.

데이터형: single | double

펄스 시간으로, 스칼라 또는 벡터로 지정됩니다.

  • 스칼라 — 회전이 발생하는 상수 시간 구간.

  • 벡터 — 순증가하는 음이 아닌 시점으로 상수 회전 위상을 정의합니다.

tachorpm을 사용하여 회전속도계 신호로부터 회전속도계 펄스 시간을 추출합니다.

데이터형: single | double

샘플 시간으로, 벡터, duration형 스칼라 또는 duration형 배열로 지정됩니다.

  • 스칼라 — x의 연속 샘플 간 시간 간격.

  • 벡터 또는 duration형 배열 — x의 각 요소에 대응되는 시점.

데이터형: single | double | duration

입력 타임테이블입니다. xt는 증가하는 유한한 행 시간값과 벡터로 구성된 변수 하나만 포함해야 합니다.

타임테이블에 누락되거나 중복된 시간 지점이 포함된 경우 누락되거나 중복되거나 불균일하게 분포된 시간값이 포함된 타임테이블 정리하기에 나와 있는 팁을 활용하여 수정할 수 있습니다.

예: timetable(seconds(0:4)',randn(5,2))는 4초 동안 1Hz로 샘플링된 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

출력 인수

모두 축소

시간 동기 신호 평균으로, 벡터 또는 타임테이블로 반환됩니다. tsa에 대한 입력값이 타임테이블이면 ta도 타임테이블입니다.

  • 입력 타임테이블이 시간 값을 duration형 배열로 저장하면 ta의 시간 값도 duration형 배열입니다.

  • 입력 타임테이블이 시간 값을 datetime형 배열로 저장할 경우 ta의 시간 값은 초를 단위로 하는 duration형 배열입니다.

샘플 시간으로, 벡터 또는 duration형 배열로 반환됩니다.

  • tsa에 대한 입력값이 시간 값을 duration형 배열로 저장하는 타임테이블인 경우 t는 입력 시간 값과 동일한 형식을 갖습니다.

  • tsa에 대한 입력값이 시간 값을 datetime형 배열로 저장하는 타임테이블인 경우 t는 초를 단위로 하는 duration형 벡터입니다.

  • tsa에 대한 입력값이 숫자형 벡터이고 입력 샘플 시간 tduration형 스칼라 또는 duration형 배열로 저장되는 경우 t는 입력 t와 동일한 단위를 갖는 duration형 배열입니다.

위상 값으로, 회전 수를 단위로 하는 벡터 또는 타임테이블로 반환됩니다.

tsa에 대한 입력값이 타임테이블이면 p도 타임테이블입니다. pta의 시간 값과 동일한 값을 갖습니다.

일정한 회전 속도로, 분당 회전 수를 단위로 하는 스칼라로 반환됩니다.

알고리즘

입력 신호, 샘플 레이트, 회전속도계 펄스 세트가 주어지면 tsa는 다음 단계를 수행합니다.

  1. 회전속도계 펄스 및 PulsesPerRotation에 지정된 값을 기반으로 사이클 시작 시간 및 종료 시간을 확인합니다.

  2. 'ResampleFactor'에 지정된 값을 기반으로 입력 신호를 리샘플링합니다.

  3. 'Method'에 지정된 옵션을 기반으로 리샘플링된 신호의 평균을 구합니다.

    • Method"fft"로 설정된 경우 함수는 다음을 수행합니다.

      1. 신호를 각기 다른 사이클에 해당하는 세그먼트로 나눕니다.

      2. 각 세그먼트의 이산 푸리에 변환을 계산합니다.

      3. 길이가 긴 변환을 잘라내어 모든 변환의 길이를 같게 합니다.

      4. 스펙트럼의 평균을 구합니다.

      5. 시간 영역으로 변환하기 위해 평균의 이산 푸리에 역변환을 계산합니다.

    • Method가 시간 영역 방법 중 하나로 설정된 경우 함수는 다음을 수행합니다.

      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에 개발됨

참고 항목