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

pspectrum

주파수 영역과 시간-주파수 영역의 신호 분석

설명

예제

p = pspectrum(x)x의 전력 스펙트럼을 반환합니다.

  • x가 벡터이거나 데이터로 구성된 벡터를 갖는 타임테이블인 경우 단일 채널로 처리됩니다.

  • x가 행렬, 행렬 변수를 갖는 타임테이블 또는 여러 개의 벡터 변수를 갖는 타임테이블인 경우 각 채널에 대해 스펙트럼이 개별적으로 계산되고 p의 개별 열에 저장됩니다.

p = pspectrum(x,fs)fs 레이트로 샘플링된 벡터 또는 행렬 신호의 전력 스펙트럼을 반환합니다.

예제

p = pspectrum(x,t)t에 지정된 시점에서 샘플링된 행렬 신호 또는 벡터의 전력 스펙트럼을 반환합니다.

p = pspectrum(___,type)은 함수를 통해 수행되는 스펙트럼 분석의 종류를 지정합니다. type'power', 'spectrogram' 또는 'persistence'로 지정합니다. 이 구문은 위에 열거된 구문에 사용할 수 있습니다.

예제

p = pspectrum(___,Name,Value)는 이름-값 쌍의 인수를 사용하여 추가 옵션을 지정합니다. 옵션으로는 주파수 분해능 대역폭과 인접 세그먼트 간의 중첩 백분율 등이 있습니다.

[p,f] = pspectrum(___)p에 포함된 스펙트럼 추정값에 대응하는 주파수를 반환합니다.

예제

[p,f,t] = pspectrum(___,'spectrogram')은 단시간 전력 스펙트럼 추정값을 계산할 때 사용되는, 윈도우가 적용된 세그먼트 중심에 대응하는 시점으로 구성된 벡터도 반환합니다.

[p,f,pwr] = pspectrum(___,'persistence')는 지속성 스펙트럼에 포함된 추정값에 대응하는 전력 값으로 구성된 벡터도 반환합니다.

예제

pspectrum(___)에 출력 인수를 지정하지 않으면 현재 Figure 창에 스펙트럼 추정값을 플로팅합니다.

예제

모두 축소

잡음 있는 정현파의 전력 스펙트럼을 계산합니다. 정현파 주파수를 200Hz로 지정합니다. 296밀리초 동안 1kHz로 정현파를 샘플링합니다. 이 신호에 분산이 0.1²인 백색 가우스 잡음을 포함시킵니다. MATLAB® 타임테이블에 신호와 신호의 시간 정보를 저장합니다.

Fs = 1000;
t = (0:1/Fs:0.296)';
x = cos(2*pi*t*200)+0.1*randn(size(t));
xTable = timetable(seconds(t),x);

신호의 스펙트럼을 계산합니다. 스펙트럼을 데시벨로 표현한 다음 플로팅합니다.

[pxx,f] = pspectrum(xTable);

plot(f,pow2db(pxx))
grid on
xlabel('Frequency (Hz)')
ylabel('Power Spectrum (dB)')
title('Default Frequency Resolution')

정현파의 전력 스펙트럼을 다시 계산하고, 이번에는 더 성긴 주파수 분해능 25Hz를 사용합니다. 출력 인수 없이 pspectrum 함수를 사용하여 스펙트럼을 플로팅합니다.

pspectrum(xTable,'FrequencyResolution',25)

2초 동안 100Hz에서 샘플링된 2채널 신호를 생성합니다.

  1. 첫 번째 채널은 20Hz 톤과 21Hz 톤으로 구성되어 있습니다. 두 톤 모두 단위 진폭을 갖습니다.

  2. 두 번째 채널도 두 개의 톤으로 구성되어 있습니다. 한 톤은 단위 진폭과 20Hz 주파수를 갖습니다. 다른 톤은 1/100 진폭과 30Hz 주파수를 갖습니다.

fs = 100;
t = (0:1/fs:2-1/fs)';

x = sin(2*pi*[20 20].*t) + [1 1/100].*sin(2*pi*[21 30].*t);

이 신호에 백색 잡음을 포함시킵니다. 40dB의 신호 대 잡음비를 지정합니다. 신호를 플로팅합니다.

x = x + randn(size(x)).*std(x)/db2mag(40);

plot(t,x)

두 채널의 스펙트럼을 계산하고 그 결과를 표시합니다.

pspectrum(x,t)

스펙트럼 누설의 디폴트 값 0.5는 약 1.29Hz의 분해능 대역폭에 해당합니다. 첫 번째 채널의 두 톤은 분해되지 않습니다. 두 번째 채널의 30Hz 톤은 표시되기는 하지만 20Hz 톤과 비교하면 매우 약합니다.

누설을 약 0.74Hz의 분해능에 해당하는 0.85로 늘립니다. 두 번째 채널의 약한 톤이 명확히 표시됩니다.

