이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

instfreq

순시 주파수 추정

설명

예제

ifq = instfreq(x,fs)는 레이트 fs로 샘플링된 신호 x의 순시 주파수를 추정합니다. x가 행렬이면 함수는 각 열의 순시 주파수를 개별적으로 추정하고 결과를 ifq의 대응하는 열로 반환합니다.

ifq = instfreq(x,t)t에 저장된 시간 값으로 샘플링된 x의 순시 주파수를 추정합니다.

예제

ifq = instfreq(xt)는 MATLAB® 타임테이블 xt에 저장된 신호의 순시 주파수를 추정합니다. 함수는 타임테이블의 모든 변수와 각 변수 내에 있는 모든 열을 개별적으로 취급합니다.

예제

ifq = instfreq(tfd,fd,td)는 시간-주파수 분포 tfdfd에 저장된 주파수 값과 td에 저장된 시간 값으로 샘플링된 신호의 순시 주파수를 추정합니다.

예제

ifq = instfreq(___,Name,Value)는 이름-값 쌍의 인수를 사용하여, 위에 열거된 구문에 대한 추가 옵션을 지정합니다. 순시 주파수를 추정하는 데 사용되는 알고리즘이나 계산에 사용되는 주파수 제한을 지정할 수 있습니다.

예제

[ifq,t] = instfreq(___)ifq에 대응되는 샘플 시간으로 구성된 벡터 t도 반환합니다.

예제

instfreq(___)에 출력 인수를 지정하지 않으면 추정된 순시 주파수를 플로팅합니다.

예제

모두 축소

4초 동안 5kHz로 샘플링된 신호를 생성합니다. 신호는 증가하는 추세를 갖는 변동적인 주파수와 진동하는 진폭이 있는 영역으로 구분된, 지속 기간이 줄어드는 펄스 세트로 구성됩니다. 신호를 플로팅합니다.

fs = 5000;
t = 0:1/fs:4-1/fs;

s = besselj(0,1000*(sin(2*pi*t.^2/8).^4));

plot(t,s)

신호의 시간 종속 주파수를 전력 스펙트로그램의 첫 번째 적률로 추정합니다. 전력 스펙트로그램을 플로팅하고 순시 주파수를 겹쳐 표시합니다.

instfreq(s,fs)

2개의 전압 제어 발진기로 구성된, 2초 동안 1kHz로 샘플링된 2채널 신호를 생성합니다. 한 채널에는 시간에 따라 순시 주파수가 변하는 톱니파가 있으며, 이때 최댓값은 주기의 75% 위치에 있습니다. 다른 채널에는 시간에 따라 순시 주파수가 변하는 구형파가 있으며, 듀티 사이클이 30%입니다. 두 채널의 스펙트로그램을 플로팅합니다. 톱니파 채널의 시간 분해능을 0.1초로 지정하고 구형파 채널의 주파수 분해능을 10Hz로 지정합니다.

fs = 1000;
t = (0:1/fs:2)';
x = vco(sawtooth(2*pi*t,0.75),[0.1 0.4]*fs,fs);
y = vco(square(2*pi*t,30),[0.1 0.3]*fs,fs);

subplot(1,2,1)
pspectrum(x,fs,'spectrogram','TimeResolution',0.1)
subplot(1,2,2)
pspectrum(y,fs,'spectrogram','FrequencyResolution',10)

신호를 타임테이블에 저장합니다. 순시 주파수를 계산하고 표시합니다.

xt = timetable(seconds(t),x,y);

clf
instfreq(xt)

해석적 신호를 사용하여 계산을 반복합니다.

instfreq(xt,'Method','hilbert')

가우스 변조된 2차 처프를 생성합니다. 2kHz의 샘플 레이트와 4초의 신호 지속 기간을 지정합니다.

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

q = chirp(t-1,0,1/2,20,'quadratic',100,'convex').*exp(-1.7*(t-2).^2);
plot(t,q)

디폴트 설정으로 pspectrum 함수를 사용하여 신호의 전력 스펙트럼을 추정합니다. 추정값을 사용하여 순시 주파수를 계산합니다.

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

instfreq(p,f,t)

싱크로스퀴즈 푸리에 변환을 사용하여 계산을 반복합니다. 500개 샘플로 구성된 핸(Hann) 윈도우를 사용하여 신호를 세그먼트로 나누고 세그먼트에 윈도우를 적용합니다.

[s,sf,st] = fsst(q,fs,hann(500));

instfreq(abs(s).^2,sf,st)

두 가지 방법을 사용하여 구한 순시 주파수를 비교합니다.

[psf,pst] = instfreq(p,f,t);
[fsf,fst] = instfreq(abs(s).^2,sf,st);

plot(fst,fsf,pst,psf)

분산이 1/16인 백색 가우스 잡음을 포함하는, 0.3초 동안 1kHz로 샘플링된 정현파 신호를 생성합니다. 정현파 주파수를 200Hz로 지정합니다. 신호의 순시 주파수를 추정하고 표시합니다.

fs = 1000;
t = (0:1/fs:0.3-1/fs)';

x = sin(2*pi*200*t) + randn(size(t))/4;

instfreq(x,t)

이번에는 25Hz의 성긴 주파수 분해능을 입력값으로 갖는 시간-주파수 분포를 사용하여 신호의 순시 주파수를 다시 추정합니다.

[p,fd,td] = pspectrum(x,t,'spectrogram','FrequencyResolution',25);

instfreq(p,fd,td)

입력 인수

모두 축소

