이 번역 페이지는 최신 내용을 담고 있지 않습니다. 최신 내용을 영문으로 보려면 여기를 클릭하십시오.
pspectrum
주파수 영역과 시간-주파수 영역의 신호 분석
구문
설명
는 이름-값 쌍의 인수를 사용하여 추가 옵션을 지정합니다. 옵션으로는 주파수 분해능 대역폭과 인접 세그먼트 간의 중첩 백분율 등이 있습니다.p
= pspectrum(___,Name,Value
)
예제
정현파의 파워 스펙트럼
128개의 2채널 복소수 정현파 샘플을 생성합니다.
첫 번째 채널은 단위 진폭과 정규화 정현파 주파수 rad/sample을 갖습니다.
두 번째 채널은 진폭 과 정규화 주파수 rad/sample을 갖습니다.
각 채널의 파워 스펙트럼을 계산하여 절댓값을 플로팅합니다. 주파수 범위 rad/sample~ rad/sample을 확대합니다. pspectrum
은 신호의 주파수 성분이 Bin 내에 정확히 포함되는 경우 해당 Bin에서의 진폭이 신호의 실제 평균 전력이 되도록 스펙트럼을 스케일링합니다. 복소수 지수의 평균 전력은 진폭의 제곱입니다. 신호의 이산 푸리에 변환을 계산하여 확인합니다. 자세한 내용은 Measure Power of Deterministic Periodic Signals 항목을 참조하십시오.
N = 128; x = [1 1/sqrt(2)].*exp(1j*pi./[4;2]*(0:N-1)).'; [p,f] = pspectrum(x); plot(f/pi,abs(p)) hold on stem(0:2/N:2-1/N,abs(fft(x)/N).^2) hold off axis([0.15 0.6 0 1.1]) legend("Channel 1, pspectrum","Channel 2, pspectrum", ... "Channel 1, fft","Channel 2, fft") grid
백색 가우스 잡음을 포함하는, 296밀리초 동안 1kHz로 샘플링된 정현파 신호를 생성합니다. 정현파 주파수를 200Hz로, 잡음 분산을 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)
양측 스펙트럼
1초 동안 3kHz로 샘플링된 신호를 생성합니다. 신호는 볼록 2차 처프이며, 그 주파수는 측정하는 동안 300Hz에서 1300Hz로 증가합니다. 이 처프는 백색 가우스 잡음에 묻혀 있습니다.
fs = 3000; t = 0:1/fs:1-1/fs; x1 = chirp(t,300,t(end),1300,'quadratic',0,'convex') + ... randn(size(t))/100;
사각 윈도우를 사용하여 신호의 양측 파워 스펙트럼을 계산하고 플로팅합니다. 실수 신호의 경우 pspectrum
은 기본적으로 단측 스펙트럼을 플로팅합니다. 양측 스펙트럼을 플로팅하려면 TwoSided
를 true로 설정하십시오.
pspectrum(x1,fs,'Leakage',1,'TwoSided',true)
동일한 지속 시간과 샘플 레이트를 갖는 복소수 신호를 생성합니다. 신호는 정현적으로 변하는 주파수 성분을 갖는 처프이며 백색 잡음에 묻혀 있습니다. 신호의 스펙트로그램을 계산하고 폭포 플롯으로 표시합니다. 복소수 신호의 경우 스펙트로그램은 기본적으로 양측 스펙트럼입니다.
x2 = exp(2j*pi*100*cos(2*pi*2*t)) + randn(size(t))/100; [p,f,t] = pspectrum(x2,fs,'spectrogram'); waterfall(f,t,p') xlabel('Frequency (Hz)') ylabel('Time (seconds)') wtf = gca; wtf.XDir = 'reverse'; view([30 45])
윈도우 누설과 톤 분해능
2초 동안 100Hz로 샘플링된 2채널 신호를 생성합니다.
첫 번째 채널은 20Hz 톤과 21Hz 톤으로 구성되어 있습니다. 두 톤 모두 단위 진폭을 갖습니다.
두 번째 채널도 두 개의 톤으로 구성되어 있습니다. 한 톤은 단위 진폭과 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)
spectrogram
함수와 pspectrum
함수 비교하기
전압 제어 발진기와 3개의 가우스 원자로 구성된 신호를 생성합니다. 신호는 1초 동안 kHz로 샘플링됩니다.
fs = 2000; tx = (0:1/fs:2); gaussFun = @(A,x,mu,f) exp(-(x-mu).^2/(2*0.03^2)).*sin(2*pi*f.*x)*A'; s = gaussFun([1 1 1],tx',[0.1 0.65 1],[2 6 2]*100)*1.5; x = vco(chirp(tx+.1,0,tx(end),3).*exp(-2*(tx-1).^2),[0.1 0.4]*fs,fs); x = s+x';
단시간 푸리에 변환
pspectrum
함수를 사용하여 STFT를 계산합니다.
개 샘플 신호를 밀리초의 시간 분해능에 상응하는 샘플 길이 인 세그먼트로 나눕니다.
인접 세그먼트 간 중첩 샘플 개수 을 지정하거나 20%가 중첩되도록 지정합니다.
카이저 윈도우로 각 세그먼트에 윈도우를 적용하고 누설 을 지정합니다.
M = 80; L = 16; lk = 0.7; [S,F,T] = pspectrum(x,fs,"spectrogram", ... TimeResolution=M/fs,OverlapPercent=L/M*100, ... Leakage=lk);
spectrogram
함수로 구한 결과와 비교합니다.
윈도우 길이를 지정하고 샘플에서 직접 중첩합니다.
pspectrum
은 항상 카이저 윈도우를 으로 사용합니다. 누설 과 윈도우의 형태 인자 는 의 관계를 갖습니다.pspectrum
은 이산 푸리에 변환을 계산할 때 항상 개 점을 사용합니다. 양측 주파수 범위 또는 중심 주파수 범위에서 변환을 계산하려는 경우 이 숫자를 지정할 수 있습니다. 그러나 실수 신호의 디폴트인 단측 변환의 경우spectrogram
은 개 점을 사용합니다. 또는 이 예제와 같이 변환을 계산할 주파수 벡터를 지정할 수 있습니다.신호를 정확히 개 세그먼트로 나눌 수 없는 경우
spectrogram
은 신호를 자르고pspectrum
은 신호에 0을 채워 여분의 세그먼트를 만듭니다. 출력값을 동등하게 만들려면 마지막 세그먼트와 시간 벡터의 마지막 요소를 제거하십시오.spectrogram
은 크기 제곱이 스펙트로그램인 STFT를 반환합니다.pspectrum
은 이미 제곱되었지만 제곱 전에 인자 으로 나눈 세그먼트별 파워 스펙트럼을 반환합니다.단측 변환의 경우
pspectrum
은 스펙트로그램에 추가 인자 2를 추가합니다.
g = kaiser(M,40*(1-lk)); k = (length(x)-L)/(M-L); if k~=floor(k) S = S(:,1:floor(k)); T = T(1:floor(k)); end [s,f,t] = spectrogram(x/sum(g)*sqrt(2),g,L,F,fs);
waterplot
함수를 사용하여 두 함수로 계산된 스펙트로그램을 표시합니다.
subplot(2,1,1) waterplot(sqrt(S),F,T) title("pspectrum") subplot(2,1,2) waterplot(s,f,t) title("spectrogram")
maxd = max(max(abs(abs(s).^2-S)))
maxd = 2.4419e-08
파워 스펙트럼 및 편의 플롯
spectrogram
함수에는 세그먼트별 파워 스펙트럼 또는 파워 스펙트럼 밀도에 대응하는 네 번째 인수가 있습니다. ps
인수는 pspectrum
의 출력값과 유사하게 이미 제곱되었으며 정규화 인자 을 포함합니다. 실수 신호의 단측 스펙트로그램의 경우 추가 인자 2를 꼭 포함해야 합니다. 함수의 스케일링 인수를 "power"
로 설정합니다.
[~,~,~,ps] = spectrogram(x*sqrt(2),g,L,F,fs,"power");
max(abs(S(:)-ps(:)))
ans = 2.4419e-08
출력 인수 없이 호출하면 pspectrum
과 spectrogram
모두 데시벨 단위로 신호의 스펙트로그램을 플로팅합니다. 단측 스펙트로그램의 경우 인자 2를 포함시킵니다. 두 플롯의 컬러맵을 동일하게 설정합니다. x 제한을 동일한 값으로 설정하여 pspectrum
플롯 끝에 여분의 세그먼트가 보이도록 합니다. spectrogram
플롯에서 y축에 주파수를 표시합니다.
subplot(2,1,1) pspectrum(x,fs,"spectrogram", ... TimeResolution=M/fs,OverlapPercent=L/M*100, ... Leakage=lk) title("pspectrum") cc = clim; xl = xlim; subplot(2,1,2) spectrogram(x*sqrt(2),g,L,F,fs,"power","yaxis") title("spectrogram") clim(cc) xlim(xl)
function waterplot(s,f,t) % Waterfall plot of spectrogram waterfall(f,t,abs(s)'.^2) set(gca,XDir="reverse",View=[30 50]) xlabel("Frequency (Hz)") ylabel("Time (s)") end
과도 신호의 지속성 스펙트럼
광대역 신호에 포함된 협대역 간섭 신호를 시각화하겠습니다.
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
함수의 디폴트 설정을 사용하여 스펙트로그램을 계산합니다 waterfall
함수를 사용하여 스펙트로그램을 플로팅합니다.
fs = 1e3; t = 0:1/fs:2; y = chirp(t,100,1,200,"quadratic"); [sp,fp,tp] = pspectrum(y,fs,"spectrogram"); waterfall(fp,tp,sp') set(gca,XDir="reverse",View=[60 60]) ylabel("Time (s)") xlabel("Frequency (Hz)")
재할당 스펙트로그램을 계산하고 표시합니다.
[sr,fr,tr] = pspectrum(y,fs,"spectrogram",Reassign=true); waterfall(fr,tr,sr') set(gca,XDir="reverse",View=[60 60]) ylabel("Time (s)") xlabel("Frequency (Hz)")
시간 분해능을 0.2초로 지정하여 스펙트로그램을 다시 계산합니다. 출력 인수 없이 pspectrum
함수를 사용하여 결과를 시각화합니다.
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'
에 해당합니다.
입력 인수
x
— 입력 신호
벡터 | 행렬 | timetable형
입력 신호로, 벡터, 행렬 또는 MATLAB®timetable
형으로 지정됩니다.
x
가 타임테이블인 경우 증가하는 유한한 행 시간값을 포함해야 합니다.참고
타임테이블에 누락되거나 중복된 시간 지점이 포함된 경우 누락되거나 중복되거나 불균일하게 분포된 시간값이 포함된 타임테이블 정리하기에 나와 있는 팁을 활용하여 수정할 수 있습니다.
x
가 다중채널 신호를 나타내는 타임테이블인 경우 행렬을 포함하는 단일 변수를 갖거나 벡터로 구성된 여러 개의 변수를 가져야 합니다.
x
가 불균일하게 샘플링된 경우 pspectrum
은 신호를 균일한 그리드로 보간하여 스펙트럼 추정값을 계산합니다. 이때 함수는 선형 보간을 사용하며, 샘플 시간을 인접한 시간 지점 간의 차분의 중앙값이라고 가정합니다. 불균일하게 샘플링된 신호를 사용하려면, 중앙값 시간 간격과 평균 시간 간격이 다음 조건을 충족해야 합니다.
예: 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
복소수 지원 여부: 예
fs
— 샘플 레이트
2π (디폴트 값) | 양의 숫자형 스칼라
샘플 레이트로, 양의 숫자형 스칼라로 지정됩니다.
type
— 계산할 스펙트럼 유형
'power'
(디폴트 값) | 'spectrogram'
| 'persistence'
계산할 스펙트럼 유형으로, 'power'
, 'spectrogram'
또는 'persistence'
로 지정됩니다.
'power'
— 입력값의 파워 스펙트럼을 계산합니다. 이 옵션을 사용하여 정상(Stationary) 신호의 주파수 성분을 분석할 수 있습니다. 자세한 내용은 스펙트럼 계산 항목을 참조하십시오.'spectrogram'
— 입력값의 스펙트로그램을 계산합니다. 이 옵션을 사용하여 신호의 주파수 성분이 시간에 따라 어떻게 변하는지 분석할 수 있습니다. 자세한 내용은 스펙트로그램 계산 항목을 참조하십시오.'persistence'
— 입력값의 지속성 파워 스펙트럼을 계산합니다. 이 옵션을 사용하여 신호에 특정 주파수 성분이 존재하는 시간을 시각화할 수 있습니다. 자세한 내용은 지속성 스펙트럼 계산 항목을 참조하십시오.
참고
'spectrogram'
및 'persistence'
옵션은 다중채널 입력값을 지원하지 않습니다.
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN
으로 지정합니다. 여기서 Name
은 인수 이름이고 Value
는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name
을 따옴표로 묶으십시오.
예: 'Leakage',1,'Reassign',true,'MinThreshold',-35
는 사각 윈도우를 사용하여 데이터에 윈도우를 적용하고, 재할당된 스펙트럼 추정값을 계산하고, –35dB보다 작은 모든 값을 0으로 설정합니다.
FrequencyLimits
— 주파수 대역 제한
[0 fs/2]
(디폴트 값) | 요소를 2개 가진 숫자형 벡터
주파수 대역 제한으로, '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
— 주파수 분해능 대역폭
실수 숫자형 스칼라
주파수 분해능 대역폭으로, 'FrequencyResolution'
과 함께 실수 숫자형 스칼라가 쉼표로 구분되어 지정되고 입력값에 시간 정보가 있는 경우에는 Hz 단위로, 시간 정보가 없는 경우에는 rad/sample의 정규화된 단위로 표현됩니다. 이 인수는 'TimeResolution'
과 동시에 지정할 수 없습니다. 이 인수의 디폴트 값은 입력 데이터의 크기에 따라 달라집니다. 자세한 내용은 스펙트로그램 계산 항목을 참조하십시오.
예: pi/100
은 π
/100 rad/sample의 주파수 분해능을 사용하여 시간 정보가 없는 신호의 스펙트럼을 계산합니다.
Leakage
— 스펙트럼 누설
0.5
(디폴트 값) | 0과 1 사이의 실수 숫자형 스칼라
스펙트럼 누설로, 'Leakage'
와 함께 0과 1 사이의 실수 숫자형 스칼라가 쉼표로 구분되어 지정됩니다. 'Leakage'
는 메인로브 폭을 기준으로 카이저 윈도우 사이드로브 감쇠량을 조정하고, 분해능 개선과 누설 감소를 절충합니다.
큰 누설 값은 간격이 좁은 톤을 분해하지만, 가까이 있는 약한 톤을 가려지게 합니다.
작은 누설 값은 큰 톤 근처에 있는 작은 톤을 찾아내지만, 가까이 있는 주파수들을 모두 불분명하게 만듭니다.
예: 'Leakage',0
은 스펙트럼 분해능을 희생하여 누설을 최소한으로 줄입니다.
예: 'Leakage',0.85
는 핸(Hann) 윈도우를 사용하여 데이터에 윈도우를 적용한 것과 거의 같습니다.
예: 'Leakage',1
은 사각 윈도우를 사용하여 데이터에 윈도우를 적용한 것과 동일하며, 누설을 최대화하지만 스펙트럼 분해능을 개선합니다.
MinThreshold
— 0이 아닌 값에 대한 하한
-Inf
(디폴트 값) | 실수형 스칼라
0이 아닌 값에 대한 하한으로, 'MinThreshold'
와 함께 실수형 스칼라가 쉼표로 구분되어 지정됩니다. pspectrum
은 type
인수의 값에 따라 'MinThreshold'
를 다르게 구현합니다.
'power'
또는'spectrogram'
-pspectrum
은 10 log10(p
) ≤'MinThreshold'
가 되는p
의 요소를 0으로 설정합니다.'MinThreshold'
는 데시벨을 단위로 사용하여 지정하십시오.'persistence'
—pspectrum
은'MinThreshold'
보다 작은p
의 요소를 0으로 설정합니다.'MinThreshold'
는 0%와 100% 사이로 지정하십시오.
NumPowerBins
— 지속성 스펙트럼의 전력 Bin 개수
256
(디폴트 값) | 20과 1024 사이의 정수
지속성 스펙트럼의 전력 Bin 개수로, 'NumPowerBins'
와 함께 20과 1024 사이의 정수가 쉼표로 구분되어 지정됩니다.
OverlapPercent
— 인접 세그먼트 간의 중첩
구간 [0, 100)의 실수형 스칼라
스펙트로그램 또는 지속성 스펙트럼의 인접 세그먼트 간 중첩으로, 'OverlapPercent'
와 함께 구간 [0, 100)의 실수형 스칼라가 쉼표로 구분되어 지정됩니다. 이 인수의 디폴트 값은 스펙트럼 윈도우에 따라 달라집니다. 자세한 내용은 스펙트로그램 계산 항목을 참조하십시오.
Reassign
— 재할당 옵션
false
(디폴트 값) | true
재할당 옵션으로, 'Reassign'
과 함께 논리값이 쉼표로 구분되어 지정됩니다. 이 옵션을 true
로 설정할 경우 pspectrum
은 시간과 주파수 재할당을 수행하여 스펙트럼 추정값을 더 명확하게 국소화합니다. 재할당 기법은 더 읽기 쉽고 해석하기 쉬운 주기도와 스펙트로그램을 생성합니다. 이 기법은 각 스펙트럼 추정값을 Bin의 기하학적 중심 대신에 Bin의 에너지 중심에 재할당합니다. 이는 처프(Chirp)와 임펄스에 대해 정확하게 국소화할 수 있도록 해줍니다.
TimeResolution
— 스펙트로그램 또는 지속성 스펙트럼의 시간 분해능
실수형 스칼라
스펙트로그램 또는 지속성 스펙트럼의 시간 분해능으로, 'TimeResolution'
과 함께 실수형 스칼라가 쉼표로 구분되어 지정되고 입력값에 시간 정보가 있는 경우에는 초 단위로, 시간 정보가 없는 경우에는 샘플 개수를 나타내는 정수로 표현됩니다. 이 인수는 스펙트로그램 또는 지속성 스펙트럼 추정값을 형성하는 단시간 파워 스펙트럼을 계산하는 데 사용되는 세그먼트의 지속 기간을 조정합니다. 'TimeResolution'
은 'FrequencyResolution'
과 동시에 지정할 수 없습니다. 이 인수의 디폴트 값은 입력 데이터의 크기와 주파수 분해능(지정된 경우)에 따라 달라집니다. 자세한 내용은 스펙트로그램 계산 항목을 참조하십시오.
TwoSided
— 양측 스펙트럼 추정값
false | true
양측 스펙트럼 추정값으로, 'TwoSided'
와 함께 논리값이 쉼표로 구분되어 지정됩니다.
이 옵션이
true
이면 함수는 [–π, π] 구간에 대해 중심이 맞춰진 양측 스펙트럼 추정값을 계산합니다. 입력값에 시간 정보가 있으면 [–fs/2, fs/2] 구간에 대해 추정값이 계산됩니다. 여기서 fs는 유효 샘플 레이트입니다.이 옵션이
false
이면 함수는 나이퀴스트 범위 [0, π]에 대해 단측 스펙트럼 추정값을 계산합니다. 입력값에 시간 정보가 있으면 [0, fs/2] 구간에 대해 추정값이 계산됩니다. 여기서 fs는 유효 샘플 레이트입니다. 총 전력을 보존하기 위해 이 함수는 0 및 나이퀴스트 주파수를 제외한 모든 주파수에서 전력에 2를 곱합니다. 이 옵션은 실수 신호에만 유효합니다.
지정하지 않는 경우, 'TwoSided'
의 디폴트 값은 실수 입력 신호의 경우 false
이고, 복소수 입력 신호의 경우 true
입니다.
출력 인수
p
— 스펙트럼
벡터 | 행렬
스펙트럼으로, 벡터 또는 행렬로 반환됩니다. 스펙트럼의 유형과 크기는 type
인수 값에 따라 달라집니다.
'power'
—p
는x
의 각 채널에 대한 파워 스펙트럼 추정값을 포함합니다. 이 경우p
는 크기가 Nf×Nch입니다. 여기서 Nf는f
의 길이이고 Nch는x
의 채널 개수입니다.pspectrum
은 신호의 주파수 성분이 Bin 내에 정확히 포함되는 경우 해당 Bin에서의 진폭이 신호의 실제 평균 전력이 되도록 스펙트럼을 스케일링합니다. 예를 들어, 정현파의 평균 전력은 정현파 진폭의 제곱의 절반입니다. 자세한 내용은 Measure Power of Deterministic Periodic Signals 항목을 참조하십시오.'spectrogram'
—p
는x
의 단시간으로 국소화된 파워 스펙트럼의 추정값을 포함합니다. 이 경우p
의 크기는 Nf×Nt이고, 여기서 Nf는f
의 길이, Nt는t
의 길이입니다.'persistence'
—p
는 지정된 시간과 주파수 위치에서 신호가 지정된 전력 수준의 성분을 가질 확률(백분율로 표현됨)을 포함합니다. 이 경우p
의 크기는 Npwr × Nf이고, 여기서 Npwr은pwr
의 길이, Nf는f
의 길이입니다.
f
— 스펙트럼 주파수
벡터
스펙트럼 주파수로, 벡터로 반환됩니다. 입력 신호에 시간 정보가 포함되어 있으면 f
에는 주파수(Hz로 표현됨)가 포함됩니다. 입력 신호에 시간 정보가 포함되어 있지 않으면 주파수는 rad/sample의 정규화된 단위로 표현됩니다.
pwr
— 지속성 스펙트럼의 전력 값
벡터
지속성 스펙트럼의 전력 값으로, 벡터로 반환됩니다.
세부 정보
스펙트럼 계산
신호 스펙트럼을 계산하기 위해 pspectrum
은 신호의 전체 길이로 얻을 수 있는 스펙트럼 분해능과 큰 FFT 계산으로 인한 성능 제한 간의 절충점을 찾습니다.
가능한 경우 함수는 카이저 윈도우를 사용하여 전체 신호에 대한 수정된 단일 주기도를 계산합니다.
수정된 단일 주기도를 적절한 시간 내에 계산할 수 없는 경우 함수는 Welch 주기도를 계산합니다. 먼저 함수는 신호를 중첩 세그먼트로 나누고, 카이저 윈도우를 사용하여 각 세그먼트에 윈도우를 적용한 다음 세그먼트 주기도에 대한 평균을 구합니다.
스펙트럼 윈도우 적용
실제 신호는 유한한 시간 동안만 측정할 수 있습니다. 이 사실은 신호 길이가 주기적이거나 무한하다고 가정하는 푸리에 해석에 무시할 수 없는 영향을 미칩니다. 서로 다른 신호 샘플에 서로 다른 가중치를 할당하는 스펙트럼 윈도우 적용은 유한한 크기로 인한 효과를 체계적으로 처리합니다.
신호에 윈도우를 가장 간단히 적용하는 방법은 신호가 측정 구간을 벗어나면 정확히 0이고 모든 샘플이 동등하게 유의미하다고 가정하는 것입니다. 이 "사각 윈도우"는 양끝에서 값이 불연속적으로 변하기 때문에 스펙트럼 링잉 현상이 발생합니다. 다른 모든 스펙트럼 윈도우는 이 영향을 줄이기 위해 신호 경계에 가까이 있는 샘플에 더 작은 가중치를 할당함으로써 양끝이 가늘어집니다.
윈도우 적용 과정은 언제나 분해능 개선과 누설 감소라는 두 상충하는 목표 간의 절충을 수반합니다.
분해능은 주파수 영역에서 신호 에너지가 어떻게 분포되어 있는지 정확히 확인할 수 있는 능력입니다. 이상적인 분해능을 갖춘 스펙트럼 분석기는 신호의 서로 다른 두 톤(순수 정현파)이 주파수 영역에서 얼마나 가까이 있는지에 상관없이 이 두 톤을 구별할 수 있습니다. 정량적 측면에서 이 기능은 윈도우의 변환에 대한 메인로브 폭과 관련이 있습니다.
누설은 유한 신호에서 모든 주파수 성분이 전체 주파수 범위에 에너지 성분을 퍼뜨리는 것을 말합니다. 스펙트럼의 누설 정도는 인접한 강한 톤 속에서 잡음의 약한 톤을 감지할 수 있는 능력으로 측정할 수 있습니다. 정량적 측면에서 이 능력은 윈도우의 주파수 변환에 대한 사이드로브 레벨과 관련이 있습니다.
스펙트럼은 해당 대역폭 내의 순수 톤이 중심이 완벽하게 맞춰진 경우 올바른 진폭을 갖도록 정규화됩니다.
분해능이 향상될수록 누설이 크고 분해능이 나쁠수록 누설이 작습니다. 분해능이 이러한 범위의 한쪽 극단에 해당할 때, 사각 윈도우는 발생할 수 있는 가장 좁은 메인로브와 가장 높은 사이드로브를 갖습니다. 이 윈도우는 톤의 에너지 성분이 비슷한 경우에는 간격이 좁은 톤을 분해할 수 있지만, 그렇지 않은 경우에는 약한 톤을 찾아내지 못합니다. 분해능이 다른 쪽 극단에 해당할 때, 높은 사이드로브 억제를 갖는 윈도우는 가까이 있는 주파수가 모두 불분명해지는 넓은 메인로브를 갖게 됩니다.
pspectrum
은 카이저 윈도우를 사용하여 윈도우를 적용합니다. 카이저 윈도우의 경우 메인로브에 해당하는 신호 에너지 부분은 조정 가능한 형태 인자 β에 따라 크게 달라집니다. pspectrum
은 β = 0(사각 윈도우에 해당함)부터 β = 40(넓은 메인로브가 배정밀도로 표현 가능한 모든 스펙트럼 에너지를 사실상 포괄함)에 이르는 범위의 형태 인자를 사용합니다. 중간값 β ≈ 6은 핸(Hann) 윈도우를 가장 근접하게 근사합니다. β를 조정하려면 'Leakage'
이름-값 쌍을 사용하십시오. 'Leakage'
를 ℓ로 설정할 경우 ℓ과 β는 β = 40(1 – ℓ)의 관계식을 가집니다. 자세한 내용은 kaiser
를 참조하십시오.
|
|
시간 영역에서 β = 5.7인 51개 점을 갖는 핸 윈도우와 51개 점을 갖는 카이저 윈도우 | 주파수 영역에서 β = 5.7인 51개 점을 갖는 핸 윈도우와 51개 점을 갖는 카이저 윈도우 |
파라미터와 알고리즘 선택
신호 스펙트럼을 계산하기 위해 먼저 pspectrum
은 두 톤이 얼마나 가까이 있고 두 톤을 얼마나 잘 분해할 수 있는지를 측정하는 분해능 대역폭을 결정합니다. 분해능 대역폭의 이론적인 값은 다음과 같습니다.
tmax – tmin은 레코드 길이로, 선택한 신호 영역의 시간 영역 지속 시간입니다.
ENBW는 스펙트럼 윈도우의 등가 잡음 대역폭입니다. 자세한 내용은
enbw
를 참조하십시오.ENBW를 조정하려면
'Leakage'
이름-값 쌍을 사용하십시오. 인수의 최솟값은 β = 40인 카이저 윈도우에 해당합니다. 최댓값은 β = 0인 카이저 윈도우에 해당합니다.
하지만 실제로는 pspectrum
에서 분해능을 낮출 수 있습니다. 분해능을 낮추면 적절한 시간 내에 스펙트럼을 계산하여 유한 개수의 픽셀로 표시할 수 있습니다. 이러한 현실적인 이유로, pspectrum
이 사용할 수 있는 가장 낮은 분해능 대역폭은 다음과 같습니다.
여기서 fspan은 'FrequencyLimits'
를 사용하여 지정한 주파수 대역의 폭입니다. 'FrequencyLimits'
를 지정하지 않을 경우 pspectrum
은 fspan을 샘플 레이트로 사용합니다. RBWperformance는 조정할 수 없습니다.
신호의 스펙트럼을 계산하기 위해 함수는 두 값 중 더 큰 값을 선택하는데 이 값을 대상 분해능 대역폭이라고 합니다.
분해능 대역폭이 RBWtheory인 경우
pspectrum
은 전체 신호에 대해 하나의 수정된 주기도를 계산합니다. 이 함수는'Leakage'
이름-값 쌍으로 조정되는 형태 인자를 갖는 카이저 윈도우를 사용합니다. 자세한 내용은periodogram
을 참조하십시오.분해능 대역폭이 RBWperformance인 경우
pspectrum
은 신호에 대해 Welch 주기도를 계산합니다. 이 함수는 다음을 수행합니다.신호를 중첩 세그먼트로 나눕니다.
지정된 형태 인자를 갖는 카이저 윈도우를 사용하여 각 세그먼트에 개별적으로 윈도우를 적용합니다.
모든 세그먼트 주기도에 대한 평균을 구합니다.
Welch 절차는 중첩 섹션으로 지정된 신호의 서로 다른 “구현”에 대해 평균을 낸 다음, 윈도우를 사용하여 중복 데이터를 제거함으로써 스펙트럼 추정값의 분산을 줄이도록 설계되었습니다. 자세한 내용은
pwelch
를 참조하십시오.각 세그먼트(또는 윈도우)의 길이는 다음과 같이 계산됩니다.
여기서 fNyquist는 나이퀴스트 주파수입니다. 에일리어싱이 없는 경우 나이퀴스트 주파수는 인접한 시간 지점 간의 차분 중앙값의 역수로 정의한 유효 샘플 레이트의 절반에 해당합니다. 나이퀴스트 범위는 실수 신호의 경우에는 [0, fNyquist]이고, 복소 신호의 경우에는 [–fNyquist, fNyquist]입니다.
스트라이드 길이는 다음과 같이 초기 추정값을 조정하여 구해집니다.
따라서 첫 번째 윈도우는 첫 번째 세그먼트의 첫 번째 샘플에서 정확히 시작하고, 마지막 윈도우는 마지막 세그먼트의 마지막 샘플에서 정확히 끝납니다.
스펙트로그램 계산
비정상(Nonstationary) 신호의 시간 종속 스펙트럼을 계산하기 위해 pspectrum
은 신호를 중첩 세그먼트로 나누고, 카이저 윈도우를 사용하여 각 세그먼트에 윈도우를 적용하고, 단시간 푸리에 변환을 계산한 후 이 변환을 결합하여 행렬을 만듭니다. 자세한 내용은 Spectrogram Computation with Signal Processing Toolbox 항목을 참조하십시오.
비정상 신호는 주파수 성분이 시간에 따라 변하는 신호입니다. 비정상 신호의 스펙트로그램은 시간에 따른 주파수 성분에 대한 추정값입니다. 비정상 신호의 스펙트로그램을 생성하기 위해 pspectrum
은 다음 단계를 따릅니다.
신호를 같은 길이의 세그먼트로 나눕니다. 세그먼트는 신호의 주파수 성분이 세그먼트 내에서 크게 변하지 않을 정도로 길이가 짧아야 합니다. 세그먼트는 중첩되거나 중첩되지 않을 수 있습니다.
각 세그먼트에 윈도우를 적용하고 해당 세그먼트의 스펙트럼을 계산하여 단시간 푸리에 변환을 얻습니다.
세그먼트 스펙트럼을 사용하여 스펙트로그램을 생성합니다.
출력 인수를 사용하여 호출하는 경우 스펙트럼을 결합하여 행렬을 만듭니다.
출력 인수 없이 호출하는 경우 세그먼트별로 각 스펙트럼 전력(단위: 데시벨)을 표시합니다. 해당 크기를 크기 종속 컬러맵에 영상으로 나란히 표시합니다.
함수는 단일채널 신호인 경우에만 스펙트로그램을 계산할 수 있습니다.
신호를 세그먼트로 나누기
스펙트로그램을 생성하기 위해 우선 신호를 중첩 세그먼트로 나눕니다. pspectrum
함수를 사용할 경우 'TimeResolution'
및 'OverlapPercent'
이름-값 쌍의 인수로 세그먼트 길이와 인접 세그먼트 간의 중첩 크기를 조정할 수 있습니다. 길이와 중첩을 지정하지 않을 경우 함수는 신호의 전체 길이에 따라 길이를 선택하고 다음과 같이 지정된 중첩 백분율을 선택합니다.
여기서 ENBW는 스펙트럼 윈도우의 등가 잡음 대역폭입니다. 자세한 내용은 enbw
와 스펙트럼 계산 항목을 참조하십시오.
지정된 시간 분해능
신호에 시간 정보가 없는 경우 시간 분해능(세그먼트 길이)을 샘플 단위로 지정하십시오. 시간 분해능은 1보다 크거나 같은 정수여야 하고 신호 길이보다 작거나 같아야 합니다.
신호에 시간 정보가 있는 경우 시간 분해능을 초 단위로 지정하십시오. 함수는 그 결과를 샘플 개수로 변환한 다음, 그 숫자보다 작거나 같지만 1보다 작지 않은 가장 가까운 정수로 반올림합니다. 시간 분해능은 신호 지속 시간보다 작거나 같아야 합니다.
중첩을 세그먼트 길이의 백분율로 지정하십시오. 함수는 그 결과를 샘플 개수로 변환한 다음, 그 숫자보다 작거나 같은 가장 가까운 정수로 반올림합니다.
디폴트 시간 분해능
시간 분해능을 지정하지 않을 경우 pspectrum
은 전체 신호 길이에 따라 세그먼트 길이를 선택합니다. 함수는 시간 분해능을 ⌈N/d⌉개의 샘플로 설정합니다. 여기서 ⌈⌉ 기호는 천장 함수(Ceiling function)를 나타내고 N은 신호 길이, d는 N에 따라 달라지는 제수입니다.
신호 길이(N) | 제수(d) | 세그먼트 길이 |
---|---|---|
2 개 샘플 ~ 63 개 샘플 | 2 | 1 개 샘플 ~ 32 개 샘플 |
64 개 샘플 ~ 255 개 샘플 | 8 | 8 개 샘플 ~ 32 개 샘플 |
256 개 샘플 ~ 2047 개 샘플 | 8 | 32 개 샘플 ~ 256 개 샘플 |
2048 개 샘플 ~ 4095 개 샘플 | 16 | 128 개 샘플 ~ 256 개 샘플 |
4096 개 샘플 ~ 8191 개 샘플 | 32 | 128 개 샘플 ~ 256 개 샘플 |
8192 개 샘플 ~ 16383 개 샘플 | 64 | 128 개 샘플 ~ 256 개 샘플 |
16384 개 샘플 ~ N개 샘플 | 128 | 128 개 샘플 ~ ⌈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
은 분해능 대역폭의 하한이 다음과 같다는 점만 제외하고 스펙트럼 계산에 설명된 절차에 따라 세그먼트 스펙트럼을 계산합니다.
스펙트럼 전력 표시하기
출력 인수 없이 호출하는 경우 함수는 디폴트 MATLAB 컬러맵에 컬러바를 사용하여 단시간 푸리에 변환의 전력(단위: 데시벨)을 표시합니다. 컬러바는 스펙트로그램의 전체 전력 범위로 구성됩니다.
지속성 스펙트럼 계산
지속성 스펙트럼은 주어진 주파수가 신호에 존재하는 시간 비율을 보여주는 시간-주파수 보기입니다. 지속성 스펙트럼은 전력-주파수 영역의 히스토그램입니다. 신호가 전개될 때 신호의 특정 주파수가 오래 지속될수록 그 주파수가 차지하는 시간 비율이 높아지기 때문에 해당 주파수 색이 디스플레이에 더 밝거나 "뜨겁게" 표시됩니다. 지속성 스펙트럼을 사용하여 다른 신호에 숨어 있는 신호를 식별할 수 있습니다.
지속성 스펙트럼을 계산하기 위해 pspectrum
은 다음 단계를 수행합니다.
지정된 누설, 시간 분해능, 중첩을 사용하여 스펙트로그램을 계산합니다. 자세한 내용은 스펙트로그램 계산 항목을 참조하십시오.
전력과 주파수 값을 2차원 Bin으로 분할합니다. 전력 Bin의 개수를 지정하려면
'NumPowerBins'
이름-값 쌍을 사용하십시오.각 시간 값에 대해, 파워 스펙트럼의 로그에 대한 이변량 히스토그램을 계산합니다. 신호 에너지가 있는 시점의 모든 전력-주파수 Bin에 대해, 대응하는 행렬 요소를 1만큼 늘립니다. 모든 시간 값에 대한 히스토그램을 합합니다.
정규화된 백분율로 표현되는 히스토그램 도수의 로그에 비례하는 색으로, 누적 히스토그램을 전력과 주파수에 대해 플로팅합니다. 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.
확장 기능
C/C++ 코드 생성
MATLAB® Coder™를 사용하여 C 코드나 C++ 코드를 생성할 수 있습니다.
사용법 관련 참고 및 제한 사항:
코드 생성에는 타임테이블이 지원되지 않습니다.
GPU 배열
Parallel Computing Toolbox™를 사용해 GPU(그래픽스 처리 장치)에서 실행하여 코드 실행 속도를 높일 수 있습니다.
사용법 관련 참고 및 제한 사항:
지속성 스펙트럼은 지원되지 않습니다.
재할당된 스펙트럼이나 스펙트로그램은 지원되지 않습니다.
자세한 내용은 GPU에서 MATLAB 함수 실행하기 (Parallel Computing Toolbox) 항목을 참조하십시오.
버전 내역
R2017b에 개발됨
MATLAB 명령
다음 MATLAB 명령에 해당하는 링크를 클릭했습니다.
명령을 실행하려면 MATLAB 명령 창에 입력하십시오. 웹 브라우저는 MATLAB 명령을 지원하지 않습니다.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)