pspectrum(x,t,'Leakage',0.85)

누설을 최댓값으로 늘립니다. 분해능 대역폭은 약 0.5Hz입니다. 첫 번째 채널의 두 톤이 분해됩니다. 두 번째 채널의 약한 톤은 큰 윈도우 사이드로브들에 가려집니다.

pspectrum(x,t,'Leakage',1)

광대역 신호에 포함된 협대역 간섭 신호를 시각화하겠습니다.

500초 동안 1kHz로 샘플링된 처프를 생성합니다. 측정하는 동안 처프의 주파수는 180Hz에서 220Hz로 증가합니다.

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

x = chirp(t,180,t(end),220) + 0.15*randn(size(t));

신호에는 210Hz 정현파도 포함되어 있습니다. 정현파는 진폭이 0.05이고 총 신호 지속 시간의 1/6 동안만 존재합니다.

idx = floor(length(x)/6);
x(1:idx) = x(1:idx) + 0.05*cos(2*pi*t(1:idx)*210);

신호의 스펙트로그램을 계산합니다. 주파수 범위를 100Hz ~ 290Hz로 제한합니다. 시간 분해능을 1초로 지정합니다. 두 신호 성분이 표시됩니다.

pspectrum(x,fs,'spectrogram', ...
    'FrequencyLimits',[100 290],'TimeResolution',1)

신호의 전력 스펙트럼을 계산합니다. 약한 정현파가 처프에 의해 가려집니다.

pspectrum(x,fs,'FrequencyLimits',[100 290])

신호의 지속성 스펙트럼을 계산합니다. 이제 두 신호 성분이 명확히 보입니다.

pspectrum(x,fs,'persistence', ...
    'FrequencyLimits',[100 290],'TimeResolution',1)

2초 동안 1kHz로 샘플링된 2차 처프(Chirp)를 생성합니다. 처프는 초기 주파수가 100Hz이고 t = 1초일 때 200Hz로 증가합니다. pspectrum 함수의 디폴트 설정을 사용하여 스펙트로그램을 계산합니다

fs = 1e3;
t = 0:1/fs:2;
y = chirp(t,100,1,200,'quadratic');

[sp,fp,tp] = pspectrum(y,fs,'spectrogram');

mesh(tp,fp,sp)
view(-15,60)
xlabel('Time (s)')
ylabel('Frequency (Hz)')

재할당된 스펙트로그램을 계산합니다. 주파수 분해능을 10Hz로 지정합니다. 출력 인수 없이 pspectrum 함수를 사용하여 결과를 시각화합니다.

pspectrum(y,fs,'spectrogram','FrequencyResolution',10,'Reassign',true)

시간 분해능을 0.2초로 지정하여 스펙트로그램을 다시 계산합니다.

pspectrum(y,fs,'spectrogram','TimeResolution',0.2)

동일한 시간 분해능을 사용하여 재할당된 스펙트로그램을 계산합니다.

pspectrum(y,fs,'spectrogram','TimeResolution',0.2,'Reassign',true)

4kHz로 샘플링된 신호를 생성합니다. 이 신호는 디지털 전화의 모든 키를 누르는 것과 유사합니다. 이 신호를 MATLAB® 타임테이블로 저장합니다.

fs = 4e3;
t = 0:1/fs:0.5-1/fs;

ver = [697 770 852 941];
hor = [1209 1336 1477];

tones = [];

for k = 1:length(ver)
    for l = 1:length(hor)
        tone = sum(sin(2*pi*[ver(k);hor(l)].*t))';
        tones = [tones;tone;zeros(size(tone))];
    end
end

% To hear, type soundsc(tones,fs)