입력 신호로, 벡터나 행렬로 지정됩니다. x가 벡터이면 instfreq는 x를 단일채널로 처리합니다. x가 행렬이면 instfreq는 각 열의 순시 주파수를 개별적으로 계산하고 결과를 ifq의 대응하는 열로 반환합니다.

예: 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

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

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

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

예: seconds(1)은 신호의 연속 측정값 사이에 1초 지연값을 지정합니다.

예: seconds(0:8)은 신호가 8초 동안 1Hz로 샘플링된다고 지정합니다.

데이터형: single | double | duration | datetime

입력 타임테이블입니다. xt는 증가하는 유한한 행 시간값을 포함해야 합니다.

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

예: timetable(seconds(0:4)',randn(5,1))은 4초 동안 1Hz로 샘플링된 확률 과정을 지정합니다.

예: timetable(seconds(0:4)',randn(5,3),randn(5,4))는 둘 다 4초 동안 1Hz로 샘플링된 3채널 확률 과정과 4채널 확률 과정을 포함합니다.

데이터형: single | double

시간-주파수 분포로, fd에 저장된 주파수와 td에 저장된 시간 값으로 샘플링된 행렬로 지정됩니다. 이 입력 인수는 'Method''tfmoment'로 설정된 경우에만 지원됩니다.

예: [p,f,t] = pspectrum(sin(2*pi*(0:511)/4),4,'spectrogram')은 128초 동안 4Hz로 샘플링된 1Hz 정현파의 시간-주파수 분포와 이 값이 계산되는 주파수 및 시간을 지정합니다.

데이터형: single | double

시간-주파수 분포의 주파수 값과 시간 값으로, 벡터로 지정됩니다. 이 입력 인수는 'Method''tfmoment'로 설정된 경우에만 지원됩니다.

예: [p,f,t] = pspectrum(sin(2*pi*(0:511)/4),4,'spectrogram')은 128초 동안 4Hz로 샘플링된 1Hz 정현파의 시간-주파수 분포와 이 값이 계산되는 주파수 및 시간을 지정합니다.

데이터형: single | double

이름-값 쌍의 인수

선택적으로 Name,Value 인수가 쉼표로 구분되어 지정됩니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. Name은 따옴표 안에 표시해야 합니다. Name1,Value1,...,NameN,ValueN과 같이 여러 개의 이름-값 쌍의 인수를 어떤 순서로든 지정할 수 있습니다.

예: 'Method','hilbert','FrequencyLimits',[25 50]은 입력값의 해석적 신호를 미분하여 25Hz ~ 50Hz 범위에서 순시 주파수를 계산합니다.

주파수 범위로, 'FrequencyLimits'와 함께 요소를 2개 가진 벡터가 쉼표로 구분되어 지정됩니다(단위: 헤르츠). 이 인수는 'Method''tfmoment'로 설정된 경우에만 지원됩니다.

데이터형: single | double

계산 방법으로, 'Method'와 함께 'tfmoment' 또는 'hilbert'가 쉼표로 구분되어 지정됩니다.

  • 'tfmoment' — 순시 주파수를 x의 시간-주파수 분포의 첫 번째 조건부 스펙트럼 적률로 계산합니다. x가 불균일하게 샘플링된 경우 instfreq는 신호를 균일한 그리드로 보간하여 순시 주파수를 계산합니다.

  • 'hilbert' — 순시 주파수를 힐베르트 변환을 사용하여 구한 x의 해석적 신호의 위상의 도함수로 계산합니다. 이 방법은 균일하게 샘플링된 신호만 받으며 시간-주파수 분포 입력값은 지원하지 않습니다.

출력 인수

모두 축소

순시 주파수로, 입력값과 동일한 차원을 갖는 벡터, 행렬 또는 timetable형으로 반환됩니다.

주파수 추정값의 시간으로, 실수형 벡터, duration형 배열 또는 datetime형 배열로 반환됩니다.

세부 정보

모두 축소

순시 주파수

비정상(Nonstationary) 신호의 순시 주파수는 신호 변화에 따른 주파수의 평균과 관련이 있는 시변 파라미터입니다. [1], [2].

  • 'Method''tfmoment'로 설정된 경우 instfreq는 순시 주파수를 입력 신호의 시간-주파수 분포의 첫 번째 조건부 스펙트럼 적률로 추정합니다. 이 함수는 다음을 수행합니다.

    1. pspectrum 함수를 사용하여 신호의 스펙트로그램 전력 스펙트럼 P(t,f)를 계산하고 이 스펙트럼을 시간-주파수 분포로 사용합니다.

    2. 다음을 사용하여 순시 주파수를 추정합니다.

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

  • 'Method''hilbert'로 설정된 경우 instfreq는 순시 주파수를 입력값의 해석적 신호의 위상의 도함수로 추정합니다. 이 함수는 다음을 수행합니다.

    1. hilbert 함수를 사용하여 입력값의 해석적 신호 xA를 계산합니다.

    2. 다음을 사용하여 순시 주파수를 추정합니다.

      finst(t)=12πdϕdt,

      여기서 ϕ는 입력값의 해석적 신호의 위상입니다.

참고 문헌

[1] Boashash, Boualem. "Estimating and Interpreting The Instantaneous Frequency of a Signal—Part 1: Fundamentals." Proceedings of the IEEE®. Vol. 80, April 1992, pp. 520–538.

[2] Boashash, Boualem. "Estimating and Interpreting The Instantaneous Frequency of a Signal—Part 2: Algorithms and Applications." Proceedings of the IEEE. Vol. 80, April 1992, pp. 540–568.

R2018a에 개발됨