S = timetable(seconds(0:length(tones)-1)'/fs,tones);

신호의 스펙트로그램을 계산합니다. 시간 분해능을 0.5초로, 인접 세그먼트 간의 중첩을 0으로 지정합니다. 누설을 0.85로 지정합니다. 이 값은 핸(Hann) 윈도우를 사용하여 데이터에 윈도우를 적용하는 것과 거의 동일합니다.

pspectrum(S,'spectrogram', ...
    'TimeResolution',0.5,'OverlapPercent',0,'Leakage',0.85)

스펙트로그램을 통해, 각 키가 1/2초 동안 눌려 있고 다른 키를 누르기 전에 1/2초 동안 무음으로 일시 중지된 것을 알 수 있습니다. 첫 번째 발신음의 주파수 성분은 약 697Hz와 1209Hz에 집중되어 있고 이는 DTMF 표준에서 숫자 '1'에 해당합니다.

입력 인수

모두 축소

입력 신호로, 벡터, 행렬 또는 MATLAB®timetable형으로 지정됩니다.

x가 불균일하게 샘플링된 경우 pspectrum은 신호를 균일한 그리드로 보간하여 스펙트럼 추정값을 계산합니다. 이때 함수는 선형 보간을 사용하며, 샘플 시간을 인접한 시간 지점 간의 차분의 중앙값이라고 가정합니다. 불균일하게 샘플링된 신호를 사용하려면, 중앙값 시간 간격과 평균 시간 간격이 다음 조건을 충족해야 합니다.

1100<Median time intervalMean time interval<100.

예: cos(pi./[4;2]*(0:159))'+randn(160,2)는 백색 잡음에 묻힌 정현파로 구성된 2채널 신호입니다.

예: timetable(seconds(0:4)',rand(5,2))는 4초 동안 1Hz로 샘플링된 2채널 확률 변수를 지정합니다.

예: timetable(seconds(0:4)',rand(5,1),rand(5,1))은 4초 동안 1Hz로 샘플링된 2채널 확률 변수를 지정합니다.

데이터형: single | double
복소수 지원 여부:

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

시간 값으로, 샘플 간의 시간 간격을 나타내는 벡터, datetime형 또는 duration형 배열, duration형 스칼라로 지정됩니다.

예: seconds(0:1/100:1)은 1초 동안 100Hz로 샘플링되었음을 나타내는 duration형 배열입니다.

예: seconds(1)은 연속 신호 샘플 간의 시간 차분이 1초임을 나타내는 duration형 스칼라입니다.

계산할 스펙트럼 유형으로, 'power', 'spectrogram' 또는 'persistence'로 지정됩니다.

  • 'power' — 입력값의 전력 스펙트럼을 계산합니다. 이 옵션을 사용하여 정상(Stationary) 신호의 주파수 성분을 분석할 수 있습니다. 자세한 내용은 스펙트럼 계산 항목을 참조하십시오.

  • 'spectrogram' — 입력값의 스펙트로그램을 계산합니다. 이 옵션을 사용하여 신호의 주파수 성분이 시간에 따라 어떻게 변하는지 분석할 수 있습니다. 자세한 내용은 스펙트로그램 계산 항목을 참조하십시오.

  • 'persistence' — 입력값의 지속성 전력 스펙트럼을 계산합니다. 이 옵션을 사용하여 신호에 특정 주파수 성분이 존재하는 시간을 시각화할 수 있습니다. 자세한 내용은 지속성 스펙트럼 계산 항목을 참조하십시오.

참고

'spectrogram''persistence' 옵션은 다중채널 입력값을 지원하지 않습니다.

이름-값 쌍의 인수

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

예: 'Leakage',1,'Reassigned',true,'MinThreshold',-35는 사각 윈도우를 사용하여 데이터에 윈도우를 적용하고, 재할당된 스펙트럼 추정값을 계산하고, –35dB보다 작은 모든 값을 0으로 설정합니다.

주파수 대역 제한으로, 'FrequencyLimits'와 함께 요소를 2개 가진 숫자형 벡터가 쉼표로 구분되어 지정됩니다.

  • 입력값에 시간 정보가 포함되어 있으면 주파수 대역은 Hz로 표현됩니다.

  • 입력값에 시간 정보가 포함되어 있지 않으면 주파수 대역은 rad/sample의 정규화된 단위로 표현됩니다.

기본적으로, pspectrum은 전체 나이퀴스트 범위에서 스펙트럼을 계산합니다.

  • 지정된 주파수 대역에 나이퀴스트 범위를 벗어나는 영역이 포함되어 있으면 pspectrum은 해당 주파수 대역을 자릅니다.

  • 지정된 주파수 대역이 나이퀴스트 범위를 완전히 벗어나면 pspectrum은 오류를 발생시킵니다.

나이퀴스트 범위에 대한 자세한 내용은 스펙트럼 계산 항목을 참조하십시오.

x가 불균일하게 샘플링된 경우 pspectrum은 신호를 균일한 그리드로 선형 보간하고, 유효 샘플 레이트를 인접한 시간 지점 간의 차분 중앙값의 역수로 정의합니다. 유효 샘플 레이트를 기준으로 'FrequencyLimits'를 표현하십시오.

예: [0.2*pi 0.7*pi]는 0.2π rad/sample부터 0.7π rad/sample까지 시간 정보 없는 신호의 스펙트럼을 계산합니다.

주파수 분해능 대역폭으로, 'FrequencyResolution'과 함께 실수 숫자형 스칼라가 쉼표로 구분되어 지정되고 입력값에 시간 정보가 있는 경우에는 Hz 단위로, 시간 정보가 없는 경우에는 rad/sample의 정규화된 단위로 표현됩니다. 이 인수는 'TimeResolution'과 동시에 지정할 수 없습니다. 이 인수의 디폴트 값은 입력 데이터의 크기에 따라 달라집니다. 자세한 내용은 스펙트로그램 계산 항목을 참조하십시오.

예: pi/100π/100 rad/sample의 주파수 분해능을 사용하여 시간 정보가 없는 신호의 스펙트럼을 계산합니다.

스펙트럼 누설로, 'Leakage'와 함께 0과 1 사이의 실수 숫자형 스칼라가 쉼표로 구분되어 지정됩니다. 'Leakage'는 메인로브 폭을 기준으로 카이저 윈도우 사이드로브 감쇠량을 조정하고, 분해능 개선과 누설 감소를 절충합니다.

  • 큰 누설 값은 간격이 좁은 톤을 분해하지만, 가까이 있는 약한 톤을 가려지게 합니다.

  • 작은 누설 값은 큰 톤 근처에 있는 작은 톤을 찾아내지만, 가까이 있는 주파수들을 모두 불분명하게 만듭니다.

예: 'Leakage',0은 스펙트럼 분해능을 희생하여 누설을 최소한으로 줄입니다.

예: 'Leakage',0.85는 핸(Hann) 윈도우를 사용하여 데이터에 윈도우를 적용한 것과 거의 같습니다.

예: 'Leakage',1은 사각 윈도우를 사용하여 데이터에 윈도우를 적용한 것과 동일하며, 누설을 최대화하지만 스펙트럼 분해능을 개선합니다.

0이 아닌 값에 대한 하한으로, 'MinThreshold'와 함께 실수형 스칼라가 쉼표로 구분되어 지정됩니다. pspectrumtype 인수의 값에 따라 'MinThreshold'를 다르게 구현합니다.

  • 'power' 또는 'spectrogram'pspectrum은 10log10(p) ≤ 'MinThreshold'가 되는 p의 요소를 0으로 설정합니다. 'MinThreshold'는 데시벨을 단위로 사용하여 지정하십시오.

  • 'persistence'pspectrum'MinThreshold'보다 작은 p의 요소를 0으로 설정합니다. 'MinThreshold'는 0%와 100% 사이로 지정하십시오.

지속성 스펙트럼의 전력 Bin 개수로, 'NumPowerBins'와 함께 20과 1024 사이의 정수가 쉼표로 구분되어 지정됩니다.

스펙트로그램 또는 지속성 스펙트럼의 인접 세그먼트 간의 중첩으로, 'OverlapPercent'와 함께 구간 [0, 100)의 실수형 스칼라가 쉼표로 구분되어 지정됩니다. 이 인수의 디폴트 값은 스펙트럼 윈도우에 따라 달라집니다. 자세한 내용은 스펙트로그램 계산 항목을 참조하십시오.

재할당 옵션으로, 'Reassign'과 함께 논리값이 쉼표로 구분되어 지정됩니다. 이 옵션을 true로 설정할 경우 pspectrum은 시간과 주파수 재할당을 수행하여 스펙트럼 추정값을 더 명확하게 국소화합니다. 재할당 기법은 더 읽기 쉽고 해석하기 쉬운 주기도와 스펙트로그램을 생성합니다. 이 기법은 각 스펙트럼 추정값을 Bin의 기하학적 중심 대신에 Bin의 에너지 중심에 재할당합니다. 이는 처프(Chirp)와 임펄스에 대해 정확하게 국소화할 수 있도록 해줍니다.

스펙트로그램 또는 지속성 스펙트럼의 시간 분해능으로, 'TimeResolution'과 함께 실수형 스칼라가 쉼표로 구분되어 지정되고 입력값에 시간 정보가 있는 경우에는 초 단위로, 시간 정보가 없는 경우에는 샘플 개수를 나타내는 정수로 표현됩니다. 이 인수는 스펙트로그램 또는 지속성 스펙트럼 추정값을 형성하는 단시간 전력 스펙트럼을 계산하는 데 사용되는 세그먼트의 지속 기간을 조정합니다. 'TimeResolution''FrequencyResolution'과 동시에 지정할 수 없습니다. 이 인수의 디폴트 값은 입력 데이터의 크기와 주파수 분해능(지정된 경우)에 따라 달라집니다. 자세한 내용은 스펙트로그램 계산 항목을 참조하십시오.

출력 인수

모두 축소

스펙트럼으로, 벡터 또는 행렬로 반환됩니다. 스펙트럼의 유형과 크기는 type 인수 값에 따라 달라집니다.

  • 'power'px의 각 채널에 대한 전력 스펙트럼 추정값을 포함합니다. 이 경우 p의 크기는 Nf × Nch이고, 여기서 Nff의 길이, Nchx의 채널 수입니다.

  • 'spectrogram'px의 단시간으로 국소화된 전력 스펙트럼의 추정값을 포함합니다. 이 경우 p의 크기는 Nf × Nt이고, 여기서 Nff의 길이, Ntt의 길이입니다.

  • 'persistence'p는 지정된 시간과 주파수 위치에서 신호가 지정된 전력 수준의 성분을 가질 확률(백분율로 표현됨)을 포함합니다. 이 경우 p의 크기는 Npwr × Nf이고, 여기서 Npwrpwr의 길이, Nff의 길이입니다.

스펙트럼 주파수로, 벡터로 반환됩니다. 입력 신호에 시간 정보가 포함되어 있으면 f에는 주파수(Hz로 표현됨)가 포함됩니다. 입력 신호에 시간 정보가 포함되어 있지 않으면 주파수는 rad/sample의 정규화된 단위로 표현됩니다.

스펙트로그램의 시간 값으로, 초 단위의 시간 값으로 구성된 벡터 또는 duration형 배열로 반환됩니다. 입력값에 시간 정보가 없으면 t에는 샘플 개수가 포함됩니다. t에는 단시간 전력 스펙트럼 추정값을 계산하는 데 사용되는 데이터 세그먼트 중심에 대응하는 시간 값이 포함됩니다.

  • pspectrum에 대한 입력값이 timetable형인 경우 t는 입력 타임테이블의 시간 값과 동일한 형식을 갖습니다.

  • pspectrum에 대한 입력값이 숫자형, duration형 또는 datetime형 배열로 지정된 일련의 시점에서 샘플링된 숫자형 벡터인 경우 t는 입력 시간 값과 동일한 유형과 형식을 갖습니다.

  • pspectrum에 대한 입력값이 연속 샘플 간에 지정된 시간 차분의 숫자형 벡터인 경우 tduration형 배열입니다.

지속성 스펙트럼의 전력 값으로, 벡터로 반환됩니다.

세부 정보

모두 축소

스펙트럼 계산

신호 스펙트럼을 계산하기 위해 pspectrum은 신호의 전체 길이로 얻을 수 있는 스펙트럼 분해능과 큰 FFT 계산으로 인한 성능 제한 간의 절충점을 찾습니다.

  • 가능한 경우 함수는 카이저 윈도우를 사용하여 전체 신호에 대한 수정된 단일 주기도를 계산합니다.

  • 수정된 단일 주기도를 적절한 시간 내에 계산할 수 없는 경우 함수는 웰치 주기도를 계산합니다. 먼저 함수는 신호를 중첩 세그먼트로 나누고, 카이저 윈도우를 사용하여 각 세그먼트에 윈도우를 적용한 다음 세그먼트 주기도에 대한 평균을 구합니다.

스펙트럼 윈도우 적용

실제 신호는 유한한 시간 동안만 측정할 수 있습니다. 이 사실은 신호 길이가 주기적이거나 무한하다고 가정하는 푸리에 분석에 무시할 수 없는 영향을 미칩니다. 서로 다른 신호 샘플에 서로 다른 가중치를 할당하는 스펙트럼 윈도우 적용은 유한한 크기로 인한 효과를 체계적으로 처리합니다.

신호에 윈도우를 가장 간단히 적용하는 방법은 신호가 측정 구간을 벗어나면 정확히 0이고 모든 샘플이 동등하게 유의미하다고 가정하는 것입니다. 이 "사각 윈도우"는 양끝에서 값이 불연속적으로 변하기 때문에 스펙트럼 링잉 현상이 발생합니다. 다른 모든 스펙트럼 윈도우는 이 영향을 줄이기 위해 신호 경계에 가까이 있는 샘플에 더 작은 가중치를 할당함으로써 양끝이 가늘어집니다.

윈도우 적용 프로세스에서는 상충하는 목표 즉, 분해능 개선과 누설 감소를 언제나 절충해야 합니다.

  • 분해능은 주파수 영역에서 신호 에너지가 어떻게 분포되어 있는지 정확히 확인할 수 있는 능력입니다. 이상적인 분해능을 갖춘 스펙트럼 분석기는 신호의 서로 다른 두 톤(순수 정현파)이 주파수 영역에서 얼마나 가까이 있는지에 상관없이 이 두 톤을 구별할 수 있습니다. 정량적 측면에서 이 기능은 윈도우의 변환에 대한 메인로브 폭과 관련이 있습니다.

  • 누설은 유한 신호에서 모든 주파수 성분이 전체 주파수 범위에 에너지 성분을 퍼뜨리는 것을 말합니다. 스펙트럼의 누설 정도는 인접한 강한 톤 속에서 잡음의 약한 톤을 감지할 수 있는 능력으로 측정할 수 있습니다. 정량적 측면에서 이 능력은 윈도우의 주파수 변환에 대한 사이드로브 레벨과 관련이 있습니다.

분해능이 향상될수록 누설이 크고 분해능이 나쁠수록 누설이 작습니다. 분해능이 이러한 범위의 한쪽 극단에 해당할 때, 사각 윈도우는 발생할 수 있는 가장 좁은 메인로브와 가장 높은 사이드로브를 갖습니다. 이 윈도우는 톤의 에너지 성분이 비슷한 경우에는 간격이 좁은 톤을 분해할 수 있지만, 그렇지 않은 경우에는 약한 톤을 찾아내지 못합니다. 분해능이 다른 쪽 극단에 해당할 때, 높은 사이드로브 억제를 갖는 윈도우는 가까이 있는 주파수가 모두 불분명해지는 넓은 메인로브를 갖게 됩니다.

pspectrum은 카이저 윈도우를 사용하여 윈도우를 적용합니다. 카이저 윈도우의 경우 메인로브에 해당하는 신호 에너지 부분은 조정 가능한 형태 인자 β에 따라 크게 달라집니다. pspectrumβ = 0(사각 윈도우에 해당함)부터 β = 40까지(넓은 메인로브가 배정밀도로 표현 가능한 모든 스펙트럼 에너지를 사실상 모두 포괄함) 범위의 형태 인자를 사용합니다. 중간값 β ≈ 6은 핸(Hann) 윈도우를 가장 근접하게 근사합니다. β를 조정하려면 'Leakage' 이름-값 쌍을 사용하십시오. 'Leakage'를 ℓ로 설정할 경우 ℓ과 β는 β = 40(1 – ℓ)의 관계식을 가집니다. 자세한 내용은 kaiser를 참조하십시오.

시간 영역에서 β = 5.7인 51개 점을 갖는 핸 윈도우와 51개 점을 갖는 카이저 윈도우주파수 영역에서 β = 5.7인 51개 점을 갖는 핸 윈도우와 51개 점을 갖는 카이저 윈도우

파라미터와 알고리즘 선택

신호 스펙트럼을 계산하기 위해 먼저 pspectrum은 두 톤이 얼마나 가까이 있고 두 톤을 얼마나 잘 분해할 수 있는지를 측정하는 분해능 대역폭을 결정합니다. 분해능 대역폭의 이론적인 값은 다음과 같습니다.

RBWtheory=ENBWtmaxtmin.

  • tmax – tmin레코드 길이로, 선택한 신호 영역의 시간 영역 지속 시간입니다.

  • ENBW는 스펙트럼 윈도우의 등가 잡음 대역폭입니다. 자세한 내용은 enbw를 참조하십시오.

    ENBW를 조정하려면 'Leakage' 이름-값 쌍을 사용하십시오. 인수의 최솟값은 β = 40인 카이저 윈도우에 해당합니다. 최댓값은 β = 0인 카이저 윈도우에 해당합니다.

하지만 실제로는 pspectrum에서 분해능을 낮출 수 있습니다. 분해능을 낮추면 적절한 시간 내에 스펙트럼을 계산하여 유한 개수의 픽셀로 표시할 수 있습니다. 이러한 현실적인 이유로, pspectrum이 사용할 수 있는 가장 낮은 분해능 대역폭은 다음과 같습니다.

RBWperformance=4×fspan40961,

여기서 fspan'FrequencyLimits'를 사용하여 지정한 주파수 대역의 폭입니다. 'FrequencyLimits'를 지정하지 않을 경우 pspectrumfspan을 샘플 레이트로 사용합니다. RBWperformance는 조정할 수 없습니다.

신호의 스펙트럼을 계산하기 위해 함수는 두 값 중 더 큰 값을 선택하는데 이 값을 대상 분해능 대역폭이라고 합니다.

RBW=max(RBWtheory,RBWperformance).

  • 분해능 대역폭이 RBWtheory인 경우 pspectrum은 전체 신호에 대해 하나의 수정된 주기도를 계산합니다. 함수는 'Leakage' 이름-값 쌍으로 조정되는 형태 인자를 갖는 카이저 윈도우를 사용하고, 축의 시간 제한이 신호 지속 시간을 초과하는 경우 0 채우기를 적용합니다. 자세한 내용은 periodogram을 참조하십시오.

  • 분해능 대역폭이 RBWperformance인 경우 pspectrum은 신호에 대해 웰치(Welch) 주기도를 계산합니다. 이 함수는 다음을 수행합니다.

    1. 신호를 중첩 세그먼트로 나눕니다.

    2. 지정된 형태 인자를 갖는 카이저 윈도우를 사용하여 각 세그먼트에 개별적으로 윈도우를 적용합니다.

    3. 모든 세그먼트 주기도에 대한 평균을 구합니다.

    웰치 절차는 중첩 섹션으로 지정된 신호의 서로 다른 “구현”에 대해 평균을 낸 다음, 윈도우를 사용하여 중복 데이터를 제거함으로써 스펙트럼 추정값의 분산을 줄이도록 설계되었습니다. 자세한 내용은 pwelch를 참조하십시오.

    • 각 세그먼트(또는 윈도우)의 길이는 다음과 같이 계산됩니다.

      Segment length=fNyquist×ENBWRBW,

      여기서 fNyquist나이퀴스트 주파수입니다. 에일리어싱이 없는 경우 나이퀴스트 주파수는 인접한 시간 지점 간의 차분 중앙값의 역수로 정의한 유효 샘플 레이트의 절반에 해당합니다. 나이퀴스트 범위는 실수 신호의 경우에는 [0, fNyquist]이고, 복소 신호의 경우에는 [–fNyquist, fNyquist]입니다.

    • 스트라이드 길이는 다음과 같이 초기 추정값을 조정하여 구해집니다.

      Stride lengthSegment lengthOverlap=Segment length2×ENBW1,

      따라서 첫 번째 윈도우는 첫 번째 세그먼트의 첫 번째 샘플에서 정확히 시작하고, 마지막 윈도우는 마지막 세그먼트의 마지막 샘플에서 정확히 끝납니다.

스펙트로그램 계산

비정상(Nonstationary) 신호의 시간 종속 스펙트럼을 계산하기 위해 pspectrum은 신호를 중첩 세그먼트로 나누고, 카이저 윈도우를 사용하여 각 세그먼트에 윈도우를 적용하고, 단시간 푸리에 변환을 계산한 후 이 변환을 결합하여 행렬을 만듭니다.

비정상 신호는 주파수 성분이 시간에 따라 변하는 신호입니다. 비정상 신호의 스펙트로그램은 시간에 따른 주파수 성분에 대한 추정값입니다. 비정상 신호의 스펙트로그램을 생성하기 위해 pspectrum은 다음 단계를 따릅니다.

  1. 신호를 같은 길이의 세그먼트로 나눕니다. 세그먼트는 신호의 주파수 성분이 세그먼트 내에서 크게 변하지 않을 정도로 길이가 짧아야 합니다. 세그먼트는 중첩되거나 중첩되지 않을 수 있습니다.

  2. 각 세그먼트에 윈도우를 적용하고 해당 세그먼트의 스펙트럼을 계산하여 단시간 푸리에 변환을 얻습니다.

  3. 세그먼트 스펙트럼을 사용하여 스펙트로그램을 생성합니다.

    • 출력 인수를 사용하여 호출하는 경우 스펙트럼을 결합하여 행렬을 만듭니다.

    • 출력 인수 없이 호출하는 경우 세그먼트별로 각 스펙트럼 전력(단위: 데시벨)을 표시합니다. 해당 크기를 크기 종속 컬러맵에 이미지로 나란히 표시합니다.

함수는 단일채널 신호인 경우에만 스펙트로그램을 계산할 수 있습니다.

신호를 세그먼트로 나누기

스펙트로그램을 생성하기 위해 우선 신호를 중첩 세그먼트로 나눕니다. pspectrum 함수를 사용할 경우 'TimeResolution''OverlapPercent' 이름-값 쌍의 인수로 세그먼트 길이와 인접 세그먼트 간의 중첩 크기를 조정할 수 있습니다. 길이와 중첩을 지정하지 않을 경우 함수는 신호의 전체 길이에 따라 길이를 선택하고 다음과 같이 지정된 중첩 백분율을 선택합니다.

(112×ENBW1)×100,

여기서 ENBW는 스펙트럼 윈도우의 등가 잡음 대역폭입니다. 자세한 내용은 enbw스펙트럼 계산 항목을 참조하십시오.

지정된 시간 분해능

  • 신호에 시간 정보가 없는 경우 시간 분해능(세그먼트 길이)을 샘플 단위로 지정하십시오. 시간 분해능은 1보다 크거나 같은 정수여야 하고 신호 길이보다 작거나 같아야 합니다.

    신호에 시간 정보가 있는 경우 시간 분해능을 초 단위로 지정하십시오. 함수는 그 결과를 샘플 개수로 변환한 다음, 그 숫자보다 작거나 같지만 1보다 작지 않은 가장 가까운 정수로 반올림합니다. 시간 분해능은 신호 지속 시간보다 작거나 같아야 합니다.

  • 중첩을 세그먼트 길이의 백분율로 지정하십시오. 함수는 그 결과를 샘플 개수로 변환한 다음, 그 숫자보다 작거나 같은 가장 가까운 정수로 반올림합니다.

디폴트 시간 분해능

시간 분해능을 지정하지 않을 경우 pspectrum은 전체 신호 길이에 따라 세그먼트 길이를 선택합니다. 함수는 시간 분해능을 ⌈N/d⌉개의 샘플로 설정합니다. 여기서 ⌈⌉ 기호는 천장 함수(Ceiling function)를 나타내고 N은 신호 길이, d는 N에 따라 달라지는 제수입니다.

신호 길이(N)제수(d)세그먼트 길이
2개 샘플 ~ 63개 샘플21개 샘플 ~ 32개 샘플
64개 샘플 ~ 255개 샘플88개 샘플 ~ 32개 샘플
256개 샘플 ~ 2047개 샘플832개 샘플 ~ 256개 샘플
2048개 샘플 ~ 4095개 샘플16128개 샘플 ~ 256개 샘플
4096개 샘플 ~ 8191개 샘플32128개 샘플 ~ 256개 샘플
8192개 샘플 ~ 16383개 샘플64128개 샘플 ~ 256개 샘플
16384개 샘플 ~ N개 샘플128128개 샘플 ~ ⌈N / 128⌉개 샘플

여전히 인접 세그먼트 간의 중첩을 지정할 수 있습니다. 중첩을 지정하면 세그먼트 개수가 달라집니다. 세그먼트 끝점을 벗어나는 세그먼트는 0으로 채워집니다.

7개의 샘플로 구성된 신호 [s0 s1 s2 s3 s4 s5 s6]을 살펴보겠습니다. ⌈7/2⌉ = ⌈3.5⌉ = 4이기 때문에 중첩이 없는 경우 함수는 신호를 길이가 4인 두 개의 세그먼트로 나눕니다. 중첩 부분이 증가함에 따라 세그먼트 수가 달라집니다.

중첩 샘플의 개수결과 세그먼트
0
s0 s1 s2 s3
            s4 s5 s6 0
1
s0 s1 s2 s3
         s3 s4 s5 s6
2
s0 s1 s2 s3
      s2 s3 s4 s5
            s4 s5 s6 0
3
s0 s1 s2 s3
   s1 s2 s3 s4
      s2 s3 s4 s5
         s3 s4 s5 s6

pspectrum은 마지막 세그먼트가 신호 끝점을 벗어나면 신호를 0으로 채웁니다. 함수는 세그먼트 중심에 대응하는 시점으로 구성된 벡터 t를 반환합니다.

세그먼트에 윈도우 적용 및 스펙트럼 계산하기

pspectrum이 신호를 중첩 세그먼트로 나누면 함수는 카이저 윈도우를 사용하여 각 세그먼트에 윈도우를 적용합니다. 윈도우의 형태 인자 β는 'Leakage' 이름-값 쌍을 사용하여 조정 가능하며, 이를 통해 누설을 조정할 수 있습니다. 그런 다음 함수는 각 세그먼트의 스펙트럼을 계산한 다음 스펙트럼을 결합하여 스펙트로그램 행렬을 만듭니다. pspectrum은 분해능 대역폭의 하한이 다음과 같다는 점만 제외하고 스펙트럼 계산에 설명된 절차에 따라 세그먼트 스펙트럼을 계산합니다.

RBWperformance=4×fspan10241.

스펙트럼 전력 표시하기

출력 인수 없이 호출하는 경우 함수는 디폴트 MATLAB 컬러맵에 컬러바를 사용하여 단시간 푸리에 변환의 전력(단위: 데시벨)을 표시합니다. 컬러바는 스펙트로그램의 전체 전력 범위로 구성됩니다.

지속성 스펙트럼 계산

신호의 지속성 스펙트럼은 주어진 주파수가 신호에 존재하는 시간 비율을 보여주는 시간-주파수 보기입니다. 지속성 스펙트럼은 전력-주파수 영역의 히스토그램입니다. 신호가 전개될 때 신호의 특정 주파수가 오래 지속될수록 그 주파수가 차지하는 시간 비율이 높아지기 때문에 해당 주파수 색이 디스플레이에 더 밝거나 "뜨겁게" 표시됩니다. 지속성 스펙트럼을 사용하여 다른 신호에 숨어 있는 신호를 식별할 수 있습니다.

지속성 스펙트럼을 계산하기 위해 pspectrum은 다음 단계를 수행합니다.

  1. 지정된 누설, 시간 분해능, 중첩을 사용하여 스펙트로그램을 계산합니다. 자세한 내용은 스펙트로그램 계산 항목을 참조하십시오.

  2. 전력과 주파수 값을 2차원 Bin으로 분할합니다. 전력 Bin의 개수를 지정하려면 'NumPowerBins' 이름-값 쌍을 사용하십시오.

  3. 각 시간 값에 대해, 전력 스펙트럼의 로그에 대한 이변량 히스토그램을 계산합니다. 신호 에너지가 있는 시점의 모든 전력-주파수 Bin에 대해, 대응하는 행렬 요소를 1만큼 늘립니다. 모든 시간 값에 대한 히스토그램을 합합니다.

  4. 정규화된 백분율로 표현되는 히스토그램 도수의 로그에 비례하는 색으로, 누적 히스토그램을 전력과 주파수에 대해 플로팅합니다. 0 값을 표현하려면 가능한 가장 작은 크기의 1/2을 사용하십시오.

전력 스펙트럼

히스토그램

누적 히스토그램

참고 문헌

[1] harris, fredric j. “On the Use of Windows for Harmonic Analysis with the Discrete Fourier Transform.” Proceedings of the IEEE®. Vol. 66, January 1978, pp. 51–83.

[2] Welch, Peter D. “The Use of Fast Fourier Transform for the Estimation of Power Spectra: A Method Based on Time Averaging Over Short, Modified Periodograms.” IEEE Transactions on Audio and Electroacoustics. Vol. 15, June 1967, pp. 70–73.

R2017b에 개발됨